1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge branch 'master' into jassub

This commit is contained in:
Cas 2023-03-02 10:30:53 +01:00 committed by GitHub
commit 4f11dc4311
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
81 changed files with 930 additions and 706 deletions

View file

@ -21,11 +21,11 @@ jobs:
- name: Checkout repository
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
- name: Initialize CodeQL
uses: github/codeql-action/init@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4
uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5
with:
languages: ${{ matrix.language }}
queries: +security-extended
- name: Autobuild
uses: github/codeql-action/autobuild@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4
uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4
uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2.2.5

894
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
"repository": "https://github.com/jellyfin/jellyfin-web",
"license": "GPL-2.0-or-later",
"devDependencies": {
"@babel/core": "7.20.12",
"@babel/core": "7.21.0",
"@babel/eslint-parser": "7.19.1",
"@babel/eslint-plugin": "7.19.1",
"@babel/plugin-proposal-class-properties": "7.18.6",
@ -13,14 +13,14 @@
"@babel/plugin-transform-modules-umd": "7.18.6",
"@babel/preset-env": "7.20.2",
"@babel/preset-react": "7.18.6",
"@babel/preset-typescript": "7.18.6",
"@babel/preset-typescript": "7.21.0",
"@types/escape-html": "1.0.2",
"@types/loadable__component": "5.13.4",
"@types/lodash-es": "4.17.6",
"@types/react": "17.0.53",
"@types/react-dom": "17.0.19",
"@typescript-eslint/eslint-plugin": "5.52.0",
"@typescript-eslint/parser": "5.52.0",
"@typescript-eslint/eslint-plugin": "5.53.0",
"@typescript-eslint/parser": "5.53.0",
"@uupaa/dynamic-import-polyfill": "1.0.2",
"autoprefixer": "10.4.13",
"babel-loader": "9.1.2",
@ -30,10 +30,10 @@
"copy-webpack-plugin": "11.0.0",
"cross-env": "7.0.3",
"css-loader": "6.7.3",
"cssnano": "5.1.14",
"cssnano": "5.1.15",
"es-check": "7.1.0",
"eslint": "8.34.0",
"eslint-plugin-compat": "4.1.1",
"eslint-plugin-compat": "4.1.2",
"eslint-plugin-eslint-comments": "3.2.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-jsx-a11y": "6.7.1",
@ -49,11 +49,11 @@
"postcss-loader": "7.0.2",
"postcss-preset-env": "8.0.1",
"postcss-scss": "4.0.6",
"sass": "1.58.1",
"sass": "1.58.3",
"sass-loader": "13.2.0",
"source-map-loader": "4.0.1",
"style-loader": "3.3.1",
"stylelint": "14.16.1",
"stylelint": "15.2.0",
"stylelint-config-rational-order": "0.1.2",
"stylelint-no-browser-hacks": "1.2.1",
"stylelint-order": "6.0.2",
@ -76,7 +76,7 @@
"@fontsource/noto-sans-tc": "4.5.12",
"@jellyfin/sdk": "unstable",
"@loadable/component": "5.15.3",
"blurhash": "2.0.4",
"blurhash": "2.0.5",
"classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz",
"classnames": "2.3.2",
"core-js": "3.28.0",
@ -93,7 +93,7 @@
"jassub": "1.4.5",
"jellyfin-apiclient": "1.10.0",
"jquery": "3.6.3",
"jstree": "3.3.14",
"jstree": "3.3.15",
"libarchive.js": "1.3.0",
"lodash-es": "4.17.21",
"marked": "4.2.12",

View file

@ -1,5 +1,5 @@
import React, { FunctionComponent, useEffect, useState } from 'react';
import { Outlet, useNavigate } from 'react-router-dom';
import { Outlet, useLocation, useNavigate } from 'react-router-dom';
import type { ConnectResponse } from 'jellyfin-apiclient';
import alert from './alert';
@ -31,11 +31,11 @@ const ConnectionRequired: FunctionComponent<ConnectionRequiredProps> = ({
isUserRequired = true
}) => {
const navigate = useNavigate();
const location = useLocation();
const [ isLoading, setIsLoading ] = useState(true);
useEffect(() => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const bounce = async (connectionResponse: ConnectResponse) => {
switch (connectionResponse.State) {
case ConnectionState.SignedIn:
@ -45,12 +45,12 @@ const ConnectionRequired: FunctionComponent<ConnectionRequiredProps> = ({
return;
case ConnectionState.ServerSignIn:
// Bounce to the login page
console.debug('[ConnectionRequired] not logged in, redirecting to login page');
navigate(BounceRoutes.Login, {
state: {
serverid: connectionResponse.ApiClient.serverId()
}
});
if (location.pathname === BounceRoutes.Login) {
setIsLoading(false);
} else {
console.debug('[ConnectionRequired] not logged in, redirecting to login page');
navigate(`${BounceRoutes.Login}?serverid=${connectionResponse.ApiClient.serverId()}`);
}
return;
case ConnectionState.ServerSelection:
// Bounce to select server page
@ -144,7 +144,7 @@ const ConnectionRequired: FunctionComponent<ConnectionRequiredProps> = ({
};
validateConnection();
}, [ isAdminRequired, isUserRequired, navigate ]);
}, [ isAdminRequired, isUserRequired, location.pathname, navigate ]);
if (isLoading) {
return <Loading />;

View file

@ -6,7 +6,7 @@ import dom from '../../scripts/dom';
import '../../elements/emby-button/emby-button';
import './actionSheet.scss';
import 'material-design-icons-iconfont';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../components/listview/listview.scss';
function getOffsets(elems) {

View file

@ -124,7 +124,7 @@ class AppRouter {
isBack: action === Action.Pop
});
} else {
console.info('[appRouter] "%s" route not found', normalizedPath, location);
// The route is not registered here, so it should be handled by react-router
this.currentRouteInfo = {
route: {},
path: normalizedPath + location.search

View file

@ -12,7 +12,7 @@ import '../../elements/emby-input/emby-input';
import '../../elements/emby-select/emby-select';
import 'material-design-icons-iconfont';
import '../formdialog.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import toast from '../toast/toast';

View file

@ -10,7 +10,7 @@ import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import '../../elements/emby-input/emby-input';
import '../formdialog.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import template from './dialog.template.html';
/* eslint-disable indent */

View file

@ -7,7 +7,7 @@ import { toBoolean } from '../../utils/string.ts';
import dom from '../../scripts/dom';
import './dialoghelper.scss';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
/* eslint-disable indent */

View file

@ -6,7 +6,7 @@ import imageLoader from './images/imageLoader';
import globalize from '../scripts/globalize';
import layoutManager from './layoutManager';
import { getParameterByName } from '../utils/url.ts';
import '../assets/css/scrollstyles.scss';
import '../styles/scrollstyles.scss';
import '../elements/emby-itemscontainer/emby-itemscontainer';
/* eslint-disable indent */

View file

@ -13,7 +13,7 @@ import '../../elements/emby-button/paper-icon-button-light';
import '../../elements/emby-select/emby-select';
import 'material-design-icons-iconfont';
import '../formdialog.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import template from './filtermenu.template.html';

View file

@ -17,13 +17,13 @@ import dom from '../../scripts/dom';
import './guide.scss';
import './programs.scss';
import 'material-design-icons-iconfont';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-programcell/emby-programcell';
import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import '../../elements/emby-tabs/emby-tabs';
import '../../elements/emby-scroller/emby-scroller';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import 'webcomponents.js/webcomponents-lite';
import ServerConnections from '../ServerConnections';
import template from './tvguide.template.html';

View file

@ -20,7 +20,7 @@ import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import '../formdialog.scss';
import 'material-design-icons-iconfont';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import template from './itemMediaInfo.template.html';

View file

@ -19,7 +19,7 @@ import '../../elements/emby-select/emby-select';
import '../../elements/emby-toggle/emby-toggle';
import '../listview/listview.scss';
import '../formdialog.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import './style.scss';
import toast from '../toast/toast';
import alert from '../alert';

View file

@ -17,7 +17,7 @@ import '../listview/listview.scss';
import '../../elements/emby-button/paper-icon-button-light';
import '../formdialog.scss';
import '../../elements/emby-toggle/emby-toggle';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import './style.scss';
import toast from '../toast/toast';
import confirm from '../confirm/confirm';

View file

@ -15,8 +15,8 @@ import '../../elements/emby-textarea/emby-textarea';
import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import '../formdialog.scss';
import '../../assets/css/clearbutton.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/clearbutton.scss';
import '../../styles/flexstyles.scss';
import './style.scss';
import ServerConnections from '../ServerConnections';
import toast from '../toast/toast';

View file

@ -8,6 +8,8 @@ import { appRouter } from '../components/appRouter';
import * as inputManager from '../scripts/inputManager';
import toast from '../components/toast/toast';
import confirm from '../components/confirm/confirm';
import * as dashboard from '../utils/dashboard';
import ServerConnections from '../components/ServerConnections';
// TODO: replace with each plugin version
const cacheParam = new Date().getTime();
@ -86,7 +88,9 @@ class PluginManager {
appRouter,
inputManager,
toast,
confirm
confirm,
dashboard,
ServerConnections
});
} else {
console.debug(`Loading plugin (via dynamic import): ${pluginSpec}`);

View file

@ -4,7 +4,7 @@ import globalize from '../../scripts/globalize';
import layoutManager from '../layoutManager';
import loading from '../loading/loading';
import scrollHelper from '../../scripts/scrollHelper';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-button/emby-button';
import '../../elements/emby-collapse/emby-collapse';
import '../../elements/emby-input/emby-input';
@ -12,7 +12,7 @@ import '../../elements/emby-button/paper-icon-button-light';
import '../formdialog.scss';
import './recordingcreator.scss';
import 'material-design-icons-iconfont';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import template from './recordingeditor.template.html';

View file

@ -7,7 +7,7 @@ import recordingHelper from './recordinghelper';
import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import './recordingfields.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import toast from '../toast/toast';
import template from './recordingfields.template.html';

View file

@ -4,7 +4,7 @@ import layoutManager from '../layoutManager';
import loading from '../loading/loading';
import scrollHelper from '../../scripts/scrollHelper';
import datetime from '../../scripts/datetime';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-button/emby-button';
import '../../elements/emby-checkbox/emby-checkbox';
import '../../elements/emby-input/emby-input';
@ -13,7 +13,7 @@ import '../../elements/emby-button/paper-icon-button-light';
import '../formdialog.scss';
import './recordingcreator.scss';
import 'material-design-icons-iconfont';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import template from './seriesrecordingeditor.template.html';

View file

@ -7,7 +7,7 @@ import globalize from '../../scripts/globalize';
import 'material-design-icons-iconfont';
import '../../elements/emby-input/emby-input';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import './searchfields.scss';
import layoutManager from '../layoutManager';
import browser from '../../scripts/browser';

View file

@ -7,7 +7,7 @@ import '../../elements/emby-button/paper-icon-button-light';
import 'material-design-icons-iconfont';
import '../formdialog.scss';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import template from './sortmenu.template.html';
function onSubmit(e) {

View file

@ -14,7 +14,7 @@ import '../formdialog.scss';
import 'material-design-icons-iconfont';
import './subtitleeditor.scss';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import ServerConnections from '../ServerConnections';
import toast from '../toast/toast';
import confirm from '../confirm/confirm';

View file

@ -13,7 +13,7 @@ import '../../elements/emby-select/emby-select';
import '../../elements/emby-slider/emby-slider';
import '../../elements/emby-input/emby-input';
import '../../elements/emby-checkbox/emby-checkbox';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import './subtitlesettings.scss';
import ServerConnections from '../ServerConnections';
import toast from '../toast/toast';

View file

@ -101,14 +101,16 @@
<div class="selectContainer hide">
<select is="emby-select" id="selectTextColor" label="${LabelTextColor}">
<option value="#ffffff">${White}</option>
<option value="#ffff00">${Yellow}</option>
<option value="#008000">${Green}</option>
<option value="#00ffff">${Cyan}</option>
<option value="#0000ff">${Blue}</option>
<option value="#ff00ff">${Magenta}</option>
<option value="#ff0000">${Red}</option>
<option value="#000000">${Black}</option>
<option value="#ffffff">${SubtitleWhite}</option>
<option value="#d3d3d3">${SubtitleLightGray}</option>
<option value="#808080">${SubtitleGray}</option>
<option value="#ffff00">${SubtitleYellow}</option>
<option value="#008000">${SubtitleGreen}</option>
<option value="#00ffff">${SubtitleCyan}</option>
<option value="#0000ff">${SubtitleBlue}</option>
<option value="#ff00ff">${SubtitleMagenta}</option>
<option value="#ff0000">${SubtitleRed}</option>
<option value="#000000">${SubtitleBlack}</option>
</select>
</div>

View file

@ -7,7 +7,7 @@ import '../listview/listview.scss';
import '../../elements/emby-button/paper-icon-button-light';
import '../../elements/emby-select/emby-select';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import './style.scss';
import Dashboard from '../../utils/dashboard';
import Events from '../../utils/events.ts';

View file

@ -8,7 +8,7 @@ import globalize from '../../scripts/globalize';
import itemHelper from '../itemHelper';
import './upnextdialog.scss';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
/* eslint-disable indent */

View file

@ -9,7 +9,7 @@ import '../../elements/emby-button/paper-icon-button-light';
import '../../elements/emby-select/emby-select';
import 'material-design-icons-iconfont';
import '../formdialog.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import template from './viewSettings.template.html';
function onSubmit(e) {

View file

@ -16,7 +16,7 @@ import imageHelper from '../../scripts/imagehelper';
import indicators from '../../components/indicators/indicators';
import '../../components/listview/listview.scss';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
import taskButton from '../../scripts/taskbutton';
import Dashboard from '../../utils/dashboard';

View file

@ -3,7 +3,7 @@ import loading from '../../components/loading/loading';
import globalize from '../../scripts/globalize';
import '../../elements/emby-button/emby-button';
import '../../components/listview/listview.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import Dashboard from '../../utils/dashboard';
import alert from '../../components/alert';

View file

@ -26,7 +26,7 @@
<div class="fieldDescription">${LabelDummyChapterDurationHelp}</div>
</div>
<div class="inputContainer">
<input is="emby-input" type="number" id="valDummyChapterCount" label="${LabelDummyChapterCount}" min="1"></input>
<input is="emby-input" type="number" id="valDummyChapterCount" label="${LabelDummyChapterCount}" min="0"></input>
<div class="fieldDescription">${LabelDummyChapterCountHelp}</div>
</div>
<div class="selectContainer">

View file

@ -22,7 +22,7 @@ import libraryMenu from '../../scripts/libraryMenu';
import globalize from '../../scripts/globalize';
import browser from '../../scripts/browser';
import { playbackManager } from '../../components/playback/playbackmanager';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../elements/emby-checkbox/emby-checkbox';
import '../../elements/emby-button/emby-button';
@ -1063,7 +1063,7 @@ function renderTagline(page, item) {
}
}
function renderDetails(page, item, apiClient, context, isStatic) {
function renderDetails(page, item, apiClient, context) {
renderSimilarItems(page, item, context);
renderMoreFromSeason(page, item, apiClient);
renderMoreFromArtist(page, item, apiClient);
@ -1083,7 +1083,7 @@ function renderDetails(page, item, apiClient, context, isStatic) {
}
renderTags(page, item);
renderSeriesAirTime(page, item, isStatic);
renderSeriesAirTime(page, item);
}
function enableScrollX() {
@ -1262,7 +1262,7 @@ function renderSimilarItems(page, item, context) {
}
}
function renderSeriesAirTime(page, item, isStatic) {
function renderSeriesAirTime(page, item) {
const seriesAirTime = page.querySelector('#seriesAirTime');
if (item.Type != 'Series') {
seriesAirTime.classList.add('hide');
@ -1281,19 +1281,6 @@ function renderSeriesAirTime(page, item, isStatic) {
if (item.AirTime) {
html += ' at ' + item.AirTime;
}
if (item.Studios.length) {
if (isStatic) {
html += ' on ' + escapeHtml(item.Studios[0].Name);
} else {
const context = inferContext(item);
const href = appRouter.getRouteUrl(item.Studios[0], {
context: context,
itemType: 'Studio',
serverId: item.ServerId
});
html += ' on <a class="textlink button-link" is="emby-linkbutton" href="' + href + '">' + escapeHtml(item.Studios[0].Name) + '</a>';
}
}
if (html) {
html = (item.Status == 'Ended' ? 'Aired ' : 'Airs ') + html;
seriesAirTime.innerHTML = html;

View file

@ -6,7 +6,7 @@ import globalize from '../../scripts/globalize';
import * as mainTabsManager from '../../components/maintabsmanager';
import cardBuilder from '../../components/cardbuilder/cardBuilder';
import imageLoader from '../../components/images/imageLoader';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../elements/emby-tabs/emby-tabs';
import '../../elements/emby-button/emby-button';

View file

@ -7,7 +7,7 @@ import layoutManager from '../components/layoutManager';
import loading from '../components/loading/loading';
import browser from '../scripts/browser';
import '../components/listview/listview.scss';
import '../assets/css/flexstyles.scss';
import '../styles/flexstyles.scss';
import '../elements/emby-itemscontainer/emby-itemscontainer';
import '../components/cardbuilder/card.scss';
import 'material-design-icons-iconfont';

View file

@ -9,11 +9,11 @@ import imageLoader from '../../components/images/imageLoader';
import libraryMenu from '../../scripts/libraryMenu';
import * as mainTabsManager from '../../components/maintabsmanager';
import globalize from '../../scripts/globalize';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../elements/emby-tabs/emby-tabs';
import '../../elements/emby-button/emby-button';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import Dashboard from '../../utils/dashboard';
/* eslint-disable indent */

View file

@ -15,10 +15,10 @@ import { appHost } from '../../../components/apphost';
import layoutManager from '../../../components/layoutManager';
import * as userSettings from '../../../scripts/settings/userSettings';
import keyboardnavigation from '../../../scripts/keyboardNavigation';
import '../../../assets/css/scrollstyles.scss';
import '../../../styles/scrollstyles.scss';
import '../../../elements/emby-slider/emby-slider';
import '../../../elements/emby-button/paper-icon-button-light';
import '../../../assets/css/videoosd.scss';
import '../../../styles/videoosd.scss';
import ServerConnections from '../../../components/ServerConnections';
import shell from '../../../scripts/shell';
import SubtitleSync from '../../../components/subtitlesync/subtitlesync';

View file

@ -10,7 +10,7 @@ import actionSheet from '../../../components/actionSheet/actionSheet';
import dom from '../../../scripts/dom';
import browser from '../../../scripts/browser';
import 'material-design-icons-iconfont';
import '../../../assets/css/flexstyles.scss';
import '../../../styles/flexstyles.scss';
import '../../../elements/emby-scroller/emby-scroller';
import '../../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../../components/cardbuilder/card.scss';

View file

@ -9,7 +9,7 @@ import cardBuilder from '../../components/cardbuilder/cardBuilder';
import { playbackManager } from '../../components/playback/playbackmanager';
import * as mainTabsManager from '../../components/maintabsmanager';
import globalize from '../../scripts/globalize';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
import '../../elements/emby-button/emby-button';
import Dashboard from '../../utils/dashboard';

View file

@ -4,7 +4,7 @@ import datetime from '../../scripts/datetime';
import cardBuilder from '../../components/cardbuilder/cardBuilder';
import imageLoader from '../../components/images/imageLoader';
import globalize from '../../scripts/globalize';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import '../../elements/emby-itemscontainer/emby-itemscontainer';
/* eslint-disable indent */

View file

@ -1,6 +1,6 @@
import loading from '../../../components/loading/loading';
import globalize from '../../../scripts/globalize';
import '../../../assets/css/dashboard.scss';
import '../../../styles/dashboard.scss';
import '../../../elements/emby-input/emby-input';
import '../../../elements/emby-button/emby-button';
import Dashboard from '../../../utils/dashboard';

View file

@ -5,7 +5,7 @@ import browser from '../../scripts/browser';
import focusManager from '../../components/focusManager';
import layoutManager from '../../components/layoutManager';
import './emby-tabs.scss';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
/* eslint-disable indent */
const EmbyTabs = Object.create(HTMLDivElement.prototype);

View file

@ -6,7 +6,7 @@ import 'intersection-observer';
import 'classlist.js';
import 'whatwg-fetch';
import 'resize-observer-polyfill';
import './assets/css/site.scss';
import './styles/site.scss';
import React, { StrictMode } from 'react';
import * as ReactDOM from 'react-dom';
import Events from './utils/events.ts';
@ -24,7 +24,6 @@ import { appRouter, history } from './components/appRouter';
import './elements/emby-button/emby-button';
import './scripts/autoThemes';
import './scripts/libraryMenu';
import './scripts/routes';
import './components/themeMediaPlayer';
import './scripts/autoBackdrops';
import { pageClassOn, serverAddress } from './utils/dashboard';
@ -39,6 +38,10 @@ import { currentSettings } from './scripts/settings/userSettings';
import taskButton from './scripts/taskbutton';
import App from './App.tsx';
import './styles/livetv.scss';
import './styles/dashboard.scss';
import './styles/detailtable.scss';
function loadCoreDictionary() {
const languages = ['af', 'ar', 'be-by', 'bg-bg', 'bn_bd', 'ca', 'cs', 'cy', 'da', 'de', 'el', 'en-gb', 'en-us', 'eo', 'es', 'es_419', 'es-ar', 'es_do', 'es-mx', 'et', 'eu', 'fa', 'fi', 'fil', 'fr', 'fr-ca', 'gl', 'gsw', 'he', 'hi-in', 'hr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt-lt', 'lv', 'mr', 'ms', 'nb', 'nl', 'nn', 'pl', 'pr', 'pt', 'pt-br', 'pt-pt', 'ro', 'ru', 'sk', 'sl-si', 'sq', 'sv', 'ta', 'th', 'tr', 'uk', 'ur_pk', 'vi', 'zh-cn', 'zh-hk', 'zh-tw'];
const translations = languages.map(function (language) {
@ -89,13 +92,13 @@ function onGlobalizeInit() {
if (browser.tv && !browser.android) {
console.debug('using system fonts with explicit sizes');
import('./assets/css/fonts.sized.scss');
import('./styles/fonts.sized.scss');
} else {
console.debug('using default fonts');
import('./assets/css/fonts.scss');
import('./styles/fonts.scss');
}
import('./assets/css/librarybrowser.scss');
import('./styles/librarybrowser.scss');
loadPlugins().then(onAppReady);
}
@ -135,7 +138,7 @@ async function onAppReady() {
console.debug('onAppReady: loading dependencies');
if (browser.iOS) {
import('./assets/css/ios.scss');
import('./styles/ios.scss');
}
Events.on(appHost, 'resume', () => {

View file

@ -6,7 +6,7 @@
import browser from '../../scripts/browser';
import dom from '../../scripts/dom';
import './navdrawer.scss';
import '../../assets/css/scrollstyles.scss';
import '../../styles/scrollstyles.scss';
import globalize from '../../scripts/globalize';
function getTouches(e) {

View file

@ -8,7 +8,7 @@ import layoutManager from '../components/layoutManager';
import dom from '../scripts/dom';
import focusManager from '../components/focusManager';
import ResizeObserver from 'resize-observer-polyfill';
import '../assets/css/scrollstyles.scss';
import '../styles/scrollstyles.scss';
import globalize from '../scripts/globalize';
/**

View file

@ -4,7 +4,7 @@ import { Navigate, Route, Routes } from 'react-router-dom';
import { ASYNC_ADMIN_ROUTES, ASYNC_USER_ROUTES, toAsyncPageRoute } from './asyncRoutes';
import ConnectionRequired from '../components/ConnectionRequired';
import ServerContentPage from '../components/ServerContentPage';
import { LEGACY_ADMIN_ROUTES, LEGACY_USER_ROUTES, toViewManagerPageRoute } from './legacyRoutes';
import { LEGACY_ADMIN_ROUTES, LEGACY_PUBLIC_ROUTES, LEGACY_USER_ROUTES, toViewManagerPageRoute } from './legacyRoutes';
const AppRoutes = () => (
<Routes>
@ -28,6 +28,8 @@ const AppRoutes = () => (
{/* Public routes */}
<Route path='/' element={<ConnectionRequired isUserRequired={false} />}>
<Route index element={<Navigate replace to='/home.html' />} />
{LEGACY_PUBLIC_ROUTES.map(toViewManagerPageRoute)}
</Route>
{/* Suppress warnings for unhandled routes */}

View file

@ -21,4 +21,5 @@ export function toViewManagerPageRoute(route: LegacyRoute) {
}
export * from './admin';
export * from './public';
export * from './user';

View file

@ -0,0 +1,81 @@
import { LegacyRoute } from '.';
export const LEGACY_PUBLIC_ROUTES: LegacyRoute[] = [
{
path: 'addserver.html',
pageProps: {
controller: 'session/addServer/index',
view: 'session/addServer/index.html'
}
},
{
path: 'selectserver.html',
pageProps: {
controller: 'session/selectServer/index',
view: 'session/selectServer/index.html'
}
},
{
path: 'login.html',
pageProps: {
controller: 'session/login/index',
view: 'session/login/index.html'
}
},
{
path: 'forgotpassword.html',
pageProps: {
controller: 'session/forgotPassword/index',
view: 'session/forgotPassword/index.html'
}
},
{
path: 'forgotpasswordpin.html',
pageProps: {
controller: 'session/resetPassword/index',
view: 'session/resetPassword/index.html'
}
},
{
path: 'wizardremoteaccess.html',
pageProps: {
controller: 'wizard/remote/index',
view: 'wizard/remote/index.html'
}
},
{
path: 'wizardfinish.html',
pageProps: {
controller: 'wizard/finish/index',
view: 'wizard/finish/index.html'
}
},
{
path: 'wizardlibrary.html',
pageProps: {
controller: 'dashboard/library',
view: 'wizard/library.html'
}
},
{
path: 'wizardsettings.html',
pageProps: {
controller: 'wizard/settings/index',
view: 'wizard/settings/index.html'
}
},
{
path: 'wizardstart.html',
pageProps: {
controller: 'wizard/start/index',
view: 'wizard/start/index.html'
}
},
{
path: 'wizarduser.html',
pageProps: {
controller: 'wizard/user/index',
view: 'wizard/user/index.html'
}
}
];

View file

@ -11,7 +11,7 @@ import '../../elements/emby-button/emby-button';
import '../../elements/emby-button/paper-icon-button-light';
import '../../components/cardbuilder/card.scss';
import '../../components/indicators/indicators.scss';
import '../../assets/css/flexstyles.scss';
import '../../styles/flexstyles.scss';
import Page from '../../components/Page';
type MenuEntry = {

View file

@ -303,7 +303,7 @@ import { getParameterByName } from '../utils/url.ts';
updateEditorNode(this, item);
}).on('pagebeforeshow', '.metadataEditorPage', function () {
/* eslint-disable-next-line @babel/no-unused-expressions */
import('../assets/css/metadataeditor.scss');
import('../styles/metadataeditor.scss');
}).on('pagebeforeshow', '.metadataEditorPage', function () {
const page = this;
Dashboard.getCurrentUser().then(function (user) {

View file

@ -22,8 +22,8 @@ import { getParameterByName } from '../utils/url.ts';
import '../elements/emby-button/paper-icon-button-light';
import 'material-design-icons-iconfont';
import '../assets/css/scrollstyles.scss';
import '../assets/css/flexstyles.scss';
import '../styles/scrollstyles.scss';
import '../styles/flexstyles.scss';
/* eslint-disable indent */

View file

@ -1,123 +0,0 @@
import '../elements/emby-button/emby-button';
import '../elements/emby-input/emby-input';
import '../scripts/livetvcomponents';
import '../elements/emby-button/paper-icon-button-light';
import '../elements/emby-itemscontainer/emby-itemscontainer';
import '../elements/emby-collapse/emby-collapse';
import '../elements/emby-select/emby-select';
import '../elements/emby-checkbox/emby-checkbox';
import '../elements/emby-slider/emby-slider';
import '../assets/css/livetv.scss';
import '../components/listview/listview.scss';
import '../assets/css/dashboard.scss';
import '../assets/css/detailtable.scss';
import { appRouter } from '../components/appRouter';
/* eslint-disable indent */
console.groupCollapsed('defining core routes');
function defineRoute(newRoute) {
const path = newRoute.alias ? newRoute.alias : newRoute.path;
console.debug('defining route: ' + path);
newRoute.dictionary = 'core';
appRouter.addRoute(path, newRoute);
}
defineRoute({
alias: '/addserver.html',
path: 'session/addServer/index.html',
autoFocus: false,
anonymous: true,
startup: true,
controller: 'session/addServer/index'
});
defineRoute({
alias: '/selectserver.html',
path: 'session/selectServer/index.html',
autoFocus: false,
anonymous: true,
startup: true,
controller: 'session/selectServer/index',
type: 'selectserver'
});
defineRoute({
alias: '/login.html',
path: 'session/login/index.html',
autoFocus: false,
anonymous: true,
startup: true,
controller: 'session/login/index',
type: 'login'
});
defineRoute({
alias: '/forgotpassword.html',
path: 'session/forgotPassword/index.html',
anonymous: true,
startup: true,
controller: 'session/forgotPassword/index'
});
defineRoute({
alias: '/forgotpasswordpin.html',
path: 'session/resetPassword/index.html',
autoFocus: false,
anonymous: true,
startup: true,
controller: 'session/resetPassword/index'
});
defineRoute({
alias: '/wizardremoteaccess.html',
path: 'wizard/remote/index.html',
autoFocus: false,
anonymous: true,
controller: 'wizard/remote/index'
});
defineRoute({
alias: '/wizardfinish.html',
path: 'wizard/finish/index.html',
autoFocus: false,
anonymous: true,
controller: 'wizard/finish/index'
});
defineRoute({
alias: '/wizardlibrary.html',
path: 'wizard/library.html',
autoFocus: false,
anonymous: true,
controller: 'dashboard/library'
});
defineRoute({
alias: '/wizardsettings.html',
path: 'wizard/settings/index.html',
autoFocus: false,
anonymous: true,
controller: 'wizard/settings/index'
});
defineRoute({
alias: '/wizardstart.html',
path: 'wizard/start/index.html',
autoFocus: false,
anonymous: true,
controller: 'wizard/start/index'
});
defineRoute({
alias: '/wizarduser.html',
path: 'wizard/user/index.html',
controller: 'wizard/user/index',
autoFocus: false,
anonymous: true
});
console.groupEnd('defining core routes');
/* eslint-enable indent */

View file

@ -1,6 +1,6 @@
import focusManager from '../components/focusManager';
import dom from './dom';
import '../assets/css/scrollstyles.scss';
import '../styles/scrollstyles.scss';
function getBoundingClientRect(elem) {
// Support: BlackBerry 5, iOS 3 (original iPhone)

View file

@ -1689,5 +1689,16 @@
"LabelDummyChapterCountHelp": "Максімальная колькасць выяваў раздзелаў, якія будуць выняты для кожнага медыяфайла.",
"LabelChapterImageResolution": "Дазвол:",
"LabelChapterImageResolutionHelp": "Дазвол вынятых малюнкаў раздзелаў.",
"ResolutionMatchSource": "Супадзенне з крыніцай"
"ResolutionMatchSource": "Супадзенне з крыніцай",
"SecondarySubtitles": "Дадатковыя субтытры",
"SubtitleBlack": "Чорны",
"SubtitleBlue": "Сіні",
"SubtitleCyan": "Блакітны",
"SubtitleGray": "Шэры",
"SubtitleGreen": "Зялёны",
"SubtitleLightGray": "Светла-шэры",
"SubtitleMagenta": "Пурпурны",
"SubtitleRed": "Чырвоны",
"SubtitleWhite": "Белы",
"SubtitleYellow": "Жоўты"
}

View file

@ -1703,5 +1703,16 @@
"LabelChapterImageResolutionHelp": "Rozližení extrahovaných obrázků kapitol.",
"ResolutionMatchSource": "Stejné jako zdroj",
"PreferEmbeddedExtrasTitlesOverFileNames": "Preferovat vložené názvy před názvy souborů pro doplňky",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Doplňky většinou mají stejný vložený název jako nadřazená položka. Zaškrtnutím je i přesto můžete upřednostnit."
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Doplňky většinou mají stejný vložený název jako nadřazená položka. Zaškrtnutím je i přesto můžete upřednostnit.",
"SecondarySubtitles": "Sekundární titulky",
"SubtitleBlack": "Černá",
"SubtitleBlue": "Modrá",
"SubtitleCyan": "Tyrkysová",
"SubtitleGray": "Šedá",
"SubtitleGreen": "Zelená",
"SubtitleLightGray": "Světle šedá",
"SubtitleMagenta": "Fialová",
"SubtitleRed": "Červená",
"SubtitleWhite": "Bílá",
"SubtitleYellow": "Žlutá"
}

View file

@ -1688,5 +1688,21 @@
"DownloadAll": "Alle Herunterladen",
"LabelStereoDownmixAlgorithm": "Stereo Downmix Algorithmus",
"StereoDownmixAlgorithmHelp": "Algorithmus um Mehrkanal-Audio zu Stereo-Audio umzuwandeln.",
"Experimental": "Experimentell"
"Experimental": "Experimentell",
"SaveRecordingNFO": "Speichern der EPG-Metadaten in NFO",
"SaveRecordingNFOHelp": "Speichern Sie Metadaten von EPG-Anbietern zusammen mit den Medien.",
"ResolutionMatchSource": "Quelle der Übereinstimmung",
"PreferEmbeddedExtrasTitlesOverFileNames": "Eingebettete Titel gegenüber Dateinamen für Extras bevorzugen",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras haben oft denselben eingebetteten Namen wie die übergeordnete Datei. Aktivieren Sie diese Option, um trotzdem eingebettete Titel für sie zu verwenden.",
"SaveRecordingImages": "Speichern der EPG-Bilder der Aufnahme",
"SaveRecordingImagesHelp": "Speichern Sie Bilder von EPG-Anbietern zusammen mit den Medien.",
"SecondarySubtitles": "Sekundäre Untertitel",
"HeaderDummyChapter": "Kapitel Bilder",
"HeaderRecordingMetadataSaving": "Aufzeichnung von Metadaten",
"LabelDummyChapterDuration": "Intervall:",
"LabelDummyChapterDurationHelp": "Das Intervall für die Extraktion des Kapitelbildes in Sekunden.",
"LabelDummyChapterCount": "Limit:",
"LabelDummyChapterCountHelp": "Die maximale Anzahl von Kapitelbildern, die für jede Mediendatei extrahiert werden.",
"LabelChapterImageResolution": "Auflösung:",
"LabelChapterImageResolutionHelp": "Die Auflösung der extrahierten Kapitelbilder."
}

View file

@ -1703,5 +1703,6 @@
"ResolutionMatchSource": "Match Source",
"SaveRecordingNFO": "Save recording EPG metadata in NFO",
"PreferEmbeddedExtrasTitlesOverFileNames": "Prefer embedded titles over filenames for extras",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras often have the same embedded name as the parent, check this to use embedded titles for them anyway."
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras often have the same embedded name as the parent, check this to use embedded titles for them anyway.",
"SecondarySubtitles": "Secondary Subtitles"
}

View file

@ -1462,10 +1462,20 @@
"Subtitle": "Subtitle",
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "These settings also apply to any Google Cast playback started by this device.",
"SubtitleAppearanceSettingsDisclaimer": "Following settings do not apply to the graphical subtitles mentioned above or ASS/SSA subtitles that embed their own styles.",
"SubtitleBlack": "Black",
"SubtitleBlue": "Blue",
"SubtitleCyan": "Cyan",
"SubtitleDownloadersHelp": "Enable and rank your preferred subtitle downloaders in order of priority.",
"SubtitleGray": "Gray",
"SubtitleGreen": "Green",
"SubtitleLightGray": "Light Gray",
"SubtitleMagenta": "Magenta",
"SubtitleOffset": "Subtitle Offset",
"SubtitleRed": "Red",
"Subtitles": "Subtitles",
"SubtitleVerticalPositionHelp": "Line number where text appears. Positive numbers indicate top down. Negative numbers indicate bottom up.",
"SubtitleWhite": "White",
"SubtitleYellow": "Yellow",
"Suggestions": "Suggestions",
"Sunday": "Sunday",
"Sync": "Sync",

View file

@ -129,7 +129,7 @@
"ValueCodec": "Kodeka: {0}",
"ValueAudioCodec": "Audio-kodeka: {0}",
"ValueAlbumCount": "{0} album",
"UserProfilesIntro": "Jellyfinek erabiltzaileen profilentzako euskarria barne hartzen du, eta erabiltzaile bakoitzak bere doikuntzak, ugaltze-egoera eta gurasoen kontrola izatea ahalbidetzen du.",
"UserProfilesIntro": "Jellyfinek erabiltzaileen profilentzako euskarria barne hartzen du, eta erabiltzaile bakoitzak bere ezarpenak, ugaltze-egoera eta gurasoen kontrola izatea ahalbidetzen du.",
"UserAgentHelp": "Eman 'User-Agent' pertsonalizatutako http goiburu bat.",
"UseEpisodeImagesInNextUpHelp": "\"Nobedadeak\" eta \"Ikusten jarraitu\" ataletan kapituluen irudiak agertuko dira miniatura gisa, seriearen miniatura nagusiaren ordez.",
"UseEpisodeImagesInNextUp": "Erabili kapituluen irudiak \"Nobedadeak\" eta \"Ikusten jarraitu\" ataletan",
@ -188,7 +188,7 @@
"TabParentalControl": "Gurasoen kontrola",
"TabOther": "Bestelakoak",
"TabNotifications": "Jakinarazpenak",
"TabNfoSettings": "NFO doikuntzak",
"TabNfoSettings": "NFO ezarpenak",
"TabNetworks": "Kate TB",
"TabNetworking": "Sareak",
"TabMyPlugins": "Nire osagarriak",
@ -212,7 +212,7 @@
"Subtitles": "Azpitituluak",
"SubtitleOffset": "Azpitituluak lekualdatzea",
"SubtitleDownloadersHelp": "Gaitu eta sailkatu hobetsitako azpitituluen deskargagailuak lehentasun-ordenaren arabera.",
"SubtitleAppearanceSettingsDisclaimer": "Ondorengo doikuntzak ez zaizkie aplikatuko aurretik aipatutako azpititulu grafikoei, ezta ASS/SSA azpitituluei ere, baldin eta beren estiloak badituzte.",
"SubtitleAppearanceSettingsDisclaimer": "Ondorengo ezarpenak ez zaizkie aplikatuko aurretik aipatutako azpititulu grafikoei, ezta ASS/SSA azpitituluei ere, baldin eta beren estiloak badituzte.",
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Doikuntza horiek gailu honek hasitako Chromecast edozein erreprodukziori ere aplikatzen zaizkio.",
"Subtitle": "Azpititulua",
"Studios": "Ikasketak",
@ -246,13 +246,13 @@
"SetUsingLastTracks": "Audioko/azpitituluetako pista aurreko itemarekin ezartzea",
"SettingsWarning": "Balio horiek aldatzeak ezegonkortasuna edo konektagarritasun-akatsak eragin ditzake. Arazoren bat izanez gero, berriz ere bere balio lehenetsira aldatzea gomendatzen dizugu.",
"SettingsSaved": "Konfigurazio gordea.",
"Settings": "Doikuntzak",
"Settings": "Ezarpenak",
"ServerUpdateNeeded": "Zerbitzaria eguneratu egin behar da. Azken bertsioa deskargatzeko, bisitatu {0}",
"ServerRestartNeededAfterPluginInstall": "Jellyfin berriz hasi beharko da osagarri bat instalatu ondoren.",
"ServerNameIsShuttingDown": "{0}(e)ko zerbitzaria itzaltzen ari da.",
"ServerNameIsRestarting": "{0}(e)ko zerbitzaria berrabiarazten ari da.",
"SeriesYearToPresent": "{0} - Gaur egun",
"SeriesSettings": "Serie-doikuntzak",
"SeriesSettings": "Serie ezarpenak",
"SeriesRecordingScheduled": "Programatutako serieak grabatzea.",
"SeriesDisplayOrderHelp": "Ordenatu kapituluak jaulkipen-dataren, DVD-ordenaren edo zenbaki absolutuaren arabera.",
"SeriesCancelled": "Serie ezeztatua.",
@ -911,7 +911,7 @@
"Hide": "Ezkutatu",
"Help": "Laguntza",
"HeaderYears": "Urteak",
"HeaderXmlSettings": "XML doikuntzak",
"HeaderXmlSettings": "XML ezarpenak",
"HeaderXmlDocumentAttributes": "XML dokumentuaren atributuak",
"HeaderXmlDocumentAttribute": "XML dokumentuaren atributua",
"HeaderVideoTypes": "Bideo motak",
@ -953,7 +953,7 @@
"LibraryAccessHelp": "Aukeratu erabiltzaile honekin partekatu beharreko liburutegiak. Administratzaileek karpeta guztiak editatu ahal izango dituzte metadatuen kudeatzailea erabiliz.",
"LeaveBlankToNotSetAPassword": "Hutsik utz dezakezu pasahitza ez konfiguratzeko.",
"LearnHowYouCanContribute": "Ezagutu nola lagundu dezakezun.",
"LatestFromLibrary": "Duela gutxi {0} liburutegian",
"LatestFromLibrary": "Duela gutxi gehituta: {0}",
"LastSeen": "Azkenekoz ikusita {0}",
"Larger": "Handiagoa",
"Large": "Handia",
@ -1113,7 +1113,7 @@
"HeaderSortOrder": "Agindua",
"HeaderSortBy": "Ordenatu",
"HeaderSetupLibrary": "Konfiguratu zure multimedia-liburutegiak",
"HeaderServerSettings": "Zerbitzariaren doikuntzak",
"HeaderServerSettings": "Zerbitzariaren ezarpenak",
"HeaderServerAddressSettings": "Zerbitzariaren helbidea konfiguratzea",
"HeaderSeriesStatus": "Serieen egoera",
"HeaderSeriesOptions": "Serieen aukerak",
@ -1138,7 +1138,7 @@
"HeaderRemoteControl": "Urrutiko kontrola",
"HeaderRemoteAccessSettings": "Urruneko sarbide-aukerak",
"HeaderRecordingPostProcessing": "Prozesatu osteko grabazioa",
"HeaderRecordingOptions": "Grabazio-doikuntzak",
"HeaderRecordingOptions": "Grabazio ezarpenak",
"HeaderRecentlyPlayed": "Duela gutxi erreproduzitua",
"HeaderProfileServerSettingsHelp": "Balio horiek zerbitzaria bezeroei nola aurkeztuko zaien kontrolatzen dute.",
"HeaderProfileInformation": "Profilari buruzko informazioa",
@ -1169,12 +1169,12 @@
"HeaderMyDevice": "Nire gailua",
"HeaderMusicQuality": "Soinuaren kalitatea",
"HeaderMoreLikeThis": "Hau bezalakoa",
"HeaderMetadataSettings": "Metadatuen doikuntzak",
"HeaderMetadataSettings": "Metadatuen ezarpenak",
"HeaderMediaFolders": "Multimedia karpetak",
"HeaderMedia": "Multimedia",
"HeaderLoginFailure": "Saioaren hasierako akatsa",
"HeaderLiveTvTunerSetup": "Telebista-sintonizadorearen doikuntzak",
"HeaderLibrarySettings": "Liburutegiaren doikuntzak",
"HeaderLiveTvTunerSetup": "Telebista-sintonizadorearen ezarpenak",
"HeaderLibrarySettings": "Liburutegiaren ezarpenak",
"HeaderLibraryOrder": "Liburutegiaren agindua",
"HeaderLibraryFolders": "Liburutegiko karpetak",
"HeaderLibraryAccess": "Liburutegirako sarbidea",
@ -1184,24 +1184,24 @@
"HeaderLatestMovies": "Azken filmak",
"HeaderLatestMedia": "Berriki gehituak",
"HeaderLatestEpisodes": "Azken kapituluak",
"HeaderKodiMetadataHelp": "NFO formatuko metadatuak aktibatu edo desaktibatu ditzakezu, liburutegi baten konfigurazioa irekiz eta metadatuen ataleko doikuntzak berrikusiz.",
"HeaderKodiMetadataHelp": "NFO formatuko metadatuak aktibatu edo desaktibatu ditzakezu, liburutegi baten konfigurazioa irekiz eta metadatuen ataleko ezarpenak berrikusiz.",
"HeaderKeepSeries": "Serieak mantentzea",
"HeaderKeepRecording": "Grabazioa mantendu",
"HeaderInstantMix": "Bat-bateko nahasketa",
"HeaderInstall": "Instalatu",
"HeaderImageSettings": "Irudi-doikuntzak",
"HeaderImageSettings": "Irudi ezarpenak",
"HeaderImageOptions": "Irudi-aukerak",
"HeaderIdentifyItemHelp": "Sartu bilaketa-parametro bat edo gehiago. Bilaketaren emaitzen kopurua handitzeko parametroak ezabatzen ditu.",
"HeaderIdentificationHeader": "Identifikazio-goiburua",
"HeaderIdentificationCriteriaHelp": "Gutxienez identifikazio-irizpide bat sartzen du.",
"HeaderIdentification": "Identifikazioa",
"HeaderHttpsSettings": "https aukerak",
"HeaderHttpHeaders": "http buruak",
"HeaderHttpsSettings": "HTTPS aukerak",
"HeaderHttpHeaders": "HTTP buruak",
"HeaderGuideProviders": "Gida-hornitzaileak",
"HeaderFrequentlyPlayed": "Maiz erreproduzitua",
"HeaderForKids": "Haurrentzat",
"HeaderFetchImages": "Bilatu irudiak:",
"HeaderFetcherSettings": "Harrapatzailearen doikuntzak",
"HeaderFetcherSettings": "Harrapatzailearen ezarpenak",
"HeaderFeatureAccess": "Sartzeko baimenak:",
"HeaderExternalIds": "Kanpoko IDS:",
"HeaderError": "Errorea",
@ -1421,8 +1421,8 @@
"DeleteAll": "Ezabatu dena",
"Delete": "Ezabatu",
"DeinterlaceMethodHelp": "Hautatu bihurketan zehar elkarri lotuta dagoen edukia askatzeko aplikatuko den iragazki mota. Lotura kentzeko hardware bidezko azelerazioa aktibatuta badago, iragazki horren ordez erabiliko da.",
"DefaultSubtitlesHelp": "Erabiliko diren azpitituluak fitxategien pistetan txertatutako metadatuen araberakoak izango dira (bai \"lehenetsita\" edo \"behartuta\"). Hizkuntza-doikuntzak kontuan hartzen dira hainbat aukera eskuragarri daudenean.",
"DefaultMetadataLangaugeDescription": "Hauek dira zure doikuntzak eta liburutegi bakoitzerako pertsonalizatu daitezke.",
"DefaultSubtitlesHelp": "Erabiliko diren azpitituluak fitxategien pistetan txertatutako metadatuen araberakoak izango dira (bai \"lehenetsita\" edo \"behartuta\"). Hizkuntza ezarpenak kontuan hartzen dira hainbat aukera eskuragarri daudenean.",
"DefaultMetadataLangaugeDescription": "Hauek dira zure ezarpenak eta liburutegi bakoitzerako pertsonalizatu daitezke.",
"Default": "Lehenetsia",
"DeathDateValue": "Hil egin zen: {0}",
"DatePlayed": "Erreproduzitua",
@ -1455,7 +1455,7 @@
"ColorSpace": "Kolore-espazioa",
"ColorPrimaries": "Kolore primarioak",
"Collections": "Bildumak",
"ClientSettings": "Bezeroaren doikuntzak",
"ClientSettings": "Bezeroaren ezarpenak",
"ClearQueue": "Ezabatu buztana",
"CinemaModeConfigurationHelp": "Zinema moduak zinemaren esperientzia zuzenean ematen du bere aretoan, funtzio nagusiaren aurretik trailerrak eta sarrera pertsonalizatuak erreproduzitzeko gaitasunarekin.",
"Channels": "Kanalak",
@ -1547,7 +1547,7 @@
"HeaderBranding": "Itxura pertsonalizatzea",
"HeaderBlockItemsWithNoRating": "Baloraziorik gabeko edo ezezagunak diren artikuluak blokeatzea:",
"HeaderAutoDiscovery": "Sarearen aurkikuntza",
"HeaderAudioSettings": "Audio-doikuntzak",
"HeaderAudioSettings": "Audio ezarpenak",
"HeaderAudioBooks": "Audioliburuak",
"HeaderAppearsOn": "Hemen agertzen da",
"HeaderApp": "Aplikazioa",
@ -1626,5 +1626,9 @@
"ButtonSpace": "Hutsunea",
"EnableRewatchingNextUp": "Gaitu berriz ikustea Nobedadeak atalekoentzat",
"EnableRewatchingNextUpHelp": "Gaitu jada ikusitako kapituluak \"Nobedadeak\" atalean agertzea.",
"LabelMaxVideoResolution": "Onartutako bideo-transkodetzearen bereizmen maximoa:"
"LabelMaxVideoResolution": "Onartutako bideo-transkodetzearen bereizmen maximoa:",
"EnableCardLayout": "Erakutsi CardBox ikusgai",
"GoogleCastUnsupported": "Google Cast ez da bateragarria",
"Experimental": "Esperimentala",
"DownloadAll": "Deskargatu dena"
}

View file

@ -343,7 +343,7 @@
"LabelAbortedByServerShutdown": "(Keskeytetty palvelimen sammutuksen takia)",
"Identify": "Tunnista",
"Horizontal": "Horisontaalinen",
"HideWatchedContentFromLatestMedia": "Piilota toistettu sisältö 'Hiljattain lisätty media' -osiosta",
"HideWatchedContentFromLatestMedia": "Piilota toistettu sisältö 'Viimeksi lisätty media' -osiosta",
"HeaderUpcomingOnTV": "Tulossa televisiosta",
"HeaderTypeImageFetchers": "Kuvien lataajat ({0}):",
"HeaderTranscodingProfile": "Transkoodausprofiili",
@ -411,11 +411,11 @@
"HeaderMediaFolders": "Mediakansiot",
"HeaderMedia": "Media",
"HeaderLibraryFolders": "Kirjaston kansiot",
"HeaderLatestMedia": "Hiljattain lisätty media",
"HeaderLatestRecordings": "Hiljattain lisätyt tallenteet",
"HeaderLatestMusic": "Hiljattain lisätty musiikki",
"HeaderLatestMovies": "Hiljattain lisätyt elokuvat",
"HeaderLatestEpisodes": "Hiljattain lisätyt jaksot",
"HeaderLatestMedia": "Viimeksi lisätty media",
"HeaderLatestRecordings": "Viimeksi lisätyt tallenteet",
"HeaderLatestMusic": "Viimeksi lisätty musiikki",
"HeaderLatestMovies": "Viimeksi lisätyt elokuvat",
"HeaderLatestEpisodes": "Viimeksi lisätyt jaksot",
"HeaderInstall": "Asenna",
"HeaderFrequentlyPlayed": "Usein toistetut",
"HeaderFetcherSettings": "Lataajan asetukset",
@ -562,7 +562,7 @@
"TabMyPlugins": "Omat lisäosat",
"TabMusic": "Musiikki",
"TabLogs": "Lokit",
"TabLatest": "Hiljattain lisätyt",
"TabLatest": "Viimeksi lisätyt",
"TabDirectPlay": "Muuntamaton toisto",
"TabDashboard": "Hallintapaneeli",
"TabCatalog": "Luettelo",
@ -1264,7 +1264,7 @@
"LabelMinAudiobookResumeHelp": "Kohteita pidetään toistamattomina, jos toisto keskeytetään ennen tätä aikaa.",
"LabelMaxStreamingBitrate": "Suoratoiston enimmäislaatu:",
"MoreFromValue": "Lisää kohteesta {0}",
"LatestFromLibrary": "Hiljattain lisätty: '{0}'",
"LatestFromLibrary": "Viimeksi lisätty: {0}",
"LabelVideoRange": "Videon alue:",
"LabelVaapiDeviceHelp": "Tämä on renderöintinoodi, jota käytetään laitteistokiihdytykseen.",
"LabelUserRemoteClientBitrateLimitHelp": "Korvaa globaali arvo asetusten kohdasta Ohjauspaneeli > Toisto > Suoratoisto.",
@ -1696,5 +1696,6 @@
"LabelChapterImageResolutionHelp": "Purettujen kappalekuvien resoluutio.",
"ResolutionMatchSource": "Vastaa lähdettä",
"PreferEmbeddedExtrasTitlesOverFileNames": "Suosi lisämateriaaleille upotettuja otsikoita tiedostonimien sijaan",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Lisämateriaaleilla on usein sama otsikko kuin niiden isännällä. Valitse tämä käyttääksesi silti upotettuja otsikoita."
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Lisämateriaaleilla on usein sama otsikko kuin niiden isännällä. Valitse tämä käyttääksesi silti upotettuja otsikoita.",
"SecondarySubtitles": "Toissijaiset tekstitykset"
}

View file

@ -1703,5 +1703,16 @@
"LabelDummyChapterDuration": "Intervalle :",
"LabelDummyChapterCountHelp": "Nombre maximal dimages de chapitre à extraire pour chaque fichier multimédia.",
"PreferEmbeddedExtrasTitlesOverFileNames": "Préférer les titres intégrés aux médias pour les bonus",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Les bonus possèdent souvent un titre intégré identique au média parent, cocher l'option pour utiliser ce titre quoi qu'il en soit."
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Les bonus possèdent souvent un titre intégré identique au média parent, cocher l'option pour utiliser ce titre quoi qu'il en soit.",
"SecondarySubtitles": "Sous-titres secondaires",
"SubtitleBlack": "Noir",
"SubtitleBlue": "Bleu",
"SubtitleCyan": "Cyan",
"SubtitleGray": "Gris",
"SubtitleGreen": "Vert",
"SubtitleLightGray": "Gris clair",
"SubtitleMagenta": "Magenta",
"SubtitleRed": "Rouge",
"SubtitleWhite": "Blanc",
"SubtitleYellow": "Jaune"
}

View file

@ -141,5 +141,11 @@
"ButtonSubmit": "प्रस्तुत करें",
"ButtonTogglePlaylist": "प्लेलिस्ट",
"ButtonUninstall": "ऐप हटाएं",
"ButtonTrailer": "ट्रेलर"
"ButtonTrailer": "ट्रेलर",
"Large": "बड़ा",
"Small": "छोटा",
"Normal": "सामान्य",
"Songs": "गाने",
"Larger": "और बड़ा",
"ListPaging": "{2} का {0}-{1}"
}

View file

@ -107,9 +107,9 @@
"HeaderIdentifyItemHelp": "Adj meg egy vagy több keresési kritériumot. Távolítsd el a kritériumokat a keresési eredmények növelése érdekében.",
"HeaderImageSettings": "Kép beállítások",
"HeaderInstall": "Telepítés",
"HeaderLatestEpisodes": "Legújabb epizódok",
"HeaderLatestMedia": "Legújabb média",
"HeaderLatestMovies": "Legújabb filmek",
"HeaderLatestEpisodes": "Nemrég hozzáadott epizódok",
"HeaderLatestMedia": "Nemrég hozzáadott tartalmak",
"HeaderLatestMovies": "Nemrég hozzáadott filmek",
"HeaderLibraries": "Könyvtárak",
"HeaderLibraryAccess": "Könyvtár hozzáférés",
"HeaderLibraryFolders": "Médiatár mappák",
@ -156,7 +156,7 @@
"HeaderVideos": "Videók",
"HeaderYears": "Év",
"Help": "Súgó",
"HideWatchedContentFromLatestMedia": "A megtekintett tartalom elrejtése a \"Legújabb Média\"-ból",
"HideWatchedContentFromLatestMedia": "A megtekintett tartalom elrejtése a \"Nemrég hozzáadott felvételek\"-ből",
"Home": "Kezdőlap",
"Identify": "Azonosítás",
"Images": "Képek",
@ -395,7 +395,7 @@
"TabCodecs": "Kódek",
"TabContainers": "Tároló",
"TabDashboard": "Vezérlőpult",
"TabLatest": "Legújabb",
"TabLatest": "Nemrég hozzáadott",
"TabLogs": "Naplók",
"TabMusic": "Zene",
"TabMyPlugins": "Telepített bővítmények",
@ -519,7 +519,7 @@
"Disc": "Lemez",
"Disconnect": "Bontás",
"DisplayInMyMedia": "Megjelenítés a kezdőképernyőn",
"DisplayInOtherHomeScreenSections": "Megjelenítés a kezdőképernyőn, mint például a 'Legújabb Média', és a 'Folyamatban lévő filmek'",
"DisplayInOtherHomeScreenSections": "Megjelenítés a kezdőképernyőn, mint például a 'Nemrég hozzáadott', és a 'Korábban megtekintett'",
"DisplayModeHelp": "Válaszd ki a használni kívánt elrendezést.",
"DoNotRecord": "Ne rögzítsen",
"DownloadsValue": "{0} letöltés",
@ -604,8 +604,8 @@
"HeaderInstantMix": "Azonnali keverés",
"HeaderKeepRecording": "Felvétel készítése",
"HeaderKodiMetadataHelp": "Az NFO-metaadatok engedélyezéséhez vagy letiltásához szerkesszen egy könyvtárat, és keresse meg a „Metaadat-mentők” részt.",
"HeaderLatestMusic": "Legújabb zenék",
"HeaderLatestRecordings": "Legújabb felvételek",
"HeaderLatestMusic": "Nemrég hozzáadott zenék",
"HeaderLatestRecordings": "Nemrég hozzáadott felvételek",
"HeaderLoginFailure": "Bejelentkezési hiba",
"HeaderMusicQuality": "Zene minősége",
"HeaderNewApiKey": "Új API kulcs",
@ -1510,7 +1510,7 @@
"Framerate": "Képkockasebesség",
"DirectPlayHelp": "A forrásfájl teljes mértékben kompatibilis ezzel az klienssel, és a munkamenet módosítások nélkül fogadja a fájlt.",
"HeaderContinueReading": "Olvasás folytatása",
"EnableGamepadHelp": "Figyeljen bármilyen csatlakoztatott kontroller bemenetére.",
"EnableGamepadHelp": "Figyeljen bármilyen csatlakoztatott bemenetre. (Szükséges: TV megjelenítési mód)",
"LabelEnableGamepad": "Engedélyezze a Gamepad-ot",
"Controls": "Vezérlők",
"TextSent": "Szöveg elküldve.",
@ -1685,5 +1685,30 @@
"MessageNoItemsAvailable": "Jelenleg nincs elérhető elem.",
"MessageNoFavoritesAvailable": "Jelenleg nincs elérhető kedvenc.",
"Unreleased": "Még nem jelent meg",
"DownloadAll": "Összes letöltése"
"DownloadAll": "Összes letöltése",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Beágyazott címek használata.",
"SaveRecordingNFO": "A rögzített EPG metaadatok mentése NFO-ba",
"SubtitleBlack": "Fekete",
"SubtitleBlue": "Kék",
"SubtitleCyan": "Cián",
"SubtitleGray": "Szürke",
"SubtitleGreen": "Zöld",
"SubtitleLightGray": "Világos szürke",
"SubtitleMagenta": "Bíborvörös",
"SubtitleRed": "Piros",
"SubtitleWhite": "Fehér",
"SubtitleYellow": "Sárga",
"SecondarySubtitles": "Másodlagos feliratok",
"StereoDownmixAlgorithmHelp": "Többcsatornás hangot sztereóvá keverő algoritmus használata.",
"LabelDummyChapterCountHelp": "Az egyes médiafájlokból kibontható fejezetképek maximális száma.",
"PreferEmbeddedExtrasTitlesOverFileNames": "Részesítse előnyben a beágyazott címeket a fájlnevekkel szemben",
"SaveRecordingImages": "Rögzített EPG-képek mentése",
"Experimental": "Tapasztalati",
"LabelStereoDownmixAlgorithm": "Térhatású csatornák egyesítése",
"HeaderDummyChapter": "Fejezetképek",
"HeaderRecordingMetadataSaving": "Metaadatok rögzítése",
"LabelDummyChapterDuration": "Intervallum:",
"LabelDummyChapterCount": "Határvonal:",
"LabelChapterImageResolution": "Felbontás:",
"LabelChapterImageResolutionHelp": "A kinyert fejezetképek felbontása."
}

View file

@ -137,7 +137,7 @@
"Disconnect": "Disconnetti",
"Display": "Schermo",
"DisplayInMyMedia": "Visualizza nella schermata di home",
"DisplayInOtherHomeScreenSections": "Mostra le sezioni della schermata home come 'Ultimi media' e 'Continua a guardare'",
"DisplayInOtherHomeScreenSections": "Visualizza nelle sezioni della schermata iniziale come \"Media aggiunti di recente\" 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": "Seleziona lo stile del layout che vuoi per l'interfaccia.",

42
src/strings/mg.json Normal file
View file

@ -0,0 +1,42 @@
{
"Add": "Manampy",
"AddToPlaylist": "Ampiana ao amin'ny playlist",
"AddToPlayQueue": "Ampiana ao amin'ny filaharana",
"AirDate": "Daty fandefasana",
"Aired": "Nalefa",
"AlbumArtist": "Artista tompon'ny Album",
"Alerts": "Lakolosy",
"AllChannels": "Fahitalavitra rehetra",
"AllowMediaConversion": "Avela hiasa hanao famadiahana format",
"AllowEmbeddedSubtitlesAllowNoneOption": "Tsy asiana mihitsy",
"AllowEmbeddedSubtitlesAllowTextOption": "Asiana soratra",
"Absolute": "Feno",
"AccessRestrictedTryAgainLater": "Voafetra ny fidirana amin'izao fotoana izao. Andramo indray afaka fotoana fohy.",
"Actor": "Mpilalao",
"AddedOnValue": "Nampiana",
"AdditionalNotificationServices": "Tsidiho ny katalaogin'ny plugin raha hanampy serivisy fampahafantarana fanampiny.",
"AddToCollection": "Ampiana ao amin'ny fitahirizana",
"AddToFavorites": "Ampiana ao amin'ireo ankafihizina",
"AgeValue": "({0} taona)",
"Album": "Album",
"Albums": "Albums",
"All": "Rehetra",
"AllComplexFormats": "Ireo endrika sarotra rehetra (ASS, SSA, VobSub, PGS, SUB, IDX, …)",
"AllEpisodes": "Fizaràna rehetra",
"AllLanguages": "Tenim-pirenena rehetra",
"AllLibraries": "Tahiry rehetra",
"AllowedRemoteAddressesHelp": "Lisitry ny adiresy IP na IP/netmask nosarahan'ny faingo ho an'ny tambajotra izay avela hifandray lavitra. Raha avela ho banga dia afaka miditra avokoa ny IP rehetra.",
"AllowEmbeddedSubtitles": "Atsahatra ny karazana dikanteny ao anatiny",
"AllowEmbeddedSubtitlesAllowAllOption": "Avela malalaka",
"AllowEmbeddedSubtitlesAllowImageOption": "Asiana sary",
"AllowEmbeddedSubtitlesHelp": "Atsahatra ny dikanteny raikitra ao anaty media. Mila fanavaozana ny tahiry rehetra.",
"AllowFfmpegThrottling": "Ahena ny asa famadihana format",
"AllowFfmpegThrottlingHelp": "Rehefa lasa lavitra mihoatra ny playback ny asa famadihana format dia atsahatra kely ny fampiasana CPU. Tena ilaina izany rehefa mijery fotsiny fa tsy mandingana na mamerina matetika. Aza alefa raha mahita olana amin'ny playback.",
"AllowHevcEncoding": "Avela hamadika format HEVC",
"AllowHWTranscodingHelp": "Avela ny tuner hiasa sady mamadika format. Mety hanampy amin'ny fampihenana ny asa takian'ny serveur izany.",
"AllowMediaConversionHelp": "Avela na lavina ny fidirana amin'ny asa famadihana format.",
"AllowOnTheFlySubtitleExtraction": "Avela hamaky dikanteny eny ampandehanana.",
"AllowOnTheFlySubtitleExtractionHelp": "Azo alaina avy amin'ilay video ny dikanteny ao anatiny ary aseho amin'ny soratra tsotra, mba hisorohana ny famadihana video. Mety haharitra ela izany ka hampiato ny famakiana horonan-tsary mandritra ny dingan'ny fitrandrahana. Atsaharo raha avela ho dikanteny miaraka amin'ny famadihana horonan-tsary.",
"AllowRemoteAccess": "Avela hifandray amin'ny hafa ity serveur ity",
"AllowRemoteAccessHelp": "Raha tsy marihina dia ho voasakana ny fifandraisana lavitra rehetra."
}

View file

@ -366,7 +366,7 @@
"HeaderTranscodingProfile": "Direct Afspelen Profiel",
"HeaderTranscodingProfileHelp": "Transcoding profielen toevoegen om aan te geven welke indelingen moeten worden gebruikt wanneer transcoding vereist is.",
"HeaderTunerDevices": "Tuner apparaten",
"HeaderTypeImageFetchers": "Afbeelding downloaders ({0}):",
"HeaderTypeImageFetchers": "Ophalers afbeeldingen ({0}):",
"HeaderTypeText": "Voer tekst in",
"HeaderUpcomingOnTV": "Binnenkort op tv",
"HeaderUploadImage": "Afbeelding Uploaden",
@ -504,7 +504,7 @@
"LabelHardwareAccelerationType": "Hardware acceleratie:",
"LabelHardwareAccelerationTypeHelp": "Hardwarematige versnelling vereist extra configuratie.",
"LabelHomeNetworkQuality": "Thuisnetwerk kwaliteit:",
"LabelHomeScreenSectionValue": "Beginscherm sectie {0}:",
"LabelHomeScreenSectionValue": "Beginschermsectie {0}:",
"LabelHttpsPort": "Lokale HTTPS poort nummer:",
"LabelHttpsPortHelp": "Het TCP poort nummer voor de HTTPS server.",
"LabelIconMaxHeight": "Pictogram maximum hoogte:",
@ -735,7 +735,7 @@
"MessageConfirmRevokeApiKey": "Weet u zeker dat u deze API-sleutel in wilt trekken? De verbinding van de applicatie met deze server zal plotseling verbroken worden.",
"MessageConfirmShutdown": "Weet u zeker dat u de server wilt afsluiten?",
"MessageContactAdminToResetPassword": "Neem contact op met de serverbeheerder om uw wachtwoord te resetten.",
"MessageCreateAccountAt": "Maak een account bij {0}",
"MessageCreateAccountAt": "Account aanmaken bij {0}",
"MessageDeleteTaskTrigger": "Weet u zeker dat u deze signaal taak wilt verwijderen?",
"MessageDirectoryPickerBSDInstruction": "Voor BSD moet u mogelijk de opslag in uw FreeNAS Jail opzetten, zodat Jellyfin toegang heeft tot uw media.",
"MessageDirectoryPickerLinuxInstruction": "Voor Linux op Arch Linux, CentOS, Debian, Fedora, openSUSE, of Ubuntu, moet u de service-gebruiker ten minste leestoegang tot uw opslaglocaties verlenen.",
@ -928,8 +928,8 @@
"Raised": "Verhoogd",
"Rate": "Waardeer",
"RecentlyWatched": "Onlangs bekeken",
"RecommendationBecauseYouLike": "Omdat u {0} leuk vond",
"RecommendationBecauseYouWatched": "Omdat u keek naar {0}",
"RecommendationBecauseYouLike": "Omdat je {0} leuk vindt",
"RecommendationBecauseYouWatched": "Omdat je keek naar {0}",
"RecommendationDirectedBy": "Geregisseerd door {0}",
"RecommendationStarring": "In de hoofdrollen {0}",
"Record": "Opnemen",
@ -991,7 +991,7 @@
"Shuffle": "Willekeurig",
"SimultaneousConnectionLimitHelp": "Het maximum aantal toegestane gelijktijdige streams. Geef 0 in voor geen limiet.",
"SkipEpisodesAlreadyInMyLibrary": "Neem geen afleveringen op die al in mijn bibliotheek aanwezig zijn",
"SkipEpisodesAlreadyInMyLibraryHelp": "Afleveringen zullen worden vergeleken met behulp van seizoen en aflevering nummers, indien beschikbaar.",
"SkipEpisodesAlreadyInMyLibraryHelp": "Afleveringen zullen worden vergeleken met behulp van seizoens- en afleveringsnummers, indien beschikbaar.",
"Small": "Klein",
"SmallCaps": "Kleine letters",
"Smaller": "Kleiner",
@ -1059,7 +1059,7 @@
"ValueConditions": "Voorwaarden: {0}",
"ValueEpisodeCount": "{0} afleveringen",
"ValueMovieCount": "{0} films",
"ValueMusicVideoCount": "{0} muziek video's",
"ValueMusicVideoCount": "{0} muziekvideo's",
"ValueOneEpisode": "1 aflevering",
"ValueOneMovie": "1 film",
"ValueOneMusicVideo": "1 muziekvideo",
@ -1265,7 +1265,7 @@
"EveryXMinutes": "Elke {0} minuten",
"OnWakeFromSleep": "Op het wakker worden vanuit slaapstand",
"WeeklyAt": "{0}s op {1}",
"DailyAt": "Dagelijks op {0}",
"DailyAt": "Dagelijks om {0}",
"LastSeen": "Laatst gezien {0}",
"PersonRole": "als {0}",
"ListPaging": "{0}-{1} van de {2}",
@ -1292,7 +1292,7 @@
"MessageSyncPlayGroupDoesNotExist": "Kan niet deelnemen aan de groep omdat deze niet bestaat.",
"MessageSyncPlayPlaybackPermissionRequired": "Afspeelrechten vereist.",
"MessageSyncPlayGroupWait": "{0} is aan het bufferen…",
"MessageSyncPlayUserLeft": "{0} i heeft de groep verlaten.",
"MessageSyncPlayUserLeft": "{0} heeft de groep verlaten.",
"MessageSyncPlayUserJoined": "{0} is lid geworden van de groep.",
"MessageSyncPlayDisabled": "SyncPlay uitgeschakeld.",
"MessageSyncPlayEnabled": "SyncPlay ingeschakeld.",
@ -1702,5 +1702,16 @@
"HeaderDummyChapter": "Hoofdstukafbeeldingen",
"LabelDummyChapterDurationHelp": "De extractieinterval voor hoofdstukafbeeldingen in seconden.",
"ResolutionMatchSource": "Gelijk aan bron",
"HeaderRecordingMetadataSaving": "Metadata opname"
"HeaderRecordingMetadataSaving": "Metadata opname",
"SecondarySubtitles": "Secundaire ondertiteling",
"SubtitleBlack": "Zwart",
"SubtitleBlue": "Blauw",
"SubtitleCyan": "Cyaan",
"SubtitleGray": "Grijs",
"SubtitleGreen": "Groen",
"SubtitleLightGray": "Lichtgrijs",
"SubtitleMagenta": "Magenta",
"SubtitleRed": "Rood",
"SubtitleWhite": "Wit",
"SubtitleYellow": "Geel"
}

View file

@ -173,11 +173,11 @@
"HeaderImageSettings": "Nastavenia obrázkov",
"HeaderInstall": "Inštalovať",
"HeaderInstantMix": "Okamžitý mix",
"HeaderLatestEpisodes": "Najnovšie epizódy",
"HeaderLatestMedia": "Najnovšie médiá",
"HeaderLatestMovies": "Najnovšie filmy",
"HeaderLatestMusic": "Najnovšia hudba",
"HeaderLatestRecordings": "Najnovšie nahrávky",
"HeaderLatestEpisodes": "Najnovšie pridané epizódy",
"HeaderLatestMedia": "Najnovšie pridané médiá",
"HeaderLatestMovies": "Najnovšie pridané filmy",
"HeaderLatestMusic": "Najnovšia pridaná hudba",
"HeaderLatestRecordings": "Najnovšie pridané nahrávky",
"HeaderLibraries": "Knižnice",
"HeaderLibraryAccess": "Prístup ku knižnici",
"HeaderLibraryFolders": "Priečinky knižnice",
@ -659,7 +659,7 @@
"TabCodecs": "Kodeky",
"TabContainers": "Kontajnery",
"TabDashboard": "Dashboard",
"TabLatest": "Najnovšie",
"TabLatest": "Najnovšie pridané",
"TabMusic": "Hudba",
"TabMyPlugins": "Moje zásuvné moduly",
"TabNetworks": "TV Siete",
@ -723,7 +723,7 @@
"ButtonRevoke": "Odvolať",
"ButtonSelectView": "Výber zobrazenia",
"CancelRecording": "Zrušiť nahrávanie",
"AirDate": "Dátum vysielania",
"AirDate": "Dátum prvého vysielania",
"Aired": "Odvysielané",
"Alerts": "Upozornenia",
"AllowOnTheFlySubtitleExtraction": "Povoliť extrahovanie titulkov za behu",
@ -968,7 +968,7 @@
"EnableStreamLooping": "Autom. slučka živého vysielania",
"EnableExternalVideoPlayersHelp": "Ponuka externého prehrávača sa zobrazí pri spustení prehrávania videa.",
"EnableBackdropsHelp": "Zobraziť pozadia pre niektoré stránky pri prechádzaní knižnice.",
"DisplayInOtherHomeScreenSections": "Zobraziť v sekciách domovskej obrazovky, ako sú najnovšie médiá a pokračovať v pozeraní",
"DisplayInOtherHomeScreenSections": "Zobraziť 'Najnovšie pridané médiá' a 'Pokračovať v pozeraní' v sekciách domovskej obrazovky",
"DirectStreamHelp1": "Video je kompatibilné zo zariadením, ale zvuková stopa je v nekompatibilnom formáte (DTS, Dolby TrueHD, atď.) alebo má nekompatibilný počet kanálov. Video bude pred odoslaním do zariadenia za behu bezstrátovo prebalené. Iba zvuk bude prekódovaný.",
"Depressed": "Stlačený",
"DefaultSubtitlesHelp": "Titulky sú načítané v závislosti od predvolených a vynútených nastavení vo vložených metadátach. Jazykové predvoľby sú zobrané do úvahy až vtedy, keď je k dispozícií viacero možností.",
@ -1701,5 +1701,6 @@
"LabelDummyChapterDurationHelp": "Interval extrakcie obrázkov kapitol v sekundách.",
"SaveRecordingNFO": "Uložiť metadáta nahrávky zo sprievodcu EPG do NFO",
"SaveRecordingImagesHelp": "Uloží obrázky z EPG položiek sprievodcu spolu s médiami.",
"HeaderRecordingMetadataSaving": "Metadáta nahrávok"
"HeaderRecordingMetadataSaving": "Metadáta nahrávok",
"SecondarySubtitles": "Sekundárne titulky"
}

View file

@ -14,20 +14,20 @@
"FileNotFound": "Không tìm thấy tệp tin.",
"FileReadCancelled": "Tệp đọc đã bị hủy.",
"FileReadError": "Có một lỗi xảy ra khi đọc tệp tin này.",
"HeaderCustomDlnaProfiles": "Hồ sơ khách hàng",
"HeaderCustomDlnaProfiles": "Cấu Hình Tùy Chỉnh",
"HeaderFeatureAccess": "Truy cập tính năng:",
"HeaderFrequentlyPlayed": "Phát thường xuyên",
"HeaderLatestEpisodes": "Tập Phim Thêm Gần Đây",
"HeaderLatestMovies": "Phim Thêm Gần Đây",
"HeaderRecentlyPlayed": "Phát gần đây",
"HeaderStatus": "Trạng thái",
"HeaderSystemDlnaProfiles": "Hồ sơ hệ thống",
"HeaderSystemDlnaProfiles": "Cấu Hình Hệ Thống",
"HeaderUsers": "Người dùng",
"LabelAudioLanguagePreference": "Ngôn ngữ thoại ưa thích:",
"LabelCountry": "Quốc gia:",
"LabelCurrentPassword": "Mật khẩu hiện tại:",
"LabelDay": "Ngày trong tuần:",
"LabelEnableDlnaPlayTo": "Bật tính năng 'Phát tới' DLNA",
"LabelEnableDlnaPlayTo": "Bật tính năng 'Phát Với' DLNA",
"LabelEvent": "Sự kiện:",
"LabelFinish": "Xong",
"LabelLanguage": "Ngôn ngữ:",
@ -175,7 +175,7 @@
"DeathDateValue": "Đã chết: {0}",
"DatePlayed": "Ngày phát",
"DateAdded": "Ngày thêm",
"CustomDlnaProfilesHelp": "Tạo một bộ thiết lập tuỳ chọn dành cho một thiết bị mới hoặc thay thế một thiết lập hệ thống.",
"CustomDlnaProfilesHelp": "Tạo cấu hình tùy chỉnh nhắm đến thiết bị mới hoặc ghi đè cấu hình hệ thống.",
"CriticRating": "Đánh giá của nhà phê bình",
"CopyStreamURLSuccess": "Đã sao chép URL thành công.",
"CopyStreamURL": "Sao chép URL luồng phát",
@ -254,7 +254,7 @@
"HeaderDateIssued": "Ngày Phát Hành",
"HeaderContinueWatching": "Xem Tiếp",
"HeaderContinueListening": "Tiếp Tục Nghe",
"HeaderCodecProfileHelp": "Hồ sơ mã hóa chỉ ra những kiểu mã hoá nhất định mà một thiết bị có thể phát. Nếu một nội dung không thể phát, nó sẽ được chuyển mã, thậm chí nếu kiểu mã hoá đó được cấu hình để phát lại trực tiếp.",
"HeaderCodecProfileHelp": "Cấu hình mã hóa cho biết các giới hạn của thiết bị khi phát các bộ mã hóa. Nếu giới hạn được áp dụng thì phương tiện sẽ được chuyển mã, ngay cả khi bộ mã hóa được cấu hình để phát lại trực tiếp.",
"HeaderContainerProfileHelp": "Cấu hình vùng chứa cho biết các giới hạn của thiết bị khi phát các định dạng cụ thể. Nếu giới hạn được áp dụng thì phương tiện sẽ được chuyển mã, ngay cả khi định dạng được định cấu hình để phát lại trực tiếp.",
"HeaderContainerProfile": "Hồ Sơ Định Dạng",
"HeaderConnectionFailure": "Kế Nối Thất Bại",
@ -452,9 +452,9 @@
"HeaderTracks": "Bản ghi",
"HeaderThisUserIsCurrentlyDisabled": "Người dùng này hiện tại đang bị khoá",
"HeaderTaskTriggers": "Kích Hoạt Tác Vụ",
"HeaderSubtitleProfilesHelp": "Hồ sơ phụ đề chỉ ra những định dạng phụ đề được hỗ trợ bởi thiết bị phát.",
"HeaderSubtitleProfiles": "Hồ Sơ Phụ Đề",
"HeaderSubtitleProfile": "Hồ Sơ Phụ Đề",
"HeaderSubtitleProfilesHelp": "Cấu hình phụ đề chỉ ra những định dạng phụ đề được hỗ trợ bởi thiết bị phát.",
"HeaderSubtitleProfiles": "Cấu Hình Phụ Đề",
"HeaderSubtitleProfile": "Cấu Hình Phụ Đề",
"HeaderSubtitleDownloads": "Tải Phụ Đề",
"HeaderSubtitleAppearance": "Giao Diện Phụ Đề",
"HeaderStopRecording": "Ngừng Ghi Hình/Ghi Âm",
@ -503,7 +503,7 @@
"LabelAlbumArtPN": "Bìa Tuyển Tập PN:",
"LabelAlbumArtMaxWidth": "Chiều rộng tối đa bìa tuyển tập:",
"LabelAlbumArtMaxHeight": "Chiều cao tối đa bìa tuyển tập:",
"LabelAlbumArtHelp": "PN được sử dụng cho bìa tuyển tập, trong 'dlna:profileID' thuộc tính upnp:albumArtURI. Một vài thiết bị phát cần một giá trị đặc biệt, không ảnh hưởng đến kích thước của hình ảnh.",
"LabelAlbumArtHelp": "PN được dùng cho ảnh bìa album, trong thuộc tính 'dlna:profileID' trên 'upnp:albumArtURI'. Một số thiết bị yêu cầu một giá trị cụ thể, bất kể kích thước của hình ảnh.",
"LabelAlbum": "Tuyển Tập:",
"LabelAirsBeforeSeason": "Phát sóng trước phần:",
"LabelAirsBeforeEpisode": "Phát sóng trước tập:",
@ -544,8 +544,8 @@
"HeaderTypeImageFetchers": "Trình tìm nạp hình ảnh ({0}):",
"HeaderTuners": "Bộ Điều Khiển Thu Phát Sóng",
"HeaderTunerDevices": "Thiết Bị Dò",
"HeaderTranscodingProfileHelp": "Thêm hồ sơ chuyển mã để chỉ ra những định dạng nên dùng khi cần chuyển mã.",
"HeaderTranscodingProfile": "Hồ Sơ Chuyển Mã",
"HeaderTranscodingProfileHelp": "Thêm cấu hình chuyển mã để cho biết định dạng nào sẽ được sử dụng khi cần chuyển mã.",
"HeaderTranscodingProfile": "Cấu Hình Chuyển Mã",
"LabelEnableAutomaticPortMap": "Kích hoạt tính năng tự động kết nối các port",
"LabelEmbedAlbumArtDidlHelp": "Một số thiết bị thích cách này hơn để tải ảnh bìa album. Số khác có thể bị lỗi nếu tuỳ chọn này được bật.",
"LabelEmbedAlbumArtDidl": "Bìa tuyển tập trong DIDL",
@ -567,7 +567,7 @@
"LabelDidlMode": "Chế độ DIDL:",
"LabelDeviceDescription": "Mô tả thiết bị:",
"LabelDeinterlaceMethod": "Phương pháp khử xen kẽ:",
"LabelDefaultUserHelp": "Xác định thư viện người dùng sẽ hiển thị trên các thiết bị được kết nối. Tuỳ chọn này có thể được ghi đè trên hồ sơ của từng thiết bị.",
"LabelDefaultUserHelp": "Xác định thư viện người dùng sẽ hiển thị trên các thiết bị được kết nối. Điều này có thể được ghi đè trên cấu hình từng thiết bị.",
"LabelDefaultUser": "Người dùng mặc định:",
"LabelDefaultScreen": "Màn hình mặc định:",
"LabelDeathDate": "Ngày mất:",
@ -590,10 +590,10 @@
"LabelEnableHttps": "Bật HTTPS",
"LabelEnableHardwareDecodingFor": "Bật giải mã phần cứng cho:",
"LabelEnableDlnaServerHelp": "Cho phép các thiết bị UPnP trong mạng của bạn duyệt và phát nội dung.",
"LabelEnableDlnaServer": "Bật tính năng máy chủ DLNA",
"LabelEnableDlnaServer": "Bật máy chủ DLNA",
"LabelEnableDlnaPlayToHelp": "Phát hiện các thiết bị trong mạng của bạn và cung cấp khả năng điều khiển chúng từ xa.",
"LabelEnableDlnaDebugLoggingHelp": "Tạo tệp nhật ký lớn và chỉ nên dùng khi cần thiết để xử lý sự cố.",
"LabelEnableDlnaDebugLogging": "Bật tính năng gỡ lỗi DLNA",
"LabelEnableDlnaDebugLogging": "Bật ghi nhật ký gỡ lỗi DLNA",
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Xác định thời gian tính bằng giây giữa hai lần tìm kiếm SSDP.",
"LabelEnableDlnaClientDiscoveryInterval": "Thời gian dò tìm máy khách:",
"LabelEnableBlastAliveMessagesHelp": "Bật cái này nếu máy chủ không được các thiết bị UPnP khác trên mạng của bạn tìm ra một cách đáng tin cậy.",
@ -837,7 +837,7 @@
"LabelProfileVideoCodecs": "Mã hóa video:",
"LabelProfileContainersHelp": "Phân cách bằng dấu phẩy. Để trống để áp dụng cho tất cả các định dạng.",
"LabelProfileContainer": "Định dạng:",
"LabelProfileCodecsHelp": "Phân cách bằng dấu phẩy. Điều này có thể được để trống để áp dụng cho tất cả các mã hóa.",
"LabelProfileCodecsHelp": "Phân cách bằng dấu phẩy. Có thể để trống để dùng tất cả các mã hóa.",
"LabelProfileCodecs": "Mã hóa:",
"LabelProfileAudioCodecs": "Mã hóa âm thanh:",
"LabelPreferredSubtitleLanguage": "Ngôn ngữ phụ đề ưu tiên:",
@ -1271,7 +1271,7 @@
"Transcoding": "Chuyển mã",
"Trailers": "Đoạn giới thiệu",
"TabAccess": "Truy cập",
"SystemDlnaProfilesHelp": "Cấu hình hệ thống ở chế độ chỉ đọc. Các thay đổi đối với cấu hình hệ thống sẽ được lưu vào cấu hình tùy chỉnh mới.",
"SystemDlnaProfilesHelp": "Cấu hình hệ thống ở chế độ chỉ đọc. Thay đổi cấu hình hệ thống sẽ được lưu vào cấu hình tùy chỉnh mới.",
"Sports": "Thể thao",
"SpecialFeatures": "Các tính năng đặc biệt",
"SortName": "Sắp xếp tên",
@ -1532,7 +1532,7 @@
"InterlacedVideoNotSupported": "Video xen kẽ không được hỗ trợ",
"AnamorphicVideoNotSupported": "Video Anamorphic không được hỗ trợ",
"AudioSampleRateNotSupported": "Tốc độ mẫu của âm thanh không được hỗ trợ",
"AudioProfileNotSupported": "Cấu hình của mã hóa âm thanh không được hỗ trợ",
"AudioProfileNotSupported": "Cấu hình mã hóa âm thanh không được hỗ trợ",
"VideoResolutionNotSupported": "Độ phân giải của video không được hỗ trợ",
"AudioChannelsNotSupported": "Số kênh âm thanh không được hỗ trợ",
"AudioBitrateNotSupported": "Tốc độ bit của âm thanh không được hỗ trợ",
@ -1695,5 +1695,15 @@
"PreferEmbeddedExtrasTitlesOverFileNames": "Ưu tiên tiêu đề được nhúng hơn tên tệp cho các tính năng bổ sung",
"PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Phần bổ sung thường có cùng tên được nhúng với phần gốc, hãy kiểm tra điều này để sử dụng các tiêu đề được nhúng cho chúng.",
"HeaderDummyChapter": "Hình Ảnh Phân Đoạn",
"HeaderRecordingMetadataSaving": "Dữ Liệu Mô Tả Bản Ghi"
"HeaderRecordingMetadataSaving": "Dữ Liệu Mô Tả Bản Ghi",
"SubtitleYellow": "Vàng",
"SubtitleBlack": "Đen",
"SubtitleBlue": "Xanh lam",
"SubtitleCyan": "Lục lam",
"SubtitleGray": "Xám",
"SubtitleGreen": "Xanh lá",
"SubtitleLightGray": "Xám Nhạt",
"SubtitleMagenta": "Đỏ Sậm",
"SubtitleRed": "Đỏ",
"SubtitleWhite": "Trắng"
}

View file

@ -1703,5 +1703,6 @@
"LabelDummyChapterCount": "限制:",
"LabelDummyChapterCountHelp": "每个媒体文件的最大章节图像提取数。",
"LabelChapterImageResolution": "分辨率:",
"LabelChapterImageResolutionHelp": "提取的章节图像的分辨率。"
"LabelChapterImageResolutionHelp": "提取的章节图像的分辨率。",
"SecondarySubtitles": "次字幕"
}

View file

@ -1,4 +1,4 @@
@import "../../styles/noto-sans/index.scss";
@import "../styles/noto-sans/index.scss";
@mixin font($weight: null, $size: null) {
font-weight: $weight;