mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-13 15:34:06 -04:00
Compare commits
97 Commits
v0.3.27.25
...
sonarr-pul
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e739a93a2a | ||
|
|
9005860899 | ||
|
|
c67f67109e | ||
|
|
51b9744e25 | ||
|
|
334d824633 | ||
|
|
ae01387ca9 | ||
|
|
4eb13e0938 | ||
|
|
6dbb826f2f | ||
|
|
52dfa57dd7 | ||
|
|
f354b3bc47 | ||
|
|
2d9e6788e6 | ||
|
|
0d121fe9c0 | ||
|
|
892c34fe35 | ||
|
|
24f6007594 | ||
|
|
5028ed4027 | ||
|
|
05f303436b | ||
|
|
5635de96a8 | ||
|
|
ce59f32023 | ||
|
|
6d675a5207 | ||
|
|
b093b23900 | ||
|
|
884ac2cb6f | ||
|
|
295a6c4255 | ||
|
|
74a59d5790 | ||
|
|
ae23e5f187 | ||
|
|
ba2add0d54 | ||
|
|
b6ebeb31c8 | ||
|
|
b8bd645560 | ||
|
|
e0d904fa69 | ||
|
|
cb532caca4 | ||
|
|
e1af8ad37f | ||
|
|
c4f30da648 | ||
|
|
b83a760873 | ||
|
|
22ab50f76d | ||
|
|
66758ca006 | ||
|
|
e7d7bc79f4 | ||
|
|
cfccb4f9c3 | ||
|
|
9312f17041 | ||
|
|
8192c22910 | ||
|
|
0b1d6b677a | ||
|
|
d666df0189 | ||
|
|
10d8f345c1 | ||
|
|
fb720b8714 | ||
|
|
e8131b5791 | ||
|
|
4f793f6b93 | ||
|
|
4215c21c94 | ||
|
|
6913789adc | ||
|
|
09e0c40792 | ||
|
|
baff805551 | ||
|
|
c885fe43cd | ||
|
|
464a777722 | ||
|
|
89e5999c85 | ||
|
|
b6fa332550 | ||
|
|
05f262dc0a | ||
|
|
699b765ee9 | ||
|
|
84beba2383 | ||
|
|
62eceb9148 | ||
|
|
f46070d4b0 | ||
|
|
73979c416a | ||
|
|
348e8f9c27 | ||
|
|
38bdb5a75d | ||
|
|
5e4c51e2f7 | ||
|
|
99a65246a9 | ||
|
|
598ce9a9d2 | ||
|
|
42d6b9e703 | ||
|
|
8f595838aa | ||
|
|
3d9d7d3582 | ||
|
|
77cf28bd78 | ||
|
|
2fb1b8af20 | ||
|
|
af1f389f8e | ||
|
|
b5334da253 | ||
|
|
68b3904382 | ||
|
|
c8b09b9e29 | ||
|
|
d910fc42ab | ||
|
|
a6db8bfe0e | ||
|
|
2033d7e411 | ||
|
|
4a04e54ceb | ||
|
|
d57a9ab9b0 | ||
|
|
d333204194 | ||
|
|
c3676f8d33 | ||
|
|
932356be61 | ||
|
|
5b1b2a2d67 | ||
|
|
c362e8c467 | ||
|
|
67c00a8cc7 | ||
|
|
27a086dfff | ||
|
|
8ee0df9c65 | ||
|
|
da30b55902 | ||
|
|
c7226fc85f | ||
|
|
84f22dbadc | ||
|
|
06a53ef9ca | ||
|
|
b5ef0cda1e | ||
|
|
1b1290efac | ||
|
|
dcbc3ea3f8 | ||
|
|
9a7b2cb818 | ||
|
|
f9cba39f0a | ||
|
|
6b6ff4fe76 | ||
|
|
05d0fe2da6 | ||
|
|
7aab2b49e2 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -120,6 +120,7 @@ _artifacts
|
||||
_rawPackage/
|
||||
_dotTrace*
|
||||
_tests/
|
||||
_temp*
|
||||
*.Result.xml
|
||||
coverage*.xml
|
||||
coverage*.json
|
||||
|
||||
@@ -9,18 +9,18 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '0.3.27'
|
||||
majorVersion: '0.4.6'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
readarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.421'
|
||||
dotnetVersion: '6.0.427'
|
||||
nodeVersion: '20.X'
|
||||
innoVersion: '6.2.0'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
macImage: 'macOS-11'
|
||||
macImage: 'macOS-13'
|
||||
|
||||
trigger:
|
||||
branches:
|
||||
@@ -1102,7 +1102,7 @@ stages:
|
||||
vmImage: ${{ variables.windowsImage }}
|
||||
steps:
|
||||
- checkout: self # Need history for Sonar analysis
|
||||
- task: SonarCloudPrepare@1
|
||||
- task: SonarCloudPrepare@2
|
||||
env:
|
||||
SONAR_SCANNER_OPTS: ''
|
||||
inputs:
|
||||
@@ -1114,7 +1114,7 @@ stages:
|
||||
cliProjectName: 'ReadarrUI'
|
||||
cliProjectVersion: '$(readarrVersion)'
|
||||
cliSources: './frontend'
|
||||
- task: SonarCloudAnalyze@1
|
||||
- task: SonarCloudAnalyze@2
|
||||
|
||||
- job: Api_Docs
|
||||
displayName: API Docs
|
||||
@@ -1190,7 +1190,7 @@ stages:
|
||||
submodules: true
|
||||
- powershell: Set-Service SCardSvr -StartupType Manual
|
||||
displayName: Enable Windows Test Service
|
||||
- task: SonarCloudPrepare@1
|
||||
- task: SonarCloudPrepare@2
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
inputs:
|
||||
SonarCloud: 'SonarCloud'
|
||||
@@ -1208,21 +1208,16 @@ stages:
|
||||
./build.sh --backend -f net6.0 -r win-x64
|
||||
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage
|
||||
displayName: Coverage Unit Tests
|
||||
- task: SonarCloudAnalyze@1
|
||||
- task: SonarCloudAnalyze@2
|
||||
condition: eq(variables['System.PullRequest.IsFork'], 'False')
|
||||
displayName: Publish SonarCloud Results
|
||||
- task: reportgenerator@4
|
||||
- task: reportgenerator@5.3.11
|
||||
displayName: Generate Coverage Report
|
||||
inputs:
|
||||
reports: '$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml'
|
||||
targetdir: '$(Build.SourcesDirectory)/CoverageResults/combined'
|
||||
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
|
||||
- task: PublishCodeCoverageResults@1
|
||||
displayName: Publish Coverage Report
|
||||
inputs:
|
||||
codeCoverageTool: 'cobertura'
|
||||
summaryFileLocation: './CoverageResults/combined/Cobertura.xml'
|
||||
reportDirectory: './CoverageResults/combined/'
|
||||
publishCodeCoverageResults: true
|
||||
|
||||
- stage: Report_Out
|
||||
dependsOn:
|
||||
|
||||
14
docs.sh
14
docs.sh
@@ -1,3 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
FRAMEWORK="net6.0"
|
||||
PLATFORM=$1
|
||||
|
||||
if [ "$PLATFORM" = "Windows" ]; then
|
||||
@@ -21,15 +25,21 @@ slnFile=src/Readarr.sln
|
||||
|
||||
platform=Posix
|
||||
|
||||
if [ "$PLATFORM" = "Windows" ]; then
|
||||
application=Readarr.Console.dll
|
||||
else
|
||||
application=Readarr.dll
|
||||
fi
|
||||
|
||||
dotnet clean $slnFile -c Debug
|
||||
dotnet clean $slnFile -c Release
|
||||
|
||||
dotnet msbuild -restore $slnFile -p:Configuration=Debug -p:Platform=$platform -p:RuntimeIdentifiers=$RUNTIME -t:PublishAllRids
|
||||
|
||||
dotnet new tool-manifest
|
||||
dotnet tool install --version 6.5.0 Swashbuckle.AspNetCore.Cli
|
||||
dotnet tool install --version 6.6.2 Swashbuckle.AspNetCore.Cli
|
||||
|
||||
dotnet tool run swagger tofile --output ./src/Readarr.Api.V1/openapi.json "$outputFolder/net6.0/$RUNTIME/Readarr.console.dll" v1 &
|
||||
dotnet tool run swagger tofile --output ./src/Readarr.Api.V1/openapi.json "$outputFolder/$FRAMEWORK/$RUNTIME/$application" v1 &
|
||||
|
||||
sleep 45
|
||||
|
||||
|
||||
2
frontend/.vscode/settings.json
vendored
2
frontend/.vscode/settings.json
vendored
@@ -9,7 +9,7 @@
|
||||
|
||||
"editor.formatOnSave": false,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": true
|
||||
"source.fixAll": "explicit"
|
||||
},
|
||||
|
||||
"typescript.preferences.quoteStyle": "single",
|
||||
|
||||
@@ -26,6 +26,7 @@ module.exports = (env) => {
|
||||
const config = {
|
||||
mode: isProduction ? 'production' : 'development',
|
||||
devtool: isProduction ? 'source-map' : 'eval-source-map',
|
||||
target: 'web',
|
||||
|
||||
stats: {
|
||||
children: false
|
||||
@@ -67,7 +68,7 @@ module.exports = (env) => {
|
||||
output: {
|
||||
path: distFolder,
|
||||
publicPath: '/',
|
||||
filename: '[name]-[contenthash].js',
|
||||
filename: isProduction ? '[name]-[contenthash].js' : '[name].js',
|
||||
sourceMapFilename: '[file].map'
|
||||
},
|
||||
|
||||
@@ -92,7 +93,7 @@ module.exports = (env) => {
|
||||
|
||||
new MiniCssExtractPlugin({
|
||||
filename: 'Content/styles.css',
|
||||
chunkFilename: 'Content/[id]-[chunkhash].css'
|
||||
chunkFilename: isProduction ? 'Content/[id]-[chunkhash].css' : 'Content/[id].css'
|
||||
}),
|
||||
|
||||
new HtmlWebpackPlugin({
|
||||
@@ -202,7 +203,7 @@ module.exports = (env) => {
|
||||
options: {
|
||||
importLoaders: 1,
|
||||
modules: {
|
||||
localIdentName: '[name]/[local]/[hash:base64:5]'
|
||||
localIdentName: isProduction ? '[name]/[local]/[hash:base64:5]' : '[name]/[local]'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -32,7 +32,7 @@ import LogsTableConnector from 'System/Events/LogsTableConnector';
|
||||
import Logs from 'System/Logs/Logs';
|
||||
import Status from 'System/Status/Status';
|
||||
import Tasks from 'System/Tasks/Tasks';
|
||||
import UpdatesConnector from 'System/Updates/UpdatesConnector';
|
||||
import Updates from 'System/Updates/Updates';
|
||||
import UnmappedFilesTableConnector from 'UnmappedFiles/UnmappedFilesTableConnector';
|
||||
import getPathWithUrlBase from 'Utilities/getPathWithUrlBase';
|
||||
import CutoffUnmetConnector from 'Wanted/CutoffUnmet/CutoffUnmetConnector';
|
||||
@@ -247,7 +247,7 @@ function AppRoutes(props) {
|
||||
|
||||
<Route
|
||||
path="/system/updates"
|
||||
component={UpdatesConnector}
|
||||
component={Updates}
|
||||
/>
|
||||
|
||||
<Route
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import AuthorsAppState from './AuthorsAppState';
|
||||
import CommandAppState from './CommandAppState';
|
||||
import SettingsAppState from './SettingsAppState';
|
||||
import SystemAppState from './SystemAppState';
|
||||
import TagsAppState from './TagsAppState';
|
||||
|
||||
interface FilterBuilderPropOption {
|
||||
@@ -35,10 +36,24 @@ export interface CustomFilter {
|
||||
filers: PropertyFilter[];
|
||||
}
|
||||
|
||||
export interface AppSectionState {
|
||||
isConnected: boolean;
|
||||
isReconnecting: boolean;
|
||||
version: string;
|
||||
prevVersion?: string;
|
||||
dimensions: {
|
||||
isSmallScreen: boolean;
|
||||
width: number;
|
||||
height: number;
|
||||
};
|
||||
}
|
||||
|
||||
interface AppState {
|
||||
app: AppSectionState;
|
||||
authors: AuthorsAppState;
|
||||
commands: CommandAppState;
|
||||
settings: SettingsAppState;
|
||||
system: SystemAppState;
|
||||
tags: TagsAppState;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import AppSectionState, {
|
||||
AppSectionDeleteState,
|
||||
AppSectionItemState,
|
||||
AppSectionSaveState,
|
||||
} from 'App/State/AppSectionState';
|
||||
import DownloadClient from 'typings/DownloadClient';
|
||||
@@ -7,13 +8,16 @@ import ImportList from 'typings/ImportList';
|
||||
import Indexer from 'typings/Indexer';
|
||||
import IndexerFlag from 'typings/IndexerFlag';
|
||||
import Notification from 'typings/Notification';
|
||||
import { UiSettings } from 'typings/UiSettings';
|
||||
import General from 'typings/Settings/General';
|
||||
import UiSettings from 'typings/Settings/UiSettings';
|
||||
|
||||
export interface DownloadClientAppState
|
||||
extends AppSectionState<DownloadClient>,
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export type GeneralAppState = AppSectionItemState<General>;
|
||||
|
||||
export interface ImportListAppState
|
||||
extends AppSectionState<ImportList>,
|
||||
AppSectionDeleteState,
|
||||
@@ -33,11 +37,12 @@ export type UiSettingsAppState = AppSectionState<UiSettings>;
|
||||
|
||||
interface SettingsAppState {
|
||||
downloadClients: DownloadClientAppState;
|
||||
general: GeneralAppState;
|
||||
importLists: ImportListAppState;
|
||||
indexerFlags: IndexerFlagSettingsAppState;
|
||||
indexers: IndexerAppState;
|
||||
notifications: NotificationAppState;
|
||||
uiSettings: UiSettingsAppState;
|
||||
ui: UiSettingsAppState;
|
||||
}
|
||||
|
||||
export default SettingsAppState;
|
||||
|
||||
13
frontend/src/App/State/SystemAppState.ts
Normal file
13
frontend/src/App/State/SystemAppState.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import SystemStatus from 'typings/SystemStatus';
|
||||
import Update from 'typings/Update';
|
||||
import AppSectionState, { AppSectionItemState } from './AppSectionState';
|
||||
|
||||
export type SystemStatusAppState = AppSectionItemState<SystemStatus>;
|
||||
export type UpdateAppState = AppSectionState<Update>;
|
||||
|
||||
interface SystemAppState {
|
||||
updates: UpdateAppState;
|
||||
status: SystemStatusAppState;
|
||||
}
|
||||
|
||||
export default SystemAppState;
|
||||
@@ -5,6 +5,7 @@ import dimensions from 'Styles/Variables/dimensions';
|
||||
import formatDateTime from 'Utilities/Date/formatDateTime';
|
||||
import getRelativeDate from 'Utilities/Date/getRelativeDate';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AuthorIndexOverviewInfoRow from './AuthorIndexOverviewInfoRow';
|
||||
import styles from './AuthorIndexOverviewInfo.css';
|
||||
|
||||
@@ -76,9 +77,9 @@ function getInfoRowProps(row, props) {
|
||||
};
|
||||
}
|
||||
|
||||
if (name === 'qualityProfileId') {
|
||||
if (name === 'qualityProfileId' && !!props.qualityProfile?.name) {
|
||||
return {
|
||||
title: 'Quality Profile',
|
||||
title: translate('QualityProfile'),
|
||||
iconName: icons.PROFILE,
|
||||
label: props.qualityProfile.name
|
||||
};
|
||||
|
||||
@@ -235,12 +235,12 @@ class AuthorIndexPoster extends Component {
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
showQualityProfile &&
|
||||
<div className={styles.title}>
|
||||
{qualityProfile.name}
|
||||
</div>
|
||||
}
|
||||
{showQualityProfile && !!qualityProfile?.name ? (
|
||||
<div className={styles.title} title={translate('QualityProfile')}>
|
||||
{qualityProfile.name}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{
|
||||
nextAiring &&
|
||||
<div className={styles.nextAiring}>
|
||||
|
||||
@@ -209,7 +209,7 @@ class AuthorIndexRow extends Component {
|
||||
key={name}
|
||||
className={styles[name]}
|
||||
>
|
||||
{qualityProfile.name}
|
||||
{qualityProfile?.name ?? ''}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
@@ -220,7 +220,7 @@ class AuthorIndexRow extends Component {
|
||||
key={name}
|
||||
className={styles[name]}
|
||||
>
|
||||
{metadataProfile.name}
|
||||
{metadataProfile?.name ?? ''}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import dimensions from 'Styles/Variables/dimensions';
|
||||
import formatDateTime from 'Utilities/Date/formatDateTime';
|
||||
import getRelativeDate from 'Utilities/Date/getRelativeDate';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import BookIndexOverviewInfoRow from './BookIndexOverviewInfoRow';
|
||||
import styles from './BookIndexOverviewInfo.css';
|
||||
|
||||
@@ -71,9 +72,9 @@ function getInfoRowProps(row, props) {
|
||||
};
|
||||
}
|
||||
|
||||
if (name === 'qualityProfileId') {
|
||||
if (name === 'qualityProfileId' && !!props.qualityProfile?.name) {
|
||||
return {
|
||||
title: 'Quality Profile',
|
||||
title: translate('QualityProfile'),
|
||||
iconName: icons.PROFILE,
|
||||
label: props.qualityProfile.name
|
||||
};
|
||||
|
||||
@@ -250,12 +250,12 @@ class BookIndexPoster extends Component {
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
showQualityProfile &&
|
||||
<div className={styles.title}>
|
||||
{qualityProfile.name}
|
||||
</div>
|
||||
}
|
||||
{showQualityProfile && !!qualityProfile?.name ? (
|
||||
<div className={styles.title} title={translate('QualityProfile')}>
|
||||
{qualityProfile.name}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{
|
||||
nextAiring &&
|
||||
<div className={styles.nextAiring}>
|
||||
|
||||
@@ -195,7 +195,7 @@ class BookIndexRow extends Component {
|
||||
key={name}
|
||||
className={styles[name]}
|
||||
>
|
||||
{qualityProfile.name}
|
||||
{qualityProfile?.name ?? ''}
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
padding: 0;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.isDisabled {
|
||||
color: var(--disabledColor);
|
||||
cursor: not-allowed;
|
||||
&.isDisabled {
|
||||
color: var(--disabledColor);
|
||||
cursor: not-allowed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import AppUpdatedModalConnector from 'App/AppUpdatedModalConnector';
|
||||
import ColorImpairedContext from 'App/ColorImpairedContext';
|
||||
import ConnectionLostModalConnector from 'App/ConnectionLostModalConnector';
|
||||
import SignalRConnector from 'Components/SignalRConnector';
|
||||
import AuthenticationRequiredModal from 'FirstRun/AuthenticationRequiredModal';
|
||||
import locationShape from 'Helpers/Props/Shapes/locationShape';
|
||||
import PageHeader from './Header/PageHeader';
|
||||
import PageSidebar from './Sidebar/PageSidebar';
|
||||
@@ -75,6 +76,7 @@ class Page extends Component {
|
||||
isSmallScreen,
|
||||
isSidebarVisible,
|
||||
enableColorImpairedMode,
|
||||
authenticationEnabled,
|
||||
onSidebarToggle,
|
||||
onSidebarVisibleChange
|
||||
} = this.props;
|
||||
@@ -108,6 +110,10 @@ class Page extends Component {
|
||||
isOpen={this.state.isConnectionLostModalOpen}
|
||||
onModalClose={this.onConnectionLostModalClose}
|
||||
/>
|
||||
|
||||
<AuthenticationRequiredModal
|
||||
isOpen={!authenticationEnabled}
|
||||
/>
|
||||
</div>
|
||||
</ColorImpairedContext.Provider>
|
||||
);
|
||||
@@ -123,6 +129,7 @@ Page.propTypes = {
|
||||
isUpdated: PropTypes.bool.isRequired,
|
||||
isDisconnected: PropTypes.bool.isRequired,
|
||||
enableColorImpairedMode: PropTypes.bool.isRequired,
|
||||
authenticationEnabled: PropTypes.bool.isRequired,
|
||||
onResize: PropTypes.func.isRequired,
|
||||
onSidebarToggle: PropTypes.func.isRequired,
|
||||
onSidebarVisibleChange: PropTypes.func.isRequired
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
import { fetchStatus } from 'Store/Actions/systemActions';
|
||||
import { fetchTags } from 'Store/Actions/tagActions';
|
||||
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
|
||||
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
|
||||
import ErrorPage from './ErrorPage';
|
||||
import LoadingPage from './LoadingPage';
|
||||
import Page from './Page';
|
||||
@@ -153,18 +154,21 @@ function createMapStateToProps() {
|
||||
selectErrors,
|
||||
selectAppProps,
|
||||
createDimensionsSelector(),
|
||||
createSystemStatusSelector(),
|
||||
(
|
||||
enableColorImpairedMode,
|
||||
isPopulated,
|
||||
errors,
|
||||
app,
|
||||
dimensions
|
||||
dimensions,
|
||||
systemStatus
|
||||
) => {
|
||||
return {
|
||||
...app,
|
||||
...errors,
|
||||
isPopulated,
|
||||
isSmallScreen: dimensions.isSmallScreen,
|
||||
authenticationEnabled: systemStatus.authentication !== 'none',
|
||||
enableColorImpairedMode
|
||||
};
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ class SignalRConnector extends Component {
|
||||
handleWantedCutoff = (body) => {
|
||||
if (body.action === 'updated') {
|
||||
this.props.dispatchUpdateItem({
|
||||
section: 'cutoffUnmet',
|
||||
section: 'wanted.cutoffUnmet',
|
||||
updateOnly: true,
|
||||
...body.resource
|
||||
});
|
||||
@@ -263,7 +263,7 @@ class SignalRConnector extends Component {
|
||||
handleWantedMissing = (body) => {
|
||||
if (body.action === 'updated') {
|
||||
this.props.dispatchUpdateItem({
|
||||
section: 'missing',
|
||||
section: 'wanted.missing',
|
||||
updateOnly: true,
|
||||
...body.resource
|
||||
});
|
||||
|
||||
34
frontend/src/FirstRun/AuthenticationRequiredModal.js
Normal file
34
frontend/src/FirstRun/AuthenticationRequiredModal.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Modal from 'Components/Modal/Modal';
|
||||
import { sizes } from 'Helpers/Props';
|
||||
import AuthenticationRequiredModalContentConnector from './AuthenticationRequiredModalContentConnector';
|
||||
|
||||
function onModalClose() {
|
||||
// No-op
|
||||
}
|
||||
|
||||
function AuthenticationRequiredModal(props) {
|
||||
const {
|
||||
isOpen
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
size={sizes.MEDIUM}
|
||||
isOpen={isOpen}
|
||||
closeOnBackgroundClick={false}
|
||||
onModalClose={onModalClose}
|
||||
>
|
||||
<AuthenticationRequiredModalContentConnector
|
||||
onModalClose={onModalClose}
|
||||
/>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
AuthenticationRequiredModal.propTypes = {
|
||||
isOpen: PropTypes.bool.isRequired
|
||||
};
|
||||
|
||||
export default AuthenticationRequiredModal;
|
||||
@@ -0,0 +1,5 @@
|
||||
.authRequiredAlert {
|
||||
composes: alert from '~Components/Alert.css';
|
||||
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
7
frontend/src/FirstRun/AuthenticationRequiredModalContent.css.d.ts
vendored
Normal file
7
frontend/src/FirstRun/AuthenticationRequiredModalContent.css.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'authRequiredAlert': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
export default cssExports;
|
||||
170
frontend/src/FirstRun/AuthenticationRequiredModalContent.js
Normal file
170
frontend/src/FirstRun/AuthenticationRequiredModalContent.js
Normal file
@@ -0,0 +1,170 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import FormGroup from 'Components/Form/FormGroup';
|
||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||
import FormLabel from 'Components/Form/FormLabel';
|
||||
import SpinnerButton from 'Components/Link/SpinnerButton';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import ModalBody from 'Components/Modal/ModalBody';
|
||||
import ModalContent from 'Components/Modal/ModalContent';
|
||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { inputTypes, kinds } from 'Helpers/Props';
|
||||
import { authenticationMethodOptions, authenticationRequiredOptions } from 'Settings/General/SecuritySettings';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './AuthenticationRequiredModalContent.css';
|
||||
|
||||
function onModalClose() {
|
||||
// No-op
|
||||
}
|
||||
|
||||
function AuthenticationRequiredModalContent(props) {
|
||||
const {
|
||||
isPopulated,
|
||||
error,
|
||||
isSaving,
|
||||
settings,
|
||||
onInputChange,
|
||||
onSavePress,
|
||||
dispatchFetchStatus
|
||||
} = props;
|
||||
|
||||
const {
|
||||
authenticationMethod,
|
||||
authenticationRequired,
|
||||
username,
|
||||
password,
|
||||
passwordConfirmation
|
||||
} = settings;
|
||||
|
||||
const authenticationEnabled = authenticationMethod && authenticationMethod.value !== 'none';
|
||||
|
||||
const didMount = useRef(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isSaving && didMount.current) {
|
||||
dispatchFetchStatus();
|
||||
}
|
||||
|
||||
didMount.current = true;
|
||||
}, [isSaving, dispatchFetchStatus]);
|
||||
|
||||
return (
|
||||
<ModalContent
|
||||
showCloseButton={false}
|
||||
onModalClose={onModalClose}
|
||||
>
|
||||
<ModalHeader>
|
||||
{translate('AuthenticationRequired')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
<Alert
|
||||
className={styles.authRequiredAlert}
|
||||
kind={kinds.WARNING}
|
||||
>
|
||||
{translate('AuthenticationRequiredWarning')}
|
||||
</Alert>
|
||||
|
||||
{
|
||||
isPopulated && !error ?
|
||||
<div>
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('AuthenticationMethod')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="authenticationMethod"
|
||||
values={authenticationMethodOptions}
|
||||
helpText={translate('AuthenticationMethodHelpText')}
|
||||
helpTextWarning={authenticationMethod.value === 'none' ? translate('AuthenticationMethodHelpTextWarning') : undefined}
|
||||
helpLink="https://wiki.servarr.com/readarr/faq#forced-authentication"
|
||||
onChange={onInputChange}
|
||||
{...authenticationMethod}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('AuthenticationRequired')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="authenticationRequired"
|
||||
values={authenticationRequiredOptions}
|
||||
helpText={translate('AuthenticationRequiredHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...authenticationRequired}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('Username')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="username"
|
||||
onChange={onInputChange}
|
||||
helpTextWarning={username?.value ? undefined : translate('AuthenticationRequiredUsernameHelpTextWarning')}
|
||||
{...username}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('Password')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PASSWORD}
|
||||
name="password"
|
||||
onChange={onInputChange}
|
||||
helpTextWarning={password?.value ? undefined : translate('AuthenticationRequiredPasswordHelpTextWarning')}
|
||||
{...password}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('PasswordConfirmation')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PASSWORD}
|
||||
name="passwordConfirmation"
|
||||
onChange={onInputChange}
|
||||
helpTextWarning={passwordConfirmation?.value ? undefined : translate('AuthenticationRequiredPasswordConfirmationHelpTextWarning')}
|
||||
{...passwordConfirmation}
|
||||
/>
|
||||
</FormGroup>
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
!isPopulated && !error ? <LoadingIndicator /> : null
|
||||
}
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<SpinnerButton
|
||||
kind={kinds.PRIMARY}
|
||||
isSpinning={isSaving}
|
||||
isDisabled={!authenticationEnabled}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
{translate('Save')}
|
||||
</SpinnerButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
);
|
||||
}
|
||||
|
||||
AuthenticationRequiredModalContent.propTypes = {
|
||||
isPopulated: PropTypes.bool.isRequired,
|
||||
error: PropTypes.object,
|
||||
isSaving: PropTypes.bool.isRequired,
|
||||
saveError: PropTypes.object,
|
||||
settings: PropTypes.object.isRequired,
|
||||
onInputChange: PropTypes.func.isRequired,
|
||||
onSavePress: PropTypes.func.isRequired,
|
||||
dispatchFetchStatus: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default AuthenticationRequiredModalContent;
|
||||
@@ -0,0 +1,86 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
||||
import { fetchGeneralSettings, saveGeneralSettings, setGeneralSettingsValue } from 'Store/Actions/settingsActions';
|
||||
import { fetchStatus } from 'Store/Actions/systemActions';
|
||||
import createSettingsSectionSelector from 'Store/Selectors/createSettingsSectionSelector';
|
||||
import AuthenticationRequiredModalContent from './AuthenticationRequiredModalContent';
|
||||
|
||||
const SECTION = 'general';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createSettingsSectionSelector(SECTION),
|
||||
(sectionSettings) => {
|
||||
return {
|
||||
...sectionSettings
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const mapDispatchToProps = {
|
||||
dispatchClearPendingChanges: clearPendingChanges,
|
||||
dispatchSetGeneralSettingsValue: setGeneralSettingsValue,
|
||||
dispatchSaveGeneralSettings: saveGeneralSettings,
|
||||
dispatchFetchGeneralSettings: fetchGeneralSettings,
|
||||
dispatchFetchStatus: fetchStatus
|
||||
};
|
||||
|
||||
class AuthenticationRequiredModalContentConnector extends Component {
|
||||
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidMount() {
|
||||
this.props.dispatchFetchGeneralSettings();
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.dispatchClearPendingChanges({ section: `settings.${SECTION}` });
|
||||
}
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onInputChange = ({ name, value }) => {
|
||||
this.props.dispatchSetGeneralSettingsValue({ name, value });
|
||||
};
|
||||
|
||||
onSavePress = () => {
|
||||
this.props.dispatchSaveGeneralSettings();
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
dispatchClearPendingChanges,
|
||||
dispatchFetchGeneralSettings,
|
||||
dispatchSetGeneralSettingsValue,
|
||||
dispatchSaveGeneralSettings,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<AuthenticationRequiredModalContent
|
||||
{...otherProps}
|
||||
onInputChange={this.onInputChange}
|
||||
onSavePress={this.onSavePress}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticationRequiredModalContentConnector.propTypes = {
|
||||
dispatchClearPendingChanges: PropTypes.func.isRequired,
|
||||
dispatchFetchGeneralSettings: PropTypes.func.isRequired,
|
||||
dispatchSetGeneralSettingsValue: PropTypes.func.isRequired,
|
||||
dispatchSaveGeneralSettings: PropTypes.func.isRequired,
|
||||
dispatchFetchStatus: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(createMapStateToProps, mapDispatchToProps)(AuthenticationRequiredModalContentConnector);
|
||||
@@ -1,5 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import TextInput from 'Components/Form/TextInput';
|
||||
import Icon from 'Components/Icon';
|
||||
import Button from 'Components/Link/Button';
|
||||
@@ -7,7 +8,7 @@ import Link from 'Components/Link/Link';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import getErrorMessage from 'Utilities/Object/getErrorMessage';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AddNewAuthorSearchResultConnector from './Author/AddNewAuthorSearchResultConnector';
|
||||
@@ -127,9 +128,16 @@ class AddNewItem extends Component {
|
||||
!isFetching && !!error ?
|
||||
<div className={styles.message}>
|
||||
<div className={styles.helpText}>
|
||||
Failed to load search results, please try again.
|
||||
{translate('FailedLoadingSearchResults')}
|
||||
</div>
|
||||
|
||||
<Alert kind={kinds.WARNING}>{getErrorMessage(error)}</Alert>
|
||||
|
||||
<div>
|
||||
<Link to="https://wiki.servarr.com/readarr/troubleshooting#invalid-response-received-from-metadata-api">
|
||||
{translate('WhySearchesCouldBeFailing')}
|
||||
</Link>
|
||||
</div>
|
||||
<div>{getErrorMessage(error)}</div>
|
||||
</div> : null
|
||||
}
|
||||
|
||||
|
||||
@@ -25,3 +25,8 @@
|
||||
border-radius: 4px;
|
||||
background-color: var(--cardCenterBackgroundColor);
|
||||
}
|
||||
|
||||
.customFormats {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
interface CssExports {
|
||||
'addSpecification': string;
|
||||
'center': string;
|
||||
'customFormats': string;
|
||||
'deleteButton': string;
|
||||
'rightButtons': string;
|
||||
}
|
||||
|
||||
@@ -11,16 +11,69 @@ import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import { icons, inputTypes, kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
const authenticationMethodOptions = [
|
||||
{ key: 'none', value: 'None' },
|
||||
{ key: 'basic', value: 'Basic (Browser Popup)' },
|
||||
{ key: 'forms', value: 'Forms (Login Page)' }
|
||||
export const authenticationMethodOptions = [
|
||||
{
|
||||
key: 'none',
|
||||
get value() {
|
||||
return translate('None');
|
||||
},
|
||||
isDisabled: true
|
||||
},
|
||||
{
|
||||
key: 'external',
|
||||
get value() {
|
||||
return translate('External');
|
||||
},
|
||||
isHidden: true
|
||||
},
|
||||
{
|
||||
key: 'basic',
|
||||
get value() {
|
||||
return translate('AuthBasic');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'forms',
|
||||
get value() {
|
||||
return translate('AuthForm');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
export const authenticationRequiredOptions = [
|
||||
{
|
||||
key: 'enabled',
|
||||
get value() {
|
||||
return translate('Enabled');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'disabledForLocalAddresses',
|
||||
get value() {
|
||||
return translate('DisabledForLocalAddresses');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const certificateValidationOptions = [
|
||||
{ key: 'enabled', value: 'Enabled' },
|
||||
{ key: 'disabledForLocalAddresses', value: 'Disabled for Local Addresses' },
|
||||
{ key: 'disabled', value: 'Disabled' }
|
||||
{
|
||||
key: 'enabled',
|
||||
get value() {
|
||||
return translate('Enabled');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'disabledForLocalAddresses',
|
||||
get value() {
|
||||
return translate('DisabledForLocalAddresses');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'disabled',
|
||||
get value() {
|
||||
return translate('Disabled');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
class SecuritySettings extends Component {
|
||||
@@ -68,8 +121,10 @@ class SecuritySettings extends Component {
|
||||
|
||||
const {
|
||||
authenticationMethod,
|
||||
authenticationRequired,
|
||||
username,
|
||||
password,
|
||||
passwordConfirmation,
|
||||
apiKey,
|
||||
certificateValidation
|
||||
} = settings;
|
||||
@@ -79,26 +134,40 @@ class SecuritySettings extends Component {
|
||||
return (
|
||||
<FieldSet legend={translate('Security')}>
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Authentication')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('Authentication')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="authenticationMethod"
|
||||
values={authenticationMethodOptions}
|
||||
helpText={translate('AuthenticationMethodHelpText')}
|
||||
helpTextWarning={translate('AuthenticationRequiredWarning')}
|
||||
onChange={onInputChange}
|
||||
{...authenticationMethod}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
authenticationEnabled &&
|
||||
authenticationEnabled ?
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Username')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('AuthenticationRequired')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="authenticationRequired"
|
||||
values={authenticationRequiredOptions}
|
||||
helpText={translate('AuthenticationRequiredHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...authenticationRequired}
|
||||
/>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
authenticationEnabled ?
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('Username')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
@@ -106,15 +175,14 @@ class SecuritySettings extends Component {
|
||||
onChange={onInputChange}
|
||||
{...username}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
authenticationEnabled &&
|
||||
authenticationEnabled ?
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Password')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('Password')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PASSWORD}
|
||||
@@ -122,19 +190,33 @@ class SecuritySettings extends Component {
|
||||
onChange={onInputChange}
|
||||
{...password}
|
||||
/>
|
||||
</FormGroup>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
authenticationEnabled ?
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('PasswordConfirmation')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.PASSWORD}
|
||||
name="passwordConfirmation"
|
||||
onChange={onInputChange}
|
||||
{...passwordConfirmation}
|
||||
/>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('APIKey')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('ApiKey')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="apiKey"
|
||||
readOnly={true}
|
||||
helpTextWarning={translate('ApiKeyHelpTextWarning')}
|
||||
helpTextWarning={translate('RestartRequiredHelpTextWarning')}
|
||||
buttons={[
|
||||
<ClipboardButton
|
||||
key="copy"
|
||||
@@ -160,9 +242,7 @@ class SecuritySettings extends Component {
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('CertificateValidation')}
|
||||
</FormLabel>
|
||||
<FormLabel>{translate('CertificateValidation')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
|
||||
@@ -18,7 +18,6 @@ function UpdateSettings(props) {
|
||||
const {
|
||||
advancedSettings,
|
||||
settings,
|
||||
isWindows,
|
||||
packageUpdateMechanism,
|
||||
onInputChange
|
||||
} = props;
|
||||
@@ -44,10 +43,10 @@ function UpdateSettings(props) {
|
||||
value: titleCase(packageUpdateMechanism)
|
||||
});
|
||||
} else {
|
||||
updateOptions.push({ key: 'builtIn', value: 'Built-In' });
|
||||
updateOptions.push({ key: 'builtIn', value: translate('BuiltIn') });
|
||||
}
|
||||
|
||||
updateOptions.push({ key: 'script', value: 'Script' });
|
||||
updateOptions.push({ key: 'script', value: translate('Script') });
|
||||
|
||||
return (
|
||||
<FieldSet legend={translate('Updates')}>
|
||||
@@ -60,8 +59,8 @@ function UpdateSettings(props) {
|
||||
<FormInputGroup
|
||||
type={inputTypes.AUTO_COMPLETE}
|
||||
name="branch"
|
||||
helpText={usingExternalUpdateMechanism ? translate('UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism') : translate('UsingExternalUpdateMechanismBranchToUseToUpdateReadarr')}
|
||||
helpLink="https://wiki.servarr.com/readarr/faq#how-do-I-update-my-readarr"
|
||||
helpText={usingExternalUpdateMechanism ? translate('BranchUpdateMechanism') : translate('BranchUpdate')}
|
||||
helpLink="https://wiki.servarr.com/readarr/settings#updates"
|
||||
{...branch}
|
||||
values={branchValues}
|
||||
onChange={onInputChange}
|
||||
@@ -69,62 +68,59 @@ function UpdateSettings(props) {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
!isWindows &&
|
||||
<div>
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('Automatic')}</FormLabel>
|
||||
<div>
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
size={sizes.MEDIUM}
|
||||
>
|
||||
<FormLabel>{translate('Automatic')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="updateAutomatically"
|
||||
helpText={translate('UpdateAutomaticallyHelpText')}
|
||||
helpTextWarning={updateMechanism.value === 'docker' ? translate('AutomaticUpdatesDisabledDocker', { appName: 'Readarr' }) : undefined}
|
||||
onChange={onInputChange}
|
||||
{...updateAutomatically}
|
||||
/>
|
||||
</FormGroup>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="updateAutomatically"
|
||||
helpText={translate('UpdateAutomaticallyHelpText')}
|
||||
helpTextWarning={updateMechanism.value === 'docker' ? translate('AutomaticUpdatesDisabledDocker') : undefined}
|
||||
onChange={onInputChange}
|
||||
{...updateAutomatically}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('Mechanism')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="updateMechanism"
|
||||
values={updateOptions}
|
||||
helpText={translate('UpdateMechanismHelpText')}
|
||||
helpLink="https://wiki.servarr.com/readarr/settings#updates"
|
||||
onChange={onInputChange}
|
||||
{...updateMechanism}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
updateMechanism.value === 'script' &&
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('Mechanism')}</FormLabel>
|
||||
<FormLabel>{translate('ScriptPath')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="updateMechanism"
|
||||
values={updateOptions}
|
||||
helpText={translate('UpdateMechanismHelpText')}
|
||||
helpLink="https://wiki.servarr.com/readarr/faq#how-do-i-update-my-readarr"
|
||||
type={inputTypes.TEXT}
|
||||
name="updateScriptPath"
|
||||
helpText={translate('UpdateScriptPathHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...updateMechanism}
|
||||
{...updateScriptPath}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
updateMechanism.value === 'script' &&
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('ScriptPath')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="updateScriptPath"
|
||||
helpText={translate('UpdateScriptPathHelpText')}
|
||||
onChange={onInputChange}
|
||||
{...updateScriptPath}
|
||||
/>
|
||||
</FormGroup>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</FieldSet>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import TagListConnector from 'Components/TagListConnector';
|
||||
import { createMetadataProfileSelectorForHook } from 'Store/Selectors/createMetadataProfileSelector';
|
||||
import { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';
|
||||
import { SelectStateInputProps } from 'typings/props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './ManageImportListsModalRow.css';
|
||||
|
||||
interface ManageImportListsModalRowProps {
|
||||
@@ -70,7 +71,7 @@ function ManageImportListsModalRow(props: ManageImportListsModalRowProps) {
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.qualityProfileId}>
|
||||
{qualityProfile?.name ?? 'None'}
|
||||
{qualityProfile?.name ?? translate('None')}
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.metadataProfileId}>
|
||||
@@ -82,7 +83,7 @@ function ManageImportListsModalRow(props: ManageImportListsModalRowProps) {
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.enableAutomaticAdd}>
|
||||
{enableAutomaticAdd ? 'Yes' : 'No'}
|
||||
{enableAutomaticAdd ? translate('Yes') : translate('No')}
|
||||
</TableRowCell>
|
||||
|
||||
<TableRowCell className={styles.tags}>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
@@ -15,11 +14,11 @@ function createMapStateToProps() {
|
||||
(state) => state.settings.advancedSettings,
|
||||
(state) => state.settings.namingExamples,
|
||||
createSettingsSectionSelector(SECTION),
|
||||
(advancedSettings, examples, sectionSettings) => {
|
||||
(advancedSettings, namingExamples, sectionSettings) => {
|
||||
return {
|
||||
advancedSettings,
|
||||
examples: examples.item,
|
||||
examplesPopulated: !_.isEmpty(examples.item),
|
||||
examples: namingExamples.item,
|
||||
examplesPopulated: namingExamples.isPopulated,
|
||||
...sectionSettings
|
||||
};
|
||||
}
|
||||
|
||||
@@ -75,12 +75,12 @@ class RootFolder extends Component {
|
||||
{path}
|
||||
</Label>
|
||||
|
||||
<Label kind={kinds.SUCCESS}>
|
||||
{qualityProfile.name}
|
||||
<Label kind={qualityProfile?.name ? kinds.SUCCESS : kinds.DANGER}>
|
||||
{qualityProfile?.name || translate('None')}
|
||||
</Label>
|
||||
|
||||
<Label kind={kinds.SUCCESS}>
|
||||
{metadataProfile.name}
|
||||
<Label kind={metadataProfile?.name ? kinds.SUCCESS : kinds.DANGER}>
|
||||
{metadataProfile?.name || translate('None')}
|
||||
</Label>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
|
||||
import styles from './UpdateChanges.css';
|
||||
|
||||
class UpdateChanges extends Component {
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
title,
|
||||
changes
|
||||
} = this.props;
|
||||
|
||||
if (changes.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={styles.title}>{title}</div>
|
||||
<ul>
|
||||
{
|
||||
changes.map((change, index) => {
|
||||
const checkChange = change.replace(/#\d{4,5}\b/g, (match, contents) => {
|
||||
return `[${match}](https://github.com/Readarr/Readarr/issues/${match.substring(1)})`;
|
||||
});
|
||||
|
||||
return (
|
||||
<li key={index}>
|
||||
<InlineMarkdown data={checkChange} />
|
||||
</li>
|
||||
);
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
UpdateChanges.propTypes = {
|
||||
title: PropTypes.string.isRequired,
|
||||
changes: PropTypes.arrayOf(PropTypes.string)
|
||||
};
|
||||
|
||||
export default UpdateChanges;
|
||||
43
frontend/src/System/Updates/UpdateChanges.tsx
Normal file
43
frontend/src/System/Updates/UpdateChanges.tsx
Normal file
@@ -0,0 +1,43 @@
|
||||
import React from 'react';
|
||||
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
|
||||
import styles from './UpdateChanges.css';
|
||||
|
||||
interface UpdateChangesProps {
|
||||
title: string;
|
||||
changes: string[];
|
||||
}
|
||||
|
||||
function UpdateChanges(props: UpdateChangesProps) {
|
||||
const { title, changes } = props;
|
||||
|
||||
if (changes.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const uniqueChanges = [...new Set(changes)];
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={styles.title}>{title}</div>
|
||||
<ul>
|
||||
{uniqueChanges.map((change, index) => {
|
||||
const checkChange = change.replace(
|
||||
/#\d{4,5}\b/g,
|
||||
(match) =>
|
||||
`[${match}](https://github.com/Readarr/Readarr/issues/${match.substring(
|
||||
1
|
||||
)})`
|
||||
);
|
||||
|
||||
return (
|
||||
<li key={index}>
|
||||
<InlineMarkdown data={checkChange} />
|
||||
</li>
|
||||
);
|
||||
})}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default UpdateChanges;
|
||||
@@ -1,252 +0,0 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import Icon from 'Components/Icon';
|
||||
import Label from 'Components/Label';
|
||||
import SpinnerButton from 'Components/Link/SpinnerButton';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import formatDate from 'Utilities/Date/formatDate';
|
||||
import formatDateTime from 'Utilities/Date/formatDateTime';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import UpdateChanges from './UpdateChanges';
|
||||
import styles from './Updates.css';
|
||||
|
||||
class Updates extends Component {
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
currentVersion,
|
||||
isFetching,
|
||||
isPopulated,
|
||||
updatesError,
|
||||
generalSettingsError,
|
||||
items,
|
||||
isInstallingUpdate,
|
||||
updateMechanism,
|
||||
isDocker,
|
||||
updateMechanismMessage,
|
||||
shortDateFormat,
|
||||
longDateFormat,
|
||||
timeFormat,
|
||||
onInstallLatestPress
|
||||
} = this.props;
|
||||
|
||||
const hasError = !!(updatesError || generalSettingsError);
|
||||
const hasUpdates = isPopulated && !hasError && items.length > 0;
|
||||
const noUpdates = isPopulated && !hasError && !items.length;
|
||||
const hasUpdateToInstall = hasUpdates && _.some(items, { installable: true, latest: true });
|
||||
const noUpdateToInstall = hasUpdates && !hasUpdateToInstall;
|
||||
|
||||
const externalUpdaterPrefix = 'Unable to update Readarr directly,';
|
||||
const externalUpdaterMessages = {
|
||||
external: 'Readarr is configured to use an external update mechanism',
|
||||
apt: 'use apt to install the update',
|
||||
docker: 'update the docker container to receive the update'
|
||||
};
|
||||
|
||||
return (
|
||||
<PageContent title={translate('Updates')}>
|
||||
<PageContentBody>
|
||||
{
|
||||
!isPopulated && !hasError &&
|
||||
<LoadingIndicator />
|
||||
}
|
||||
|
||||
{
|
||||
noUpdates &&
|
||||
<Alert kind={kinds.INFO}>
|
||||
{translate('NoUpdatesAreAvailable')}
|
||||
</Alert>
|
||||
}
|
||||
|
||||
{
|
||||
hasUpdateToInstall &&
|
||||
<div className={styles.messageContainer}>
|
||||
{
|
||||
(updateMechanism === 'builtIn' || updateMechanism === 'script') && !isDocker ?
|
||||
<SpinnerButton
|
||||
className={styles.updateAvailable}
|
||||
kind={kinds.PRIMARY}
|
||||
isSpinning={isInstallingUpdate}
|
||||
onPress={onInstallLatestPress}
|
||||
>
|
||||
Install Latest
|
||||
</SpinnerButton> :
|
||||
|
||||
<Fragment>
|
||||
<Icon
|
||||
name={icons.WARNING}
|
||||
kind={kinds.WARNING}
|
||||
size={30}
|
||||
/>
|
||||
|
||||
<div className={styles.message}>
|
||||
{externalUpdaterPrefix} <InlineMarkdown data={updateMechanismMessage || externalUpdaterMessages[updateMechanism] || externalUpdaterMessages.external} />
|
||||
</div>
|
||||
</Fragment>
|
||||
}
|
||||
|
||||
{
|
||||
isFetching &&
|
||||
<LoadingIndicator
|
||||
className={styles.loading}
|
||||
size={20}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
noUpdateToInstall &&
|
||||
<div className={styles.messageContainer}>
|
||||
<Icon
|
||||
className={styles.upToDateIcon}
|
||||
name={icons.CHECK_CIRCLE}
|
||||
size={30}
|
||||
/>
|
||||
|
||||
<div className={styles.message}>
|
||||
The latest version of Readarr is already installed
|
||||
</div>
|
||||
|
||||
{
|
||||
isFetching &&
|
||||
<LoadingIndicator
|
||||
className={styles.loading}
|
||||
size={20}
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
hasUpdates &&
|
||||
<div>
|
||||
{
|
||||
items.map((update) => {
|
||||
const hasChanges = !!update.changes;
|
||||
|
||||
return (
|
||||
<div
|
||||
key={update.version}
|
||||
className={styles.update}
|
||||
>
|
||||
<div className={styles.info}>
|
||||
<div className={styles.version}>{update.version}</div>
|
||||
<div className={styles.space}>—</div>
|
||||
<div
|
||||
className={styles.date}
|
||||
title={formatDateTime(update.releaseDate, longDateFormat, timeFormat)}
|
||||
>
|
||||
{formatDate(update.releaseDate, shortDateFormat)}
|
||||
</div>
|
||||
|
||||
{
|
||||
update.branch === 'master' ?
|
||||
null :
|
||||
<Label
|
||||
className={styles.label}
|
||||
>
|
||||
{update.branch}
|
||||
</Label>
|
||||
}
|
||||
|
||||
{
|
||||
update.version === currentVersion ?
|
||||
<Label
|
||||
className={styles.label}
|
||||
kind={kinds.SUCCESS}
|
||||
title={formatDateTime(update.installedOn, longDateFormat, timeFormat)}
|
||||
>
|
||||
Currently Installed
|
||||
</Label> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
update.version !== currentVersion && update.installedOn ?
|
||||
<Label
|
||||
className={styles.label}
|
||||
kind={kinds.INVERSE}
|
||||
title={formatDateTime(update.installedOn, longDateFormat, timeFormat)}
|
||||
>
|
||||
Previously Installed
|
||||
</Label> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
|
||||
{
|
||||
!hasChanges &&
|
||||
<div>
|
||||
{translate('MaintenanceRelease')}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
hasChanges &&
|
||||
<div className={styles.changes}>
|
||||
<UpdateChanges
|
||||
title={translate('New')}
|
||||
changes={update.changes.new}
|
||||
/>
|
||||
|
||||
<UpdateChanges
|
||||
title={translate('Fixed')}
|
||||
changes={update.changes.fixed}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
);
|
||||
})
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
!!updatesError &&
|
||||
<div>
|
||||
Failed to fetch updates
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
!!generalSettingsError &&
|
||||
<div>
|
||||
Failed to update settings
|
||||
</div>
|
||||
}
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Updates.propTypes = {
|
||||
currentVersion: PropTypes.string.isRequired,
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
isPopulated: PropTypes.bool.isRequired,
|
||||
updatesError: PropTypes.object,
|
||||
generalSettingsError: PropTypes.object,
|
||||
items: PropTypes.array.isRequired,
|
||||
isInstallingUpdate: PropTypes.bool.isRequired,
|
||||
isDocker: PropTypes.bool.isRequired,
|
||||
updateMechanism: PropTypes.string,
|
||||
updateMechanismMessage: PropTypes.string,
|
||||
shortDateFormat: PropTypes.string.isRequired,
|
||||
longDateFormat: PropTypes.string.isRequired,
|
||||
timeFormat: PropTypes.string.isRequired,
|
||||
onInstallLatestPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default Updates;
|
||||
303
frontend/src/System/Updates/Updates.tsx
Normal file
303
frontend/src/System/Updates/Updates.tsx
Normal file
@@ -0,0 +1,303 @@
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import AppState from 'App/State/AppState';
|
||||
import * as commandNames from 'Commands/commandNames';
|
||||
import Alert from 'Components/Alert';
|
||||
import Icon from 'Components/Icon';
|
||||
import Label from 'Components/Label';
|
||||
import SpinnerButton from 'Components/Link/SpinnerButton';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
|
||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import { fetchGeneralSettings } from 'Store/Actions/settingsActions';
|
||||
import { fetchUpdates } from 'Store/Actions/systemActions';
|
||||
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
|
||||
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
|
||||
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
|
||||
import { UpdateMechanism } from 'typings/Settings/General';
|
||||
import formatDate from 'Utilities/Date/formatDate';
|
||||
import formatDateTime from 'Utilities/Date/formatDateTime';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import UpdateChanges from './UpdateChanges';
|
||||
import styles from './Updates.css';
|
||||
|
||||
const VERSION_REGEX = /\d+\.\d+\.\d+\.\d+/i;
|
||||
|
||||
function createUpdatesSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.system.updates,
|
||||
(state: AppState) => state.settings.general,
|
||||
(updates, generalSettings) => {
|
||||
const { error: updatesError, items } = updates;
|
||||
|
||||
const isFetching = updates.isFetching || generalSettings.isFetching;
|
||||
const isPopulated = updates.isPopulated && generalSettings.isPopulated;
|
||||
|
||||
return {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
updatesError,
|
||||
generalSettingsError: generalSettings.error,
|
||||
items,
|
||||
updateMechanism: generalSettings.item.updateMechanism,
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function Updates() {
|
||||
const currentVersion = useSelector((state: AppState) => state.app.version);
|
||||
const { packageUpdateMechanismMessage } = useSelector(
|
||||
createSystemStatusSelector()
|
||||
);
|
||||
const { shortDateFormat, longDateFormat, timeFormat } = useSelector(
|
||||
createUISettingsSelector()
|
||||
);
|
||||
const isInstallingUpdate = useSelector(
|
||||
createCommandExecutingSelector(commandNames.APPLICATION_UPDATE)
|
||||
);
|
||||
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
updatesError,
|
||||
generalSettingsError,
|
||||
items,
|
||||
updateMechanism,
|
||||
} = useSelector(createUpdatesSelector());
|
||||
|
||||
const dispatch = useDispatch();
|
||||
const [isMajorUpdateModalOpen, setIsMajorUpdateModalOpen] = useState(false);
|
||||
const hasError = !!(updatesError || generalSettingsError);
|
||||
const hasUpdates = isPopulated && !hasError && items.length > 0;
|
||||
const noUpdates = isPopulated && !hasError && !items.length;
|
||||
|
||||
const externalUpdaterPrefix = translate('UpdateAppDirectlyLoadError');
|
||||
const externalUpdaterMessages: Partial<Record<UpdateMechanism, string>> = {
|
||||
external: translate('ExternalUpdater'),
|
||||
apt: translate('AptUpdater'),
|
||||
docker: translate('DockerUpdater'),
|
||||
};
|
||||
|
||||
const { isMajorUpdate, hasUpdateToInstall } = useMemo(() => {
|
||||
const majorVersion = parseInt(
|
||||
currentVersion.match(VERSION_REGEX)?.[0] ?? '0'
|
||||
);
|
||||
|
||||
const latestVersion = items[0]?.version;
|
||||
const latestMajorVersion = parseInt(
|
||||
latestVersion?.match(VERSION_REGEX)?.[0] ?? '0'
|
||||
);
|
||||
|
||||
return {
|
||||
isMajorUpdate: latestMajorVersion > majorVersion,
|
||||
hasUpdateToInstall: items.some(
|
||||
(update) => update.installable && update.latest
|
||||
),
|
||||
};
|
||||
}, [currentVersion, items]);
|
||||
|
||||
const noUpdateToInstall = hasUpdates && !hasUpdateToInstall;
|
||||
|
||||
const handleInstallLatestPress = useCallback(() => {
|
||||
if (isMajorUpdate) {
|
||||
setIsMajorUpdateModalOpen(true);
|
||||
} else {
|
||||
dispatch(executeCommand({ name: commandNames.APPLICATION_UPDATE }));
|
||||
}
|
||||
}, [isMajorUpdate, setIsMajorUpdateModalOpen, dispatch]);
|
||||
|
||||
const handleInstallLatestMajorVersionPress = useCallback(() => {
|
||||
setIsMajorUpdateModalOpen(false);
|
||||
|
||||
dispatch(
|
||||
executeCommand({
|
||||
name: commandNames.APPLICATION_UPDATE,
|
||||
installMajorUpdate: true,
|
||||
})
|
||||
);
|
||||
}, [setIsMajorUpdateModalOpen, dispatch]);
|
||||
|
||||
const handleCancelMajorVersionPress = useCallback(() => {
|
||||
setIsMajorUpdateModalOpen(false);
|
||||
}, [setIsMajorUpdateModalOpen]);
|
||||
|
||||
useEffect(() => {
|
||||
dispatch(fetchUpdates());
|
||||
dispatch(fetchGeneralSettings());
|
||||
}, [dispatch]);
|
||||
|
||||
return (
|
||||
<PageContent title={translate('Updates')}>
|
||||
<PageContentBody>
|
||||
{isPopulated || hasError ? null : <LoadingIndicator />}
|
||||
|
||||
{noUpdates ? (
|
||||
<Alert kind={kinds.INFO}>{translate('NoUpdatesAreAvailable')}</Alert>
|
||||
) : null}
|
||||
|
||||
{hasUpdateToInstall ? (
|
||||
<div className={styles.messageContainer}>
|
||||
{updateMechanism === 'builtIn' || updateMechanism === 'script' ? (
|
||||
<SpinnerButton
|
||||
kind={kinds.PRIMARY}
|
||||
isSpinning={isInstallingUpdate}
|
||||
onPress={handleInstallLatestPress}
|
||||
>
|
||||
{translate('InstallLatest')}
|
||||
</SpinnerButton>
|
||||
) : (
|
||||
<>
|
||||
<Icon name={icons.WARNING} kind={kinds.WARNING} size={30} />
|
||||
|
||||
<div className={styles.message}>
|
||||
{externalUpdaterPrefix}{' '}
|
||||
<InlineMarkdown
|
||||
data={
|
||||
packageUpdateMechanismMessage ||
|
||||
externalUpdaterMessages[updateMechanism] ||
|
||||
externalUpdaterMessages.external
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
|
||||
{isFetching ? (
|
||||
<LoadingIndicator className={styles.loading} size={20} />
|
||||
) : null}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
{noUpdateToInstall && (
|
||||
<div className={styles.messageContainer}>
|
||||
<Icon
|
||||
className={styles.upToDateIcon}
|
||||
name={icons.CHECK_CIRCLE}
|
||||
size={30}
|
||||
/>
|
||||
<div className={styles.message}>{translate('OnLatestVersion')}</div>
|
||||
|
||||
{isFetching && (
|
||||
<LoadingIndicator className={styles.loading} size={20} />
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{hasUpdates && (
|
||||
<div>
|
||||
{items.map((update) => {
|
||||
return (
|
||||
<div key={update.version} className={styles.update}>
|
||||
<div className={styles.info}>
|
||||
<div className={styles.version}>{update.version}</div>
|
||||
<div className={styles.space}>—</div>
|
||||
<div
|
||||
className={styles.date}
|
||||
title={formatDateTime(
|
||||
update.releaseDate,
|
||||
longDateFormat,
|
||||
timeFormat
|
||||
)}
|
||||
>
|
||||
{formatDate(update.releaseDate, shortDateFormat)}
|
||||
</div>
|
||||
|
||||
{update.branch === 'master' ? null : (
|
||||
<Label className={styles.label}>{update.branch}</Label>
|
||||
)}
|
||||
|
||||
{update.version === currentVersion ? (
|
||||
<Label
|
||||
className={styles.label}
|
||||
kind={kinds.SUCCESS}
|
||||
title={formatDateTime(
|
||||
update.installedOn,
|
||||
longDateFormat,
|
||||
timeFormat
|
||||
)}
|
||||
>
|
||||
{translate('CurrentlyInstalled')}
|
||||
</Label>
|
||||
) : null}
|
||||
|
||||
{update.version !== currentVersion && update.installedOn ? (
|
||||
<Label
|
||||
className={styles.label}
|
||||
kind={kinds.INVERSE}
|
||||
title={formatDateTime(
|
||||
update.installedOn,
|
||||
longDateFormat,
|
||||
timeFormat
|
||||
)}
|
||||
>
|
||||
{translate('PreviouslyInstalled')}
|
||||
</Label>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
{update.changes ? (
|
||||
<div>
|
||||
<UpdateChanges
|
||||
title={translate('New')}
|
||||
changes={update.changes.new}
|
||||
/>
|
||||
|
||||
<UpdateChanges
|
||||
title={translate('Fixed')}
|
||||
changes={update.changes.fixed}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<div>{translate('MaintenanceRelease')}</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{updatesError ? (
|
||||
<Alert kind={kinds.WARNING}>
|
||||
{translate('FailedToFetchUpdates')}
|
||||
</Alert>
|
||||
) : null}
|
||||
|
||||
{generalSettingsError ? (
|
||||
<Alert kind={kinds.DANGER}>
|
||||
{translate('FailedToFetchSettings')}
|
||||
</Alert>
|
||||
) : null}
|
||||
|
||||
<ConfirmModal
|
||||
isOpen={isMajorUpdateModalOpen}
|
||||
kind={kinds.WARNING}
|
||||
title={translate('InstallMajorVersionUpdate')}
|
||||
message={
|
||||
<div>
|
||||
<div>{translate('InstallMajorVersionUpdateMessage')}</div>
|
||||
<div>
|
||||
<InlineMarkdown
|
||||
data={translate('InstallMajorVersionUpdateMessageLink', {
|
||||
domain: 'readarr.com',
|
||||
url: 'https://readarr.com/#downloads',
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
confirmLabel={translate('Install')}
|
||||
onConfirm={handleInstallLatestMajorVersionPress}
|
||||
onCancel={handleCancelMajorVersionPress}
|
||||
/>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
);
|
||||
}
|
||||
|
||||
export default Updates;
|
||||
@@ -8,6 +8,7 @@ window.console.debug = window.console.debug || function() {};
|
||||
window.console.warn = window.console.warn || function() {};
|
||||
window.console.assert = window.console.assert || function() {};
|
||||
|
||||
// TODO: Remove in v5, well suppoprted in browsers
|
||||
if (!String.prototype.startsWith) {
|
||||
Object.defineProperty(String.prototype, 'startsWith', {
|
||||
enumerable: false,
|
||||
@@ -20,6 +21,7 @@ if (!String.prototype.startsWith) {
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: Remove in v5, well suppoprted in browsers
|
||||
if (!String.prototype.endsWith) {
|
||||
Object.defineProperty(String.prototype, 'endsWith', {
|
||||
enumerable: false,
|
||||
@@ -34,8 +36,14 @@ if (!String.prototype.endsWith) {
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: Remove in v5, use `includes` instead
|
||||
if (!('contains' in String.prototype)) {
|
||||
String.prototype.contains = function(str, startIndex) {
|
||||
return String.prototype.indexOf.call(this, str, startIndex) !== -1;
|
||||
};
|
||||
}
|
||||
|
||||
// For Firefox ESR 115 support
|
||||
if (!Object.groupBy) {
|
||||
import('core-js/actual/object/group-by');
|
||||
}
|
||||
|
||||
45
frontend/src/typings/Settings/General.ts
Normal file
45
frontend/src/typings/Settings/General.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
export type UpdateMechanism =
|
||||
| 'builtIn'
|
||||
| 'script'
|
||||
| 'external'
|
||||
| 'apt'
|
||||
| 'docker';
|
||||
|
||||
export default interface General {
|
||||
bindAddress: string;
|
||||
port: number;
|
||||
sslPort: number;
|
||||
enableSsl: boolean;
|
||||
launchBrowser: boolean;
|
||||
authenticationMethod: string;
|
||||
authenticationRequired: string;
|
||||
analyticsEnabled: boolean;
|
||||
username: string;
|
||||
password: string;
|
||||
passwordConfirmation: string;
|
||||
logLevel: string;
|
||||
consoleLogLevel: string;
|
||||
branch: string;
|
||||
apiKey: string;
|
||||
sslCertPath: string;
|
||||
sslCertPassword: string;
|
||||
urlBase: string;
|
||||
instanceName: string;
|
||||
applicationUrl: string;
|
||||
updateAutomatically: boolean;
|
||||
updateMechanism: UpdateMechanism;
|
||||
updateScriptPath: string;
|
||||
proxyEnabled: boolean;
|
||||
proxyType: string;
|
||||
proxyHostname: string;
|
||||
proxyPort: number;
|
||||
proxyUsername: string;
|
||||
proxyPassword: string;
|
||||
proxyBypassFilter: string;
|
||||
proxyBypassLocalAddresses: boolean;
|
||||
certificateValidation: string;
|
||||
backupFolder: string;
|
||||
backupInterval: number;
|
||||
backupRetention: number;
|
||||
id: number;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
export interface UiSettings {
|
||||
export default interface UiSettings {
|
||||
theme: 'auto' | 'dark' | 'light';
|
||||
showRelativeDates: boolean;
|
||||
shortDateFormat: string;
|
||||
longDateFormat: string;
|
||||
32
frontend/src/typings/SystemStatus.ts
Normal file
32
frontend/src/typings/SystemStatus.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
interface SystemStatus {
|
||||
appData: string;
|
||||
appName: string;
|
||||
authentication: string;
|
||||
branch: string;
|
||||
buildTime: string;
|
||||
instanceName: string;
|
||||
isAdmin: boolean;
|
||||
isDebug: boolean;
|
||||
isDocker: boolean;
|
||||
isLinux: boolean;
|
||||
isNetCore: boolean;
|
||||
isOsx: boolean;
|
||||
isProduction: boolean;
|
||||
isUserInteractive: boolean;
|
||||
isWindows: boolean;
|
||||
migrationVersion: number;
|
||||
mode: string;
|
||||
osName: string;
|
||||
osVersion: string;
|
||||
packageUpdateMechanism: string;
|
||||
packageUpdateMechanismMessage: string;
|
||||
runtimeName: string;
|
||||
runtimeVersion: string;
|
||||
sqliteVersion: string;
|
||||
startTime: string;
|
||||
startupPath: string;
|
||||
urlBase: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
export default SystemStatus;
|
||||
20
frontend/src/typings/Update.ts
Normal file
20
frontend/src/typings/Update.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
export interface Changes {
|
||||
new: string[];
|
||||
fixed: string[];
|
||||
}
|
||||
|
||||
interface Update {
|
||||
version: string;
|
||||
branch: string;
|
||||
releaseDate: string;
|
||||
fileName: string;
|
||||
url: string;
|
||||
installed: boolean;
|
||||
installedOn: string;
|
||||
installable: boolean;
|
||||
latest: boolean;
|
||||
changes: Changes | null;
|
||||
hash: string;
|
||||
}
|
||||
|
||||
export default Update;
|
||||
94
package.json
94
package.json
@@ -25,34 +25,33 @@
|
||||
"defaults"
|
||||
],
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "6.4.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.4.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.4.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.4.0",
|
||||
"@fortawesome/react-fontawesome": "0.2.0",
|
||||
"@fortawesome/fontawesome-free": "6.6.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.6.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.6.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.6.0",
|
||||
"@fortawesome/react-fontawesome": "0.2.2",
|
||||
"@microsoft/signalr": "6.0.25",
|
||||
"@sentry/browser": "7.51.2",
|
||||
"@sentry/integrations": "7.51.2",
|
||||
"@types/node": "18.19.31",
|
||||
"@sentry/browser": "7.119.1",
|
||||
"@sentry/integrations": "7.119.1",
|
||||
"@types/node": "20.16.11",
|
||||
"@types/react": "18.2.79",
|
||||
"@types/react-dom": "18.2.25",
|
||||
"ansi-colors": "4.1.3",
|
||||
"classnames": "2.3.2",
|
||||
"classnames": "2.5.1",
|
||||
"clipboard": "2.0.11",
|
||||
"connected-react-router": "6.9.3",
|
||||
"element-class": "0.2.2",
|
||||
"filesize": "10.0.7",
|
||||
"filesize": "10.1.6",
|
||||
"fuse.js": "6.6.2",
|
||||
"history": "4.10.1",
|
||||
"jdu": "1.0.0",
|
||||
"jquery": "3.7.0",
|
||||
"jquery": "3.7.1",
|
||||
"lodash": "4.17.21",
|
||||
"mobile-detect": "1.4.5",
|
||||
"moment": "2.29.4",
|
||||
"moment": "2.30.1",
|
||||
"mousetrap": "1.6.5",
|
||||
"normalize.css": "8.0.1",
|
||||
"prop-types": "15.8.1",
|
||||
"qs": "6.11.1",
|
||||
"qs": "6.13.0",
|
||||
"react": "17.0.2",
|
||||
"react-addons-shallow-compare": "15.6.3",
|
||||
"react-async-script": "1.2.0",
|
||||
@@ -64,7 +63,7 @@
|
||||
"react-dnd-touch-backend": "14.1.1",
|
||||
"react-document-title": "2.0.3",
|
||||
"react-dom": "17.0.2",
|
||||
"react-focus-lock": "2.5.2",
|
||||
"react-focus-lock": "2.9.4",
|
||||
"react-google-recaptcha": "2.1.0",
|
||||
"react-lazyload": "3.2.0",
|
||||
"react-measure": "2.5.2",
|
||||
@@ -73,74 +72,71 @@
|
||||
"react-redux": "7.2.4",
|
||||
"react-router": "5.2.0",
|
||||
"react-router-dom": "5.2.0",
|
||||
"react-slider": "1.3.1",
|
||||
"react-tabs": "3.2.2",
|
||||
"react-text-truncate": "0.18.0",
|
||||
"react-slider": "1.3.3",
|
||||
"react-tabs": "4.3.0",
|
||||
"react-text-truncate": "0.19.0",
|
||||
"react-virtualized": "9.21.1",
|
||||
"redux": "4.1.0",
|
||||
"redux": "4.2.1",
|
||||
"redux-actions": "2.6.5",
|
||||
"redux-batched-actions": "0.5.0",
|
||||
"redux-localstorage": "0.4.1",
|
||||
"redux-thunk": "2.3.0",
|
||||
"redux-thunk": "2.4.2",
|
||||
"reselect": "4.1.8",
|
||||
"stacktrace-js": "2.0.2",
|
||||
"typescript": "5.1.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.24.4",
|
||||
"@babel/eslint-parser": "7.24.1",
|
||||
"@babel/plugin-proposal-export-default-from": "7.24.1",
|
||||
"@babel/core": "7.25.8",
|
||||
"@babel/eslint-parser": "7.25.8",
|
||||
"@babel/plugin-proposal-export-default-from": "7.25.8",
|
||||
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
||||
"@babel/preset-env": "7.24.4",
|
||||
"@babel/preset-react": "7.24.1",
|
||||
"@babel/preset-typescript": "7.24.1",
|
||||
"@babel/preset-env": "7.25.8",
|
||||
"@babel/preset-react": "7.25.7",
|
||||
"@babel/preset-typescript": "7.25.7",
|
||||
"@types/lodash": "4.14.195",
|
||||
"@types/react-lazyload": "3.2.0",
|
||||
"@types/redux-actions": "2.6.2",
|
||||
"@types/react-lazyload": "3.2.3",
|
||||
"@types/redux-actions": "2.6.5",
|
||||
"@typescript-eslint/eslint-plugin": "6.21.0",
|
||||
"@typescript-eslint/parser": "6.21.0",
|
||||
"autoprefixer": "10.4.14",
|
||||
"babel-loader": "9.1.3",
|
||||
"autoprefixer": "10.4.20",
|
||||
"babel-loader": "9.2.1",
|
||||
"babel-plugin-inline-classnames": "2.0.1",
|
||||
"babel-plugin-transform-react-remove-prop-types": "0.4.24",
|
||||
"core-js": "3.37.0",
|
||||
"core-js": "3.38.1",
|
||||
"css-loader": "6.8.1",
|
||||
"css-modules-typescript-loader": "4.0.1",
|
||||
"eslint": "8.57.0",
|
||||
"eslint": "8.57.1",
|
||||
"eslint-config-prettier": "8.10.0",
|
||||
"eslint-plugin-filenames": "1.3.2",
|
||||
"eslint-plugin-import": "2.29.1",
|
||||
"eslint-plugin-json": "3.1.0",
|
||||
"eslint-plugin-import": "2.31.0",
|
||||
"eslint-plugin-prettier": "4.2.1",
|
||||
"eslint-plugin-react": "7.34.1",
|
||||
"eslint-plugin-react-hooks": "4.6.0",
|
||||
"eslint-plugin-simple-import-sort": "12.1.0",
|
||||
"eslint-plugin-react": "7.37.1",
|
||||
"eslint-plugin-react-hooks": "4.6.2",
|
||||
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||
"file-loader": "6.2.0",
|
||||
"filemanager-webpack-plugin": "8.0.0",
|
||||
"fork-ts-checker-webpack-plugin": "8.0.0",
|
||||
"html-webpack-plugin": "5.5.3",
|
||||
"html-webpack-plugin": "5.6.0",
|
||||
"loader-utils": "^3.2.1",
|
||||
"mini-css-extract-plugin": "2.7.6",
|
||||
"postcss": "8.4.38",
|
||||
"mini-css-extract-plugin": "2.9.1",
|
||||
"postcss": "8.4.47",
|
||||
"postcss-color-function": "4.1.0",
|
||||
"postcss-loader": "7.3.0",
|
||||
"postcss-mixins": "9.0.4",
|
||||
"postcss-nested": "6.0.1",
|
||||
"postcss-nested": "6.2.0",
|
||||
"postcss-simple-vars": "7.0.1",
|
||||
"postcss-url": "10.1.3",
|
||||
"prettier": "2.8.8",
|
||||
"require-nocache": "1.0.0",
|
||||
"rimraf": "4.4.1",
|
||||
"run-sequence": "2.2.1",
|
||||
"streamqueue": "1.1.2",
|
||||
"style-loader": "3.3.3",
|
||||
"rimraf": "6.0.1",
|
||||
"style-loader": "3.3.4",
|
||||
"stylelint": "15.10.3",
|
||||
"stylelint-order": "6.0.3",
|
||||
"terser-webpack-plugin": "5.3.9",
|
||||
"ts-loader": "9.4.4",
|
||||
"stylelint-order": "6.0.4",
|
||||
"terser-webpack-plugin": "5.3.10",
|
||||
"ts-loader": "9.5.1",
|
||||
"typescript-plugin-css-modules": "5.0.1",
|
||||
"url-loader": "4.1.1",
|
||||
"webpack": "5.88.2",
|
||||
"webpack": "5.95.0",
|
||||
"webpack-cli": "5.1.4",
|
||||
"webpack-livereload-plugin": "3.0.2",
|
||||
"worker-loader": "3.0.8"
|
||||
|
||||
@@ -4,26 +4,27 @@
|
||||
<PackageVersion Include="AutoFixture" Version="4.17.0" />
|
||||
<PackageVersion Include="coverlet.collector" Version="3.0.4-preview.27.ge7cb7c3b40" PrivateAssets="all" />
|
||||
<PackageVersion Include="Dapper" Version="2.0.151" />
|
||||
<PackageVersion Include="Diacritical.Net" Version="1.0.4" />
|
||||
<PackageVersion Include="DryIoc.dll" Version="5.4.3" />
|
||||
<PackageVersion Include="DryIoc.Microsoft.DependencyInjection" Version="6.2.0" />
|
||||
<PackageVersion Include="Equ" Version="2.3.0" />
|
||||
<PackageVersion Include="FluentAssertions" Version="5.10.3" />
|
||||
<PackageVersion Include="Polly" Version="8.3.1" />
|
||||
<PackageVersion Include="Polly" Version="8.5.0" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
||||
<PackageVersion Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
|
||||
<PackageVersion Include="FluentValidation" Version="9.5.4" />
|
||||
<PackageVersion Include="Ical.Net" Version="4.2.0" />
|
||||
<PackageVersion Include="Ical.Net" Version="4.3.1" />
|
||||
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" />
|
||||
<PackageVersion Include="LazyCache" Version="2.4.0" />
|
||||
<PackageVersion Include="Mailkit" Version="3.6.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.29" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.35" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.2" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
@@ -33,20 +34,21 @@
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.3" />
|
||||
<PackageVersion Include="NLog" Version="5.1.4" />
|
||||
<PackageVersion Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.6" />
|
||||
<PackageVersion Include="Npgsql" Version="7.0.9" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="NUnit" Version="3.14.0" />
|
||||
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.32" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.65" />
|
||||
<PackageVersion Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
|
||||
<PackageVersion Include="RestSharp" Version="106.15.0" />
|
||||
<PackageVersion Include="Selenium.Support" Version="3.141.0" />
|
||||
<PackageVersion Include="Selenium.WebDriver.ChromeDriver" Version="91.0.4472.10100" />
|
||||
<PackageVersion Include="Sentry" Version="3.31.0" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.4" />
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.6" />
|
||||
<PackageVersion Include="StyleCop.Analyzers" Version="1.1.118" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.5.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.6.2" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.6.2" />
|
||||
<PackageVersion Include="System.Buffers" Version="4.5.1" />
|
||||
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
|
||||
@@ -60,7 +62,7 @@
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.9" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.10" />
|
||||
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageVersion Include="TagLibSharp-Lidarr" Version="2.2.0.19" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace NzbDrone.Automation.Test
|
||||
|
||||
_runner = new NzbDroneRunner(LogManager.GetCurrentClassLogger(), null);
|
||||
_runner.KillAll();
|
||||
_runner.Start();
|
||||
_runner.Start(true);
|
||||
|
||||
driver.Url = "http://localhost:8787";
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Options;
|
||||
using NzbDrone.Core.Authentication;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Test.Common;
|
||||
@@ -43,6 +45,26 @@ namespace NzbDrone.Common.Test
|
||||
Mocker.GetMock<IDiskProvider>()
|
||||
.Setup(v => v.WriteAllText(configFile, It.IsAny<string>()))
|
||||
.Callback<string, string>((p, t) => _configFileContents = t);
|
||||
|
||||
Mocker.GetMock<IOptions<AuthOptions>>()
|
||||
.Setup(v => v.Value)
|
||||
.Returns(new AuthOptions());
|
||||
|
||||
Mocker.GetMock<IOptions<AppOptions>>()
|
||||
.Setup(v => v.Value)
|
||||
.Returns(new AppOptions());
|
||||
|
||||
Mocker.GetMock<IOptions<ServerOptions>>()
|
||||
.Setup(v => v.Value)
|
||||
.Returns(new ServerOptions());
|
||||
|
||||
Mocker.GetMock<IOptions<LogOptions>>()
|
||||
.Setup(v => v.Value)
|
||||
.Returns(new LogOptions());
|
||||
|
||||
Mocker.GetMock<IOptions<UpdateOptions>>()
|
||||
.Setup(v => v.Value)
|
||||
.Returns(new UpdateOptions());
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -21,9 +21,28 @@ namespace NzbDrone.Common.Test.ExtensionTests
|
||||
[TestCase("1.2.3.4")]
|
||||
[TestCase("172.55.0.1")]
|
||||
[TestCase("192.55.0.1")]
|
||||
[TestCase("100.64.0.1")]
|
||||
[TestCase("100.127.255.254")]
|
||||
public void should_return_false_for_public_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsLocalAddress().Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("100.64.0.1")]
|
||||
[TestCase("100.127.255.254")]
|
||||
[TestCase("100.100.100.100")]
|
||||
public void should_return_true_for_cgnat_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("1.2.3.4")]
|
||||
[TestCase("192.168.5.1")]
|
||||
[TestCase("100.63.255.255")]
|
||||
[TestCase("100.128.0.0")]
|
||||
public void should_return_false_for_non_cgnat_ip_address(string ipAddress)
|
||||
{
|
||||
IPAddress.Parse(ipAddress).IsCgnatIpAddress().Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,10 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
[TestCase(@"https://discord.com/api/webhooks/mySecret")]
|
||||
[TestCase(@"https://discord.com/api/webhooks/mySecret/01233210")]
|
||||
|
||||
// Telegram
|
||||
[TestCase(@"https://api.telegram.org/bot1234567890:mySecret/sendmessage: chat_id=123456&parse_mode=HTML&text=<text>")]
|
||||
[TestCase(@"https://api.telegram.org/bot1234567890:mySecret/")]
|
||||
|
||||
public void should_clean_message(string message)
|
||||
{
|
||||
var cleansedMessage = CleanseLogMessage.Cleanse(message);
|
||||
|
||||
@@ -10,6 +10,7 @@ using NUnit.Framework;
|
||||
using NzbDrone.Common.Composition.Extensions;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Instrumentation.Extensions;
|
||||
using NzbDrone.Common.Options;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Datastore.Extensions;
|
||||
using NzbDrone.Core.Lifecycle;
|
||||
@@ -33,6 +34,11 @@ namespace NzbDrone.Common.Test
|
||||
|
||||
container.RegisterInstance(new Mock<IHostLifetime>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<PostgresOptions>>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<AppOptions>>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<AuthOptions>>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<ServerOptions>>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<LogOptions>>().Object);
|
||||
container.RegisterInstance(new Mock<IOptions<UpdateOptions>>().Object);
|
||||
|
||||
var serviceProvider = container.GetServiceProvider();
|
||||
serviceProvider.GetRequiredService<IAppFolderFactory>().Register();
|
||||
|
||||
@@ -39,18 +39,24 @@ namespace NzbDrone.Common.Extensions
|
||||
private static bool IsLocalIPv4(byte[] ipv4Bytes)
|
||||
{
|
||||
// Link local (no IP assigned by DHCP): 169.254.0.0 to 169.254.255.255 (169.254.0.0/16)
|
||||
bool IsLinkLocal() => ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
var isLinkLocal = ipv4Bytes[0] == 169 && ipv4Bytes[1] == 254;
|
||||
|
||||
// Class A private range: 10.0.0.0 – 10.255.255.255 (10.0.0.0/8)
|
||||
bool IsClassA() => ipv4Bytes[0] == 10;
|
||||
var isClassA = ipv4Bytes[0] == 10;
|
||||
|
||||
// Class B private range: 172.16.0.0 – 172.31.255.255 (172.16.0.0/12)
|
||||
bool IsClassB() => ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
|
||||
var isClassB = ipv4Bytes[0] == 172 && ipv4Bytes[1] >= 16 && ipv4Bytes[1] <= 31;
|
||||
|
||||
// Class C private range: 192.168.0.0 – 192.168.255.255 (192.168.0.0/16)
|
||||
bool IsClassC() => ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
var isClassC = ipv4Bytes[0] == 192 && ipv4Bytes[1] == 168;
|
||||
|
||||
return IsLinkLocal() || IsClassA() || IsClassC() || IsClassB();
|
||||
return isLinkLocal || isClassA || isClassC || isClassB;
|
||||
}
|
||||
|
||||
public static bool IsCgnatIpAddress(this IPAddress ipAddress)
|
||||
{
|
||||
var bytes = ipAddress.GetAddressBytes();
|
||||
return bytes.Length == 4 && bytes[0] == 100 && bytes[1] >= 64 && bytes[1] <= 127;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,10 @@ namespace NzbDrone.Common.Instrumentation
|
||||
new (@"api/v[0-9]/notification/readarr/(?<secret>[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
// Discord
|
||||
new (@"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase)
|
||||
new (@"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
// Telegram
|
||||
new (@"api.telegram.org/bot(?<id>[\d]+):(?<secret>[\w-]+)/", RegexOptions.Compiled | RegexOptions.IgnoreCase)
|
||||
};
|
||||
|
||||
private static readonly Regex CleanseRemoteIPRegex = new (@"(?:Auth-\w+(?<!Failure|Unauthorized) ip|from) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", RegexOptions.Compiled);
|
||||
|
||||
8
src/NzbDrone.Common/Options/AppOptions.cs
Normal file
8
src/NzbDrone.Common/Options/AppOptions.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace NzbDrone.Common.Options;
|
||||
|
||||
public class AppOptions
|
||||
{
|
||||
public string InstanceName { get; set; }
|
||||
public string Theme { get; set; }
|
||||
public bool? LaunchBrowser { get; set; }
|
||||
}
|
||||
10
src/NzbDrone.Common/Options/AuthOptions.cs
Normal file
10
src/NzbDrone.Common/Options/AuthOptions.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace NzbDrone.Common.Options;
|
||||
|
||||
public class AuthOptions
|
||||
{
|
||||
public string ApiKey { get; set; }
|
||||
public bool? Enabled { get; set; }
|
||||
public string Method { get; set; }
|
||||
public string Required { get; set; }
|
||||
public bool? TrustCgnatIpAddresses { get; set; }
|
||||
}
|
||||
14
src/NzbDrone.Common/Options/LogOptions.cs
Normal file
14
src/NzbDrone.Common/Options/LogOptions.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace NzbDrone.Common.Options;
|
||||
|
||||
public class LogOptions
|
||||
{
|
||||
public string Level { get; set; }
|
||||
public bool? FilterSentryEvents { get; set; }
|
||||
public int? Rotate { get; set; }
|
||||
public bool? Sql { get; set; }
|
||||
public string ConsoleLevel { get; set; }
|
||||
public bool? AnalyticsEnabled { get; set; }
|
||||
public string SyslogServer { get; set; }
|
||||
public int? SyslogPort { get; set; }
|
||||
public string SyslogLevel { get; set; }
|
||||
}
|
||||
12
src/NzbDrone.Common/Options/ServerOptions.cs
Normal file
12
src/NzbDrone.Common/Options/ServerOptions.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace NzbDrone.Common.Options;
|
||||
|
||||
public class ServerOptions
|
||||
{
|
||||
public string UrlBase { get; set; }
|
||||
public string BindAddress { get; set; }
|
||||
public int? Port { get; set; }
|
||||
public bool? EnableSsl { get; set; }
|
||||
public int? SslPort { get; set; }
|
||||
public string SslCertPath { get; set; }
|
||||
public string SslCertPassword { get; set; }
|
||||
}
|
||||
9
src/NzbDrone.Common/Options/UpdateOptions.cs
Normal file
9
src/NzbDrone.Common/Options/UpdateOptions.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace NzbDrone.Common.Options;
|
||||
|
||||
public class UpdateOptions
|
||||
{
|
||||
public string Mechanism { get; set; }
|
||||
public bool? Automatically { get; set; }
|
||||
public string ScriptPath { get; set; }
|
||||
public string Branch { get; set; }
|
||||
}
|
||||
@@ -313,7 +313,7 @@ namespace NzbDrone.Common.Processes
|
||||
processInfo = new ProcessInfo();
|
||||
processInfo.Id = process.Id;
|
||||
processInfo.Name = process.ProcessName;
|
||||
processInfo.StartPath = process.MainModule.FileName;
|
||||
processInfo.StartPath = process.MainModule?.FileName;
|
||||
|
||||
if (process.Id != GetCurrentProcessId() && process.HasExited)
|
||||
{
|
||||
|
||||
@@ -200,17 +200,9 @@ namespace NzbDrone.Core.Test.Download
|
||||
var seriesTags = new HashSet<int> { 2 };
|
||||
var clientTags = new HashSet<int> { 1 };
|
||||
|
||||
WithTorrentClient(0, clientTags);
|
||||
WithTorrentClient(0, clientTags);
|
||||
WithTorrentClient(0, clientTags);
|
||||
WithTorrentClient(0, clientTags);
|
||||
|
||||
var client1 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags);
|
||||
var client2 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags);
|
||||
var client3 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags);
|
||||
var client4 = Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags);
|
||||
|
||||
Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags).Should().BeNull();
|
||||
Assert.Throws<DownloadClientUnavailableException>(() => Subject.GetDownloadClient(DownloadProtocol.Torrent, 0, false, seriesTags));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -312,11 +312,12 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests
|
||||
[Test]
|
||||
public void should_return_status_with_outputdirs()
|
||||
{
|
||||
var configItems = new Dictionary<string, object>();
|
||||
|
||||
configItems.Add("download_location", @"C:\Downloads\Downloading\deluge".AsOsAgnostic());
|
||||
configItems.Add("move_completed_path", @"C:\Downloads\Finished\deluge".AsOsAgnostic());
|
||||
configItems.Add("move_completed", true);
|
||||
var configItems = new Dictionary<string, object>
|
||||
{
|
||||
{ "download_location", @"C:\Downloads\Downloading\deluge".AsOsAgnostic() },
|
||||
{ "move_completed_path", @"C:\Downloads\Finished\deluge".AsOsAgnostic() },
|
||||
{ "move_completed", true }
|
||||
};
|
||||
|
||||
Mocker.GetMock<IDelugeProxy>()
|
||||
.Setup(v => v.GetConfig(It.IsAny<DelugeSettings>()))
|
||||
@@ -328,5 +329,18 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DelugeTests
|
||||
result.OutputRootFolders.Should().NotBeNull();
|
||||
result.OutputRootFolders.First().Should().Be(@"C:\Downloads\Finished\deluge".AsOsAgnostic());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_status_with_outputdirs_for_directories_in_settings()
|
||||
{
|
||||
Subject.Definition.Settings.As<DelugeSettings>().DownloadDirectory = @"D:\Downloads\Downloading\deluge".AsOsAgnostic();
|
||||
Subject.Definition.Settings.As<DelugeSettings>().CompletedDirectory = @"D:\Downloads\Finished\deluge".AsOsAgnostic();
|
||||
|
||||
var result = Subject.GetStatus();
|
||||
|
||||
result.IsLocalhost.Should().BeTrue();
|
||||
result.OutputRootFolders.Should().NotBeNull();
|
||||
result.OutputRootFolders.First().Should().Be(@"D:\Downloads\Finished\deluge".AsOsAgnostic());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,8 +178,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
VerifyWarning(item);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void paused_item_should_have_required_properties()
|
||||
[TestCase("pausedDL")]
|
||||
[TestCase("stoppedDL")]
|
||||
public void paused_item_should_have_required_properties(string state)
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -188,7 +189,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = "pausedDL",
|
||||
State = state,
|
||||
Label = "",
|
||||
SavePath = ""
|
||||
};
|
||||
@@ -200,6 +201,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
}
|
||||
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
[TestCase("queuedUP")]
|
||||
[TestCase("uploading")]
|
||||
[TestCase("stalledUP")]
|
||||
@@ -397,8 +399,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
result.OutputPath.FullPath.Should().Be(Path.Combine(torrent.SavePath, "Droned.S01.12"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void api_261_should_use_content_path()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void api_261_should_use_content_path(string state)
|
||||
{
|
||||
var torrent = new QBittorrentTorrent
|
||||
{
|
||||
@@ -407,7 +410,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 0.7,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Label = "",
|
||||
SavePath = @"C:\Torrents".AsOsAgnostic(),
|
||||
ContentPath = @"C:\Torrents\Droned.S01.12".AsOsAgnostic()
|
||||
@@ -557,6 +560,34 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
result.OutputRootFolders.First().Should().Be(@"C:\Downloads\Finished\QBittorrent".AsOsAgnostic());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_correct_category_output_path()
|
||||
{
|
||||
var config = new QBittorrentPreferences
|
||||
{
|
||||
SavePath = @"C:\Downloads\Finished\QBittorrent".AsOsAgnostic()
|
||||
};
|
||||
|
||||
Mocker.GetMock<IQBittorrentProxy>()
|
||||
.Setup(v => v.GetConfig(It.IsAny<QBittorrentSettings>()))
|
||||
.Returns(config);
|
||||
|
||||
Mocker.GetMock<IQBittorrentProxy>()
|
||||
.Setup(v => v.GetApiVersion(It.IsAny<QBittorrentSettings>()))
|
||||
.Returns(new Version(2, 0));
|
||||
|
||||
Mocker.GetMock<IQBittorrentProxy>()
|
||||
.Setup(s => s.GetLabels(It.IsAny<QBittorrentSettings>()))
|
||||
.Returns(new Dictionary<string, QBittorrentLabel>
|
||||
{ { "music", new QBittorrentLabel { Name = "music", SavePath = "//server/store/downloads" } } });
|
||||
|
||||
var result = Subject.GetStatus();
|
||||
|
||||
result.IsLocalhost.Should().BeTrue();
|
||||
result.OutputRootFolders.Should().NotBeNull();
|
||||
result.OutputRootFolders.First().Should().Be(@"\\server\store\downloads");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task Download_should_handle_http_redirect_to_magnet()
|
||||
{
|
||||
@@ -656,44 +687,48 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_and_should_not_allow_move_files_if_max_ratio_is_not_set(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_ratio_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_ratio_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_ratio_not_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(0.2f);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 0.5f, ratioLimit: 0.8f);
|
||||
GivenCompletedTorrent(state, ratio: 0.5f, ratioLimit: 0.8f);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -711,33 +746,36 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 40);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, seedingTimeLimit: 10);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_seedingtime_not_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, seedingTimeLimit: 40);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -755,66 +793,72 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_overridden_max_inactive_seedingtime_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 40);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20, inactiveSeedingTimeLimit: 10, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(15)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_be_removable_if_overridden_max_inactive_seedingtime_not_reached_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 30, inactiveSeedingTimeLimit: 40, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(30)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
item.CanMoveFiles.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_seedingtime_reached_but_ratio_not_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, seedingTime: 30);
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, seedingTime: 30);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_be_removable_and_should_allow_move_files_if_max_inactive_seedingtime_reached_but_ratio_not_and_paused(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(2.0f, maxInactiveSeedingTime: 20);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
GivenCompletedTorrent(state, ratio: 1.0f, lastActivity: DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(25)).ToUnixTimeSeconds());
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeTrue();
|
||||
item.CanMoveFiles.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_fetch_details_twice()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_not_fetch_details_twice(string state)
|
||||
{
|
||||
GivenGlobalSeedLimits(-1, 30);
|
||||
GivenCompletedTorrent("pausedUP", ratio: 2.0f, seedingTime: 20);
|
||||
GivenCompletedTorrent(state, ratio: 2.0f, seedingTime: 20);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
item.CanBeRemoved.Should().BeFalse();
|
||||
@@ -826,8 +870,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
.Verify(p => p.GetTorrentProperties(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_get_category_from_the_category_if_set()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_category_if_set(string state)
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -839,7 +884,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Category = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
@@ -851,8 +896,9 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
item.Category.Should().Be(category);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available()
|
||||
[TestCase("pausedUP")]
|
||||
[TestCase("stoppedUP")]
|
||||
public void should_get_category_from_the_label_if_the_category_is_not_available(string state)
|
||||
{
|
||||
const string category = "music-readarr";
|
||||
GivenGlobalSeedLimits(1.0f);
|
||||
@@ -864,7 +910,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||
Size = 1000,
|
||||
Progress = 1.0,
|
||||
Eta = 8640000,
|
||||
State = "pausedUP",
|
||||
State = state,
|
||||
Label = category,
|
||||
SavePath = "",
|
||||
Ratio = 1.0f
|
||||
|
||||
@@ -478,6 +478,37 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase("all", 0)]
|
||||
[TestCase("days-archive", 15)]
|
||||
[TestCase("days-delete", 15)]
|
||||
public void should_set_history_removes_completed_downloads_false_for_separate_properties(string option, int number)
|
||||
{
|
||||
_config.Misc.history_retention_option = option;
|
||||
_config.Misc.history_retention_number = number;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("number-archive", 10)]
|
||||
[TestCase("number-delete", 10)]
|
||||
[TestCase("number-archive", 0)]
|
||||
[TestCase("number-delete", 0)]
|
||||
[TestCase("days-archive", 3)]
|
||||
[TestCase("days-delete", 3)]
|
||||
[TestCase("all-archive", 0)]
|
||||
[TestCase("all-delete", 0)]
|
||||
public void should_set_history_removes_completed_downloads_true_for_separate_properties(string option, int number)
|
||||
{
|
||||
_config.Misc.history_retention_option = option;
|
||||
_config.Misc.history_retention_number = number;
|
||||
|
||||
var downloadClientInfo = Subject.GetStatus();
|
||||
|
||||
downloadClientInfo.RemovesCompletedDownloads.Should().BeTrue();
|
||||
}
|
||||
|
||||
[TestCase(@"Y:\nzbget\root", @"completed\downloads", @"vv", @"Y:\nzbget\root\completed\downloads", @"Y:\nzbget\root\completed\downloads\vv")]
|
||||
[TestCase(@"Y:\nzbget\root", @"completed", @"vv", @"Y:\nzbget\root\completed", @"Y:\nzbget\root\completed\vv")]
|
||||
[TestCase(@"/nzbget/root", @"completed/downloads", @"vv", @"/nzbget/root/completed/downloads", @"/nzbget/root/completed/downloads/vv")]
|
||||
|
||||
@@ -49,10 +49,13 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.TransmissionTests
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void magnet_download_should_not_return_the_item()
|
||||
public void magnet_download_should_be_returned_as_queued()
|
||||
{
|
||||
PrepareClientToReturnMagnetItem();
|
||||
Subject.GetItems().Count().Should().Be(0);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
|
||||
item.Status.Should().Be(DownloadItemStatus.Queued);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -60,7 +60,10 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.VuzeTests
|
||||
public void magnet_download_should_not_return_the_item()
|
||||
{
|
||||
PrepareClientToReturnMagnetItem();
|
||||
Subject.GetItems().Count().Should().Be(0);
|
||||
|
||||
var item = Subject.GetItems().Single();
|
||||
|
||||
item.Status.Should().Be(DownloadItemStatus.Queued);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -7,6 +7,7 @@ using NzbDrone.Core.HealthCheck.Checks;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Core.Update;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
{
|
||||
@@ -21,28 +22,10 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
.Returns("Some Warning Message");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_error_when_app_folder_is_write_protected()
|
||||
{
|
||||
WindowsOnly();
|
||||
|
||||
Mocker.GetMock<IAppFolderInfo>()
|
||||
.Setup(s => s.StartUpFolder)
|
||||
.Returns(@"C:\NzbDrone");
|
||||
|
||||
Mocker.GetMock<IDiskProvider>()
|
||||
.Setup(c => c.FolderWritable(It.IsAny<string>()))
|
||||
.Returns(false);
|
||||
|
||||
Subject.Check().ShouldBeError();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_error_when_app_folder_is_write_protected_and_update_automatically_is_enabled()
|
||||
{
|
||||
PosixOnly();
|
||||
|
||||
const string startupFolder = @"/opt/nzbdrone";
|
||||
var startupFolder = @"C:\NzbDrone".AsOsAgnostic();
|
||||
|
||||
Mocker.GetMock<IConfigFileProvider>()
|
||||
.Setup(s => s.UpdateAutomatically)
|
||||
@@ -62,10 +45,8 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
[Test]
|
||||
public void should_return_error_when_ui_folder_is_write_protected_and_update_automatically_is_enabled()
|
||||
{
|
||||
PosixOnly();
|
||||
|
||||
const string startupFolder = @"/opt/nzbdrone";
|
||||
const string uiFolder = @"/opt/nzbdrone/UI";
|
||||
var startupFolder = @"C:\NzbDrone".AsOsAgnostic();
|
||||
var uiFolder = @"C:\NzbDrone\UI".AsOsAgnostic();
|
||||
|
||||
Mocker.GetMock<IConfigFileProvider>()
|
||||
.Setup(s => s.UpdateAutomatically)
|
||||
@@ -89,7 +70,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
[Test]
|
||||
public void should_not_return_error_when_app_folder_is_write_protected_and_external_script_enabled()
|
||||
{
|
||||
PosixOnly();
|
||||
var startupFolder = @"C:\NzbDrone".AsOsAgnostic();
|
||||
|
||||
Mocker.GetMock<IConfigFileProvider>()
|
||||
.Setup(s => s.UpdateAutomatically)
|
||||
@@ -101,7 +82,7 @@ namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
|
||||
Mocker.GetMock<IAppFolderInfo>()
|
||||
.Setup(s => s.StartUpFolder)
|
||||
.Returns(@"/opt/nzbdrone");
|
||||
.Returns(startupFolder);
|
||||
|
||||
Mocker.GetMock<IDiskProvider>()
|
||||
.Verify(c => c.FolderWritable(It.IsAny<string>()), Times.Never());
|
||||
|
||||
@@ -13,7 +13,7 @@ using NzbDrone.Core.Test.Framework;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class BookInfoProxyFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
private MetadataProfile _metadataProfile;
|
||||
|
||||
@@ -15,7 +15,7 @@ using NzbDrone.Test.Common;
|
||||
namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
{
|
||||
[TestFixture]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2024-05-15 00:00:00Z")]
|
||||
[Ignore("Waiting for metadata to be back again", Until = "2025-05-15 00:00:00Z")]
|
||||
public class BookInfoProxySearchFixture : CoreTest<BookInfoProxy>
|
||||
{
|
||||
[SetUp]
|
||||
|
||||
@@ -38,9 +38,9 @@ namespace NzbDrone.Core.Test.MetadataSource.Goodreads
|
||||
ExceptionVerification.IgnoreWarns();
|
||||
}
|
||||
|
||||
[TestCase("Harry Potter and the sorcerer's stone a detailed summary", 61800696)]
|
||||
[TestCase("Harry Potter and the sorcerer's stone a detailed summary", 72245296)]
|
||||
[TestCase("B0192CTMYG", 61209488)]
|
||||
[TestCase("9780439554930", 48517161)]
|
||||
[TestCase("9780439554930", 3)]
|
||||
public void successful_book_search(string title, int expected)
|
||||
{
|
||||
var result = Subject.Search(title);
|
||||
|
||||
@@ -46,6 +46,7 @@ namespace NzbDrone.Core.Test.QueueTests
|
||||
|
||||
_trackedDownloads = Builder<TrackedDownload>.CreateListOfSize(1)
|
||||
.All()
|
||||
.With(v => v.IsTrackable = true)
|
||||
.With(v => v.DownloadItem = downloadItem)
|
||||
.With(v => v.RemoteBook = remoteBook)
|
||||
.Build()
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace NzbDrone.Core.Authentication
|
||||
{
|
||||
public enum AuthenticationRequiredType
|
||||
{
|
||||
Enabled = 0,
|
||||
DisabledForLocalAddresses = 1
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
namespace NzbDrone.Core.Authentication
|
||||
namespace NzbDrone.Core.Authentication
|
||||
{
|
||||
public enum AuthenticationType
|
||||
{
|
||||
None = 0,
|
||||
Basic = 1,
|
||||
Forms = 2
|
||||
Forms = 2,
|
||||
External = 3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,18 +15,18 @@ namespace NzbDrone.Core.Books
|
||||
public class BookCutoffService : IBookCutoffService
|
||||
{
|
||||
private readonly IBookRepository _bookRepository;
|
||||
private readonly IProfileService _profileService;
|
||||
private readonly IQualityProfileService _qualityProfileService;
|
||||
|
||||
public BookCutoffService(IBookRepository bookRepository, IProfileService profileService)
|
||||
public BookCutoffService(IBookRepository bookRepository, IQualityProfileService qualityProfileService)
|
||||
{
|
||||
_bookRepository = bookRepository;
|
||||
_profileService = profileService;
|
||||
_qualityProfileService = qualityProfileService;
|
||||
}
|
||||
|
||||
public PagingSpec<Book> BooksWhereCutoffUnmet(PagingSpec<Book> pagingSpec)
|
||||
{
|
||||
var qualitiesBelowCutoff = new List<QualitiesBelowCutoff>();
|
||||
var profiles = _profileService.All();
|
||||
var profiles = _qualityProfileService.All();
|
||||
|
||||
//Get all items less than the cutoff
|
||||
foreach (var profile in profiles)
|
||||
|
||||
@@ -9,6 +9,7 @@ using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Options;
|
||||
using NzbDrone.Core.Authentication;
|
||||
using NzbDrone.Core.Configuration.Events;
|
||||
using NzbDrone.Core.Datastore;
|
||||
@@ -32,6 +33,7 @@ namespace NzbDrone.Core.Configuration
|
||||
bool EnableSsl { get; }
|
||||
bool LaunchBrowser { get; }
|
||||
AuthenticationType AuthenticationMethod { get; }
|
||||
AuthenticationRequiredType AuthenticationRequired { get; }
|
||||
bool AnalyticsEnabled { get; }
|
||||
string LogLevel { get; }
|
||||
string ConsoleLogLevel { get; }
|
||||
@@ -51,6 +53,7 @@ namespace NzbDrone.Core.Configuration
|
||||
string SyslogServer { get; }
|
||||
int SyslogPort { get; }
|
||||
string SyslogLevel { get; }
|
||||
string Theme { get; }
|
||||
string PostgresHost { get; }
|
||||
int PostgresPort { get; }
|
||||
string PostgresUser { get; }
|
||||
@@ -58,7 +61,7 @@ namespace NzbDrone.Core.Configuration
|
||||
string PostgresMainDb { get; }
|
||||
string PostgresLogDb { get; }
|
||||
string PostgresCacheDb { get; }
|
||||
string Theme { get; }
|
||||
bool TrustCgnatIpAddresses { get; }
|
||||
}
|
||||
|
||||
public class ConfigFileProvider : IConfigFileProvider
|
||||
@@ -69,6 +72,11 @@ namespace NzbDrone.Core.Configuration
|
||||
private readonly IDiskProvider _diskProvider;
|
||||
private readonly ICached<string> _cache;
|
||||
private readonly PostgresOptions _postgresOptions;
|
||||
private readonly AuthOptions _authOptions;
|
||||
private readonly AppOptions _appOptions;
|
||||
private readonly ServerOptions _serverOptions;
|
||||
private readonly UpdateOptions _updateOptions;
|
||||
private readonly LogOptions _logOptions;
|
||||
|
||||
private readonly string _configFile;
|
||||
|
||||
@@ -78,13 +86,23 @@ namespace NzbDrone.Core.Configuration
|
||||
ICacheManager cacheManager,
|
||||
IEventAggregator eventAggregator,
|
||||
IDiskProvider diskProvider,
|
||||
IOptions<PostgresOptions> postgresOptions)
|
||||
IOptions<PostgresOptions> postgresOptions,
|
||||
IOptions<AuthOptions> authOptions,
|
||||
IOptions<AppOptions> appOptions,
|
||||
IOptions<ServerOptions> serverOptions,
|
||||
IOptions<UpdateOptions> updateOptions,
|
||||
IOptions<LogOptions> logOptions)
|
||||
{
|
||||
_cache = cacheManager.GetCache<string>(GetType());
|
||||
_eventAggregator = eventAggregator;
|
||||
_diskProvider = diskProvider;
|
||||
_configFile = appFolderInfo.GetConfigPath();
|
||||
_postgresOptions = postgresOptions.Value;
|
||||
_authOptions = authOptions.Value;
|
||||
_appOptions = appOptions.Value;
|
||||
_serverOptions = serverOptions.Value;
|
||||
_updateOptions = updateOptions.Value;
|
||||
_logOptions = logOptions.Value;
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetConfigDictionary()
|
||||
@@ -140,7 +158,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
const string defaultValue = "*";
|
||||
|
||||
var bindAddress = GetValue("BindAddress", defaultValue);
|
||||
var bindAddress = _serverOptions.BindAddress ?? GetValue("BindAddress", defaultValue);
|
||||
if (string.IsNullOrWhiteSpace(bindAddress))
|
||||
{
|
||||
return defaultValue;
|
||||
@@ -150,19 +168,19 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
}
|
||||
|
||||
public int Port => GetValueInt("Port", 8787);
|
||||
public int Port => _serverOptions.Port ?? GetValueInt("Port", 8787);
|
||||
|
||||
public int SslPort => GetValueInt("SslPort", 6868);
|
||||
public int SslPort => _serverOptions.SslPort ?? GetValueInt("SslPort", 6868);
|
||||
|
||||
public bool EnableSsl => GetValueBoolean("EnableSsl", false);
|
||||
public bool EnableSsl => _serverOptions.EnableSsl ?? GetValueBoolean("EnableSsl", false);
|
||||
|
||||
public bool LaunchBrowser => GetValueBoolean("LaunchBrowser", true);
|
||||
public bool LaunchBrowser => _appOptions.LaunchBrowser ?? GetValueBoolean("LaunchBrowser", true);
|
||||
|
||||
public string ApiKey
|
||||
{
|
||||
get
|
||||
{
|
||||
var apiKey = GetValue("ApiKey", GenerateApiKey());
|
||||
var apiKey = _authOptions.ApiKey ?? GetValue("ApiKey", GenerateApiKey());
|
||||
|
||||
if (apiKey.IsNullOrWhiteSpace())
|
||||
{
|
||||
@@ -178,7 +196,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
get
|
||||
{
|
||||
var enabled = GetValueBoolean("AuthenticationEnabled", false, false);
|
||||
var enabled = _authOptions.Enabled ?? GetValueBoolean("AuthenticationEnabled", false, false);
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
@@ -186,17 +204,24 @@ namespace NzbDrone.Core.Configuration
|
||||
return AuthenticationType.Basic;
|
||||
}
|
||||
|
||||
return GetValueEnum("AuthenticationMethod", AuthenticationType.None);
|
||||
return Enum.TryParse<AuthenticationType>(_authOptions.Method, out var enumValue)
|
||||
? enumValue
|
||||
: GetValueEnum("AuthenticationMethod", AuthenticationType.None);
|
||||
}
|
||||
}
|
||||
|
||||
public bool AnalyticsEnabled => GetValueBoolean("AnalyticsEnabled", true, persist: false);
|
||||
public AuthenticationRequiredType AuthenticationRequired =>
|
||||
Enum.TryParse<AuthenticationRequiredType>(_authOptions.Required, out var enumValue)
|
||||
? enumValue
|
||||
: GetValueEnum("AuthenticationRequired", AuthenticationRequiredType.Enabled);
|
||||
|
||||
public bool AnalyticsEnabled => _logOptions.AnalyticsEnabled ?? GetValueBoolean("AnalyticsEnabled", true, persist: false);
|
||||
|
||||
// TODO: Change back to "master" for the first stable release
|
||||
public string Branch => GetValue("Branch", "develop").ToLowerInvariant();
|
||||
public string Branch => _updateOptions.Branch ?? GetValue("Branch", "develop").ToLowerInvariant();
|
||||
|
||||
public string LogLevel => GetValue("LogLevel", "info");
|
||||
public string ConsoleLogLevel => GetValue("ConsoleLogLevel", string.Empty, persist: false);
|
||||
public string LogLevel => _logOptions.Level ?? GetValue("LogLevel", "debug").ToLowerInvariant();
|
||||
public string ConsoleLogLevel => _logOptions.ConsoleLevel ?? GetValue("ConsoleLogLevel", string.Empty, persist: false);
|
||||
|
||||
public string PostgresHost => _postgresOptions?.Host ?? GetValue("PostgresHost", string.Empty, persist: false);
|
||||
public string PostgresUser => _postgresOptions?.User ?? GetValue("PostgresUser", string.Empty, persist: false);
|
||||
@@ -206,18 +231,18 @@ namespace NzbDrone.Core.Configuration
|
||||
public string PostgresCacheDb => _postgresOptions?.CacheDb ?? GetValue("PostgresCacheDb", "readarr-cache", persist: false);
|
||||
public int PostgresPort => (_postgresOptions?.Port ?? 0) != 0 ? _postgresOptions.Port : GetValueInt("PostgresPort", 5432, persist: false);
|
||||
|
||||
public string Theme => GetValue("Theme", "auto", persist: false);
|
||||
public bool LogSql => GetValueBoolean("LogSql", false, persist: false);
|
||||
public int LogRotate => GetValueInt("LogRotate", 50, persist: false);
|
||||
public bool FilterSentryEvents => GetValueBoolean("FilterSentryEvents", true, persist: false);
|
||||
public string SslCertPath => GetValue("SslCertPath", "");
|
||||
public string SslCertPassword => GetValue("SslCertPassword", "");
|
||||
public string Theme => _appOptions.Theme ?? GetValue("Theme", "auto", persist: false);
|
||||
public bool LogSql => _logOptions.Sql ?? GetValueBoolean("LogSql", false, persist: false);
|
||||
public int LogRotate => _logOptions.Rotate ?? GetValueInt("LogRotate", 50, persist: false);
|
||||
public bool FilterSentryEvents => _logOptions.FilterSentryEvents ?? GetValueBoolean("FilterSentryEvents", true, persist: false);
|
||||
public string SslCertPath => _serverOptions.SslCertPath ?? GetValue("SslCertPath", "");
|
||||
public string SslCertPassword => _serverOptions.SslCertPassword ?? GetValue("SslCertPassword", "");
|
||||
|
||||
public string UrlBase
|
||||
{
|
||||
get
|
||||
{
|
||||
var urlBase = GetValue("UrlBase", "").Trim('/');
|
||||
var urlBase = (_serverOptions.UrlBase ?? GetValue("UrlBase", "")).Trim('/');
|
||||
|
||||
if (urlBase.IsNullOrWhiteSpace())
|
||||
{
|
||||
@@ -229,19 +254,22 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
|
||||
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
|
||||
public string InstanceName => GetValue("InstanceName", BuildInfo.AppName);
|
||||
public string InstanceName => _appOptions.InstanceName ?? GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
public bool UpdateAutomatically => GetValueBoolean("UpdateAutomatically", false, false);
|
||||
public bool UpdateAutomatically => _updateOptions.Automatically ?? GetValueBoolean("UpdateAutomatically", OsInfo.IsWindows, false);
|
||||
|
||||
public UpdateMechanism UpdateMechanism => GetValueEnum("UpdateMechanism", UpdateMechanism.BuiltIn, false);
|
||||
public UpdateMechanism UpdateMechanism =>
|
||||
Enum.TryParse<UpdateMechanism>(_updateOptions.Mechanism, out var enumValue)
|
||||
? enumValue
|
||||
: GetValueEnum("UpdateMechanism", UpdateMechanism.BuiltIn, false);
|
||||
|
||||
public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false);
|
||||
public string UpdateScriptPath => _updateOptions.ScriptPath ?? GetValue("UpdateScriptPath", "", false);
|
||||
|
||||
public string SyslogServer => GetValue("SyslogServer", "", persist: false);
|
||||
public string SyslogServer => _logOptions.SyslogServer ?? GetValue("SyslogServer", "", persist: false);
|
||||
|
||||
public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false);
|
||||
public int SyslogPort => _logOptions.SyslogPort ?? GetValueInt("SyslogPort", 514, persist: false);
|
||||
|
||||
public string SyslogLevel => GetValue("SyslogLevel", LogLevel, false).ToLowerInvariant();
|
||||
public string SyslogLevel => _logOptions.SyslogLevel ?? GetValue("SyslogLevel", LogLevel, persist: false).ToLowerInvariant();
|
||||
|
||||
public int GetValueInt(string key, int defaultValue, bool persist = true)
|
||||
{
|
||||
@@ -330,7 +358,7 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
|
||||
// If SSL is enabled and a cert hash is still in the config file or cert path is empty disable SSL
|
||||
if (EnableSsl && (GetValue("SslCertHash", null).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
|
||||
if (EnableSsl && (GetValue("SslCertHash", string.Empty, false).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
|
||||
{
|
||||
SetValue("EnableSsl", false);
|
||||
}
|
||||
@@ -377,13 +405,21 @@ namespace NzbDrone.Core.Configuration
|
||||
throw new InvalidConfigFileException($"{_configFile} is corrupt. Please delete the config file and Readarr will recreate it.");
|
||||
}
|
||||
|
||||
return XDocument.Parse(_diskProvider.ReadAllText(_configFile));
|
||||
var xDoc = XDocument.Parse(_diskProvider.ReadAllText(_configFile));
|
||||
var config = xDoc.Descendants(CONFIG_ELEMENT_NAME).ToList();
|
||||
|
||||
if (config.Count != 1)
|
||||
{
|
||||
throw new InvalidConfigFileException($"{_configFile} is invalid. Please delete the config file and Readarr will recreate it.");
|
||||
}
|
||||
|
||||
return xDoc;
|
||||
}
|
||||
|
||||
var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
|
||||
xDoc.Add(new XElement(CONFIG_ELEMENT_NAME));
|
||||
var newXDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
|
||||
newXDoc.Add(new XElement(CONFIG_ELEMENT_NAME));
|
||||
|
||||
return xDoc;
|
||||
return newXDoc;
|
||||
}
|
||||
}
|
||||
catch (XmlException ex)
|
||||
@@ -427,5 +463,7 @@ namespace NzbDrone.Core.Configuration
|
||||
{
|
||||
SetValue("ApiKey", GenerateApiKey());
|
||||
}
|
||||
|
||||
public bool TrustCgnatIpAddresses => _authOptions.TrustCgnatIpAddresses ?? GetValueBoolean("TrustCgnatIpAddresses", false, persist: false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,6 +404,12 @@ namespace NzbDrone.Core.Configuration
|
||||
|
||||
public string ApplicationUrl => GetValue("ApplicationUrl", string.Empty);
|
||||
|
||||
public bool TrustCgnatIpAddresses
|
||||
{
|
||||
get { return GetValueBoolean("TrustCgnatIpAddresses", false); }
|
||||
set { SetValue("TrustCgnatIpAddresses", value); }
|
||||
}
|
||||
|
||||
private string GetValue(string key)
|
||||
{
|
||||
return GetValue(key, string.Empty);
|
||||
|
||||
@@ -219,7 +219,7 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||
|
||||
protected virtual IList<TableDefinition> ReadTables()
|
||||
{
|
||||
const string sqlCommand = @"SELECT name, sql FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name;";
|
||||
const string sqlCommand = @"SELECT name, sql FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_litestream_%' ORDER BY name;";
|
||||
var dtTable = Read(sqlCommand).Tables[0];
|
||||
|
||||
var tableDefinitionList = new List<TableDefinition>();
|
||||
|
||||
@@ -122,14 +122,23 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
}
|
||||
|
||||
var items = new List<DownloadClientItem>();
|
||||
var ignoredCount = 0;
|
||||
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
if (torrent.Hash == null)
|
||||
// Silently ignore torrents with no hash
|
||||
if (torrent.Hash.IsNullOrWhiteSpace())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore torrents without a name, but track to log a single warning for all invalid torrents.
|
||||
if (torrent.Name.IsNullOrWhiteSpace())
|
||||
{
|
||||
ignoredCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
var item = new DownloadClientItem();
|
||||
item.DownloadId = torrent.Hash.ToUpper();
|
||||
item.Title = torrent.Name;
|
||||
@@ -187,6 +196,11 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
items.Add(item);
|
||||
}
|
||||
|
||||
if (ignoredCount > 0)
|
||||
{
|
||||
_logger.Warn("{0} torrent(s) were ignored becuase they did not have a title, check Deluge and remove any invalid torrents");
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -199,9 +213,18 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
{
|
||||
var config = _proxy.GetConfig(Settings);
|
||||
var label = _proxy.GetLabelOptions(Settings);
|
||||
|
||||
OsPath destDir;
|
||||
|
||||
if (label != null && label.ApplyMoveCompleted && label.MoveCompleted)
|
||||
if (Settings.CompletedDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
destDir = new OsPath(Settings.CompletedDirectory);
|
||||
}
|
||||
else if (Settings.DownloadDirectory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
destDir = new OsPath(Settings.DownloadDirectory);
|
||||
}
|
||||
else if (label is { ApplyMoveCompleted: true, MoveCompleted: true })
|
||||
{
|
||||
// if label exists and a label completed path exists and is enabled use it instead of global
|
||||
destDir = new OsPath(label.MoveCompletedPath);
|
||||
@@ -217,7 +240,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||
|
||||
var status = new DownloadClientInfo
|
||||
{
|
||||
IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "localhost"
|
||||
IsLocalhost = Settings.Host is "127.0.0.1" or "localhost"
|
||||
};
|
||||
|
||||
if (!destDir.IsEmpty)
|
||||
|
||||
@@ -239,7 +239,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
|
||||
// Avoid removing torrents that haven't reached the global max ratio.
|
||||
// Removal also requires the torrent to be paused, in case a higher max ratio was set on the torrent itself (which is not exposed by the api).
|
||||
item.CanMoveFiles = item.CanBeRemoved = torrent.State == "pausedUP" && HasReachedSeedLimit(torrent, config);
|
||||
item.CanMoveFiles = item.CanBeRemoved = torrent.State is "pausedUP" or "stoppedUP" && HasReachedSeedLimit(torrent, config);
|
||||
|
||||
switch (torrent.State)
|
||||
{
|
||||
@@ -248,7 +248,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Message = "qBittorrent is reporting an error";
|
||||
break;
|
||||
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading
|
||||
case "stoppedDL": // torrent is stopped and has NOT finished downloading
|
||||
case "pausedDL": // torrent is paused and has NOT finished downloading (qBittorrent < 5)
|
||||
item.Status = DownloadItemStatus.Paused;
|
||||
break;
|
||||
|
||||
@@ -259,7 +260,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
item.Status = DownloadItemStatus.Queued;
|
||||
break;
|
||||
|
||||
case "pausedUP": // torrent is paused and has finished downloading
|
||||
case "pausedUP": // torrent is paused and has finished downloading (qBittorent < 5)
|
||||
case "stoppedUP": // torrent is stopped and has finished downloading
|
||||
case "uploading": // torrent is being seeded and data is being transferred
|
||||
case "stalledUP": // torrent is being seeded, but no connection were made
|
||||
case "queuedUP": // queuing is enabled and torrent is queued for upload
|
||||
@@ -279,6 +281,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
break;
|
||||
|
||||
case "metaDL": // torrent magnet is being downloaded
|
||||
case "forcedMetaDL": // torrent metadata is being forcibly downloaded
|
||||
if (config.DhtEnabled)
|
||||
{
|
||||
item.Status = DownloadItemStatus.Queued;
|
||||
@@ -293,7 +296,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
break;
|
||||
|
||||
case "forcedDL": // torrent is being downloaded, and was forced started
|
||||
case "forcedMetaDL": // torrent metadata is being forcibly downloaded
|
||||
case "moving": // torrent is being moved from a folder
|
||||
case "downloading": // torrent is being downloaded and data is being transferred
|
||||
item.Status = DownloadItemStatus.Downloading;
|
||||
@@ -375,7 +377,15 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
if (Proxy.GetLabels(Settings).TryGetValue(Settings.MusicCategory, out var label) && label.SavePath.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
var labelDir = new OsPath(label.SavePath);
|
||||
var savePath = label.SavePath;
|
||||
|
||||
if (savePath.StartsWith("//"))
|
||||
{
|
||||
_logger.Trace("Replacing double forward slashes in path '{0}'. If this is not meant to be a Windows UNC path fix the 'Save Path' in qBittorrent's {1} category", savePath, Settings.MusicCategory);
|
||||
savePath = savePath.Replace('/', '\\');
|
||||
}
|
||||
|
||||
var labelDir = new OsPath(savePath);
|
||||
|
||||
if (labelDir.IsRooted)
|
||||
{
|
||||
|
||||
@@ -26,8 +26,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
Dictionary<string, QBittorrentLabel> GetLabels(QBittorrentSettings settings);
|
||||
void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings);
|
||||
void MoveTorrentToTopInQueue(string hash, QBittorrentSettings settings);
|
||||
void PauseTorrent(string hash, QBittorrentSettings settings);
|
||||
void ResumeTorrent(string hash, QBittorrentSettings settings);
|
||||
void SetForceStart(string hash, bool enabled, QBittorrentSettings settings);
|
||||
}
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
@@ -178,7 +178,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
}
|
||||
@@ -214,7 +214,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// if setCategory fails due to method not being found, then try older setLabel command for qBittorrent < v.3.3.5
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
var setLabelRequest = BuildRequest(settings).Resource("/command/setLabel")
|
||||
.Post()
|
||||
@@ -257,7 +257,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// qBittorrent rejects all Prio commands with 403: Forbidden if Options -> BitTorrent -> Torrent Queueing is not enabled
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Forbidden)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -266,22 +266,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
}
|
||||
|
||||
public void PauseTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/pause")
|
||||
.Post()
|
||||
.AddFormParameter("hash", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void ResumeTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/resume")
|
||||
.Post()
|
||||
.AddFormParameter("hash", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/command/setForceStart")
|
||||
|
||||
@@ -246,14 +246,20 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
request.AddFormParameter("category", settings.MusicCategory);
|
||||
}
|
||||
|
||||
// Note: ForceStart is handled by separate api call
|
||||
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
|
||||
// Avoid extraneous API version check if initial state is ForceStart
|
||||
if ((QBittorrentState)settings.InitialState is QBittorrentState.Start or QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter("paused", false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Pause)
|
||||
{
|
||||
request.AddFormParameter("paused", true);
|
||||
var stoppedParameterName = GetApiVersion(settings) >= new Version(2, 11, 0) ? "stopped" : "paused";
|
||||
|
||||
// Note: ForceStart is handled by separate api call
|
||||
if ((QBittorrentState)settings.InitialState == QBittorrentState.Start)
|
||||
{
|
||||
request.AddFormParameter(stoppedParameterName, false);
|
||||
}
|
||||
else if ((QBittorrentState)settings.InitialState == QBittorrentState.Stop)
|
||||
{
|
||||
request.AddFormParameter(stoppedParameterName, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.SequentialOrder)
|
||||
@@ -291,7 +297,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// setShareLimits was added in api v2.0.1 so catch it case of the unlikely event that someone has api v2.0
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.NotFound)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -313,7 +319,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
// qBittorrent rejects all Prio commands with 409: Conflict if Options -> BitTorrent -> Torrent Queueing is not enabled
|
||||
if (ex.InnerException is HttpException && (ex.InnerException as HttpException).Response.StatusCode == HttpStatusCode.Conflict)
|
||||
if (ex.InnerException is HttpException httpException && httpException.Response.StatusCode == HttpStatusCode.Conflict)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -322,22 +328,6 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
}
|
||||
}
|
||||
|
||||
public void PauseTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/pause")
|
||||
.Post()
|
||||
.AddFormParameter("hashes", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void ResumeTorrent(string hash, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/resume")
|
||||
.Post()
|
||||
.AddFormParameter("hashes", hash);
|
||||
ProcessRequest(request, settings);
|
||||
}
|
||||
|
||||
public void SetForceStart(string hash, bool enabled, QBittorrentSettings settings)
|
||||
{
|
||||
var request = BuildRequest(settings).Resource("/api/v2/torrents/setForceStart")
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
using NzbDrone.Core.Annotations;
|
||||
|
||||
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
public enum QBittorrentState
|
||||
{
|
||||
[FieldOption(Label = "Started")]
|
||||
Start = 0,
|
||||
|
||||
[FieldOption(Label = "Force Started")]
|
||||
ForceStart = 1,
|
||||
Pause = 2
|
||||
|
||||
[FieldOption(Label = "Stopped")]
|
||||
Stop = 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,20 +263,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
status.OutputRootFolders = new List<OsPath> { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, category.FullPath) };
|
||||
}
|
||||
|
||||
if (config.Misc.history_retention.IsNullOrWhiteSpace())
|
||||
{
|
||||
status.RemovesCompletedDownloads = false;
|
||||
}
|
||||
else if (config.Misc.history_retention.EndsWith("d"))
|
||||
{
|
||||
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
|
||||
out var daysRetention);
|
||||
status.RemovesCompletedDownloads = daysRetention < 14;
|
||||
}
|
||||
else
|
||||
{
|
||||
status.RemovesCompletedDownloads = config.Misc.history_retention != "0";
|
||||
}
|
||||
status.RemovesCompletedDownloads = RemovesCompletedDownloads(config);
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -518,6 +505,43 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
return categories.Contains(category);
|
||||
}
|
||||
|
||||
private bool RemovesCompletedDownloads(SabnzbdConfig config)
|
||||
{
|
||||
var retention = config.Misc.history_retention;
|
||||
var option = config.Misc.history_retention_option;
|
||||
var number = config.Misc.history_retention_number;
|
||||
|
||||
switch (option)
|
||||
{
|
||||
case "all":
|
||||
return false;
|
||||
case "number-archive":
|
||||
case "number-delete":
|
||||
return true;
|
||||
case "days-archive":
|
||||
case "days-delete":
|
||||
return number < 14;
|
||||
case "all-archive":
|
||||
case "all-delete":
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: Remove these checks once support for SABnzbd < 4.3 is removed
|
||||
if (retention.IsNullOrWhiteSpace())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (retention.EndsWith("d"))
|
||||
{
|
||||
int.TryParse(config.Misc.history_retention.AsSpan(0, config.Misc.history_retention.Length - 1),
|
||||
out var daysRetention);
|
||||
return daysRetention < 14;
|
||||
}
|
||||
|
||||
return retention != "0";
|
||||
}
|
||||
|
||||
private bool ValidatePath(DownloadClientItem downloadClientItem)
|
||||
{
|
||||
var downloadItemOutputPath = downloadClientItem.OutputPath;
|
||||
|
||||
@@ -30,6 +30,8 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||
public bool enable_date_sorting { get; set; }
|
||||
public bool pre_check { get; set; }
|
||||
public string history_retention { get; set; }
|
||||
public string history_retention_option { get; set; }
|
||||
public int history_retention_number { get; set; }
|
||||
}
|
||||
|
||||
public class SabnzbdCategory
|
||||
|
||||
@@ -41,12 +41,6 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
// If totalsize == 0 the torrent is a magnet downloading metadata
|
||||
if (torrent.TotalSize == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var outputPath = new OsPath(torrent.DownloadDir);
|
||||
|
||||
if (Settings.TvDirectory.IsNotNullOrWhiteSpace())
|
||||
@@ -97,6 +91,10 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||
item.Status = DownloadItemStatus.Warning;
|
||||
item.Message = torrent.ErrorString;
|
||||
}
|
||||
else if (torrent.TotalSize == 0)
|
||||
{
|
||||
item.Status = DownloadItemStatus.Queued;
|
||||
}
|
||||
else if (torrent.LeftUntilDone == 0 && (torrent.Status == TransmissionTorrentStatus.Stopped ||
|
||||
torrent.Status == TransmissionTorrentStatus.Seeding ||
|
||||
torrent.Status == TransmissionTorrentStatus.SeedingWait))
|
||||
|
||||
@@ -41,18 +41,23 @@ namespace NzbDrone.Core.Download
|
||||
var blockedProviders = new HashSet<int>(_downloadClientStatusService.GetBlockedProviders().Select(v => v.ProviderId));
|
||||
var availableProviders = _downloadClientFactory.GetAvailableProviders().Where(v => v.Protocol == downloadProtocol).ToList();
|
||||
|
||||
if (tags != null)
|
||||
if (!availableProviders.Any())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (tags is { Count: > 0 })
|
||||
{
|
||||
var matchingTagsClients = availableProviders.Where(i => i.Definition.Tags.Intersect(tags).Any()).ToList();
|
||||
|
||||
availableProviders = matchingTagsClients.Count > 0 ?
|
||||
matchingTagsClients :
|
||||
availableProviders.Where(i => i.Definition.Tags.Empty()).ToList();
|
||||
}
|
||||
|
||||
if (!availableProviders.Any())
|
||||
{
|
||||
return null;
|
||||
if (!availableProviders.Any())
|
||||
{
|
||||
throw new DownloadClientUnavailableException("No download client was found without tags or a matching author tag. Please check your settings.");
|
||||
}
|
||||
}
|
||||
|
||||
if (indexerId > 0)
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace NzbDrone.Core.HealthCheck.Checks
|
||||
var startupFolder = _appFolderInfo.StartUpFolder;
|
||||
var uiFolder = Path.Combine(startupFolder, "UI");
|
||||
|
||||
if ((OsInfo.IsWindows || _configFileProvider.UpdateAutomatically) &&
|
||||
if (_configFileProvider.UpdateAutomatically &&
|
||||
_configFileProvider.UpdateMechanism == UpdateMechanism.BuiltIn &&
|
||||
!_osInfo.IsDocker)
|
||||
{
|
||||
|
||||
@@ -184,7 +184,7 @@ namespace NzbDrone.Core.ImportLists
|
||||
report.BookGoodreadsId = remoteBook.ForeignBookId;
|
||||
report.Book = remoteBook.Title;
|
||||
report.Author ??= remoteBook.AuthorMetadata.Value.Name;
|
||||
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.Name;
|
||||
report.AuthorGoodreadsId ??= remoteBook.AuthorMetadata.Value.ForeignAuthorId;
|
||||
}
|
||||
catch (BookNotFoundException)
|
||||
{
|
||||
|
||||
@@ -68,16 +68,17 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
protected override bool PostProcess(IndexerResponse indexerResponse, List<XElement> items, List<ReleaseInfo> releases)
|
||||
{
|
||||
var enclosureTypes = items.SelectMany(GetEnclosures).Select(v => v.Type).Distinct().ToArray();
|
||||
|
||||
if (enclosureTypes.Any() && enclosureTypes.Intersect(PreferredEnclosureMimeTypes).Empty())
|
||||
{
|
||||
if (enclosureTypes.Intersect(TorrentEnclosureMimeTypes).Any())
|
||||
{
|
||||
_logger.Warn("{0} does not contain {1}, found {2}, did you intend to add a Torznab indexer?", indexerResponse.Request.Url, NzbEnclosureMimeType, enclosureTypes[0]);
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{1} does not contain {1}, found {2}.", indexerResponse.Request.Url, NzbEnclosureMimeType, enclosureTypes[0]);
|
||||
}
|
||||
|
||||
_logger.Warn("{0} does not contain {1}, found {2}.", indexerResponse.Request.Url, NzbEnclosureMimeType, enclosureTypes[0]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -268,26 +268,26 @@ namespace NzbDrone.Core.Indexers
|
||||
protected virtual RssEnclosure[] GetEnclosures(XElement item)
|
||||
{
|
||||
var enclosures = item.Elements("enclosure")
|
||||
.Select(v =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RssEnclosure
|
||||
{
|
||||
Url = v.Attribute("url")?.Value,
|
||||
Type = v.Attribute("type")?.Value,
|
||||
Length = v.Attribute("length")?.Value?.ParseInt64() ?? 0
|
||||
};
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Warn(e, "Failed to get enclosure for: {0}", item.Title());
|
||||
}
|
||||
.Select(v =>
|
||||
{
|
||||
try
|
||||
{
|
||||
return new RssEnclosure
|
||||
{
|
||||
Url = v.Attribute("url")?.Value,
|
||||
Type = v.Attribute("type")?.Value,
|
||||
Length = v.Attribute("length")?.Value?.ParseInt64() ?? 0
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Warn(ex, "Failed to get enclosure for: {0}", item.Title());
|
||||
}
|
||||
|
||||
return null;
|
||||
})
|
||||
.Where(v => v != null)
|
||||
.ToArray();
|
||||
return null;
|
||||
})
|
||||
.Where(v => v != null)
|
||||
.ToArray();
|
||||
|
||||
return enclosures;
|
||||
}
|
||||
|
||||
@@ -59,16 +59,17 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
protected override bool PostProcess(IndexerResponse indexerResponse, List<XElement> items, List<ReleaseInfo> releases)
|
||||
{
|
||||
var enclosureTypes = items.SelectMany(GetEnclosures).Select(v => v.Type).Distinct().ToArray();
|
||||
|
||||
if (enclosureTypes.Any() && enclosureTypes.Intersect(PreferredEnclosureMimeTypes).Empty())
|
||||
{
|
||||
if (enclosureTypes.Intersect(UsenetEnclosureMimeTypes).Any())
|
||||
{
|
||||
_logger.Warn("{0} does not contain {1}, found {2}, did you intend to add a Newznab indexer?", indexerResponse.Request.Url, TorrentEnclosureMimeType, enclosureTypes[0]);
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{1} does not contain {1}, found {2}.", indexerResponse.Request.Url, TorrentEnclosureMimeType, enclosureTypes[0]);
|
||||
}
|
||||
|
||||
_logger.Warn("{0} does not contain {1}, found {2}.", indexerResponse.Request.Url, TorrentEnclosureMimeType, enclosureTypes[0]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -57,33 +57,36 @@ namespace NzbDrone.Core.Instrumentation
|
||||
{
|
||||
try
|
||||
{
|
||||
var log = new Log();
|
||||
log.Time = logEvent.TimeStamp;
|
||||
log.Message = CleanseLogMessage.Cleanse(logEvent.FormattedMessage);
|
||||
|
||||
log.Logger = logEvent.LoggerName;
|
||||
var log = new Log
|
||||
{
|
||||
Time = logEvent.TimeStamp,
|
||||
Logger = logEvent.LoggerName,
|
||||
Level = logEvent.Level.Name
|
||||
};
|
||||
|
||||
if (log.Logger.StartsWith("NzbDrone."))
|
||||
{
|
||||
log.Logger = log.Logger.Remove(0, 9);
|
||||
}
|
||||
|
||||
var message = logEvent.FormattedMessage;
|
||||
|
||||
if (logEvent.Exception != null)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(log.Message))
|
||||
if (string.IsNullOrWhiteSpace(message))
|
||||
{
|
||||
log.Message = logEvent.Exception.Message;
|
||||
message = logEvent.Exception.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Message += ": " + logEvent.Exception.Message;
|
||||
message += ": " + logEvent.Exception.Message;
|
||||
}
|
||||
|
||||
log.Exception = logEvent.Exception.ToString();
|
||||
log.Exception = CleanseLogMessage.Cleanse(logEvent.Exception.ToString());
|
||||
log.ExceptionType = logEvent.Exception.GetType().ToString();
|
||||
}
|
||||
|
||||
log.Level = logEvent.Level.Name;
|
||||
log.Message = CleanseLogMessage.Cleanse(message);
|
||||
|
||||
var connectionInfo = _connectionStringFactory.LogDbConnection;
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"Year": "عام",
|
||||
"WeekColumnHeader": "رأس عمود الأسبوع",
|
||||
"Version": "الإصدار",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "يستخدم الفرع بواسطة آلية التحديث الخارجية",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "فرع لاستخدامه لتحديث Radarr",
|
||||
"BranchUpdateMechanism": "يستخدم الفرع بواسطة آلية التحديث الخارجية",
|
||||
"BranchUpdate": "فرع لاستخدامه لتحديث {appName}",
|
||||
"Username": "اسم المستخدم",
|
||||
"UsenetDelayHelpText": "تأخر بالدقائق للانتظار قبل الحصول على إصدار من Usenet",
|
||||
"UsenetDelay": "تأخير يوزنت",
|
||||
@@ -15,7 +15,7 @@
|
||||
"UpgradeAllowedHelpText": "إذا لن تتم ترقية الصفات المعوقين",
|
||||
"Updates": "التحديثات",
|
||||
"UpdateScriptPathHelpText": "المسار إلى برنامج نصي مخصص يأخذ حزمة تحديث مستخرجة ويتعامل مع ما تبقى من عملية التحديث",
|
||||
"UpdateMechanismHelpText": "استخدم المحدث أو البرنامج النصي المدمج في Radarr",
|
||||
"UpdateMechanismHelpText": "استخدم المحدث أو البرنامج النصي المدمج في {appName}",
|
||||
"UpdateAutomaticallyHelpText": "تنزيل التحديثات وتثبيتها تلقائيًا. ستظل قادرًا على التثبيت من النظام: التحديثات",
|
||||
"UpdateAll": "تحديث الجميع",
|
||||
"UnmonitoredHelpText": "قم بتضمين الأفلام غير الخاضعة للرقابة في موجز iCal",
|
||||
@@ -56,7 +56,7 @@
|
||||
"URLBase": "قاعدة URL",
|
||||
"UISettings": "إعدادات واجهة المستخدم",
|
||||
"UILanguageHelpTextWarning": "يلزم إعادة تحميل المتصفح",
|
||||
"UILanguageHelpText": "اللغة التي سيستخدمها Radarr لواجهة المستخدم",
|
||||
"UILanguageHelpText": "اللغة التي سيستخدمها {appName} لواجهة المستخدم",
|
||||
"UILanguage": "لغة واجهة المستخدم",
|
||||
"TotalFileSize": "إجمالي حجم الملف",
|
||||
"Torrents": "السيول",
|
||||
@@ -73,7 +73,7 @@
|
||||
"Tags": "العلامات",
|
||||
"TagIsNotUsedAndCanBeDeleted": "العلامة غير مستخدمة ويمكن حذفها",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "سيتم استخدامها عند استخدام البحث التفاعلي",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "سيتم استخدامه عند إجراء عمليات البحث التلقائي عبر واجهة المستخدم أو بواسطة Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "سيتم استخدامه عند إجراء عمليات البحث التلقائي عبر واجهة المستخدم أو بواسطة {appName}",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "البحث غير معتمد مع هذا المفهرس",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "لا يتم دعم RSS مع هذا المفهرس",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "نجاح! تم الانتهاء من عملي ، ولا توجد ملفات لإعادة تسميتها.",
|
||||
@@ -92,7 +92,7 @@
|
||||
"Source": "مصدر",
|
||||
"SorryThatBookCannotBeFound": "آسف ، لا يمكن العثور على هذا الفيلم.",
|
||||
"SorryThatAuthorCannotBeFound": "آسف ، لا يمكن العثور على هذا الفيلم.",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "استخدم عندما يتعذر على Radarr اكتشاف مساحة خالية من مجلد جذر الفيلم",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "استخدم عندما يتعذر على {appName} اكتشاف مساحة خالية من مجلد جذر الفيلم",
|
||||
"SkipFreeSpaceCheck": "تخطي فحص المساحة الخالية",
|
||||
"Size": " بحجم",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "يظهر فوق كل عمود عندما يكون الأسبوع هو العرض النشط",
|
||||
@@ -133,19 +133,19 @@
|
||||
"Result": "نتيجة",
|
||||
"RestoreBackup": "استرجاع النسخة الاحتياطية",
|
||||
"Restore": "استعادة",
|
||||
"RestartReadarr": "أعد تشغيل Radarr",
|
||||
"RestartReadarr": "أعد تشغيل {appName}",
|
||||
"RestartNow": "اعد البدء الان",
|
||||
"Restart": "إعادة تشغيل",
|
||||
"ResetAPIKeyMessageText": "هل أنت متأكد أنك تريد إعادة تعيين مفتاح API الخاص بك؟",
|
||||
"ResetAPIKey": "إعادة تعيين مفتاح API",
|
||||
"Reset": "إعادة تعيين",
|
||||
"RescanAuthorFolderAfterRefresh": "إعادة فحص مجلد الفيلم بعد التحديث",
|
||||
"RescanAfterRefreshHelpTextWarning": "لن يكتشف Radarr تلقائيًا التغييرات التي تطرأ على الملفات عند عدم تعيينه على \"دائمًا\"",
|
||||
"RescanAfterRefreshHelpTextWarning": "لن يكتشف {appName} تلقائيًا التغييرات التي تطرأ على الملفات عند عدم تعيينه على \"دائمًا\"",
|
||||
"RequiredPlaceHolder": "أضف قيدًا جديدًا",
|
||||
"RequiredHelpText": "يجب أن يحتوي الإصدار على واحد على الأقل من هذه المصطلحات (غير حساس لحالة الأحرف)",
|
||||
"ReplaceIllegalCharacters": "استبدل الأحرف غير القانونية",
|
||||
"Reorder": "إعادة ترتيب",
|
||||
"RenameBooksHelpText": "سيستخدم Radarr اسم الملف الحالي إذا تم تعطيل إعادة التسمية",
|
||||
"RenameBooksHelpText": "سيستخدم {appName} اسم الملف الحالي إذا تم تعطيل إعادة التسمية",
|
||||
"RemovedFromTaskQueue": "تمت إزالته من قائمة انتظار المهام",
|
||||
"RemoveTagRemovingTag": "إزالة العلامة",
|
||||
"RemoveTagExistingTag": "علامة موجودة",
|
||||
@@ -174,7 +174,7 @@
|
||||
"Reason": "السبب",
|
||||
"Real": "حقيقة",
|
||||
"ReadarrTags": "العلامات الرادار",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "يدعم Radarr أي مفهرس يستخدم معيار Newznab ، بالإضافة إلى مفهرسات أخرى مذكورة أدناه.",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "يدعم {appName} أي مفهرس يستخدم معيار Newznab ، بالإضافة إلى مفهرسات أخرى مذكورة أدناه.",
|
||||
"ReadTheWikiForMoreInformation": "اقرأ Wiki لمزيد من المعلومات",
|
||||
"RSSSyncInterval": "الفاصل الزمني لمزامنة RSS",
|
||||
"RSSSync": "مزامنة RSS",
|
||||
@@ -196,7 +196,7 @@
|
||||
"Profiles": "مظهر",
|
||||
"PreviewRename": "معاينة إعادة تسمية",
|
||||
"PosterSize": "حجم الملصق",
|
||||
"GrabReleaseMessageText": "لم يتمكن Radarr من تحديد الفيلم الذي كان هذا الإصدار من أجله. قد يتعذر على Radarr استيراد هذا الإصدار تلقائيًا. هل تريد انتزاع \"{0}\"؟",
|
||||
"GrabReleaseMessageText": "لم يتمكن {appName} من تحديد الفيلم الذي كان هذا الإصدار من أجله. قد يتعذر على {appName} استيراد هذا الإصدار تلقائيًا. هل تريد انتزاع \"{0}\"؟",
|
||||
"GrabRelease": "انتزاع الإصدار",
|
||||
"GrabID": "انتزاع معرف",
|
||||
"Grab": "إختطاف",
|
||||
@@ -276,10 +276,10 @@
|
||||
"Dates": "تواريخ",
|
||||
"DatabaseMigration": "ترحيل DB",
|
||||
"CutoffUnmet": "قطع غير ملباة",
|
||||
"CutoffHelpText": "بمجرد الوصول إلى هذه الجودة ، لن يقوم Radarr بتنزيل الأفلام",
|
||||
"CutoffHelpText": "بمجرد الوصول إلى هذه الجودة ، لن يقوم {appName} بتنزيل الأفلام",
|
||||
"CreateGroup": "إنشاء مجموعة",
|
||||
"CreateEmptyAuthorFoldersHelpText": "قم بإنشاء مجلدات فيلم مفقودة أثناء فحص القرص",
|
||||
"CopyUsingHardlinksHelpTextWarning": "من حين لآخر ، قد تمنع أقفال الملفات إعادة تسمية الملفات التي يتم زرعها. يمكنك تعطيل البذر مؤقتًا واستخدام وظيفة إعادة تسمية Radarr كحل بديل.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "من حين لآخر ، قد تمنع أقفال الملفات إعادة تسمية الملفات التي يتم زرعها. يمكنك تعطيل البذر مؤقتًا واستخدام وظيفة إعادة تسمية {appName} كحل بديل.",
|
||||
"CopyUsingHardlinksHelpText": "استخدم Hardlinks عند محاولة نسخ الملفات من السيول التي لا تزال تحت البذور",
|
||||
"Connections": "روابط",
|
||||
"ConnectSettings": "ربط الإعدادات",
|
||||
@@ -291,16 +291,16 @@
|
||||
"ClientPriority": "أولوية العميل",
|
||||
"ClickToChangeQuality": "انقر لتغيير الجودة",
|
||||
"Clear": "واضح",
|
||||
"ChownGroupHelpTextWarning": "يعمل هذا فقط إذا كان المستخدم الذي يقوم بتشغيل Radarr هو مالك الملف. من الأفضل التأكد من أن عميل التنزيل يستخدم نفس مجموعة Radarr.",
|
||||
"ChownGroupHelpTextWarning": "يعمل هذا فقط إذا كان المستخدم الذي يقوم بتشغيل {appName} هو مالك الملف. من الأفضل التأكد من أن عميل التنزيل يستخدم نفس مجموعة {appName}.",
|
||||
"ChownGroupHelpText": "اسم المجموعة أو gid. استخدم gid لأنظمة الملفات البعيدة.",
|
||||
"ChmodFolderHelpTextWarning": "يعمل هذا فقط إذا كان المستخدم الذي يقوم بتشغيل Radarr هو مالك الملف. من الأفضل التأكد من قيام عميل التنزيل بتعيين الأذونات بشكل صحيح.",
|
||||
"ChmodFolderHelpTextWarning": "يعمل هذا فقط إذا كان المستخدم الذي يقوم بتشغيل {appName} هو مالك الملف. من الأفضل التأكد من قيام عميل التنزيل بتعيين الأذونات بشكل صحيح.",
|
||||
"ChmodFolderHelpText": "Octal ، يتم تطبيقه أثناء الاستيراد / إعادة التسمية إلى مجلدات وملفات الوسائط (بدون تنفيذ بت)",
|
||||
"ChmodFolder": "مجلد chmod",
|
||||
"ChangeHasNotBeenSavedYet": "لم يتم حفظ التغيير بعد",
|
||||
"ChangeFileDate": "تغيير تاريخ الملف",
|
||||
"CertificateValidationHelpText": "تغيير مدى صرامة التحقق من صحة شهادة HTTPS",
|
||||
"CertificateValidation": "التحقق من صحة الشهادة",
|
||||
"CancelMessageText": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟",
|
||||
"CancelPendingTask": "هل أنت متأكد أنك تريد إلغاء هذه المهمة المعلقة؟",
|
||||
"Cancel": "إلغاء",
|
||||
"CalendarWeekColumnHeaderHelpText": "يظهر فوق كل عمود عندما يكون الأسبوع هو العرض النشط",
|
||||
"Calendar": "التقويم",
|
||||
@@ -314,17 +314,17 @@
|
||||
"Backups": "النسخ الاحتياطية",
|
||||
"BackupRetentionHelpText": "سيتم تنظيف النسخ الاحتياطية التلقائية الأقدم من فترة الاحتفاظ تلقائيًا",
|
||||
"BackupNow": "اعمل نسخة احتياطية الان",
|
||||
"BackupFolderHelpText": "ستكون المسارات النسبية ضمن دليل AppData الخاص بـ Radarr",
|
||||
"BackupFolderHelpText": "ستكون المسارات النسبية ضمن دليل AppData الخاص بـ {appName}",
|
||||
"Automatic": "تلقائي",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "الأفلام المحذوفة من القرص لا يتم مراقبتها تلقائيًا في Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "الأفلام المحذوفة من القرص لا يتم مراقبتها تلقائيًا في {appName}",
|
||||
"AutoRedownloadFailedHelpText": "ابحث تلقائيًا عن إصدار مختلف وحاول تنزيله",
|
||||
"AuthorClickToChangeBook": "انقر لتغيير الفيلم",
|
||||
"AuthenticationMethodHelpText": "طلب اسم المستخدم وكلمة المرور للوصول إلى Radarr",
|
||||
"AuthenticationMethodHelpText": "طلب اسم المستخدم وكلمة المرور للوصول إلى {appName}",
|
||||
"Authentication": "المصادقة",
|
||||
"ApplyTags": "تطبيق العلامات",
|
||||
"AppDataDirectory": "دليل AppData",
|
||||
"AnalyticsEnabledHelpTextWarning": "يتطلب إعادة التشغيل ليصبح ساري المفعول",
|
||||
"AnalyticsEnabledHelpText": "إرسال معلومات الاستخدام والخطأ المجهولة إلى خوادم Radarr. يتضمن ذلك معلومات حول متصفحك ، وصفحات Radarr WebUI التي تستخدمها ، والإبلاغ عن الأخطاء بالإضافة إلى إصدار نظام التشغيل ووقت التشغيل. سنستخدم هذه المعلومات لتحديد أولويات الميزات وإصلاحات الأخطاء.",
|
||||
"AnalyticsEnabledHelpText": "إرسال معلومات الاستخدام والخطأ المجهولة إلى خوادم {appName}. يتضمن ذلك معلومات حول متصفحك ، وصفحات {appName} WebUI التي تستخدمها ، والإبلاغ عن الأخطاء بالإضافة إلى إصدار نظام التشغيل ووقت التشغيل. سنستخدم هذه المعلومات لتحديد أولويات الميزات وإصلاحات الأخطاء.",
|
||||
"Analytics": "تحليلات",
|
||||
"AlternateTitles": "عنوان بديل",
|
||||
"AlreadyInYourLibrary": "بالفعل في مكتبتك",
|
||||
@@ -332,7 +332,6 @@
|
||||
"AddingTag": "مضيفا العلامة",
|
||||
"AddListExclusion": "إضافة استبعاد قائمة",
|
||||
"About": "نبدة عن",
|
||||
"APIKey": "مفتاح API",
|
||||
"60MinutesSixty": "60 دقيقة: {0}",
|
||||
"45MinutesFourtyFive": "90 دقيقة: {0}",
|
||||
"20MinutesTwenty": "120 دقيقة: {0}",
|
||||
@@ -396,7 +395,7 @@
|
||||
"LogFiles": "ملفات الدخول",
|
||||
"Local": "محلي",
|
||||
"LoadingBookFilesFailed": "فشل تحميل ملفات الفيلم",
|
||||
"LaunchBrowserHelpText": " افتح مستعرض ويب وانتقل إلى صفحة Radarr الرئيسية عند بدء التطبيق.",
|
||||
"LaunchBrowserHelpText": " افتح مستعرض ويب وانتقل إلى صفحة {appName} الرئيسية عند بدء التطبيق.",
|
||||
"Language": "لغة",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "لا يمكن حذفه أثناء الاستخدام",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "قم بالترقية حتى يتم تلبية هذه الجودة أو تجاوزها",
|
||||
@@ -407,7 +406,7 @@
|
||||
"IndexerPriority": "أولوية المفهرس",
|
||||
"Indexer": "مفهرس",
|
||||
"IncludeUnmonitored": "تضمين غير مراقب",
|
||||
"IncludeUnknownAuthorItemsHelpText": "إظهار العناصر بدون فيلم في قائمة الانتظار. يمكن أن يشمل ذلك الأفلام التي تمت إزالتها أو أي شيء آخر في فئة Radarr",
|
||||
"IncludeUnknownAuthorItemsHelpText": "إظهار العناصر بدون فيلم في قائمة الانتظار. يمكن أن يشمل ذلك الأفلام التي تمت إزالتها أو أي شيء آخر في فئة {appName}",
|
||||
"IncludeHealthWarningsHelpText": "قم بتضمين التحذيرات الصحية",
|
||||
"Importing": "استيراد",
|
||||
"ImportedTo": "مستورد إلى",
|
||||
@@ -430,7 +429,6 @@
|
||||
"HasPendingChangesNoChanges": "لا تغيرات",
|
||||
"Group": "مجموعة",
|
||||
"GrabSelected": "انتزاع المحدد",
|
||||
"ApiKeyHelpTextWarning": "يتطلب إعادة التشغيل ليصبح ساري المفعول",
|
||||
"DeleteRootFolderMessageText": "هل أنت متأكد أنك تريد حذف المفهرس \"{0}\"؟",
|
||||
"LoadingBooksFailed": "فشل تحميل ملفات الفيلم",
|
||||
"ProxyUsernameHelpText": "ما عليك سوى إدخال اسم مستخدم وكلمة مرور إذا كان أحدهما مطلوبًا. اتركها فارغة وإلا.",
|
||||
@@ -439,7 +437,7 @@
|
||||
"SslPortHelpTextWarning": "يتطلب إعادة التشغيل ليصبح ساري المفعول",
|
||||
"DownloadClientCheckDownloadingToRoot": "يقوم برنامج التنزيل {0} بوضع التنزيلات في المجلد الجذر {1}. يجب ألا تقوم بالتنزيل إلى مجلد جذر.",
|
||||
"Progress": "التقدم",
|
||||
"ReplaceIllegalCharactersHelpText": "استبدل الأحرف غير القانونية. إذا لم يتم تحديده ، فسوف يقوم Radarr بإزالتها بدلاً من ذلك",
|
||||
"ReplaceIllegalCharactersHelpText": "استبدل الأحرف غير القانونية. إذا لم يتم تحديده ، فسوف يقوم {appName} بإزالتها بدلاً من ذلك",
|
||||
"ReleaseTitle": "عنوان الإصدار",
|
||||
"Actions": "أجراءات",
|
||||
"Tomorrow": "غدا",
|
||||
@@ -454,12 +452,12 @@
|
||||
"RemoveFromBlocklist": "إزالة من القائمة السوداء",
|
||||
"UnableToLoadBlocklist": "تعذر تحميل القائمة السوداء",
|
||||
"Level": "مستوى",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "الفرع {0} ليس فرع إصدار Radarr صالح ، لن تتلقى تحديثات",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "الفرع {0} ليس فرع إصدار {appName} صالح ، لن تتلقى تحديثات",
|
||||
"Time": "زمن",
|
||||
"Component": "مكون",
|
||||
"Blocklist": "القائمة السوداء",
|
||||
"BlocklistRelease": "إصدار القائمة السوداء",
|
||||
"ThisCannotBeCancelled": "لا يمكن إلغاء هذا بمجرد البدء دون إعادة تشغيل Radarr.",
|
||||
"ThisCannotBeCancelled": "لا يمكن إلغاء هذا بمجرد البدء دون إعادة تشغيل {appName}.",
|
||||
"UnselectAll": "إلغاء تحديد الكل",
|
||||
"UpdateSelected": "تم تحديد التحديث",
|
||||
"Wanted": "مطلوب",
|
||||
@@ -485,12 +483,12 @@
|
||||
"Filters": "منقي",
|
||||
"Connect": "الاتصال",
|
||||
"HealthNoIssues": "لا مشاكل مع التكوين الخاص بك",
|
||||
"MissingFromDisk": "لم يتمكن Whisparr من العثور على الملف على القرص لذا تمت إزالته",
|
||||
"MissingFromDisk": "لم يتمكن {appName} من العثور على الملف على القرص لذا تمت إزالته",
|
||||
"IndexerStatusCheckSingleClientMessage": "المفهرسات غير متاحة بسبب الإخفاقات: {0}",
|
||||
"Lists": "القوائم",
|
||||
"Metadata": "البيانات الوصفية",
|
||||
"CreateEmptyAuthorFolders": "إنشاء مجلدات أفلام فارغة",
|
||||
"ReadarrSupportsAnyDownloadClient": "يدعم Whisparr أي عميل تنزيل يستخدم معيار Newznab ، بالإضافة إلى عملاء التنزيل الآخرين المدرجة أدناه.",
|
||||
"ReadarrSupportsAnyDownloadClient": "يدعم {appName} أي عميل تنزيل يستخدم معيار Newznab ، بالإضافة إلى عملاء التنزيل الآخرين المدرجة أدناه.",
|
||||
"Queued": "في قائمة الانتظار",
|
||||
"RefreshAndScan": "التحديث والمسح الضوئي",
|
||||
"RescanAfterRefreshHelpText": "أعد فحص مجلد الفيلم بعد تحديث الفيلم",
|
||||
@@ -509,10 +507,10 @@
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "جميع المفهرسات غير متوفرة بسبب الفشل لأكثر من 6 ساعات",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "المفهرسات غير متاحة بسبب الإخفاقات لأكثر من 6 ساعات: {0}",
|
||||
"IndexerPriorityHelpText": "أولوية المفهرس من 1 (الأعلى) إلى 50 (الأدنى). الافتراضي: 25.",
|
||||
"IndexerRssHealthCheckNoIndexers": "لا توجد مفهرسات متاحة مع تمكين مزامنة RSS ، ولن يحصل Radarr على الإصدارات الجديدة تلقائيًا",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "لا تتوفر مفهرسات مع تمكين البحث التلقائي ، ولن يقدم Radarr أي نتائج بحث تلقائية",
|
||||
"IndexerRssHealthCheckNoIndexers": "لا توجد مفهرسات متاحة مع تمكين مزامنة RSS ، ولن يحصل {appName} على الإصدارات الجديدة تلقائيًا",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "لا تتوفر مفهرسات مع تمكين البحث التلقائي ، ولن يقدم {appName} أي نتائج بحث تلقائية",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "جميع المفهرسات القادرة على البحث غير متوفرة مؤقتًا بسبب أخطاء المفهرس الأخيرة",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "لا تتوفر مفهرسات مع تمكين البحث التفاعلي ، ولن يقدم Radarr أي نتائج بحث تفاعلية",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "لا تتوفر مفهرسات مع تمكين البحث التفاعلي ، ولن يقدم {appName} أي نتائج بحث تفاعلية",
|
||||
"IndexersSettingsSummary": "المفهرسات وقيود الإصدار",
|
||||
"MediaManagement": "إدارة وسائل الإعلام",
|
||||
"Monitor": "مراقب",
|
||||
@@ -522,11 +520,11 @@
|
||||
"ProxyCheckFailedToTestMessage": "فشل اختبار الوكيل: {0}",
|
||||
"QualitySettingsSummary": "أحجام الجودة والتسمية",
|
||||
"QueueIsEmpty": "قائمة الانتظار فارغة",
|
||||
"RestartReloadNote": "ملاحظة: سيتم إعادة تشغيل Radarr تلقائيًا وإعادة تحميل واجهة المستخدم أثناء عملية الاستعادة.",
|
||||
"RestartReloadNote": "ملاحظة: سيتم إعادة تشغيل {appName} تلقائيًا وإعادة تحميل واجهة المستخدم أثناء عملية الاستعادة.",
|
||||
"RootFolderCheckSingleMessage": "مجلد الجذر مفقود: {0}",
|
||||
"Save": "حفظ",
|
||||
"SettingsRemotePathMappingLocalPath": "مسار محلي",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "المسار الذي يجب أن يستخدمه Radarr للوصول إلى المسار البعيد محليًا",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "المسار الذي يجب أن يستخدمه {appName} للوصول إلى المسار البعيد محليًا",
|
||||
"SettingsRemotePathMappingRemotePath": "مسار بعيد",
|
||||
"DownloadClientsSettingsSummary": "تنزيل العملاء وتنزيل المناولة وتعيينات المسار البعيد",
|
||||
"DownloadClientStatusCheckAllClientMessage": "جميع عملاء التنزيل غير متاحين بسبب الفشل",
|
||||
@@ -556,7 +554,7 @@
|
||||
"CustomFormatSettings": "إعدادات التنسيقات المخصصة",
|
||||
"CustomFormat": "تنسيق مخصص",
|
||||
"CustomFormats": "تنسيقات مخصصة",
|
||||
"CutoffFormatScoreHelpText": "بمجرد الوصول إلى درجة التنسيق المخصص هذه ، لن يقوم Radarr بتنزيل الأفلام",
|
||||
"CutoffFormatScoreHelpText": "بمجرد الوصول إلى درجة التنسيق المخصص هذه ، لن يقوم {appName} بتنزيل الأفلام",
|
||||
"DeleteCustomFormat": "حذف التنسيق المخصص",
|
||||
"DeleteCustomFormatMessageText": "هل أنت متأكد أنك تريد حذف المفهرس \"{0}\"؟",
|
||||
"DeleteFormatMessageText": "هل تريد بالتأكيد حذف علامة التنسيق {0}؟",
|
||||
@@ -585,7 +583,7 @@
|
||||
"DeleteConditionMessageText": "هل أنت متأكد أنك تريد حذف العلامة \"{0}\"؟",
|
||||
"RemoveSelectedItemsQueueMessageText": "هل تريد بالتأكيد إزالة {0} عنصر {1} من قائمة الانتظار؟",
|
||||
"NoEventsFound": "لم يتم العثور على أحداث",
|
||||
"BlocklistReleaseHelpText": "يمنع Radarr من الاستيلاء على هذا الإصدار تلقائيًا مرة أخرى",
|
||||
"BlocklistReleaseHelpText": "يمنع {appName} من الاستيلاء على هذا الإصدار تلقائيًا مرة أخرى",
|
||||
"ApplyTagsHelpTextRemove": "إزالة: قم بإزالة العلامات التي تم إدخالها",
|
||||
"ApplyTagsHelpTextReplace": "استبدال: استبدل العلامات بالعلامات التي تم إدخالها (لا تدخل أي علامات لمسح جميع العلامات)",
|
||||
"DeleteSelectedDownloadClients": "حذف Download Client",
|
||||
@@ -617,7 +615,7 @@
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "القوائم غير متاحة بسبب الإخفاقات: {0}",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "بعض النتائج مخفية بواسطة عامل التصفية المطبق",
|
||||
"ConnectionLost": "انقطع الاتصال",
|
||||
"ConnectionLostReconnect": "سيحاول Radarr الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
|
||||
"ConnectionLostReconnect": "سيحاول {appName} الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
|
||||
"LastDuration": "المدة الماضية",
|
||||
"Large": "كبير",
|
||||
"WhatsNew": "ما هو الجديد؟",
|
||||
@@ -638,5 +636,22 @@
|
||||
"SelectQuality": "حدد الجودة",
|
||||
"CustomFilter": "مرشحات مخصصة",
|
||||
"IndexerFlags": "أعلام المفهرس",
|
||||
"InteractiveSearchModalHeader": "بحث تفاعلي"
|
||||
"InteractiveSearchModalHeader": "بحث تفاعلي",
|
||||
"ApiKey": "مفتاح API",
|
||||
"AuthBasic": "أساسي (المتصفح المنبثق)",
|
||||
"AuthForm": "النماذج (صفحة تسجيل الدخول)",
|
||||
"Enabled": "ممكن",
|
||||
"FailedLoadingSearchResults": "فشل تحميل نتائج البحث ، يرجى المحاولة مرة أخرى.",
|
||||
"DisabledForLocalAddresses": "معطل بسبب العناوين المحلية",
|
||||
"AptUpdater": "استخدم apt لتثبيت التحديث",
|
||||
"CurrentlyInstalled": "مثبتة حاليا",
|
||||
"DockerUpdater": "تحديث حاوية عامل الإرساء لتلقي التحديث",
|
||||
"ExternalUpdater": "تم تكوين {appName} لاستخدام آلية تحديث خارجية",
|
||||
"InstallLatest": "تثبيت الأحدث",
|
||||
"OnLatestVersion": "تم بالفعل تثبيت أحدث إصدار من {appName}",
|
||||
"Script": "النصي",
|
||||
"UnmappedFiles": "المجلدات غير المعينة",
|
||||
"UpdateAppDirectlyLoadError": "تعذر تحديث {appName} مباشرة ،",
|
||||
"Clone": "قريب",
|
||||
"BuiltIn": "مدمج"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"ApiKeyHelpTextWarning": "Изисква рестартиране, за да влезе в сила",
|
||||
"Enable": "Активиране",
|
||||
"MIA": "МВР",
|
||||
"Size": " Размер",
|
||||
@@ -7,7 +6,6 @@
|
||||
"20MinutesTwenty": "120 минути: {0}",
|
||||
"45MinutesFourtyFive": "90 минути: {0}",
|
||||
"60MinutesSixty": "60 минути: {0}",
|
||||
"APIKey": "API ключ",
|
||||
"About": "относно",
|
||||
"AddListExclusion": "Добавяне на изключване от списъка",
|
||||
"AddingTag": "Добавяне на таг",
|
||||
@@ -15,17 +13,17 @@
|
||||
"AlreadyInYourLibrary": "Вече във вашата библиотека",
|
||||
"AlternateTitles": "Алтернативно заглавие",
|
||||
"Analytics": "Анализ",
|
||||
"AnalyticsEnabledHelpText": "Изпращайте анонимна информация за използването и грешките до сървърите на Radarr. Това включва информация за вашия браузър, кои страници на Radarr WebUI използвате, отчитане на грешки, както и версията на операционната система и времето за изпълнение. Ще използваме тази информация, за да дадем приоритет на функциите и корекциите на грешки.",
|
||||
"AnalyticsEnabledHelpText": "Изпращайте анонимна информация за използването и грешките до сървърите на {appName}. Това включва информация за вашия браузър, кои страници на {appName} WebUI използвате, отчитане на грешки, както и версията на операционната система и времето за изпълнение. Ще използваме тази информация, за да дадем приоритет на функциите и корекциите на грешки.",
|
||||
"AnalyticsEnabledHelpTextWarning": "Изисква рестартиране, за да влезе в сила",
|
||||
"AppDataDirectory": "Директория на AppData",
|
||||
"ApplyTags": "Прилагане на тагове",
|
||||
"Authentication": "Удостоверяване",
|
||||
"AuthenticationMethodHelpText": "Изисквайте потребителско име и парола за достъп до Radarr",
|
||||
"AuthenticationMethodHelpText": "Изисквайте потребителско име и парола за достъп до {appName}",
|
||||
"AuthorClickToChangeBook": "Щракнете, за да промените филма",
|
||||
"AutoRedownloadFailedHelpText": "Автоматично търсете и се опитвайте да изтеглите различна версия",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Изтритите от диска филми автоматично се проследяват в Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Изтритите от диска филми автоматично се проследяват в {appName}",
|
||||
"Automatic": "Автоматично",
|
||||
"BackupFolderHelpText": "Относителните пътища ще бъдат в директорията AppData на Radarr",
|
||||
"BackupFolderHelpText": "Относителните пътища ще бъдат в директорията AppData на {appName}",
|
||||
"BackupNow": "Архивиране сега",
|
||||
"BackupRetentionHelpText": "Автоматичните архиви, по-стари от периода на съхранение, ще бъдат почистени автоматично",
|
||||
"Backups": "Архиви",
|
||||
@@ -38,16 +36,16 @@
|
||||
"Calendar": "Календар",
|
||||
"CalendarWeekColumnHeaderHelpText": "Показва се над всяка колона, когато седмицата е активният изглед",
|
||||
"Cancel": "Отказ",
|
||||
"CancelMessageText": "Наистина ли искате да отмените тази чакаща задача?",
|
||||
"CancelPendingTask": "Наистина ли искате да отмените тази чакаща задача?",
|
||||
"CertificateValidation": "Валидиране на сертификат",
|
||||
"CertificateValidationHelpText": "Променете колко строго е валидирането на HTTPS сертифициране",
|
||||
"ChangeFileDate": "Промяна на датата на файла",
|
||||
"ChangeHasNotBeenSavedYet": "Промяната все още не е запазена",
|
||||
"ChmodFolder": "chmod папка",
|
||||
"ChmodFolderHelpText": "Осмично, приложено по време на импортиране / преименуване към медийни папки и файлове (без битове за изпълнение)",
|
||||
"ChmodFolderHelpTextWarning": "Това работи само ако потребителят, работещ с Radarr, е собственик на файла. По-добре е да се уверите, че клиентът за изтегляне правилно задава разрешенията.",
|
||||
"ChmodFolderHelpTextWarning": "Това работи само ако потребителят, работещ с {appName}, е собственик на файла. По-добре е да се уверите, че клиентът за изтегляне правилно задава разрешенията.",
|
||||
"ChownGroupHelpText": "Име на група или gid. Използвайте gid за отдалечени файлови системи.",
|
||||
"ChownGroupHelpTextWarning": "Това работи само ако потребителят, работещ с Radarr, е собственик на файла. По-добре е да се уверите, че клиентът за изтегляне използва същата група като Radarr.",
|
||||
"ChownGroupHelpTextWarning": "Това работи само ако потребителят, работещ с {appName}, е собственик на файла. По-добре е да се уверите, че клиентът за изтегляне използва същата група като {appName}.",
|
||||
"Clear": "Ясно",
|
||||
"ClickToChangeQuality": "Щракнете, за да промените качеството",
|
||||
"ClientPriority": "Приоритет на клиента",
|
||||
@@ -59,10 +57,10 @@
|
||||
"ConnectSettings": "Настройки за свързване",
|
||||
"Connections": "Връзки",
|
||||
"CopyUsingHardlinksHelpText": "Използвайте твърди връзки, когато се опитвате да копирате файлове от торенти, които все още се посяват",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Понякога заключванията на файлове могат да попречат на преименуване на файлове, които се засяват. Можете временно да деактивирате засяването и да използвате функцията за преименуване на Radarr като работа.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Понякога заключванията на файлове могат да попречат на преименуване на файлове, които се засяват. Можете временно да деактивирате засяването и да използвате функцията за преименуване на {appName} като работа.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Създайте липсващи папки с филми по време на сканиране на диска",
|
||||
"CreateGroup": "Създай група",
|
||||
"CutoffHelpText": "След достигане на това качество Radarr вече няма да изтегля филми",
|
||||
"CutoffHelpText": "След достигане на това качество {appName} вече няма да изтегля филми",
|
||||
"CutoffUnmet": "Прекъсване Неудовлетворено",
|
||||
"DatabaseMigration": "DB миграция",
|
||||
"Dates": "Дати",
|
||||
@@ -141,7 +139,7 @@
|
||||
"Grab": "Грабнете",
|
||||
"GrabID": "Идентификатор на грабване",
|
||||
"GrabRelease": "Grab Release",
|
||||
"GrabReleaseMessageText": "Radarr не успя да определи за кой филм е предназначено това издание. Radarr може да не може автоматично да импортира тази версия. Искате ли да вземете „{0}“?",
|
||||
"GrabReleaseMessageText": "{appName} не успя да определи за кой филм е предназначено това издание. {appName} може да не може автоматично да импортира тази версия. Искате ли да вземете „{0}“?",
|
||||
"GrabSelected": "Grab Selected",
|
||||
"Group": "Група",
|
||||
"HasPendingChangesNoChanges": "Без промени",
|
||||
@@ -164,7 +162,7 @@
|
||||
"ImportedTo": "Внос в",
|
||||
"Importing": "Импортиране",
|
||||
"IncludeHealthWarningsHelpText": "Включете здравни предупреждения",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Показване на елементи без филм в опашката. Това може да включва премахнати филми или нещо друго от категорията на Radarr",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Показване на елементи без филм в опашката. Това може да включва премахнати филми или нещо друго от категорията на {appName}",
|
||||
"IncludeUnmonitored": "Включете Без наблюдение",
|
||||
"Indexer": "Индексатор",
|
||||
"IndexerPriority": "Индексатор Приоритет",
|
||||
@@ -175,7 +173,7 @@
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Надстройте, докато това качество бъде постигнато или надвишено",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Не може да се изтрие, докато се използва",
|
||||
"Language": "Език",
|
||||
"LaunchBrowserHelpText": " Отворете уеб браузър и отворете началната страница на Radarr при стартиране на приложението.",
|
||||
"LaunchBrowserHelpText": " Отворете уеб браузър и отворете началната страница на {appName} при стартиране на приложението.",
|
||||
"LoadingBookFilesFailed": "Зареждането на филмови файлове не бе успешно",
|
||||
"Local": "Местен",
|
||||
"LogFiles": "Лог файлове",
|
||||
@@ -256,7 +254,7 @@
|
||||
"RSSSync": "RSS синхронизиране",
|
||||
"RSSSyncInterval": "RSS интервал за синхронизиране",
|
||||
"ReadTheWikiForMoreInformation": "Прочетете Wiki за повече информация",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Radarr поддържа всеки индексатор, който използва стандарта Newznab, както и други индексатори, изброени по-долу.",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} поддържа всеки индексатор, който използва стандарта Newznab, както и други индексатори, изброени по-долу.",
|
||||
"ReadarrTags": "Радарни маркери",
|
||||
"Real": "Истински",
|
||||
"Reason": "Причина",
|
||||
@@ -285,19 +283,19 @@
|
||||
"RemoveTagExistingTag": "Съществуващ маркер",
|
||||
"RemoveTagRemovingTag": "Премахване на етикет",
|
||||
"RemovedFromTaskQueue": "Премахнато от опашката на задачите",
|
||||
"RenameBooksHelpText": "Radarr ще използва съществуващото име на файл, ако преименуването е деактивирано",
|
||||
"RenameBooksHelpText": "{appName} ще използва съществуващото име на файл, ако преименуването е деактивирано",
|
||||
"Reorder": "Пренареждане",
|
||||
"ReplaceIllegalCharacters": "Заменете незаконните символи",
|
||||
"RequiredHelpText": "Освобождаването трябва да съдържа поне един от тези термини (без регистрация)",
|
||||
"RequiredPlaceHolder": "Добавете ново ограничение",
|
||||
"RescanAfterRefreshHelpTextWarning": "Radarr няма автоматично да открива промени във файлове, когато не е зададено на „Винаги“",
|
||||
"RescanAfterRefreshHelpTextWarning": "{appName} няма автоматично да открива промени във файлове, когато не е зададено на „Винаги“",
|
||||
"RescanAuthorFolderAfterRefresh": "Повторно сканиране на папка за филм след опресняване",
|
||||
"Reset": "Нулиране",
|
||||
"ResetAPIKey": "Нулиране на API ключ",
|
||||
"ResetAPIKeyMessageText": "Наистина ли искате да нулирате своя API ключ?",
|
||||
"Restart": "Рестартирам",
|
||||
"RestartNow": "Рестартирай сега",
|
||||
"RestartReadarr": "Рестартирайте Radarr",
|
||||
"RestartReadarr": "Рестартирайте {appName}",
|
||||
"Restore": "Възстанови",
|
||||
"RestoreBackup": "Възстанови архива",
|
||||
"Result": "Резултат",
|
||||
@@ -337,7 +335,7 @@
|
||||
"ShowSizeOnDisk": "Показване на размера на диска",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Показва се над всяка колона, когато седмицата е активният изглед",
|
||||
"SkipFreeSpaceCheck": "Пропуснете проверката на свободното пространство",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Използвайте, когато Radarr не е в състояние да открие свободно място от основната папка на вашия филм",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Използвайте, когато {appName} не е в състояние да открие свободно място от основната папка на вашия филм",
|
||||
"SorryThatAuthorCannotBeFound": "За съжаление този филм не може да бъде намерен.",
|
||||
"SorryThatBookCannotBeFound": "За съжаление този филм не може да бъде намерен.",
|
||||
"Source": "Източник",
|
||||
@@ -355,7 +353,7 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Успех! Работата ми приключи, няма файлове за преименуване.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS не се поддържа с този индексатор",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Търсенето не се поддържа с този индексатор",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Ще се използва, когато се извършват автоматични търсения чрез потребителския интерфейс или от Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Ще се използва, когато се извършват автоматични търсения чрез потребителския интерфейс или от {appName}",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Ще се използва, когато се използва интерактивно търсене",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Етикетът не се използва и може да бъде изтрит",
|
||||
"Tags": "Етикети",
|
||||
@@ -372,7 +370,7 @@
|
||||
"Torrents": "Торенти",
|
||||
"TotalFileSize": "Общ размер на файла",
|
||||
"UILanguage": "Език на потребителския интерфейс",
|
||||
"UILanguageHelpText": "Език, който Radarr ще използва за потребителски интерфейс",
|
||||
"UILanguageHelpText": "Език, който {appName} ще използва за потребителски интерфейс",
|
||||
"UILanguageHelpTextWarning": "Необходимо е презареждане на браузъра",
|
||||
"UISettings": "Настройки на потребителския интерфейс",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Не може да се добави нов клиент за изтегляне, моля, опитайте отново.",
|
||||
@@ -412,7 +410,7 @@
|
||||
"UnmonitoredHelpText": "Включете непроменени филми в iCal емисията",
|
||||
"UpdateAll": "Актуализирай всички",
|
||||
"UpdateAutomaticallyHelpText": "Автоматично изтегляне и инсталиране на актуализации. Все още ще можете да инсталирате от System: Updates",
|
||||
"UpdateMechanismHelpText": "Използвайте вградения в Radarr актуализатор или скрипт",
|
||||
"UpdateMechanismHelpText": "Използвайте вградения в {appName} актуализатор или скрипт",
|
||||
"UpdateScriptPathHelpText": "Път към персонализиран скрипт, който взема извлечен пакет за актуализация и обработва останалата част от процеса на актуализация",
|
||||
"Updates": "Актуализации",
|
||||
"UpgradeAllowedHelpText": "Ако инвалидните качества няма да бъдат надградени",
|
||||
@@ -424,8 +422,8 @@
|
||||
"UsenetDelay": "Usenet Delay",
|
||||
"UsenetDelayHelpText": "Забавете за минути, за да изчакате, преди да вземете съобщение от Usenet",
|
||||
"Username": "Потребителско име",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Клон, който да се използва за актуализиране на Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Клон, използван от външен механизъм за актуализация",
|
||||
"BranchUpdate": "Клон, който да се използва за актуализиране на {appName}",
|
||||
"BranchUpdateMechanism": "Клон, използван от външен механизъм за актуализация",
|
||||
"Version": "Версия",
|
||||
"WeekColumnHeader": "Заглавка на колоната на седмицата",
|
||||
"Year": "Година",
|
||||
@@ -438,7 +436,7 @@
|
||||
"UnableToLoadMetadataProfiles": "Профилите за забавяне не могат да се заредят",
|
||||
"SslCertPathHelpTextWarning": "Изисква рестартиране, за да влезе в сила",
|
||||
"DownloadClientCheckDownloadingToRoot": "Клиентът за изтегляне {0} поставя изтеглянията в основната папка {1}. Не трябва да изтегляте в основна папка.",
|
||||
"ReplaceIllegalCharactersHelpText": "Заменете незаконните символи. Ако не е отметнато, Radarr ще ги премахне вместо това",
|
||||
"ReplaceIllegalCharactersHelpText": "Заменете незаконните символи. Ако не е отметнато, {appName} ще ги премахне вместо това",
|
||||
"Actions": "Действия",
|
||||
"Tomorrow": "Утре",
|
||||
"Today": "Днес",
|
||||
@@ -455,12 +453,12 @@
|
||||
"RemoveFromBlocklist": "Премахване от черния списък",
|
||||
"Time": "Време",
|
||||
"UnableToLoadBlocklist": "Черният списък не може да се зареди",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Клон {0} не е валиден клон за издаване на Radarr, няма да получавате актуализации",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Клон {0} не е валиден клон за издаване на {appName}, няма да получавате актуализации",
|
||||
"Blocklist": "Черен списък",
|
||||
"BlocklistRelease": "Освобождаване на черния списък",
|
||||
"SelectAll": "Избери всичко",
|
||||
"SelectedCountBooksSelectedInterp": "{0} Избран / и филм / и",
|
||||
"ThisCannotBeCancelled": "Това не може да бъде отменено след стартиране без рестартиране на Radarr.",
|
||||
"ThisCannotBeCancelled": "Това не може да бъде отменено след стартиране без рестартиране на {appName}.",
|
||||
"UnselectAll": "Деселектирайте всички",
|
||||
"UpdateSelected": "Избрана актуализация",
|
||||
"Wanted": "Издирва се",
|
||||
@@ -488,12 +486,12 @@
|
||||
"ImportListStatusCheckSingleClientMessage": "Списъци, недостъпни поради неуспехи: {0}",
|
||||
"IndexerPriorityHelpText": "Приоритет на индексатора от 1 (най-висок) до 50 (най-нисък). По подразбиране: 25.",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Всички rss-съвместими индексатори са временно недостъпни поради скорошни грешки в индексатора",
|
||||
"IndexerRssHealthCheckNoIndexers": "Няма налични индексатори с активирана RSS синхронизация, Radarr няма да взема автоматично нови версии",
|
||||
"IndexerRssHealthCheckNoIndexers": "Няма налични индексатори с активирана RSS синхронизация, {appName} няма да взема автоматично нови версии",
|
||||
"Lists": "Списъци",
|
||||
"QueueIsEmpty": "Опашката е празна",
|
||||
"RefreshAndScan": "Опресняване и сканиране",
|
||||
"RescanAfterRefreshHelpText": "Повторно сканиране на папката с филм след освежаване на филма",
|
||||
"RestartReloadNote": "Забележка: Radarr автоматично ще рестартира и презареди потребителския интерфейс по време на процеса на възстановяване.",
|
||||
"RestartReloadNote": "Забележка: {appName} автоматично ще рестартира и презареди потребителския интерфейс по време на процеса на възстановяване.",
|
||||
"SearchFiltered": "Търсене Филтрирано",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Не може да се комуникира с {0}.",
|
||||
"Connect": "Свържете",
|
||||
@@ -503,10 +501,10 @@
|
||||
"HealthNoIssues": "Няма проблеми с вашата конфигурация",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Няма наличен клиент за изтегляне",
|
||||
"IndexersSettingsSummary": "Индексатори и ограничения за освобождаване",
|
||||
"MissingFromDisk": "Whisparr не можа да намери файла на диска, така че той беше премахнат",
|
||||
"MissingFromDisk": "{appName} не можа да намери файла на диска, така че той беше премахнат",
|
||||
"MediaManagement": "Управление на медиите",
|
||||
"Metadata": "Метаданни",
|
||||
"ReadarrSupportsAnyDownloadClient": "Whisparr поддържа всеки клиент за изтегляне, който използва стандарта Newznab, както и други клиенти за изтегляне, изброени по-долу.",
|
||||
"ReadarrSupportsAnyDownloadClient": "{appName} поддържа всеки клиент за изтегляне, който използва стандарта Newznab, както и други клиенти за изтегляне, изброени по-долу.",
|
||||
"RootFolderCheckSingleMessage": "Липсваща основна папка: {0}",
|
||||
"SettingsRemotePathMappingLocalPath": "Местен път",
|
||||
"SettingsRemotePathMappingRemotePath": "Отдалечен път",
|
||||
@@ -514,9 +512,9 @@
|
||||
"Yesterday": "Вчера",
|
||||
"Disabled": "хора с увреждания",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Всички индексатори са недостъпни поради грешки за повече от 6 часа",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Няма налични индексатори с активирано автоматично търсене, Radarr няма да предоставя резултати от автоматично търсене",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Няма налични индексатори с активирано автоматично търсене, {appName} няма да предоставя резултати от автоматично търсене",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Всички индексатори с възможност за търсене са временно недостъпни поради скорошни грешки в индексатора",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Няма налични индексатори с активирано интерактивно търсене, Radarr няма да предоставя никакви интерактивни резултати от търсенето",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Няма налични индексатори с активирано интерактивно търсене, {appName} няма да предоставя никакви интерактивни резултати от търсенето",
|
||||
"IndexerStatusCheckAllClientMessage": "Всички индексатори са недостъпни поради грешки",
|
||||
"IndexerStatusCheckSingleClientMessage": "Индексатори не са налични поради грешки: {0}",
|
||||
"MaintenanceRelease": "Издание за поддръжка: поправки на грешки и други подобрения. Вижте История на комисиите на Github за повече подробности",
|
||||
@@ -531,7 +529,7 @@
|
||||
"ProxyCheckFailedToTestMessage": "Неуспешно тестване на прокси: {0}",
|
||||
"ProxyCheckResolveIpMessage": "Неуспешно разрешаване на IP адреса за конфигурирания прокси хост {0}",
|
||||
"Queued": "На опашка",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Път, който Radarr трябва да използва за локален достъп до отдалечения път",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Път, който {appName} трябва да използва за локален достъп до отдалечения път",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Основен път към директорията, до която клиентът за изтегляне има достъп",
|
||||
"ShowUnknownAuthorItems": "Показване на непознати филмови елементи",
|
||||
"SystemTimeCheckMessage": "Системното време е изключено с повече от 1 ден. Планираните задачи може да не се изпълняват правилно, докато времето не бъде коригирано",
|
||||
@@ -556,7 +554,7 @@
|
||||
"CustomFormat": "Персонализиран формат",
|
||||
"CustomFormatSettings": "Настройки на персонализирани формати",
|
||||
"CustomFormats": "Персонализирани формати",
|
||||
"CutoffFormatScoreHelpText": "След като бъде постигнат резултатът от този персонализиран формат, Radarr вече няма да изтегля филми",
|
||||
"CutoffFormatScoreHelpText": "След като бъде постигнат резултатът от този персонализиран формат, {appName} вече няма да изтегля филми",
|
||||
"DeleteCustomFormat": "Изтриване на потребителски формат",
|
||||
"DeleteFormatMessageText": "Наистина ли искате да изтриете маркер за формат {0}?",
|
||||
"ExportCustomFormat": "Експортиране на потребителски формат",
|
||||
@@ -606,7 +604,7 @@
|
||||
"Small": "Малък",
|
||||
"System": "Система",
|
||||
"Ui": "Потребителски интерфейс",
|
||||
"ConnectionLostReconnect": "Radarr ще се опита да се свърже автоматично или можете да щракнете върху презареждане по-долу.",
|
||||
"ConnectionLostReconnect": "{appName} ще се опита да се свърже автоматично или можете да щракнете върху презареждане по-долу.",
|
||||
"TotalSpace": "Общо пространство",
|
||||
"Events": "Събития",
|
||||
"Large": "Голям",
|
||||
@@ -638,5 +636,22 @@
|
||||
"CustomFilter": "Персонализирани филтри",
|
||||
"RemoveQueueItemConfirmation": "Наистина ли искате да премахнете {0} елемент {1} от опашката?",
|
||||
"IndexerFlags": "Индексиращи знамена",
|
||||
"InteractiveSearchModalHeader": "Интерактивно търсене"
|
||||
"InteractiveSearchModalHeader": "Интерактивно търсене",
|
||||
"FailedLoadingSearchResults": "Неуспешно зареждане на резултатите от търсенето, моля, опитайте отново.",
|
||||
"ApiKey": "API ключ",
|
||||
"AuthBasic": "Основно (изскачащ прозорец на браузъра)",
|
||||
"AuthForm": "Формуляри (Страница за вход)",
|
||||
"DisabledForLocalAddresses": "Забранено за местни адреси",
|
||||
"Enabled": "Активирано",
|
||||
"AptUpdater": "Използвайте apt, за да инсталирате актуализацията",
|
||||
"BuiltIn": "Вграден",
|
||||
"CurrentlyInstalled": "Понастоящем инсталиран",
|
||||
"ExternalUpdater": "{appName} е конфигуриран да използва външен механизъм за актуализация",
|
||||
"Script": "Сценарий",
|
||||
"UnmappedFiles": "Немапирани папки",
|
||||
"UpdateAppDirectlyLoadError": "Не може да се актуализира {appName} директно,",
|
||||
"Clone": "Близо",
|
||||
"DockerUpdater": "актуализирайте контейнера на докера, за да получите актуализацията",
|
||||
"InstallLatest": "Инсталирайте най-новите",
|
||||
"OnLatestVersion": "Вече е инсталирана най-новата версия на {appName}"
|
||||
}
|
||||
|
||||
@@ -428,25 +428,25 @@
|
||||
"BlocklistRelease": "Publicació de la llista de bloqueig",
|
||||
"HasPendingChangesNoChanges": "Sense Canvis",
|
||||
"ManualImportSelectEdition": "Importació manual - Seleccioneu la pel·lícula",
|
||||
"MissingFromDisk": "Radarr no ha pogut trobar el fitxer al disc, de manera que el fitxer es desenllaçarà de la pel·lícula a la base de dades",
|
||||
"MissingFromDisk": "{appName} no ha pogut trobar el fitxer al disc, de manera que el fitxer es desenllaçarà de la pel·lícula a la base de dades",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS no és compatible amb aquest indexador",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "S'utilitzarà quan es realitzin cerques automàtiques mitjançant la interfície d'usuari o per Radarr",
|
||||
"CutoffHelpText": "Un cop s'assoleixi aquesta qualitat, Radarr ja no baixarà pel·lícules",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "S'utilitzarà quan es realitzin cerques automàtiques mitjançant la interfície d'usuari o per {appName}",
|
||||
"CutoffHelpText": "Un cop s'assoleixi aquesta qualitat, {appName} ja no baixarà pel·lícules",
|
||||
"ResetAPIKeyMessageText": "Esteu segur que voleu restablir la clau API?",
|
||||
"PropersAndRepacks": "Propietats i Repacks",
|
||||
"RemotePathMappingCheckFolderPermissions": "Radarr pot veure però no accedir al directori de descàrregues {0}. Error de permisos probable.",
|
||||
"RemotePathMappingCheckFolderPermissions": "{appName} pot veure però no accedir al directori de descàrregues {0}. Error de permisos probable.",
|
||||
"RescanAuthorFolderAfterRefresh": "Torna a escanejar la carpeta de pel·lícules després de l'actualització",
|
||||
"RescanAfterRefreshHelpText": "Torneu a escanejar la carpeta de la pel·lícula després d'actualitzar la pel·lícula",
|
||||
"RestartReadarr": "Reinicia Radarr",
|
||||
"RestartReadarr": "Reinicia {appName}",
|
||||
"ShowRelativeDatesHelpText": "Mostra dates relatives (avui/ahir/etc) o absolutes",
|
||||
"ShowSearchActionHelpText": "Mostra el botó de cerca al passar el cursor",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "La carpeta de pel·lícules '{0}' i tot el seu contingut es suprimiran.",
|
||||
"UrlBaseHelpTextWarning": "Cal reiniciar perquè tingui efecte",
|
||||
"ApplicationURL": "URL de l'aplicació",
|
||||
"ApplicationUrlHelpText": "URL extern de l'aplicació, inclòs http(s)://, port i URL base",
|
||||
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData del Radarr",
|
||||
"CancelMessageText": "Esteu segur que voleu cancel·lar aquesta tasca pendent?",
|
||||
"ChownGroupHelpTextWarning": "Això només funciona si l'usuari que executa Radarr és el propietari del fitxer. És millor assegurar-se que el client de descàrrega utilitza el mateix grup que Radarr.",
|
||||
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData del {appName}",
|
||||
"CancelPendingTask": "Esteu segur que voleu cancel·lar aquesta tasca pendent?",
|
||||
"ChownGroupHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega utilitza el mateix grup que {appName}.",
|
||||
"ConnectSettingsSummary": "Notificacions, connexions a servidors/reproductors multimèdia i scripts personalitzats",
|
||||
"DeleteEmptyFoldersHelpText": "Suprimeix les carpetes de pel·lícules buides durant l'exploració del disc i quan s'esborren els fitxers de pel·lícules",
|
||||
"DeleteImportListMessageText": "Esteu segur que voleu suprimir la llista '{name}'?",
|
||||
@@ -454,26 +454,26 @@
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Per obtenir més informació sobre els clients de baixada individuals, feu clic als botons de més informació.",
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Per obtenir més informació sobre els indexadors individuals, feu clic als botons d'informació.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Per obtenir més informació sobre les llistes d'importació individuals, feu clic als botons d'informació.",
|
||||
"IndexerPriorityHelpText": "Prioritat de l'indexador d'1 (la més alta) a 50 (la més baixa). Per defecte: 25. S'utilitza quan s'agafa llançaments com a desempat per a versions iguals, Radarr encara utilitzarà tots els indexadors habilitats per a la sincronització i la cerca RSS",
|
||||
"IndexerRssHealthCheckNoIndexers": "No hi ha indexadors disponibles amb la sincronització RSS activada, Radarr no capturarà les noves versions automàticament",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "No hi ha indexadors disponibles amb la cerca automàtica activada, Radarr no proporcionarà cap resultat de cerca automàtica",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "No hi ha indexadors amb la cerca interactiva activada, Radarr no obtindrà cap resultat de cerca",
|
||||
"IndexerPriorityHelpText": "Prioritat de l'indexador d'1 (la més alta) a 50 (la més baixa). Per defecte: 25. S'utilitza quan s'agafa llançaments com a desempat per a versions iguals, {appName} encara utilitzarà tots els indexadors habilitats per a la sincronització i la cerca RSS",
|
||||
"IndexerRssHealthCheckNoIndexers": "No hi ha indexadors disponibles amb la sincronització RSS activada, {appName} no capturarà les noves versions automàticament",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "No hi ha indexadors disponibles amb la cerca automàtica activada, {appName} no proporcionarà cap resultat de cerca automàtica",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "No hi ha indexadors amb la cerca interactiva activada, {appName} no obtindrà cap resultat de cerca",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Actualitzeu fins que s'assoleixi o superi aquesta qualitat",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "No es pot suprimir mentre està en ús",
|
||||
"LaunchBrowserHelpText": " Obriu un navegador web i navegueu a la pàgina d'inici de Lidarr a l'inici de l'aplicació.",
|
||||
"LaunchBrowserHelpText": " Obriu un navegador web i navegueu a la pàgina d'inici de {appName} a l'inici de l'aplicació.",
|
||||
"LoadingBookFilesFailed": "No s'han pogut carregar els fitxers de pel·lícules",
|
||||
"NoHistory": "Sense història",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Al suprimir el fitxer de pel·lícula per a l'actualització",
|
||||
"OnBookFileDeleteHelpText": "Al suprimir fitxer de pel·lícula",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "La branca {0} no és una branca de llançament de Radarr vàlida, no rebreu actualitzacions",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "La branca {0} no és una branca de llançament de {appName} vàlida, no rebreu actualitzacions",
|
||||
"ReleaseDate": "Dates de llançament",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr pot veure però no accedir a la pel·lícula baixada {0}. Error de permisos probable.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "El client de baixada {0} ha informat de fitxers a {1} però Radarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
|
||||
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1} però Radarr no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
|
||||
"ReplaceIllegalCharactersHelpText": "Substitueix caràcters il·legals. Si no es marca, Radarr els eliminarà",
|
||||
"RemotePathMappingCheckDownloadPermissions": "{appName} pot veure però no accedir a la pel·lícula baixada {0}. Error de permisos probable.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "El client de baixada {0} ha informat de fitxers a {1} però {appName} no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
|
||||
"RemotePathMappingCheckGenericPermissions": "El client de baixada {0} col·loca les baixades a {1} però {appName} no pot veure aquest directori. És possible que hàgiu d'ajustar els permisos de la carpeta.",
|
||||
"ReplaceIllegalCharactersHelpText": "Substitueix caràcters il·legals. Si no es marca, {appName} els eliminarà",
|
||||
"RssSyncIntervalHelpText": "Interval en minuts. Establiu a zero per desactivar (això aturarà tota captura automàtica de llançaments)",
|
||||
"SelectedCountBooksSelectedInterp": "S'han seleccionat {0} pel·lícules",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Camí que Radarr hauria d'utilitzar per accedir al camí remot localment",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Camí que {appName} hauria d'utilitzar per accedir al camí remot localment",
|
||||
"ShortDateFormat": "Format de data curta",
|
||||
"ShowBookTitleHelpText": "Mostra el títol de la pel·lícula sota el cartell",
|
||||
"ShowRelativeDates": "Mostra les dates relatives",
|
||||
@@ -487,11 +487,11 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Èxit! La feina està acabada, no hi ha fitxers per canviar el nom.",
|
||||
"TimeLeft": "Temps restant",
|
||||
"UnableToLoadImportListExclusions": "No es poden carregar les exclusions de la llista",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Branca que s'utilitza per actualitzar Radarr",
|
||||
"BranchUpdate": "Branca que s'utilitza per actualitzar {appName}",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "Agent d'usuari proporcionat per l'aplicació per fer peticions a l'API",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branca utilitzada pel mecanisme d'actualització extern",
|
||||
"BranchUpdateMechanism": "Branca utilitzada pel mecanisme d'actualització extern",
|
||||
"WriteTagsNo": "Mai",
|
||||
"RestartReloadNote": "Nota: Radarr es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
|
||||
"RestartReloadNote": "Nota: {appName} es reiniciarà i tornarà a carregar automàticament la interfície d'usuari durant el procés de restauració.",
|
||||
"Series": "Sèries",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Es mostra a sobre de cada columna quan la setmana és la visualització activa",
|
||||
"SorryThatAuthorCannotBeFound": "Ho sentim, aquesta pel·lícula no s'ha trobat.",
|
||||
@@ -500,27 +500,25 @@
|
||||
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Això s'aplicarà a tots els indexadors, si us plau, seguiu les regles establertes per ells",
|
||||
"UnableToLoadHistory": "No es pot carregar l'historial",
|
||||
"IconTooltip": "Programat",
|
||||
"ReadarrTags": "Etiquetes de Radarr",
|
||||
"ReadarrTags": "Etiquetes de {appName}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Si s'ha d'actualitzar automàticament o no a Propers/Repacks",
|
||||
"GrabReleaseMessageText": "Lidarr no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que Lidarr no pugui importar automàticament aquesta versió. Voleu capturar \"{0}\"?",
|
||||
"GrabReleaseMessageText": "{appName} no ha pogut determinar per a quina pel·lícula era aquest llançament. És possible que {appName} no pugui importar automàticament aquesta versió. Voleu capturar \"{0}\"?",
|
||||
"IsCutoffCutoff": "Requisit",
|
||||
"MountCheckMessage": "El muntatge que conté una ruta de pel·lícula es munta com a només de lectura: ",
|
||||
"APIKey": "Clau API",
|
||||
"ApiKeyHelpTextWarning": "Cal reiniciar perquè tingui efecte",
|
||||
"RescanAfterRefreshHelpTextWarning": "Radarr no detectarà automàticament els canvis als fitxers quan no estigui configurat com a \"Sempre\"",
|
||||
"RescanAfterRefreshHelpTextWarning": "{appName} no detectarà automàticament els canvis als fitxers quan no estigui configurat com a \"Sempre\"",
|
||||
"ShowUnknownAuthorItems": "Mostra elements de pel·lícula desconeguda",
|
||||
"Size": " Mida",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Utilitzeu-lo quan Lidarr no pugui detectar espai lliure a la carpeta arrel de la pel·lícula",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Utilitzeu-lo quan {appName} no pugui detectar espai lliure a la carpeta arrel de la pel·lícula",
|
||||
"StandardBookFormat": "Format de pel·lícula estàndard",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "No es pot afegir una nova llista d'exclusió, torneu-ho a provar.",
|
||||
"UnableToLoadReleaseProfiles": "No es poden carregar els perfils de retard",
|
||||
"UnmonitoredHelpText": "Inclou pel·lícules no monitorades al canal iCal",
|
||||
"UpdateAll": "Actualitzar-ho tot",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Les pel·lícules suprimides del disc no es descarten automàticament al {appName}",
|
||||
"ChownGroupHelpText": "Nom del grup o gid. Utilitzeu gid per a sistemes de fitxers remots.",
|
||||
"AuthorClickToChangeBook": "Feu clic per canviar la pel·lícula",
|
||||
"ChmodFolderHelpTextWarning": "Això només funciona si l'usuari que executa Radarr és el propietari del fitxer. És millor assegurar-se que el client de descàrrega estableixi correctament els permisos.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "De tant en tant, els bloquejos de fitxers poden impedir reanomenar els fitxers que s'estan sembrant. Podeu desactivar temporalment la compartició i utilitzar la funció de reanomenar de Radarr com a solució.",
|
||||
"ChmodFolderHelpTextWarning": "Això només funciona si l'usuari que executa {appName} és el propietari del fitxer. És millor assegurar-se que el client de descàrrega estableixi correctament els permisos.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "De tant en tant, els bloquejos de fitxers poden impedir reanomenar els fitxers que s'estan sembrant. Podeu desactivar temporalment la compartició i utilitzar la funció de reanomenar de {appName} com a solució.",
|
||||
"CouldntFindAnyResultsForTerm": "No s'ha pogut trobar cap resultat per a '{0}'",
|
||||
"CreateEmptyAuthorFolders": "Creeu carpetes buides per a les pel·lícules",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Creeu carpetes de pel·lícules que falten durant l'exploració del disc",
|
||||
@@ -538,15 +536,15 @@
|
||||
"MetadataProfiles": "perfil de metadades",
|
||||
"OnBookFileDelete": "Al suprimir fitxer de pel·lícula",
|
||||
"OnBookFileDeleteForUpgrade": "Al suprimir el fitxer de pel·lícula per a l'actualització",
|
||||
"ReadarrSupportsAnyDownloadClient": "Radarr admet molts clients de baixada de torrent i usenet populars.",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Radarr admet qualsevol indexador que utilitzi l'estàndard Newznab, així com altres indexadors que s'enumeren a continuació.",
|
||||
"ReadarrSupportsAnyDownloadClient": "{appName} admet molts clients de baixada de torrent i usenet populars.",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} admet qualsevol indexador que utilitzi l'estàndard Newznab, així com altres indexadors que s'enumeren a continuació.",
|
||||
"RecycleBinHelpText": "Els fitxers de pel·lícula aniran aquí quan se suprimeixin en lloc de suprimir-se permanentment",
|
||||
"RenameBooksHelpText": "Radarr utilitzarà el nom del fitxer existent si el reanomenat està desactivat",
|
||||
"RenameBooksHelpText": "{appName} utilitzarà el nom del fitxer existent si el reanomenat està desactivat",
|
||||
"RequiredHelpText": "El llançament ha de contenir almenys un d'aquests termes (no distingeix entre majúscules i minúscules)",
|
||||
"UILanguageHelpText": "Idioma que utilitzarà Radarr per a la interfície d'usuari",
|
||||
"UILanguageHelpText": "Idioma que utilitzarà {appName} per a la interfície d'usuari",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "No es pot afegir un indexador nou, torneu-ho a provar.",
|
||||
"UnableToLoadMetadataProfiles": "No es poden carregar els perfils de qualitat",
|
||||
"UpdateMechanismHelpText": "Utilitzeu l'actualitzador integrat de Radarr o un script",
|
||||
"UpdateMechanismHelpText": "Utilitzeu l'actualitzador integrat de {appName} o un script",
|
||||
"UpdateSelected": "Actualització seleccionada",
|
||||
"Database": "Base de dades",
|
||||
"DeleteQualityProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat '{name}'?",
|
||||
@@ -555,22 +553,22 @@
|
||||
"DeleteRootFolderMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
|
||||
"DeleteSelectedBookFiles": "Suprimeix els fitxers de pel·lícules seleccionats",
|
||||
"DeleteSelectedBookFilesMessageText": "Esteu segur que voleu suprimir els fitxers de pel·lícules seleccionats?",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mostra elements sense pel·lícula a la cua. Això podria incloure pel·lícules eliminades o qualsevol altra cosa de la categoria de Lidarr",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mostra elements sense pel·lícula a la cua. Això podria incloure pel·lícules eliminades o qualsevol altra cosa de la categoria de {appName}",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "El registre de traça només s'hauria d'habilitar temporalment",
|
||||
"PortHelpTextWarning": "Cal reiniciar perquè tingui efecte",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr no ha pogut importar una pel·lícula. Comproveu els vostres registres per obtenir més informació.",
|
||||
"RemotePathMappingCheckImportFailed": "{appName} no ha pogut importar una pel·lícula. Comproveu els vostres registres per obtenir més informació.",
|
||||
"RemoveTagExistingTag": "Etiqueta existent",
|
||||
"RemoveTagRemovingTag": "S'està eliminant l'etiqueta",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "La cerca no és compatible amb aquest indexador",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "No es pot afegir un perfil de qualitat nou, torneu-ho a provar.",
|
||||
"RequiredPlaceHolder": "Afegeix una nova restricció",
|
||||
"20MinutesTwenty": "60 minuts: {0}",
|
||||
"20MinutesTwenty": "20 minuts: {0}",
|
||||
"AlternateTitles": "Títols alternatius",
|
||||
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de Radarr. Això inclou informació sobre el vostre navegador, quines pàgines Radarr WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió del temps d'execució. Utilitzarem aquesta informació per prioritzar les funcions i les correccions d'errors.",
|
||||
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de {appName}. Això inclou informació sobre el vostre navegador, quines pàgines {appName} WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió del temps d'execució. Utilitzarem aquesta informació per prioritzar les funcions i les correccions d'errors.",
|
||||
"AnalyticsEnabledHelpTextWarning": "Cal reiniciar perquè tingui efecte",
|
||||
"AuthenticationMethodHelpText": "Requereix nom d'usuari i contrasenya per accedir al radar",
|
||||
"CalendarWeekColumnHeaderHelpText": "Es mostra a sobre de cada columna quan la setmana és la visualització activa",
|
||||
"45MinutesFourtyFive": "60 minuts: {0}",
|
||||
"45MinutesFourtyFive": "45 minuts: {0}",
|
||||
"60MinutesSixty": "60 minuts: {0}",
|
||||
"BindAddressHelpTextWarning": "Cal reiniciar perquè tingui efecte",
|
||||
"BookIsDownloading": "La pel·lícula s'està baixant",
|
||||
@@ -586,7 +584,7 @@
|
||||
"BypassIfHighestQuality": "Bypass si és de màxima qualitat",
|
||||
"MinimumCustomFormatScore": "Puntuació mínima de format personalitzat",
|
||||
"CustomFormatScore": "Puntuació de format personalitzat",
|
||||
"EnableRssHelpText": "S'utilitzarà quan Radarr cerqui publicacions periòdicament mitjançant RSS Sync",
|
||||
"EnableRssHelpText": "S'utilitzarà quan {appName} cerqui publicacions periòdicament mitjançant RSS Sync",
|
||||
"ImportListMultipleMissingRoots": "Falten diverses carpetes arrel per a les llistes d'importació: {0}",
|
||||
"IndexerDownloadClientHelpText": "Especifiqueu quin client de baixada s'utilitza per a capturar des d'aquest indexador",
|
||||
"ThemeHelpText": "Canvieu el tema de la interfície d'usuari de l'aplicació, el tema \"Automàtic\" utilitzarà el tema del vostre sistema operatiu per configurar el mode clar o fosc. Inspirat en Theme.Park",
|
||||
@@ -609,7 +607,7 @@
|
||||
"CustomFormat": "Format personalitzat",
|
||||
"CustomFormatSettings": "Configuració de formats personalitzats",
|
||||
"CustomFormats": "Formats personalitzats",
|
||||
"CutoffFormatScoreHelpText": "Un cop s'arribi a aquesta puntuació de format personalitzat, Radarr ja no baixarà pel·lícules",
|
||||
"CutoffFormatScoreHelpText": "Un cop s'arribi a aquesta puntuació de format personalitzat, {appName} ja no baixarà pel·lícules",
|
||||
"DeleteCustomFormatMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
|
||||
"ImportListMissingRoot": "Falta la carpeta arrel per a les llistes d'importació: {0}",
|
||||
"IndexerTagsHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
|
||||
@@ -713,5 +711,90 @@
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Directori al qual es mou quan s'hagi completat",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Ubicació opcional de les baixades completades, deixeu-lo en blanc per utilitzar la ubicació predeterminada de Deluge",
|
||||
"WhatsNew": "Novetats"
|
||||
"WhatsNew": "Novetats",
|
||||
"SelectDropdown": "Seleccioneu...",
|
||||
"NoCutoffUnmetItems": "No hi ha elements de tall no assolits",
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Com aplicar etiquetes a les pel·lícules seleccionades",
|
||||
"DeleteConditionMessageText": "Esteu segur que voleu suprimir la condició '{name}'?",
|
||||
"NoChange": "Cap canvi",
|
||||
"SetTags": "Estableix etiquetes",
|
||||
"NoResultsFound": "Sense resultats",
|
||||
"Author": "Autor",
|
||||
"ResetQualityDefinitions": "Restableix les definicions de qualitat",
|
||||
"Small": "Petita",
|
||||
"TotalSpace": "Espai total",
|
||||
"BlocklistReleaseHelpText": "Impedeix que {appName} torni a capturar aquesta versió automàticament",
|
||||
"CatalogNumber": "número de catàleg",
|
||||
"LastWriteTime": "La darrera hora d'escriptura",
|
||||
"NextExecution": "Propera execució",
|
||||
"RemoveCompleted": "S'ha eliminat",
|
||||
"SelectReleaseGroup": "Seleccioneu grup de llançament",
|
||||
"CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)",
|
||||
"Authors": "Autor",
|
||||
"FreeSpace": "Espai lliure",
|
||||
"ExtraFileExtensionsHelpText": "Llista separada per comes de fitxers addicionals per importar (.nfo s'importarà com a .nfo-orig)",
|
||||
"BypassIfAboveCustomFormatScore": "Ometre si està per sobre de la puntuació de format personalitzada",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Habiliteu l'omissió quan la versió tingui una puntuació superior a la puntuació mínima per al format personalitzat",
|
||||
"RedownloadFailed": "Tornar a baixar les baixades fallades",
|
||||
"ExistingTag": "Etiqueta existent",
|
||||
"RemoveFailed": "Ha fallat l'eliminació",
|
||||
"ImportLists": "llista d'importació",
|
||||
"RemovingTag": "S'està eliminant l'etiqueta",
|
||||
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {length} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemples: '.sub, .nfo' o 'sub,nfo'",
|
||||
"SourceTitle": "Títol de la font",
|
||||
"NoEventsFound": "No s'han trobat esdeveniments",
|
||||
"InteractiveSearchModalHeader": "Cerca interactiva",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Llistes no disponibles a causa d'errors: {0}",
|
||||
"Medium": "Suport",
|
||||
"RecentChanges": "Canvis recents",
|
||||
"Rejections": "Rebutjats",
|
||||
"StatusEndedContinuing": "Continua",
|
||||
"DeleteBookFileMessageText": "Esteu segur que voleu suprimir '{path}'?",
|
||||
"DownloadClientTagHelpText": "Utilitzeu aquest indexador només per a pel·lícules amb almenys una etiqueta coincident. Deixeu-ho en blanc per utilitzar-ho amb totes les pel·lícules.",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El client de baixada {downloadClientName} està configurat per eliminar les baixades completades. Això pot provocar que les baixades s'eliminin del vostre client abans que {1} pugui importar-les.",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Cerqueu i intenteu baixar automàticament una versió diferent quan es trobi una versió fallida a la cerca interactiva",
|
||||
"FailedLoadingSearchResults": "No s'han pogut carregar els resultats de la cerca, torneu-ho a provar.",
|
||||
"IndexerFlags": "Indicadors de l'indexador",
|
||||
"Large": "Gran",
|
||||
"LastDuration": "Darrera durada",
|
||||
"LastExecution": "Darrere execució",
|
||||
"Library": "Biblioteca",
|
||||
"ListsSettingsSummary": "llista d'importació",
|
||||
"Loading": "Carregant",
|
||||
"MinimumCustomFormatScoreHelpText": "Puntuació mínima de format personalitzada necessaria per a evitar el retard del protocol preferit",
|
||||
"ProfilesSettingsSummary": "Perfils de qualitat, idioma, retard i llançament",
|
||||
"RemoveDownloadsAlert": "La configuració d'eliminació s'ha mogut a la configuració del client de baixada a la taula anterior.",
|
||||
"RemoveQueueItemConfirmation": "Esteu segur que voleu eliminar '{sourceTitle}' de la cua?",
|
||||
"RemoveSelectedItem": "Elimina l'element seleccionat",
|
||||
"RemoveSelectedItems": "Elimina els elements seleccionats",
|
||||
"RemoveSelectedItemsQueueMessageText": "Esteu segur que voleu eliminar {0} de la cua?",
|
||||
"SelectQuality": "Seleccioneu Qualitat",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Alguns resultats estan ocults pel filtre aplicat",
|
||||
"AuthBasic": "Basic (finestra emergent del navegador)",
|
||||
"AuthForm": "Formularis (pàgina d'inici de sessió)",
|
||||
"AuthenticationMethod": "Mètode d'autenticació",
|
||||
"AuthenticationMethodHelpTextWarning": "Seleccioneu un mètode d'autenticació vàlid",
|
||||
"AuthenticationRequired": "Autenticació necessària",
|
||||
"AuthenticationRequiredHelpText": "Canvia per a quines sol·licituds cal autenticar. No canvieu tret que entengueu els riscos.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmeu la nova contrasenya",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Introduïu una contrasenya nova",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Introduïu un nom d'usuari nou",
|
||||
"AuthenticationRequiredWarning": "Per a evitar l'accés remot sense autenticació, ara {appName} requereix que l'autenticació estigui activada. Opcionalment, podeu desactivar l'autenticació des d'adreces locals.",
|
||||
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
|
||||
"Enabled": "Habilitat",
|
||||
"External": "Extern",
|
||||
"ApiKey": "Clau API",
|
||||
"FailedToFetchUpdates": "No s'han pogut obtenir les actualitzacions",
|
||||
"AptUpdater": "Utilitzeu apt per a instal·lar l'actualització",
|
||||
"BuiltIn": "Integrat",
|
||||
"CurrentlyInstalled": "Instal·lat actualment",
|
||||
"DockerUpdater": "actualitzeu el contenidor Docker per a rebre l'actualització",
|
||||
"ExternalUpdater": "{appName} està configurat per a utilitzar un mecanisme d'actualització extern",
|
||||
"InstallLatest": "Instal·la l'últim",
|
||||
"OnLatestVersion": "La darrera versió de {appName} ja està instal·lada",
|
||||
"Script": "Script",
|
||||
"UnmappedFiles": "Carpetes sense mapejar",
|
||||
"UpdateAppDirectlyLoadError": "No es pot actualitzar {appName} directament,",
|
||||
"AddMissing": "Afegeix faltants"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"ApiKeyHelpTextWarning": "Vyžaduje restart, aby se projevilo",
|
||||
"AnalyticsEnabledHelpTextWarning": "Vyžaduje restart, aby se projevilo",
|
||||
"DeleteRootFolderMessageText": "Opravdu chcete odstranit indexer „{0}“?",
|
||||
"Group": "Skupina",
|
||||
@@ -12,7 +11,6 @@
|
||||
"20MinutesTwenty": "120 minut: {0}",
|
||||
"45MinutesFourtyFive": "90 minut: {0}",
|
||||
"60MinutesSixty": "60 minut: {0}",
|
||||
"APIKey": "Klíč API",
|
||||
"About": "O aplikaci",
|
||||
"AddListExclusion": "Přidat vyloučení seznamu",
|
||||
"AddingTag": "Přidání značky",
|
||||
@@ -20,16 +18,16 @@
|
||||
"AlreadyInYourLibrary": "Již máte ve své knihovně",
|
||||
"AlternateTitles": "Alternativní název",
|
||||
"Analytics": "Analýzy",
|
||||
"AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery Radarru. To zahrnuje informace o vašem prohlížeči, které stránky Radarr WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.",
|
||||
"AnalyticsEnabledHelpText": "Odesílejte anonymní informace o použití a chybách na servery {appName}u. To zahrnuje informace o vašem prohlížeči, které stránky {appName} WebUI používáte, hlášení chyb a také verzi operačního systému a běhového prostředí. Tyto informace použijeme k upřednostnění funkcí a oprav chyb.",
|
||||
"AppDataDirectory": "Adresář AppData",
|
||||
"ApplyTags": "Použít značky",
|
||||
"Authentication": "Ověřování",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k Radarr",
|
||||
"AuthenticationMethodHelpText": "Vyžadovat uživatelské jméno a heslo pro přístup k {appName}",
|
||||
"AuthorClickToChangeBook": "Kliknutím změníte film",
|
||||
"AutoRedownloadFailedHelpText": "Automatické vyhledání a pokus o stažení jiného vydání",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v Radarru",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Filmy odstraněné z disku jsou automaticky sledovány v {appName}u",
|
||||
"Automatic": "Automatický",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti Radarr",
|
||||
"BackupFolderHelpText": "Relativní cesty budou v adresáři AppData společnosti {appName}",
|
||||
"BackupNow": "Ihned zálohovat",
|
||||
"BackupRetentionHelpText": "Automatické zálohy starší než doba uchovávání budou automaticky vyčištěny",
|
||||
"Backups": "Zálohy",
|
||||
@@ -43,16 +41,16 @@
|
||||
"Calendar": "Kalendář",
|
||||
"CalendarWeekColumnHeaderHelpText": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden",
|
||||
"Cancel": "Zrušit",
|
||||
"CancelMessageText": "Opravdu chcete zrušit tento nevyřízený úkol?",
|
||||
"CancelPendingTask": "Opravdu chcete zrušit tento nevyřízený úkol?",
|
||||
"CertificateValidation": "Ověření certifikátu",
|
||||
"CertificateValidationHelpText": "Změňte přísnost ověřování certifikátů HTTPS. Neměňte, pokud nerozumíte rizikům.",
|
||||
"ChangeFileDate": "Změnit datum souboru",
|
||||
"ChangeHasNotBeenSavedYet": "Změna ještě nebyla uložena",
|
||||
"ChmodFolder": "Složka chmod",
|
||||
"ChmodFolderHelpText": "Octal, aplikováno během importu / přejmenování na mediální složky a soubory (bez provádění bitů)",
|
||||
"ChmodFolderHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru Radarr vlastníkem souboru. Je lepší zajistit, aby stahovací klient správně nastavil oprávnění.",
|
||||
"ChmodFolderHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient správně nastavil oprávnění.",
|
||||
"ChownGroupHelpText": "Název skupiny nebo gid. Použijte gid pro vzdálené systémy souborů.",
|
||||
"ChownGroupHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru Radarr vlastníkem souboru. Je lepší zajistit, aby stahovací klient používal stejnou skupinu jako Radarr.",
|
||||
"ChownGroupHelpTextWarning": "Funguje to pouze v případě, že je uživatel souboru {appName} vlastníkem souboru. Je lepší zajistit, aby stahovací klient používal stejnou skupinu jako {appName}.",
|
||||
"Clear": "Vyčistit",
|
||||
"ClickToChangeQuality": "Kliknutím změníte kvalitu",
|
||||
"ClientPriority": "Priorita klienta",
|
||||
@@ -64,11 +62,11 @@
|
||||
"ConnectSettings": "Nastavení připojení",
|
||||
"Connections": "Připojení",
|
||||
"CopyUsingHardlinksHelpText": "Hardlinks použijte, když se pokoušíte kopírovat soubory z torrentů, které se stále používají",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Zámky souborů mohou občas zabránit přejmenování souborů, které se právě vysazují. Výsev můžete dočasně deaktivovat a použít funkci Radarr pro přejmenování.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Zámky souborů mohou občas zabránit přejmenování souborů, které se právě vysazují. Výsev můžete dočasně deaktivovat a použít funkci {appName} pro přejmenování.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Během skenování disku vytvářejte chybějící složky filmů",
|
||||
"CreateGroup": "Vytvořit skupinu",
|
||||
"CutoffHelpText": "Jakmile je této kvality dosaženo, Radarr již nebude stahovat filmy",
|
||||
"CutoffUnmet": "Vynechat nevyhovující",
|
||||
"CutoffHelpText": "Jakmile je této kvality dosaženo, {appName} již nebude stahovat filmy",
|
||||
"CutoffUnmet": "Mezní hodnota nesplněna",
|
||||
"DatabaseMigration": "Migrace databáze",
|
||||
"Dates": "Termíny",
|
||||
"DelayProfile": "Profil zpoždění",
|
||||
@@ -147,7 +145,7 @@
|
||||
"Grab": "Urvat",
|
||||
"GrabID": "Chyť ID",
|
||||
"GrabRelease": "Uchopte uvolnění",
|
||||
"GrabReleaseMessageText": "Radarr nebyl schopen určit, pro který film je toto vydání určeno. Radarr nemusí být schopen toto vydání automaticky importovat. Chcete chytit „{0}“?",
|
||||
"GrabReleaseMessageText": "{appName} nebyl schopen určit, pro který film je toto vydání určeno. {appName} nemusí být schopen toto vydání automaticky importovat. Chcete chytit „{0}“?",
|
||||
"GrabSelected": "Chyťte vybrané",
|
||||
"HasPendingChangesNoChanges": "Žádné změny",
|
||||
"HasPendingChangesSaveChanges": "Uložit změny",
|
||||
@@ -169,7 +167,7 @@
|
||||
"ImportedTo": "Importováno do",
|
||||
"Importing": "Import",
|
||||
"IncludeHealthWarningsHelpText": "Zahrnout zdravotní varování",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Zobrazit položky bez filmu ve frontě. To by mohlo zahrnovat odstraněné filmy nebo cokoli jiného v kategorii Radarr",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Zobrazit položky bez filmu ve frontě. To by mohlo zahrnovat odstraněné filmy nebo cokoli jiného v kategorii {appName}",
|
||||
"IncludeUnmonitored": "Zahrnout Nesledováno",
|
||||
"Indexer": "Indexer",
|
||||
"IndexerPriority": "Priorita indexování",
|
||||
@@ -180,7 +178,7 @@
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Upgradujte, dokud nebude tato kvalita splněna nebo překročena",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Během používání nelze smazat",
|
||||
"Language": "Jazyk",
|
||||
"LaunchBrowserHelpText": " Otevřete webový prohlížeč a při spuštění aplikace přejděte na domovskou stránku Radarr.",
|
||||
"LaunchBrowserHelpText": " Otevřete webový prohlížeč a při spuštění aplikace přejděte na domovskou stránku {appName}.",
|
||||
"LoadingBookFilesFailed": "Načítání filmových souborů se nezdařilo",
|
||||
"Local": "Místní",
|
||||
"LogFiles": "Záznam souborů",
|
||||
@@ -261,8 +259,8 @@
|
||||
"RSSSync": "RSS synchronizace",
|
||||
"RSSSyncInterval": "Interval synchronizace RSS",
|
||||
"ReadTheWikiForMoreInformation": "Další informace najdete na Wiki",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Radarr podporuje jakýkoli indexer, který používá standard Newznab, stejně jako další indexery uvedené níže.",
|
||||
"ReadarrTags": "Radarr tagy",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} podporuje jakýkoli indexer, který používá standard Newznab, stejně jako další indexery uvedené níže.",
|
||||
"ReadarrTags": "{appName} tagy",
|
||||
"Real": "Nemovitý",
|
||||
"Reason": "Důvod",
|
||||
"RecycleBinCleanupDaysHelpText": "Nastavením na 0 zakážete automatické čištění",
|
||||
@@ -290,19 +288,19 @@
|
||||
"RemoveTagExistingTag": "Stávající značka",
|
||||
"RemoveTagRemovingTag": "Odebírání značky",
|
||||
"RemovedFromTaskQueue": "Odebráno z fronty úkolů",
|
||||
"RenameBooksHelpText": "Pokud je přejmenování zakázáno, použije Radarr stávající název souboru",
|
||||
"RenameBooksHelpText": "Pokud je přejmenování zakázáno, použije {appName} stávající název souboru",
|
||||
"Reorder": "Přeobjednat",
|
||||
"ReplaceIllegalCharacters": "Nahraďte nelegální znaky",
|
||||
"RequiredHelpText": "Vydání musí obsahovat alespoň jeden z těchto výrazů (nerozlišují se malá a velká písmena)",
|
||||
"RequiredPlaceHolder": "Přidat nové omezení",
|
||||
"RescanAfterRefreshHelpTextWarning": "Radarr nebude automaticky detekovat změny souborů, pokud není nastaveno na „Vždy“",
|
||||
"RescanAfterRefreshHelpTextWarning": "{appName} nebude automaticky detekovat změny souborů, pokud není nastaveno na „Vždy“",
|
||||
"RescanAuthorFolderAfterRefresh": "Po obnovení znovu vyhledejte složku filmu",
|
||||
"Reset": "Resetovat",
|
||||
"ResetAPIKey": "Resetovat klíč API",
|
||||
"ResetAPIKeyMessageText": "Opravdu chcete resetovat klíč API?",
|
||||
"Restart": "Restartujte",
|
||||
"RestartNow": "Restartovat nyní",
|
||||
"RestartReadarr": "Restartujte Radarr",
|
||||
"RestartReadarr": "Restartujte {appName}",
|
||||
"Restore": "Obnovit",
|
||||
"RestoreBackup": "Obnovit zálohu",
|
||||
"Result": "Výsledek",
|
||||
@@ -343,7 +341,7 @@
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Zobrazuje se nad každým sloupcem, když je aktivní zobrazení týden",
|
||||
"Size": " Velikost",
|
||||
"SkipFreeSpaceCheck": "Přeskočit kontrolu volného prostoru",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Použijte, když Radarr nedokáže detekovat volné místo z kořenové složky filmu",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Použijte, když {appName} nedokáže detekovat volné místo z kořenové složky filmu",
|
||||
"SorryThatAuthorCannotBeFound": "Je nám líto, ale tento film nelze najít.",
|
||||
"SorryThatBookCannotBeFound": "Je nám líto, ale tento film nelze najít.",
|
||||
"Source": "Zdroj",
|
||||
@@ -361,7 +359,7 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Úspěch! Moje práce je hotová, žádné soubory k přejmenování.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS není u tohoto indexeru podporováno",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Vyhledávání není u tohoto indexeru podporováno",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Použije se, když se automatické vyhledávání provádí pomocí uživatelského rozhraní nebo Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Použije se, když se automatické vyhledávání provádí pomocí uživatelského rozhraní nebo {appName}",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Bude použito při použití interaktivního vyhledávání",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Značka se nepoužívá a lze ji smazat",
|
||||
"Tags": "Značky",
|
||||
@@ -378,7 +376,7 @@
|
||||
"Torrents": "Torrenty",
|
||||
"TotalFileSize": "Celková velikost souboru",
|
||||
"UILanguage": "Jazyk uživatelského rozhraní",
|
||||
"UILanguageHelpText": "Jazyk, který Radarr použije pro uživatelské rozhraní",
|
||||
"UILanguageHelpText": "Jazyk, který {appName} použije pro uživatelské rozhraní",
|
||||
"UILanguageHelpTextWarning": "Vyžaduje se opětovné načtení prohlížeče",
|
||||
"UISettings": "Nastavení uživatelského rozhraní",
|
||||
"URLBase": "URL Base",
|
||||
@@ -419,7 +417,7 @@
|
||||
"UnmonitoredHelpText": "Zahrnout nemonitorované filmy do zdroje iCal",
|
||||
"UpdateAll": "Aktualizovat vše",
|
||||
"UpdateAutomaticallyHelpText": "Automaticky stahovat a instalovat aktualizace. Stále budete moci instalovat ze systému: Aktualizace",
|
||||
"UpdateMechanismHelpText": "Použijte vestavěný aktualizátor Radarr nebo skript",
|
||||
"UpdateMechanismHelpText": "Použijte vestavěný aktualizátor {appName} nebo skript",
|
||||
"UpdateScriptPathHelpText": "Cesta k vlastnímu skriptu, který přebírá extrahovaný balíček aktualizace a zpracovává zbytek procesu aktualizace",
|
||||
"Updates": "Aktualizace",
|
||||
"UpgradeAllowedHelpText": "Pokud budou deaktivovány vlastnosti, nebudou upgradovány",
|
||||
@@ -431,8 +429,8 @@
|
||||
"UsenetDelay": "Usenet Zpoždění",
|
||||
"UsenetDelayHelpText": "Zpoždění v minutách čekání před uvolněním z Usenetu",
|
||||
"Username": "Uživatelské jméno",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Pobočka, která se má použít k aktualizaci Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Pobočka používaná mechanismem externí aktualizace",
|
||||
"BranchUpdate": "Pobočka, která se má použít k aktualizaci {appName}",
|
||||
"BranchUpdateMechanism": "Pobočka používaná mechanismem externí aktualizace",
|
||||
"Version": "Verze",
|
||||
"WeekColumnHeader": "Záhlaví sloupce týdne",
|
||||
"Year": "Rok",
|
||||
@@ -455,12 +453,12 @@
|
||||
"UnableToLoadBlocklist": "Nelze načíst černou listinu",
|
||||
"Component": "Komponenta",
|
||||
"Level": "Úroveň",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Pobočka {0} není platná větev vydání Radarr, nebudete dostávat aktualizace",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Pobočka {0} není platná větev vydání {appName}, nebudete dostávat aktualizace",
|
||||
"Time": "Čas",
|
||||
"Blocklist": "Blocklist",
|
||||
"BlocklistRelease": "Blocklist pro vydání",
|
||||
"ShowUnknownAuthorItems": "Zobrazit neznámé položky filmu",
|
||||
"ThisCannotBeCancelled": "Toto nelze zrušit po spuštění bez restartování Radarru.",
|
||||
"ThisCannotBeCancelled": "Toto nelze zrušit po spuštění bez restartování {appName}u.",
|
||||
"UnselectAll": "Odznačit vše",
|
||||
"UpdateSelected": "Aktualizace vybrána",
|
||||
"All": "Vše",
|
||||
@@ -492,7 +490,7 @@
|
||||
"OnBookFileDeleteForUpgrade": "Na filmovém souboru Odstranit pro upgrade",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Na filmovém souboru Odstranit pro upgrade",
|
||||
"OnBookFileDeleteHelpText": "Při mazání filmových souborů",
|
||||
"ReadarrSupportsAnyDownloadClient": "Whisparr podporuje libovolného klienta pro stahování, který používá standard Newznab, stejně jako další klienty pro stahování uvedené níže.",
|
||||
"ReadarrSupportsAnyDownloadClient": "{appName} podporuje libovolného klienta pro stahování, který používá standard Newznab, stejně jako další klienty pro stahování uvedené níže.",
|
||||
"TimeLeft": "Zbývající čas",
|
||||
"Disabled": "Zakázáno",
|
||||
"CouldntFindAnyResultsForTerm": "Nelze najít žádné výsledky pro dotaz „{0}“",
|
||||
@@ -509,15 +507,15 @@
|
||||
"ImportListStatusCheckSingleClientMessage": "Seznamy nejsou k dispozici z důvodu selhání: {0}",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexery nedostupné z důvodu selhání po dobu delší než 6 hodin: {0}",
|
||||
"IndexerPriorityHelpText": "Priorita indexování od 1 (nejvyšší) do 50 (nejnižší). Výchozí: 25.",
|
||||
"IndexerRssHealthCheckNoIndexers": "Nejsou k dispozici žádné indexery se zapnutou synchronizací RSS, Radarr nové verze automaticky nezachytí",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Nejsou k dispozici žádné indexery se zapnutým automatickým vyhledáváním, Radarr neposkytne žádné automatické výsledky hledání",
|
||||
"IndexerRssHealthCheckNoIndexers": "Nejsou k dispozici žádné indexery se zapnutou synchronizací RSS, {appName} nové verze automaticky nezachytí",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Nejsou k dispozici žádné indexery se zapnutým automatickým vyhledáváním, {appName} neposkytne žádné automatické výsledky hledání",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Všechny indexery podporující vyhledávání jsou dočasně nedostupné kvůli nedávným chybám indexeru",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Pokud je povoleno interaktivní vyhledávání, nejsou k dispozici žádné indexery, Radarr neposkytne žádné interaktivní výsledky hledání",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Pokud je povoleno interaktivní vyhledávání, nejsou k dispozici žádné indexery, {appName} neposkytne žádné interaktivní výsledky hledání",
|
||||
"IndexerStatusCheckAllClientMessage": "Všechny indexery nejsou k dispozici z důvodu selhání",
|
||||
"MaintenanceRelease": "Údržbové vydání: opravy chyb a další vylepšení. Další podrobnosti najdete v GitHub Commit History",
|
||||
"MediaManagement": "Správa médií",
|
||||
"Metadata": "Metadata",
|
||||
"MissingFromDisk": "Radarr nemohl najít soubor na disku, takže byl odstraněn",
|
||||
"MissingFromDisk": "{appName} nemohl najít soubor na disku, takže byl odstraněn",
|
||||
"Monitor": "Monitor",
|
||||
"OnRename": "Při přejmenování",
|
||||
"OnUpgrade": "Při upgradu",
|
||||
@@ -525,11 +523,11 @@
|
||||
"ProxyCheckFailedToTestMessage": "Nepodařilo se otestovat proxy: {0}",
|
||||
"QualitySettingsSummary": "Kvalitní velikosti a pojmenování",
|
||||
"QueueIsEmpty": "Fronta je prázdná",
|
||||
"RestartReloadNote": "Poznámka: Radarr se během procesu obnovy automaticky restartuje a znovu načte uživatelské rozhraní.",
|
||||
"RestartReloadNote": "Poznámka: {appName} se během procesu obnovy automaticky restartuje a znovu načte uživatelské rozhraní.",
|
||||
"RootFolderCheckMultipleMessage": "Chybí více kořenových složek: {0}",
|
||||
"Save": "Uložit",
|
||||
"SearchFiltered": "Hledat filtrováno",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Cesta, kterou by Radarr měl použít pro místní přístup ke vzdálené cestě",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Cesta, kterou by {appName} měl použít pro místní přístup ke vzdálené cestě",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Kořenová cesta k adresáři, do kterého stahovací klient přistupuje",
|
||||
"SystemTimeCheckMessage": "Systémový čas je vypnutý o více než 1 den. Naplánované úlohy nemusí fungovat správně, dokud nebude čas opraven",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Složka filmu „{0}“ a veškerý její obsah budou smazány.",
|
||||
@@ -565,7 +563,7 @@
|
||||
"UpgradesAllowed": "Upgrady povoleny",
|
||||
"CustomFormatSettings": "Nastavení vlastních formátů",
|
||||
"CustomFormats": "Vlastní formáty",
|
||||
"CutoffFormatScoreHelpText": "Jakmile je dosaženo tohoto skóre vlastního formátu, Radarr již nebude stahovat filmy",
|
||||
"CutoffFormatScoreHelpText": "Jakmile je dosaženo tohoto skóre vlastního formátu, {appName} již nebude stahovat filmy",
|
||||
"DeleteFormatMessageText": "Opravdu chcete smazat značku formátu {0}?",
|
||||
"HiddenClickToShow": "Skryté, kliknutím zobrazíte",
|
||||
"HideAdvanced": "Skrýt pokročilé",
|
||||
@@ -693,5 +691,38 @@
|
||||
"CustomFilter": "Vlastní filtry",
|
||||
"SelectQuality": "Vyberte kvalitu",
|
||||
"IndexerFlags": "Příznaky indexeru",
|
||||
"InteractiveSearchModalHeader": "Interaktivní vyhledávání"
|
||||
"InteractiveSearchModalHeader": "Interaktivní vyhledávání",
|
||||
"FailedLoadingSearchResults": "Výsledky vyhledávání se nepodařilo načíst, zkuste to prosím znovu.",
|
||||
"CustomFormatsSpecificationFlag": "Vlajka",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "Vlastní formát RegEx nerozlišuje velká a malá písmena",
|
||||
"BlocklistAndSearch": "Seznam blokovaných a vyhledávání",
|
||||
"ChangeCategory": "Změnit kategorii",
|
||||
"BlocklistMultipleOnlyHint": "Blokovat a nehledat náhradu",
|
||||
"CustomFormatsSettingsTriggerInfo": "Vlastní formát se použije na vydání nebo soubor, pokud odpovídá alespoň jednomu z různých typů zvolených podmínek.",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Přidá předponu do {connectionName} url, jako např. {url}",
|
||||
"AuthBasic": "Základní (vyskakovací okno prohlížeče)",
|
||||
"AuthenticationMethod": "Metoda ověřování",
|
||||
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequired": "Vyžadované ověření",
|
||||
"AuthenticationRequiredHelpText": "Změnit, pro které požadavky je vyžadováno ověření. Pokud nerozumíte rizikům, neměňte je.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
|
||||
"AuthenticationRequiredWarning": "Aby se zabránilo vzdálenému přístupu bez ověření, vyžaduje nyní {appName} povolení ověření. Ověřování z místních adres můžete volitelně zakázat.",
|
||||
"BlocklistOnlyHint": "Blokovat a nehledat náhradu",
|
||||
"Enabled": "Povoleno",
|
||||
"ApiKey": "Klíč API",
|
||||
"AuthForm": "Formuláře (přihlašovací stránka)",
|
||||
"DisabledForLocalAddresses": "Zakázáno pro místní adresy",
|
||||
"DockerUpdater": "aktualizujte kontejner dockeru, abyste aktualizaci obdrželi",
|
||||
"ExternalUpdater": "{appName} je nakonfigurován pro použití externího aktualizačního mechanismu",
|
||||
"FailedToFetchUpdates": "Nepodařilo se načíst aktualizace",
|
||||
"OnLatestVersion": "Nejnovější verze aplikace {appName} je již nainstalována",
|
||||
"Script": "Skript",
|
||||
"UpdateAppDirectlyLoadError": "{appName} nelze aktualizovat přímo,",
|
||||
"BuiltIn": "Vestavěný",
|
||||
"InstallLatest": "Nainstalujte nejnovější",
|
||||
"CurrentlyInstalled": "Aktuálně nainstalováno",
|
||||
"UnmappedFiles": "Nezmapované složky",
|
||||
"AptUpdater": "K instalaci aktualizace použijte apt"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
"20MinutesTwenty": "20 minutter: {0}",
|
||||
"45MinutesFourtyFive": "45 minutter: {0}",
|
||||
"60MinutesSixty": "60 minutter: {0}",
|
||||
"APIKey": "API-nøgle",
|
||||
"About": "Om",
|
||||
"AddListExclusion": "Tilføj ekskludering af liste",
|
||||
"AddingTag": "Tilføjer tag",
|
||||
@@ -16,16 +15,16 @@
|
||||
"AlreadyInYourLibrary": "Allerede i dit bibliotek",
|
||||
"AlternateTitles": "Alternativ Titel",
|
||||
"Analytics": "Analyse",
|
||||
"AnalyticsEnabledHelpText": "Send anonym brugs- og fejlinformation til Radarrs servere. Dette inkluderer information i din browser, hvilke Radarr WebUI-sider du bruger, fejlrapportering samt OS og runtime-version. Vi bruger disse oplysninger til at prioritere funktioner og fejlrettelser.",
|
||||
"AppDataDirectory": "AppData-bibliotek",
|
||||
"AnalyticsEnabledHelpText": "Send anonym brugs- og fejlinformation til {appName}s servere. Dette inkluderer information i din browser, hvilke {appName} WebUI-sider du bruger, fejlrapportering samt OS og runtime-version. Vi bruger disse oplysninger til at prioritere funktioner og fejlrettelser.",
|
||||
"AppDataDirectory": "AppData-mappe",
|
||||
"ApplyTags": "Anvend tags",
|
||||
"Authentication": "Godkendelse",
|
||||
"AuthenticationMethodHelpText": "Kræv brugernavn og adgangskode for at få adgang til Radarr",
|
||||
"AuthenticationMethodHelpText": "Kræv brugernavn og adgangskode for at få adgang til {appName}",
|
||||
"AuthorClickToChangeBook": "Klik for at skifte film",
|
||||
"AutoRedownloadFailedHelpText": "Søg automatisk efter og forsøg at downloade en anden udgivelse",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Film, der er slettet fra disken, overvåges automatisk i Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Film, der er slettet fra disken, overvåges automatisk i {appName}",
|
||||
"Automatic": "Automatisk",
|
||||
"BackupFolderHelpText": "Relative stier vil være under Radarrs AppData-bibliotek",
|
||||
"BackupFolderHelpText": "Relative stier vil være under {appName}s AppData-bibliotek",
|
||||
"BackupNow": "Backup Nu",
|
||||
"BackupRetentionHelpText": "Automatiske sikkerhedskopier, der er ældre end opbevaringsperioden, renses automatisk",
|
||||
"Backups": "Sikkerhedskopier",
|
||||
@@ -39,16 +38,16 @@
|
||||
"Calendar": "Kalender",
|
||||
"CalendarWeekColumnHeaderHelpText": "Vist over hver kolonne, når ugen er den aktive visning",
|
||||
"Cancel": "Afbryd",
|
||||
"CancelMessageText": "Er du sikker på, at du vil annullere denne afventende opgave?",
|
||||
"CancelPendingTask": "Er du sikker på, at du vil annullere denne afventende opgave?",
|
||||
"CertificateValidation": "Validering af certifikat",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er",
|
||||
"CertificateValidationHelpText": "Skift, hvor streng HTTPS-certificering er. Ændr kun dette hvis du forstå risiciene.",
|
||||
"ChangeFileDate": "Skift fildato",
|
||||
"ChangeHasNotBeenSavedYet": "Ændring er endnu ikke gemt",
|
||||
"ChmodFolder": "chmod mappe",
|
||||
"ChmodFolderHelpText": "Oktal, anvendt under import / omdøbning til mediemapper og filer (uden udførelse af bits)",
|
||||
"ChmodFolderHelpTextWarning": "Dette fungerer kun, hvis den bruger, der kører Radarr, er ejeren af filen. Det er bedre at sikre, at downloadklienten indstiller tilladelserne korrekt.",
|
||||
"ChmodFolderHelpTextWarning": "Dette fungerer kun, hvis den bruger, der kører {appName}, er ejeren af filen. Det er bedre at sikre, at downloadklienten indstiller tilladelserne korrekt.",
|
||||
"ChownGroupHelpText": "Gruppens navn eller gid. Brug gid til eksterne filsystemer.",
|
||||
"ChownGroupHelpTextWarning": "Dette fungerer kun, hvis den bruger, der kører Radarr, er ejeren af filen. Det er bedre at sikre, at downloadklienten bruger den samme gruppe som Radarr.",
|
||||
"ChownGroupHelpTextWarning": "Dette fungerer kun, hvis den bruger, der kører {appName}, er ejeren af filen. Det er bedre at sikre, at downloadklienten bruger den samme gruppe som {appName}.",
|
||||
"Clear": "Ryd",
|
||||
"ClickToChangeQuality": "Klik for at ændre kvalitet",
|
||||
"ClientPriority": "Kundens prioritet",
|
||||
@@ -60,35 +59,35 @@
|
||||
"ConnectSettings": "Forbind indstillinger",
|
||||
"Connections": "Forbindelser",
|
||||
"CopyUsingHardlinksHelpText": "Brug hardlinks, når du prøver at kopiere filer fra torrents, der stadig udsås",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Lejlighedsvis kan fillåse forhindre omdøbning af filer, der bliver seedet. Du kan midlertidigt deaktivere såning og bruge Radarrs omdøbningsfunktion som et arbejde rundt.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Lejlighedsvis kan fillåse forhindre omdøbning af filer, der bliver seedet. Du kan midlertidigt deaktivere såning og bruge {appName}s omdøbningsfunktion som et arbejde rundt.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Opret manglende filmmapper under diskscanning",
|
||||
"CreateGroup": "Opret gruppe",
|
||||
"CutoffHelpText": "Når denne kvalitet er nået, downloader Radarr ikke længere film",
|
||||
"CutoffUnmet": "Afskåret ude",
|
||||
"CutoffHelpText": "Når denne kvalitet er nået, downloader {appName} ikke længere film",
|
||||
"CutoffUnmet": "Grænse ikke opnået",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"DelayProfile": "Udskyd Profiler",
|
||||
"DelayProfiles": "Udskyd Profiler",
|
||||
"DelayingDownloadUntilInterp": "Forsinker download indtil {0} kl. {1}",
|
||||
"Delete": "Slet",
|
||||
"DeleteBackup": "Slet sikkerhedskopi",
|
||||
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien '{0}'?",
|
||||
"DeleteBackupMessageText": "Er du sikker på, at du vil slette sikkerhedskopien »{name}«?",
|
||||
"DeleteDelayProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteDelayProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
|
||||
"DeleteDownloadClient": "Slet Download Client",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil slette downloadklienten '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Er du sikker på, at du vil fjerne downloadklienten »{name}«?",
|
||||
"DeleteEmptyFolders": "Slet tomme mapper",
|
||||
"DeleteEmptyFoldersHelpText": "Slet tomme filmmapper under diskscanning, og når filmfiler slettes",
|
||||
"DeleteImportListExclusion": "Slet udelukkelse af importliste",
|
||||
"DeleteImportListExclusionMessageText": "Er du sikker på, at du vil slette denne undtagelse fra importlisten?",
|
||||
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen '{0}'?",
|
||||
"DeleteImportListMessageText": "Er du sikker på, at du vil slette listen »{name}«?",
|
||||
"DeleteIndexer": "Slet Indexer",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
|
||||
"DeleteIndexerMessageText": "Er du sikker på, at du vil slette indeksøren »{name}«?",
|
||||
"DeleteMetadataProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteNotification": "Slet underretning",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette underretningen '{0}'?",
|
||||
"DeleteNotificationMessageText": "Er du sikker på, at du vil slette notifikationen »{name}«?",
|
||||
"DeleteQualityProfile": "Slet kvalitetsprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"DeleteReleaseProfile": "Slet forsinkelsesprofil",
|
||||
"DeleteQualityProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen »{name}«?",
|
||||
"DeleteReleaseProfile": "Slet udgivelsesprofil",
|
||||
"DeleteReleaseProfileMessageText": "Er du sikker på, at du vil slette denne forsinkelsesprofil?",
|
||||
"DeleteSelectedBookFiles": "Slet valgte filmfiler",
|
||||
"DeleteSelectedBookFilesMessageText": "Er du sikker på, at du vil slette de valgte filmfiler?",
|
||||
@@ -141,8 +140,8 @@
|
||||
"GoToInterp": "Gå til {0}",
|
||||
"Grab": "Tag fat",
|
||||
"GrabID": "Grab ID",
|
||||
"GrabRelease": "Grab Release",
|
||||
"GrabReleaseMessageText": "Radarr var ikke i stand til at bestemme, hvilken film denne udgivelse var til. Radarr kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
|
||||
"GrabRelease": "Hent udgivelse",
|
||||
"GrabReleaseMessageText": "{appName} var ikke i stand til at bestemme, hvilken film denne udgivelse var til. {appName} kan muligvis ikke automatisk importere denne udgivelse. Vil du hente '{0}'?",
|
||||
"GrabSelected": "Greb Valgt",
|
||||
"Group": "Gruppe",
|
||||
"HasPendingChangesNoChanges": "Ingen ændringer",
|
||||
@@ -152,7 +151,7 @@
|
||||
"Hostname": "Værtsnavn",
|
||||
"ICalFeed": "iCal-feed",
|
||||
"ICalHttpUrlHelpText": "Kopier denne URL til dine klienter eller klik for at abonnere, hvis din browser understøtter webcal",
|
||||
"ICalLink": "iCal Link",
|
||||
"ICalLink": "iCal-link",
|
||||
"IconForCutoffUnmet": "Ikon til Cutoff Unmet",
|
||||
"IconTooltip": "Planlagt",
|
||||
"IgnoredAddresses": "Ignorerede adresser",
|
||||
@@ -165,7 +164,7 @@
|
||||
"ImportedTo": "Importeret til",
|
||||
"Importing": "Importerer",
|
||||
"IncludeHealthWarningsHelpText": "Inkluder sundhedsadvarsler",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Vis emner uden en film i køen. Dette kan omfatte fjernede film eller andet i Radarrs kategori",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Vis emner uden en film i køen. Dette kan omfatte fjernede film eller andet i {appName}s kategori",
|
||||
"IncludeUnmonitored": "Inkluder Uovervåget",
|
||||
"Indexer": "Indekser",
|
||||
"IndexerPriority": "Indekseringsprioritet",
|
||||
@@ -176,7 +175,7 @@
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Opgrader, indtil denne kvalitet er opfyldt eller overskredet",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Kan ikke slettes under brug",
|
||||
"Language": "Sprog",
|
||||
"LaunchBrowserHelpText": " Åbn en webbrowser, og naviger til Radarr-hjemmesiden ved start af appen.",
|
||||
"LaunchBrowserHelpText": " Åbn en webbrowser, og naviger til {appName}-hjemmesiden ved start af appen.",
|
||||
"LoadingBookFilesFailed": "Indlæsning af filmfiler mislykkedes",
|
||||
"Local": "Lokal",
|
||||
"LogFiles": "Logfiler",
|
||||
@@ -258,8 +257,8 @@
|
||||
"RSSSync": "RSS-synkronisering",
|
||||
"RSSSyncInterval": "RSS-synkroniseringsinterval",
|
||||
"ReadTheWikiForMoreInformation": "Læs Wiki for mere information",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Radarr understøtter enhver indekserer, der bruger Newznab-standarden såvel som andre indeksatorer, der er anført nedenfor.",
|
||||
"ReadarrTags": "Radarr tags",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "{appName} understøtter enhver indekserer, der bruger Newznab-standarden såvel som andre indeksatorer, der er anført nedenfor.",
|
||||
"ReadarrTags": "{appName} tags",
|
||||
"Real": "Ægte",
|
||||
"Reason": "Grund",
|
||||
"RecycleBinCleanupDaysHelpText": "Sæt til 0 for at deaktivere automatisk oprydning",
|
||||
@@ -275,7 +274,7 @@
|
||||
"ReleaseRejected": "Udgivelse afvist",
|
||||
"ReleaseWillBeProcessedInterp": "Udgivelsen behandles {0}",
|
||||
"Reload": "Genindlæs",
|
||||
"RemotePathMappings": "Remote Path Mappings",
|
||||
"RemotePathMappings": "Sammenkædning med fjernsti",
|
||||
"Remove": "Fjerne",
|
||||
"RemoveCompletedDownloadsHelpText": "Fjern importerede downloads fra downloadklienthistorik",
|
||||
"RemoveFailedDownloadsHelpText": "Fjern mislykkede downloads fra downloadklienthistorik",
|
||||
@@ -287,19 +286,19 @@
|
||||
"RemoveTagExistingTag": "Eksisterende mærke",
|
||||
"RemoveTagRemovingTag": "Fjerner tag",
|
||||
"RemovedFromTaskQueue": "Fjernet fra opgavekøen",
|
||||
"RenameBooksHelpText": "Radarr bruger det eksisterende filnavn, hvis omdøbning er deaktiveret",
|
||||
"RenameBooksHelpText": "{appName} bruger det eksisterende filnavn, hvis omdøbning er deaktiveret",
|
||||
"Reorder": "Omarranger",
|
||||
"ReplaceIllegalCharacters": "Udskift ulovlige tegn",
|
||||
"RequiredHelpText": "Frigivelsen skal indeholde mindst et af disse udtryk (ufølsom)",
|
||||
"RequiredPlaceHolder": "Tilføj ny begrænsning",
|
||||
"RescanAfterRefreshHelpTextWarning": "Radarr registrerer ikke automatisk ændringer i filer, når de ikke er indstillet til 'Altid'",
|
||||
"RescanAfterRefreshHelpTextWarning": "{appName} registrerer ikke automatisk ændringer i filer, når de ikke er indstillet til 'Altid'",
|
||||
"RescanAuthorFolderAfterRefresh": "Genscan filmmappe efter opdatering",
|
||||
"Reset": "Nulstil",
|
||||
"ResetAPIKey": "Nulstil API-nøgle",
|
||||
"ResetAPIKeyMessageText": "Er du sikker på, at du vil nulstille din API-nøgle?",
|
||||
"Restart": "Genstart",
|
||||
"RestartNow": "Genstart nu",
|
||||
"RestartReadarr": "Genstart Radarr",
|
||||
"RestartReadarr": "Genstart {appName}",
|
||||
"Restore": "Gendan",
|
||||
"RestoreBackup": "Gendan sikkerhedskopi",
|
||||
"Result": "Resultat",
|
||||
@@ -340,7 +339,7 @@
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Vist over hver kolonne, når ugen er den aktive visning",
|
||||
"Size": " Størrelse",
|
||||
"SkipFreeSpaceCheck": "Spring fri pladscheck over",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Brug, når Radarr ikke er i stand til at registrere ledig plads fra din filmrodmappe",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Brug, når {appName} ikke er i stand til at registrere ledig plads fra din filmrodmappe",
|
||||
"SorryThatAuthorCannotBeFound": "Beklager, den film kan ikke findes.",
|
||||
"SorryThatBookCannotBeFound": "Beklager, den film kan ikke findes.",
|
||||
"Source": "Kilde",
|
||||
@@ -358,7 +357,7 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Succes! Mit arbejde er udført, ingen filer at omdøbe.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS understøttes ikke med denne indekseringsenhed",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Søgning understøttes ikke med denne indekser",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Bruges, når der foretages automatiske søgninger via brugergrænsefladen eller af Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Bruges, når der foretages automatiske søgninger via brugergrænsefladen eller af {appName}",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Bruges, når der bruges interaktiv søgning",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag bruges ikke og kan slettes",
|
||||
"Tags": "Mærker",
|
||||
@@ -375,7 +374,7 @@
|
||||
"Torrents": "Torrenter",
|
||||
"TotalFileSize": "Samlet filstørrelse",
|
||||
"UILanguage": "UI-sprog",
|
||||
"UILanguageHelpText": "Sprog, som Radarr vil bruge til UI",
|
||||
"UILanguageHelpText": "Sprog, som {appName} vil bruge til UI",
|
||||
"UILanguageHelpTextWarning": "Browser genindlæsning påkrævet",
|
||||
"UISettings": "UI-indstillinger",
|
||||
"URLBase": "URL-base",
|
||||
@@ -413,7 +412,7 @@
|
||||
"UnmonitoredHelpText": "Inkluder ikke-overvågede film i iCal-feedet",
|
||||
"UpdateAll": "Opdater alle",
|
||||
"UpdateAutomaticallyHelpText": "Download og installer opdateringer automatisk. Du kan stadig installere fra System: Updates",
|
||||
"UpdateMechanismHelpText": "Brug Radarrs indbyggede opdatering eller et script",
|
||||
"UpdateMechanismHelpText": "Brug {appName}s indbyggede opdatering eller et script",
|
||||
"UpdateScriptPathHelpText": "Sti til et brugerdefineret script, der tager en udpakket opdateringspakke og håndterer resten af opdateringsprocessen",
|
||||
"Updates": "Opdateringer",
|
||||
"UpgradeAllowedHelpText": "Hvis deaktiveret, vil kvalitet ikke vil blive opgraderet",
|
||||
@@ -425,20 +424,19 @@
|
||||
"UsenetDelay": "Usenet-forsinkelse",
|
||||
"UsenetDelayHelpText": "Forsink i minutter, før du tager fat i en frigivelse fra Usenet",
|
||||
"Username": "Brugernavn",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Filial, der skal bruges til at opdatere Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Gren brugt af ekstern opdateringsmekanisme",
|
||||
"BranchUpdate": "Filial, der skal bruges til at opdatere {appName}",
|
||||
"BranchUpdateMechanism": "Gren brugt af ekstern opdateringsmekanisme",
|
||||
"Version": "Version",
|
||||
"WeekColumnHeader": "Ugens kolonneoverskrift",
|
||||
"Year": "År",
|
||||
"YesCancel": "Ja, Annuller",
|
||||
"ApiKeyHelpTextWarning": "Kræver genstart for at træde i kraft",
|
||||
"DeleteRootFolderMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
|
||||
"LoadingBooksFailed": "Indlæsning af filmfiler mislykkedes",
|
||||
"ProxyPasswordHelpText": "Du skal kun indtaste et brugernavn og en adgangskode, hvis der kræves et. Lad dem være tomme ellers.",
|
||||
"SslCertPathHelpTextWarning": "Kræver genstart for at træde i kraft",
|
||||
"UnableToLoadMetadataProfiles": "Kunne ikke indlæse forsinkelsesprofiler",
|
||||
"DownloadClientCheckDownloadingToRoot": "Download klient {0} placerer downloads i rodmappen {1}. Du skal ikke downloade til en rodmappe.",
|
||||
"ReplaceIllegalCharactersHelpText": "Udskift ulovlige tegn. Hvis det ikke er markeret, fjerner Radarr dem i stedet",
|
||||
"ReplaceIllegalCharactersHelpText": "Udskift ulovlige tegn. Hvis det ikke er markeret, fjerner {appName} dem i stedet",
|
||||
"ReleaseTitle": "Udgiv titel",
|
||||
"Actions": "Handlinger",
|
||||
"Tomorrow": "I morgen",
|
||||
@@ -456,11 +454,11 @@
|
||||
"RemoveFromBlocklist": "Fjern fra sortlisten",
|
||||
"Component": "Komponent",
|
||||
"Level": "Niveau",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Filial {0} er ikke en gyldig Radarr-frigivelsesfilial, du modtager ikke opdateringer",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Filial {0} er ikke en gyldig {appName}-frigivelsesfilial, du modtager ikke opdateringer",
|
||||
"Blocklist": "Blacklist",
|
||||
"BlocklistRelease": "Udgivelse af sortliste",
|
||||
"SelectedCountBooksSelectedInterp": "{0} Film (er) valgt",
|
||||
"ThisCannotBeCancelled": "Dette kan ikke annulleres en gang startet uden genstart af Radarr.",
|
||||
"ThisCannotBeCancelled": "Dette kan ikke annulleres når først det er startet uden at du deaktiverer alle dine indeksører.",
|
||||
"UnselectAll": "Fravælg alle",
|
||||
"UpdateSelected": "Opdatering valgt",
|
||||
"Wanted": "Ønskede",
|
||||
@@ -470,7 +468,7 @@
|
||||
"SettingsRemotePathMappingRemotePath": "Fjern sti",
|
||||
"Connect": "Tilslut",
|
||||
"Lists": "Lister",
|
||||
"ReadarrSupportsAnyDownloadClient": "Whisparr understøtter enhver downloadklient, der bruger Newznab-standarden, samt andre downloadklienter, der er anført nedenfor.",
|
||||
"ReadarrSupportsAnyDownloadClient": "{appName} understøtter enhver downloadklient, der bruger Newznab-standarden, samt andre downloadklienter, der er anført nedenfor.",
|
||||
"ShowUnknownAuthorItems": "Vis ukendte filmgenstande",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Filmmappen '{0}' og alt dens indhold slettes.",
|
||||
"TimeLeft": "Tid tilbage",
|
||||
@@ -483,7 +481,7 @@
|
||||
"General": "Generelt",
|
||||
"GeneralSettingsSummary": "Port, SSL, brugernavn/adgangskode, proxy, analyser og opdateringer",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Sti til den mappe, som Download-klienten har adgang til",
|
||||
"MissingFromDisk": "Whisparr kunne ikke finde filen på disken, så den blev fjernet",
|
||||
"MissingFromDisk": "{appName} kunne ikke finde filen på disken, så den blev fjernet",
|
||||
"Disabled": "deaktiveret",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Ude af stand til at kommunikere med {0}.",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download klienter er ikke tilgængelige på grund af fejl: {0}",
|
||||
@@ -498,7 +496,7 @@
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Alle rss-mulige indexere er midlertidigt utilgængelige på grund af nylige indexer fejl",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Alle søge-mulige indexere er midlertidigt utilgængelige på grund af nylige indexer fejl",
|
||||
"IndexerPriorityHelpText": "Indekseringsprioritet fra 1 (højest) til 50 (lavest). Standard: 25.",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Ingen indexere er tilgængelige med Interaktiv Søg aktiveret, Radarr vil ikke give nogle interaktive søge resultater",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Ingen indexere er tilgængelige med Interaktiv Søg aktiveret, {appName} vil ikke give nogle interaktive søge resultater",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexere utilgængelige på grund af fejl: {0}",
|
||||
"MediaManagement": "Mediestyring",
|
||||
"Metadata": "Metadata",
|
||||
@@ -518,20 +516,20 @@
|
||||
"QueueIsEmpty": "Køen er tom",
|
||||
"RefreshAndScan": "Opdater & Scan",
|
||||
"RescanAfterRefreshHelpText": "Scan igen filmmappen efter opdatering af filmen",
|
||||
"RestartReloadNote": "Bemærk: Radarr genstarter automatisk og genindlæser brugergrænsefladen under gendannelsesprocessen.",
|
||||
"RestartReloadNote": "Bemærk: {appName} genstarter automatisk og genindlæser brugergrænsefladen under gendannelsesprocessen.",
|
||||
"RootFolderCheckMultipleMessage": "Der mangler flere rodmapper: {0}",
|
||||
"RootFolderCheckSingleMessage": "Manglende rodmappe: {0}",
|
||||
"SearchFiltered": "Søg filtreret",
|
||||
"SettingsRemotePathMappingLocalPath": "Lokal sti",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Sti, som Radarr skal bruge for at få adgang til den eksterne sti lokalt",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Sti, som {appName} skal bruge for at få adgang til den eksterne sti lokalt",
|
||||
"SystemTimeCheckMessage": "Systemtiden er slukket mere end 1 dag. Planlagte opgaver kører muligvis ikke korrekt, før tiden er rettet",
|
||||
"UpdateCheckStartupNotWritableMessage": "Kan ikke installere opdatering, fordi startmappen '{0}' ikke kan skrives af brugeren '{1}'.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Kan ikke installere opdatering, fordi startmappen '{0}' er i en App Translocation-mappe.",
|
||||
"UpdateCheckUINotWritableMessage": "Kan ikke installere opdatering, fordi brugergrænsefladen \"{0}\" ikke kan skrives af brugeren \"{1}\".",
|
||||
"DownloadClientsSettingsSummary": "Download klienter, download håndtering og remote path mappings",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Alle download klienter er utilgængelige på grund af fejl",
|
||||
"IndexerRssHealthCheckNoIndexers": "Ingen indexer tilgængelig med RSS sync aktiveret, Radarr vil ikke tage nye udgivelser automatisk",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Ingen indexere tilgængelige med Automatisk Søg aktiveret, Radarr vil ikke give nogle automatiske søge resultater",
|
||||
"IndexerRssHealthCheckNoIndexers": "Ingen indexer tilgængelig med RSS sync aktiveret, {appName} vil ikke tage nye udgivelser automatisk",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Ingen indexere tilgængelige med Automatisk Søg aktiveret, {appName} vil ikke give nogle automatiske søge resultater",
|
||||
"IndexerStatusCheckAllClientMessage": "Alle indeksører er utilgængelige på grund af fejl",
|
||||
"MaintenanceRelease": "Vedligeholdelsesfrigivelse: fejlrettelser og andre forbedringer. Se Github Commit History for flere detaljer",
|
||||
"ProxyCheckResolveIpMessage": "Mislykkedes at løse IP-adressen til den konfigurerede proxyhost {0}",
|
||||
@@ -551,7 +549,7 @@
|
||||
"MoveFiles": "Flyt filer",
|
||||
"Label": "Etiket",
|
||||
"HardlinkCopyFiles": "Hardlink/Kopir Filer",
|
||||
"CustomFormatScore": "Bruger Tilpasset Format score",
|
||||
"CustomFormatScore": "Brugerdefineret formats resultat",
|
||||
"MinimumCustomFormatScore": "Minimum tilpasset format score",
|
||||
"CloneCustomFormat": "Klon brugerdefineret format",
|
||||
"Conditions": "Betingelser",
|
||||
@@ -568,13 +566,13 @@
|
||||
"UpgradesAllowed": "Opgraderinger tilladt",
|
||||
"CustomFormatSettings": "Indstillinger for brugerdefinerede formater",
|
||||
"CustomFormats": "Bruger Tilpasset Formater",
|
||||
"CutoffFormatScoreHelpText": "Når denne score til brugerdefineret format er nået, downloader Radarr ikke længere film",
|
||||
"CutoffFormatScoreHelpText": "Når denne score til brugerdefineret format er nået, downloader {appName} ikke længere film",
|
||||
"DeleteCustomFormatMessageText": "Er du sikker på, at du vil slette indeksøren '{0}'?",
|
||||
"HiddenClickToShow": "Skjult, klik for at vise",
|
||||
"ShownClickToHide": "Vist, klik for at skjule",
|
||||
"HideAdvanced": "Gemt Avancerede",
|
||||
"ShowAdvanced": "Vis avanceret",
|
||||
"ColonReplacement": "Udskiftning af tyktarm",
|
||||
"ColonReplacement": "Udskiftning af kolon",
|
||||
"ReplaceWithDash": "Udskift med Dash",
|
||||
"ReplaceWithSpaceDash": "Udskift med Space Dash",
|
||||
"ReplaceWithSpaceDashSpace": "Udskift med Space Dash Space",
|
||||
@@ -584,7 +582,7 @@
|
||||
"Negated": "Negeret",
|
||||
"RemoveSelectedItemBlocklistMessageText": "Er du sikker på, at du vil fjerne de valgte emner fra sortlisten?",
|
||||
"BlocklistReleases": "Udgivelse af sortliste",
|
||||
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"RemoveSelectedItemQueueMessageText": "Er du sikker på, at du vil fjerne 1 element fra køen?",
|
||||
"RemoveSelectedItemsQueueMessageText": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"Required": "Påkrævet",
|
||||
"NoEventsFound": "Ingen begivenheder fundet",
|
||||
@@ -620,8 +618,8 @@
|
||||
"System": "System",
|
||||
"NextExecution": "Næste udførelse",
|
||||
"NoResultsFound": "Ingen resultater fundet",
|
||||
"ConnectionLost": "Forbindelse Mistet",
|
||||
"ConnectionLostReconnect": "Radarr vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
|
||||
"ConnectionLost": "Forbindelse mistet",
|
||||
"ConnectionLostReconnect": "{appName} vil prøve at tilslutte automatisk. Ellers du kan klikke genindlæs forneden.",
|
||||
"Location": "Beliggenhed",
|
||||
"RecentChanges": "Seneste ændringer",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Nogle resultater skjules af det anvendte filter",
|
||||
@@ -638,7 +636,7 @@
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Eksempler: '.sub, .nfo' eller 'sub, nfo'",
|
||||
"AutoRedownloadFailed": "Download fejlede",
|
||||
"SourceTitle": "Kildetitel",
|
||||
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne {0} element {1} fra køen?",
|
||||
"RemoveQueueItemConfirmation": "Er du sikker på, at du vil fjerne »{sourceTitle}« fra køen?",
|
||||
"ImportLists": "Lister",
|
||||
"ListsSettingsSummary": "Lister",
|
||||
"CustomFilter": "Bruger Tilpassede Filtere",
|
||||
@@ -650,5 +648,26 @@
|
||||
"InteractiveSearchModalHeader": "Interaktiv søgning",
|
||||
"Theme": "Tema",
|
||||
"Publisher": "Udgiver",
|
||||
"CatalogNumber": "katalognummer"
|
||||
"CatalogNumber": "katalognummer",
|
||||
"FailedLoadingSearchResults": "Kunne ikke indlæse søgeresultater. Prøv igen.",
|
||||
"AuthBasic": "Grundlæggende (pop op-browser)",
|
||||
"AuthForm": "Formularer (login-side)",
|
||||
"DisabledForLocalAddresses": "Deaktiveret for lokale adresser",
|
||||
"Enabled": "Aktiveret",
|
||||
"ApiKey": "API-nøgle",
|
||||
"AddedAuthorSettings": "Indstillinger for tilføjede forfattere",
|
||||
"AddMissing": "Tilføj manglende",
|
||||
"AddImportListExclusionHelpText": "Forhindre bog i at blive tilføjet til Readarr via Importer Lister eller Opdater Forfatter",
|
||||
"AptUpdater": "Brug apt til at installere opdateringen",
|
||||
"BuiltIn": "Indbygget",
|
||||
"CurrentlyInstalled": "Aktuelt installeret",
|
||||
"InstallLatest": "Installer senest",
|
||||
"Script": "Manuskript",
|
||||
"UpdateAppDirectlyLoadError": "Kan ikke opdatere {appName} direkte,",
|
||||
"Clone": "Luk",
|
||||
"UnmappedFiles": "Ikke-kortlagte mapper",
|
||||
"DockerUpdater": "opdater docker-containeren for at modtage opdateringen",
|
||||
"ExternalUpdater": "{appName} er konfigureret til at bruge en ekstern opdateringsmekanisme",
|
||||
"OnLatestVersion": "Den seneste version af {appName} er allerede installeret",
|
||||
"WouldYouLikeToRestoreBackup": "Vil du gendanne sikkerhedskopien »{name}«?"
|
||||
}
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
{
|
||||
"PreviewRename": "Umbenennen",
|
||||
"PreviewRename": "Vorschau Umbenennung",
|
||||
"RecyclingBin": "Papierkorb",
|
||||
"Usenet": "Usenet",
|
||||
"20MinutesTwenty": "20 Minuten: {0}",
|
||||
"45MinutesFourtyFive": "45 Minuten: {0}",
|
||||
"60MinutesSixty": "60 Minuten: {0}",
|
||||
"APIKey": "API-Schlüssel",
|
||||
"About": "Über",
|
||||
"AddListExclusion": "Listenausschluss hinzufügen",
|
||||
"AddingTag": "Tag hinzufügen",
|
||||
"AgeWhenGrabbed": "Alter (zum Zeitpunkt der Entführung)",
|
||||
"AgeWhenGrabbed": "Alter (bei Erfassung)",
|
||||
"AlreadyInYourLibrary": "Bereits in Ihrer Bibliothek",
|
||||
"AlternateTitles": "Alternative Titel",
|
||||
"Analytics": "Analysen",
|
||||
@@ -18,10 +17,10 @@
|
||||
"AppDataDirectory": "AppData-Verzeichnis",
|
||||
"ApplyTags": "Schlagworte anwenden",
|
||||
"Authentication": "Authentifizierung",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf Readarr sind Benutzername und Passwort erforderlich",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
|
||||
"AuthorClickToChangeBook": "Klicken um den Film zu bearbeiten",
|
||||
"AutoRedownloadFailedHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in Radarr nicht mehr beobachten",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Auf der Festplatte gelöschte Filme auch automatisch in {appName} nicht mehr beobachten",
|
||||
"Automatic": "Automatisch",
|
||||
"BackupFolderHelpText": "Relative Pfade befinden sich unter Readarrs AppData Ordner",
|
||||
"BackupNow": "Jetzt sichern",
|
||||
@@ -36,7 +35,7 @@
|
||||
"Calendar": "Kalender",
|
||||
"CalendarWeekColumnHeaderHelpText": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
||||
"Cancel": "Abbrechen",
|
||||
"CancelMessageText": "Diese laufende Aufgabe wirklich abbrechen?",
|
||||
"CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?",
|
||||
"CertificateValidation": "Zertifikatsvalidierung",
|
||||
"CertificateValidationHelpText": "Ändern Sie, wie streng die Validierung der HTTPS-Zertifizierung ist. Ändern Sie nichts, es sei denn, Sie verstehen die Risiken.",
|
||||
"ChangeFileDate": "Ändern Sie das Dateidatum",
|
||||
@@ -45,7 +44,7 @@
|
||||
"ChmodFolderHelpText": "Oktal, angewendet beim Importieren/Umbenennen auf Medienordner und -dateien (ohne Ausführungsbits)",
|
||||
"ChmodFolderHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der Readarr ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die Berechtigungen richtig setzt.",
|
||||
"ChownGroupHelpText": "Gruppenname oder GID. Verwenden Sie GID für Remote-Dateisysteme.",
|
||||
"ChownGroupHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der Radarr ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die gleiche Gruppe wie Radarr verwendet.",
|
||||
"ChownGroupHelpTextWarning": "Dies funktioniert nur, wenn der Benutzer, der {appName} ausführt, der Eigentümer der Datei ist. Es ist besser, sicherzustellen, dass der Download-Client die gleiche Gruppe wie {appName} verwendet.",
|
||||
"Clear": "Leeren",
|
||||
"ClickToChangeQuality": "Klicken Sie, um die Qualität zu ändern",
|
||||
"ClientPriority": "Priorität",
|
||||
@@ -58,10 +57,10 @@
|
||||
"Connections": "Verbindungen",
|
||||
"CopyUsingHardlinksHelpText": "Hardlinks erstellen wenn Torrents die noch geseeded werden kopiert werden sollen",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Dateisperren Gelegentlich kann es vorkommen, dass Dateisperren das Umbenennen von Dateien verhindern, die gerade geseeded werden. Sie können das Seeding vorübergehend deaktivieren und die Umbenennungsfunktion von Readarr als Workaround verwenden.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Leere Filmordner für fehlende Filme beim Scan erstellen",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Leere Autorenordner für fehlende Autoren beim Scan erstellen",
|
||||
"CreateGroup": "Gruppe erstellen",
|
||||
"CutoffHelpText": "Sobald diese Qualität erreicht wird, werden keine neuen Releases erfasst",
|
||||
"CutoffUnmet": "› Schwelle nicht erreicht",
|
||||
"CutoffUnmet": "Schwelle nicht erreicht",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"Dates": "Termine",
|
||||
"DelayProfile": "Verzögerungsprofil",
|
||||
@@ -97,7 +96,7 @@
|
||||
"DiskSpace": "Festplattenplatz",
|
||||
"Docker": "Docker",
|
||||
"DownloadClientSettings": "Downloader Einstellungen",
|
||||
"DownloadClients": "Downloader",
|
||||
"DownloadClients": "Download Clients",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Download fehlgeschlagen: Prüfe den Downloader für mehr Details",
|
||||
"DownloadFailedInterp": "Download fehlgeschlagen: {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Automatisch Proper oder Repacks zum upgraden eines Filmes zulassen",
|
||||
@@ -105,18 +104,18 @@
|
||||
"Edit": "Bearbeiten",
|
||||
"Edition": "Auflage",
|
||||
"Enable": "Aktivieren",
|
||||
"EnableAutomaticAdd": "Automatisch hinzufügen",
|
||||
"EnableAutomaticAdd": "Automatisches Hinzufügen aktivieren",
|
||||
"EnableAutomaticSearch": "Automatische Suche einschalten",
|
||||
"EnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren",
|
||||
"EnableColorImpairedModeHelpText": "Alternativer Stil, um farbbeeinträchtigten Benutzern eine bessere Unterscheidung farbcodierter Informationen zu ermöglichen",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importiere fertige Downloads vom Downloader automatisch",
|
||||
"EnableHelpText": "Metadaten Dateien erstellen für diesen Metadata Typ",
|
||||
"EnableColorImpairedMode": "Farbenblindmodus aktivieren",
|
||||
"EnableColorImpairedModeHelpText": "Stiländerung, um es Farbenblinden Benutzern zu ermöglichen, farbcodierte Informationen besser zu unterscheiden",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Automatischer Import abgeschlossener Downloads vom Download Client",
|
||||
"EnableHelpText": "Aktiviere die Erstellung von Metadaten-Dateien für diesen Metadaten-Typ",
|
||||
"EnableInteractiveSearch": "Interaktive Suche einschalten",
|
||||
"EnableRSS": "RSS aktivieren",
|
||||
"EnableSSL": "SSL",
|
||||
"EnableSslHelpText": " Erfordert einen Neustart als Administrator",
|
||||
"Ended": "Beendet",
|
||||
"ErrorLoadingContents": "Fehler beim laden der Inhalte",
|
||||
"ErrorLoadingContents": "Fehler beim Laden von Inhalten",
|
||||
"ErrorLoadingPreviews": "Fehler beim laden der Vorschauen",
|
||||
"Exception": "Ausnahme",
|
||||
"FailedDownloadHandling": "Verarbeitung fehlgeschlagener Downloads",
|
||||
@@ -133,20 +132,20 @@
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Für mehr Infomationen klicke auf die Info-Knöpfe.",
|
||||
"GeneralSettings": "Allgemeine Einstellungen",
|
||||
"Global": "Global",
|
||||
"Global": "Weltweit",
|
||||
"GoToInterp": "Zu {0} gehen",
|
||||
"Grab": "Erfasse",
|
||||
"Grab": "Holen",
|
||||
"GrabID": "Erfass ID",
|
||||
"GrabRelease": "Release erfassen",
|
||||
"GrabRelease": "Release holen",
|
||||
"GrabReleaseMessageText": "Das Release konnte keinem Film zugeordnet werden. Ein automatischer Import wird nicht möglich sein. Trotzdem '{0}' erfassen?",
|
||||
"GrabSelected": "Auswahl erfassen",
|
||||
"GrabSelected": "Auswahl abrufen",
|
||||
"Group": "Gruppe",
|
||||
"HasPendingChangesNoChanges": "Keine Änderungen",
|
||||
"HasPendingChangesSaveChanges": "Änderungen speichern",
|
||||
"History": "Verlauf",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"ICalFeed": "iCal-Feed",
|
||||
"ICalFeed": "iCal Feed",
|
||||
"ICalHttpUrlHelpText": "Füge diese URL in deinen Client ein oder klicke auf abonnieren wenn dein Browser Webcal untertützt",
|
||||
"ICalLink": "iCal Link",
|
||||
"IconForCutoffUnmet": "Symbol für Schwelle nicht erreicht",
|
||||
@@ -155,28 +154,28 @@
|
||||
"IgnoredHelpText": "Ein Release wird abgelehnt, wenn es einen oder mehrere dieser Begriffe enthält (Groß- und Kleinschreibung wird nicht berücksichtigt)",
|
||||
"IgnoredPlaceHolder": "Neue Beschränkung hinzufügen",
|
||||
"IllRestartLater": "Später neustarten",
|
||||
"ImportExtraFiles": "Extra Dateien importieren",
|
||||
"ImportExtraFiles": "Zusätzliche Dateien importieren",
|
||||
"ImportExtraFilesHelpText": "Importiere zutreffende Extra Dateien (Untertitel, nfo, etc.) nach dem Importieren einer Filmdatei",
|
||||
"ImportFailedInterp": "Import fehlgeschlagen: {0}",
|
||||
"ImportedTo": "Importiert nach",
|
||||
"Importing": "Importiere",
|
||||
"IncludeHealthWarningsHelpText": "Zustandswarnung",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Einträge ohne eine Zuordnung in der Warteschlange anzeigen. Dies könnten gelöschte Autoren, Bücher oder alles andere mit Readarrs Downloadkategorie sein",
|
||||
"IncludeUnmonitored": "Nicht beobachtete einbeziehen",
|
||||
"IncludeUnmonitored": "Unüberwachte einbeziehen",
|
||||
"Indexer": "Indexer",
|
||||
"IndexerPriority": "Priorität",
|
||||
"IndexerSettings": "Indexer Einstellungen",
|
||||
"IndexerPriority": "Indexer-Priorität",
|
||||
"IndexerSettings": "Indexer-Einstellungen",
|
||||
"Indexers": "Indexer",
|
||||
"Interval": "Intervall",
|
||||
"IsCutoffCutoff": "Schwelle",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Solange bis die Qualität erreicht oder übertroffen wird verbessern",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Kann während der Benutzung nicht gelöscht werden",
|
||||
"Language": "Sprache",
|
||||
"LaunchBrowserHelpText": " Öffne die Startseite von Radarr im Webbrowser nach dem Start.",
|
||||
"LaunchBrowserHelpText": " Öffne die Startseite von {appName} im Webbrowser nach dem Start.",
|
||||
"LoadingBookFilesFailed": "Laden der Film-Dateien fehlgeschlagen",
|
||||
"Local": "Lokal",
|
||||
"LogFiles": "Protokolldateien",
|
||||
"LogLevel": "Log Level",
|
||||
"LogLevel": "Protokollstufe",
|
||||
"LogLevelvalueTraceTraceLoggingShouldOnlyBeEnabledTemporarily": "Trace logging sollte nur kurzzeitig aktiviert werden",
|
||||
"Logging": "Protokollierung",
|
||||
"Logs": "Protokolle",
|
||||
@@ -188,52 +187,52 @@
|
||||
"MaximumLimits": "Maximale Grenzen",
|
||||
"MaximumSize": "Maximale Größe",
|
||||
"MaximumSizeHelpText": "Maximale Größe für ein zu erfassendes Release in MB. 0 bedeutet unbegrenzt.",
|
||||
"Mechanism": "Verfahren",
|
||||
"MediaInfo": "Medien Information",
|
||||
"MediaManagementSettings": "Medienverwaltungs Einstellungen",
|
||||
"Mechanism": "Mechanismus",
|
||||
"MediaInfo": "Medieninfo",
|
||||
"MediaManagementSettings": "Einstellungen zur Medienverwaltung",
|
||||
"Message": "Nachricht",
|
||||
"MetadataSettings": "Metadaten Einstellungen",
|
||||
"MetadataSettings": "Einstellungen für Metadaten",
|
||||
"MinimumAge": "Mindestalter",
|
||||
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten der NZBs bevor sie erfasst werden. Gebe damit neuen Releases Zeit, sich bei deinem Usenet Provider zu verbreiten.",
|
||||
"MinimumFreeSpace": "Mindest freier Speicher",
|
||||
"MinimumAgeHelpText": "Nur Usenet: Mindestalter in Minuten von NZBs, bevor sie heruntergeladen werden. Verwende dies, um neuen Releases Zeit zu geben, zu deinem Usenet-Anbieter zu propagieren.",
|
||||
"MinimumFreeSpace": "Mindestfreier Speicherplatz",
|
||||
"MinimumFreeSpaceWhenImportingHelpText": "Importieren verhindern wenn weniger als dieser Wert als freier Speicher zur Verfügung steht",
|
||||
"MinimumLimits": "Mindest Grenzen",
|
||||
"MinimumLimits": "Minimale Grenzen",
|
||||
"Missing": "Fehlend",
|
||||
"Mode": "Modus",
|
||||
"Monitored": "Beobachtet",
|
||||
"Monitored": "Überwacht",
|
||||
"MoreInfo": "Mehr Infos",
|
||||
"MustContain": "Muss beinhalten",
|
||||
"MustNotContain": "Darf nicht beinhalten",
|
||||
"MustContain": "Muss enthalten",
|
||||
"MustNotContain": "Darf nicht enthalten",
|
||||
"Name": "Name",
|
||||
"NamingSettings": "Bennenungs Einstellungen",
|
||||
"NamingSettings": "Benennungseinstellungen",
|
||||
"New": "Neu",
|
||||
"NoBackupsAreAvailable": "Es sind keine Backups vorhanden",
|
||||
"NoBackupsAreAvailable": "Keine Sicherungen verfügbar",
|
||||
"NoHistory": "Kein Verlauf.",
|
||||
"NoLeaveIt": "Nein, nicht ändern",
|
||||
"NoLimitForAnyRuntime": "Keine Begrenzung der Laufzeiten",
|
||||
"NoLogFiles": "Keine Log-Dateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für Laufzeiten",
|
||||
"NoLeaveIt": "Nein, lass es",
|
||||
"NoLimitForAnyRuntime": "Kein Limit für beliebige Laufzeit",
|
||||
"NoLogFiles": "Keine Logdateien",
|
||||
"NoMinimumForAnyRuntime": "Kein Minimum für beliebige Laufzeit",
|
||||
"NoUpdatesAreAvailable": "Es sind keine Updates verfügbar",
|
||||
"None": "Keine",
|
||||
"NotificationTriggers": "Benachrichtigungs Auslöser",
|
||||
"NotificationTriggers": "Benachrichtigungs-Auslöser",
|
||||
"OnGrabHelpText": "Erfassen",
|
||||
"OnHealthIssueHelpText": "Zustandsproblem",
|
||||
"OnRenameHelpText": "Umbennenen",
|
||||
"OnUpgradeHelpText": "Upgrade",
|
||||
"OpenBrowserOnStart": "Browser beim Start öffnen",
|
||||
"Options": "Optionen",
|
||||
"Original": "Orginal",
|
||||
"Overview": "Übersicht",
|
||||
"PackageVersion": "Paket Version",
|
||||
"Original": "Original",
|
||||
"Overview": "Überblick",
|
||||
"PackageVersion": "Paketversion",
|
||||
"PageSize": "Einträge pro Seite",
|
||||
"PageSizeHelpText": "Anzahl der Einträge pro Seite",
|
||||
"Password": "Passwort",
|
||||
"Path": "Pfad",
|
||||
"Permissions": "Rechte",
|
||||
"Permissions": "Berechtigungen",
|
||||
"Port": "Port",
|
||||
"PortHelpTextWarning": "Erfordert einen Neustart",
|
||||
"PortNumber": "Port Nummer",
|
||||
"PosterSize": "Plakatgröße",
|
||||
"PortNumber": "Portnummer",
|
||||
"PosterSize": "Postergröße",
|
||||
"Profiles": "Profile",
|
||||
"Proper": "Korrekt",
|
||||
"PropersAndRepacks": "Propers und Repacks",
|
||||
@@ -254,7 +253,7 @@
|
||||
"RSSSyncInterval": "RSS Synchronisierungs Intervall",
|
||||
"ReadTheWikiForMoreInformation": "Lesen Sie das Wiki für weitere Informationen",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Jeder Indexer der den Newznab-Standard verwendet oder unten aufgelistet ist wird untertützt.",
|
||||
"ReadarrTags": "Radarr Tags",
|
||||
"ReadarrTags": "{appName} Tags",
|
||||
"Real": "Real",
|
||||
"Reason": "Begründung",
|
||||
"RecycleBinCleanupDaysHelpText": "Auf 0 setzen um das automatische leeren des Papierkorbs zu deaktivieren",
|
||||
@@ -268,22 +267,22 @@
|
||||
"ReleaseGroup": "Release-Gruppe",
|
||||
"ReleaseRejected": "Release abgelehnt",
|
||||
"ReleaseWillBeProcessedInterp": "Release wird verarbeitet {0}",
|
||||
"Reload": "Neuladen",
|
||||
"Reload": "Neu laden",
|
||||
"RemotePathMappings": "Remote-Pfadzuordnungen",
|
||||
"Remove": "Entfernen",
|
||||
"RemoveCompletedDownloadsHelpText": "Importierte Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveCompletedDownloadsHelpText": "Entferne importierte Downloads aus der Download-Client-Historie",
|
||||
"RemoveFailedDownloadsHelpText": "Fehlgeschlagene Downloads aus dem Downloader Verlauf entfernen",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
"RemoveFromDownloadClient": "Aus dem Download Client entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlage entfernen",
|
||||
"RemoveFromQueue": "Aus der Warteschlange entfernen",
|
||||
"RemoveHelpTextWarning": "Dies wird den Download und alle bereits heruntergeladenen Dateien aus dem Downloader entfernen.",
|
||||
"RemoveSelected": "Auswahl entfernen",
|
||||
"RemoveSelected": "Ausgewählte entfernen",
|
||||
"RemoveTagExistingTag": "Vorhandener Tag",
|
||||
"RemoveTagRemovingTag": "Tag entfernen",
|
||||
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
|
||||
"RenameBooksHelpText": "Wenn das umbennen deaktiviert ist, wird der vorhandene Dateiname benutzt",
|
||||
"Reorder": "Neu sortieren",
|
||||
"ReplaceIllegalCharacters": "Sonderzeichen ersetzen",
|
||||
"Reorder": "Neu anordnen",
|
||||
"ReplaceIllegalCharacters": "Illegale Zeichen ersetzen",
|
||||
"RequiredHelpText": "Das Release mus mindesten eines der Begriffe beinhalten ( Groß-/Kleinschreibung wird nicht beachtet )",
|
||||
"RequiredPlaceHolder": "Neue Beschränkung hinzufügen",
|
||||
"RescanAfterRefreshHelpTextWarning": "Wenn nicht \"Immer (Always)\" ausgewählt wird, werden Dateiänderungen nicht automatisch erkannt",
|
||||
@@ -293,41 +292,41 @@
|
||||
"ResetAPIKeyMessageText": "Sind Sie sicher, dass Sie Ihren API-Schlüssel zurücksetzen möchten?",
|
||||
"Restart": "Neu starten",
|
||||
"RestartNow": "Jetzt neustarten",
|
||||
"RestartReadarr": "Radarr Neustarten",
|
||||
"RestartReadarr": "{appName} Neustarten",
|
||||
"Restore": "Wiederherstellen",
|
||||
"RestoreBackup": "Sicherung wiederherstellen",
|
||||
"Result": "Ergebnis",
|
||||
"RetentionHelpText": "Nur Usenet: Auf Null setzen, um eine unbegrenzte Aufbewahrung festzulegen",
|
||||
"RetryingDownloadInterp": "Herunterladen nochmal versuchen {0} um {1}",
|
||||
"RootFolder": "Stammordner",
|
||||
"RootFolders": "Stammordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Zum deaktivieren auf 0 setzen ( Dies wird das automatische Release erfassen deaktivieren )",
|
||||
"RootFolder": "Root-Ordner",
|
||||
"RootFolders": "Root-Ordner",
|
||||
"RssSyncIntervalHelpText": "Intervall in Minuten. Setze auf null, um es zu deaktivieren (dies stoppt alle automatischen Release-Abfragen)",
|
||||
"SSLCertPassword": "SSL Zertifikat Passwort",
|
||||
"SSLCertPath": "Pfad zum SSL Zertifikat",
|
||||
"SSLPort": "SSL Port",
|
||||
"Scheduled": "Geplant",
|
||||
"ScriptPath": "Script Pfad",
|
||||
"Search": "Suche",
|
||||
"SearchAll": "Suche alle",
|
||||
"SearchForMissing": "Suche fehlende",
|
||||
"SearchSelected": "Auswahl suchen",
|
||||
"ScriptPath": "Skript-Pfad",
|
||||
"Search": "Suchen",
|
||||
"SearchAll": "Alle durchsuchen",
|
||||
"SearchForMissing": "Suche nach fehlenden Episoden",
|
||||
"SearchSelected": "Ausgewählte durchsuchen",
|
||||
"Security": "Sicherheit",
|
||||
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
|
||||
"SetPermissions": "Rechte setzen",
|
||||
"SetPermissionsLinuxHelpText": "Soll CHMOD ausgeführt werden wenn Datien importiert/umbenannt werden?",
|
||||
"SetPermissions": "Berechtigungen festlegen",
|
||||
"SetPermissionsLinuxHelpText": "Soll chmod beim Importieren/Umbenennen von Dateien ausgeführt werden?",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Wenn Sie nicht sicher sind, was diese Einstellungen bewirken, ändern Sie sie nicht.",
|
||||
"Settings": "Einstellungen",
|
||||
"ShortDateFormat": "Kurzes Datumsformat",
|
||||
"ShowCutoffUnmetIconHelpText": "Symbol zeigen wenn die Qualitätsschwelle noch nicht erreicht wurde",
|
||||
"ShowDateAdded": "Datum der Hinzufügung anzeigen",
|
||||
"ShowPath": "Pfad anzeigen",
|
||||
"ShowQualityProfile": "Qualitätsdefinition anzeigen",
|
||||
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Plakat anzeigen",
|
||||
"ShowRelativeDates": "Relatives Datum anzeigen",
|
||||
"ShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen",
|
||||
"ShowQualityProfile": "Qualitätsprofil anzeigen",
|
||||
"ShowQualityProfileHelpText": "Qualitätsprofil unter dem Poster anzeigen",
|
||||
"ShowRelativeDates": "Relative Daten anzeigen",
|
||||
"ShowRelativeDatesHelpText": "Relative (Heute/Gestern/etc.) oder absolute Daten anzeigen",
|
||||
"ShowSearch": "Suche anzeigen",
|
||||
"ShowSearchActionHelpText": "Suchbutton anzeigen beim draufzeigen",
|
||||
"ShowSizeOnDisk": "Belegter Speicherplatz anzeigen",
|
||||
"ShowSizeOnDisk": "Größe auf der Festplatte anzeigen",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Wird in der Wochenansicht über jeder Spalte angezeigt",
|
||||
"Size": " Größe",
|
||||
"SkipFreeSpaceCheck": "Prüfung des freien Speichers überspringen",
|
||||
@@ -350,7 +349,7 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Fertig! Keine weiteren Dateien zum umbennenen.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Der Indexer unterstützt kein RSS",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Der Indexer unterstützt keine Suchen",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Wird für automatische Suchen genutzt die vom Benutzer oder von Radarr gestartet werden",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Wird für automatische Suchen genutzt die vom Benutzer oder von {appName} gestartet werden",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Wird für die manuelle Suche benutzt",
|
||||
"Tasks": "Aufgaben",
|
||||
"TestAll": "Alle prüfen",
|
||||
@@ -401,7 +400,7 @@
|
||||
"UnableToLoadTags": "Tags konnten nicht geladen werden",
|
||||
"UnableToLoadTheCalendar": "Kalender konnte nicht geladen werden",
|
||||
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
|
||||
"Ungroup": "Gruppe entfernen",
|
||||
"Ungroup": "Gruppierung aufheben",
|
||||
"UnmonitoredHelpText": "Nicht beobachtete Filme im iCal-Feed einschließen",
|
||||
"UpdateAll": "Alle aktualisieren",
|
||||
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
|
||||
@@ -416,8 +415,8 @@
|
||||
"UsenetDelay": "Usenet-Verzögerung",
|
||||
"UsenetDelayHelpText": "Verzögerung in Minuten, bevor Sie eine Veröffentlichung aus dem Usenet erhalten",
|
||||
"Username": "Nutzername",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Branch zum updaten von Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branch für den externen Updateablauf",
|
||||
"BranchUpdate": "Branch zum updaten von {appName}",
|
||||
"BranchUpdateMechanism": "Branch für den externen Updateablauf",
|
||||
"Version": "Version",
|
||||
"WeekColumnHeader": "Spaltenüberschrift „Woche“.",
|
||||
"Year": "Jahr",
|
||||
@@ -427,7 +426,6 @@
|
||||
"ProxyUsernameHelpText": "Sie müssen nur einen Benutzernamen und ein Passwort eingeben, wenn dies erforderlich ist. Andernfalls lassen Sie sie leer.",
|
||||
"SslPortHelpTextWarning": "Erfordert einen Neustart",
|
||||
"UnableToLoadMetadataProfiles": "Verzögerungsprofile konnten nicht geladen werden",
|
||||
"ApiKeyHelpTextWarning": "Erfordert einen Neustart",
|
||||
"Book": "Buch",
|
||||
"Authors": "Autoren",
|
||||
"AuthorFolderFormat": "Autor Orderformat",
|
||||
@@ -471,11 +469,11 @@
|
||||
"FilterSentryEventsHelpText": "Sende keine bekannten Benutzerfehler Ereignisse an Analystics",
|
||||
"FilterAnalyticsEvents": "Analystische Ergeinisse filtern",
|
||||
"ReplaceIllegalCharactersHelpText": "Wenn nicht aktiviert, werden Sonderzeichen ganz entfernt",
|
||||
"LogSqlHelpText": "Log alle SQL Abfragen von Prowlarr",
|
||||
"LogSqlHelpText": "Log alle SQL Abfragen von {appName}",
|
||||
"OutputPath": "Ausgabe-Pfad",
|
||||
"PortHelpText": "Calibre-Content-Server",
|
||||
"Progress": "Fortschritt",
|
||||
"ReleaseTitle": "Release Titel",
|
||||
"ReleaseTitle": "Release-Titel",
|
||||
"Actions": "Aktionen",
|
||||
"Today": "Heute",
|
||||
"Tomorrow": "Morgen",
|
||||
@@ -491,11 +489,11 @@
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Der Filmordner und dessen Inhalt wird gelöscht.",
|
||||
"DeleteFilesHelpText": "Lösche die Buchdateien und Autorordner",
|
||||
"Component": "Komponente",
|
||||
"Level": "Stufe",
|
||||
"Level": "Level",
|
||||
"Time": "Zeit",
|
||||
"RemoveFromBlocklist": "Aus der Sperrliste entfernen",
|
||||
"UnableToLoadBlocklist": "Sperrliste konnte nicht geladen werden",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Zweig {0} ist kein gültiger Radarr-Release-Zweig. Sie erhalten keine Updates",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Zweig {0} ist kein gültiger {appName}-Release-Zweig. Sie erhalten keine Updates",
|
||||
"Blocklist": "Sperrliste",
|
||||
"BlocklistRelease": "Release sperren",
|
||||
"RescanAfterRefreshHelpText": "Nach dem aktualisieren des Films, den Filmordner neu scannen",
|
||||
@@ -516,7 +514,7 @@
|
||||
"CatalogNumber": "Katalog Nummer",
|
||||
"ContinuingAllBooksDownloaded": "Fortfahren (Alle Bücher heruntergeladen)",
|
||||
"DeleteMetadataProfile": "Metadaten Profil löschen",
|
||||
"ImportListExclusions": "Ausschlüsse der Importliste",
|
||||
"ImportListExclusions": "Ausschlüsse aus der Importliste",
|
||||
"ImportLists": "Importlisten",
|
||||
"ImportListSettings": "Allgemeine Importlisten-Einstellungen",
|
||||
"ImportListSpecificSettings": "Listenspezifische Einstellungen importieren",
|
||||
@@ -533,7 +531,7 @@
|
||||
"MetadataProfile": "Metadaten Profil",
|
||||
"MetadataProfileIdHelpText": "Metadaten Profil Listenelemente sollten hinzugefügt werden mit",
|
||||
"MetadataProfiles": "Metadaten Profile",
|
||||
"MonitoringOptions": "Beobachtungsoptionen",
|
||||
"MonitoringOptions": "Überwachungsoptionen",
|
||||
"MusicbrainzId": "MusicBrainz Id",
|
||||
"WatchRootFoldersForFileChanges": "Beobachte Stammverzeichnis auf Dateiänderungen",
|
||||
"OnDownloadFailure": "Bei fehlgeschlagenem Download",
|
||||
@@ -558,7 +556,7 @@
|
||||
"FutureDays": "Zukünftige Tage",
|
||||
"FutureDaysHelpText": "Tage die iCal-Feed in die Zukunft schauen soll",
|
||||
"FutureBooks": "Zukünftige Bücher",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Passwort, Proxy, Analytik und Updates",
|
||||
"GeneralSettingsSummary": "Port, SSL, Benutzername/Kennwort, Proxy, Analyse und Updates",
|
||||
"IndexerJackettAll": "Indexer, welche den nicht unterstützten 'all'-Endpoint von Jackett verwenden: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Alle Indexer sind wegen über 6 Stunden langen bestehender Fehler nicht verfügbar",
|
||||
"IsExpandedShowFileInfo": "Dateiinformationen anzeigen",
|
||||
@@ -597,23 +595,23 @@
|
||||
"IndexerIdHelpTextWarning": "Die Verwendung eines bestimmten Indexers mit bevorzugten Wörtern kann dazu führen, dass Veröffentlichungen mehrfach erfasst werden",
|
||||
"LatestBook": "Neuestes Buch",
|
||||
"MetadataProviderSource": "Metadaten Anbieter Quelle",
|
||||
"MetadataSource": "Metadaten Quelle",
|
||||
"MetadataSource": "Metadatenquelle",
|
||||
"MetadataSourceHelpText": "Alternative Metadaten Quelle (Leer lassen für Standard)",
|
||||
"MusicBrainzRecordingID": "MusicBrainz Aufnahme Id",
|
||||
"MusicBrainzReleaseID": "MusicBrainz Veröffentlichung Id",
|
||||
"MusicBrainzTrackID": "MusicBrainz Titel Id",
|
||||
"OnGrab": "Bei Erfassung",
|
||||
"OnGrab": "Bei Abruf",
|
||||
"OnImportFailureHelpText": "Bei fehlgeschlagenem Import",
|
||||
"OnReleaseImport": "Bei Veröffentlichungsimport",
|
||||
"OnReleaseImportHelpText": "Bei Veröffentlichungsimport",
|
||||
"OnRename": "Bei Umbenennung",
|
||||
"PastDaysHelpText": "Tage für iCal-Feed, um in die Vergangenheit zu schauen",
|
||||
"PathHelpTextWarning": "Dies muss ein anderes Verzeichnis sein als das, in dem der Download Client die Dateien ablegt",
|
||||
"ReleaseProfiles": "Veröffentlichungsprofile",
|
||||
"ReleaseProfiles": "Release-Profile",
|
||||
"RootFolderPathHelpText": "Die Elemente im Stammverzeichnis werden hinzugefügt zu",
|
||||
"SearchMonitored": "Suche beobachtete",
|
||||
"SearchMonitored": "Suche überwachte Episoden",
|
||||
"ShowName": "Zeige Name",
|
||||
"SkipRedownload": "Überspringe erneuten Download",
|
||||
"SkipRedownload": "Neu-Download überspringen",
|
||||
"StatusEndedContinuing": "Fortfahren",
|
||||
"UnableToLoadMetadataProviderSettings": "Einstellungen für Metadata Provider konnten nicht geladen werden",
|
||||
"UpdatingIsDisabledInsideADockerContainerUpdateTheContainerImageInstead": "Aktualisierung innerhalb des Docker Containers ist deaktiviert. Aktualisieren Sie stattdessen das Container Image.",
|
||||
@@ -624,7 +622,7 @@
|
||||
"DefaultQualityProfileIdHelpText": "Standard Qualitätsprofil für Autoren, die in diesem Ordner gefunden werden",
|
||||
"DefaultReadarrTags": "Standard Readarr Tags",
|
||||
"DeleteBookFile": "Buchdatei löschen",
|
||||
"OnHealthIssue": "Bei Zustandsproblem",
|
||||
"OnHealthIssue": "Bei Gesundheitsproblem",
|
||||
"QualityProfileIdHelpText": "Qualitätsprofil mit dem Listemelemente hinzugefügt werden sollen",
|
||||
"UnmappedFiles": "Nicht zugewiesene Dateien",
|
||||
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
|
||||
@@ -646,7 +644,7 @@
|
||||
"Disabled": "Deaktiviert",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Kein Download Client verfügbar",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Kommunikation mit {0} nicht möglich.",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Downloadverarbeitung und Remote-Pfadzuordnungen",
|
||||
"DownloadClientsSettingsSummary": "Download Clients, Download-Verwaltung und Remote-Pfadzuordnungen",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {0}",
|
||||
"EditAuthor": "Autor bearbeiten",
|
||||
@@ -687,15 +685,15 @@
|
||||
"Yesterday": "Gestern",
|
||||
"UpdateAvailable": "Neue Version verfügbar",
|
||||
"WriteAudioTagsScrub": "Vorhandene Tags entfernen",
|
||||
"WriteAudioTagsScrubHelp": "Vorhandene Tags von Datei entfernen, sodass nur die von Lidarr hinzugefügten bleiben.",
|
||||
"WriteAudioTagsScrubHelp": "Vorhandene Tags von Datei entfernen, sodass nur die von {appName} hinzugefügten bleiben.",
|
||||
"WriteBookTagsHelpTextWarning": "Wenn Sie \"Alle Dateien\" auswählen, werden vorhandene Dateien beim Import geändert.",
|
||||
"ShowTitleHelpText": "Zeige Künstlername unter Poster",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Docker erkannt; Downloader {0} speichert Downloads in {1}, aber dieser Ordner scheint nicht im Container zu existieren. Überprüfe die Remote-Pfadzuordnungen und die Container Volume Einstellungen.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Downloader {0} meldet Dateien in {1}, aber Radarr kann dieses Verzeichnis nicht sehen.Möglicherweise müssen die Verzeichnisreche angepasst werden.",
|
||||
"RemotePathMappingCheckFolderPermissions": "Radarr kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Downloader {0} meldet Dateien in {1}, aber {appName} kann dieses Verzeichnis nicht sehen.Möglicherweise müssen die Verzeichnisreche angepasst werden.",
|
||||
"RemotePathMappingCheckFolderPermissions": "{appName} kann das Downloadverzeichnis sehen, aber nicht verarbeiten {0}. Möglicherwiese ein Rechteproblem.",
|
||||
"RemotePathMappingCheckGenericPermissions": "Downloader {0} speichert Downloads in {1}, aber Readarr kann dieses Verzeichnis nicht sehen. Möglicherweise müssen die Verzeichnisrechte angepasst werden.",
|
||||
"RemotePathMappingCheckLocalWrongOSPath": "Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.",
|
||||
"Monitor": "Beobachten",
|
||||
"Monitor": "Überwachen",
|
||||
"MusicBrainzAuthorID": "MusicBranz Künstler Id",
|
||||
"MusicBrainzBookID": "MusicBrainz Titel Id",
|
||||
"WriteAudioTags": "Audiodateien mit Metadaten versehen",
|
||||
@@ -703,7 +701,7 @@
|
||||
"SearchForAllMissingBooks": "Suche nach allen fehlenden Alben",
|
||||
"SearchForMonitoredBooks": "Suche nach beobachteten Alben",
|
||||
"SelectedCountAuthorsSelectedInterp": "{0} Künstler ausgewählt",
|
||||
"SizeLimit": "Grössenlimit",
|
||||
"SizeLimit": "Größenlimit",
|
||||
"TheBooksFilesWillBeDeleted": "Die Dateien des Albums werden gelöscht.",
|
||||
"MediaManagement": "Medienverwaltung",
|
||||
"Metadata": "Metadaten",
|
||||
@@ -712,22 +710,22 @@
|
||||
"OnBookFileDeleteForUpgrade": "Bei Filmdatei Zum Upgrade löschen",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Bei Filmdatei Zum Upgrade löschen",
|
||||
"OnBookFileDeleteHelpText": "Bei Filmdatei löschen",
|
||||
"ReadarrSupportsAnyDownloadClient": "Radarr unterstützt viele bekannte Torrent- und Usenetdownloader.",
|
||||
"ReadarrSupportsAnyDownloadClient": "{appName} unterstützt viele bekannte Torrent- und Usenetdownloader.",
|
||||
"RemotePathMappingCheckBadDockerPath": "Docker erkannt; Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Remote-Pfadzuordnungen und die Downloader Einstellungen.",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr kann den Download sehen, aber nicht verarbeiten {0}. Möglicherweise ein Rechteproblem.",
|
||||
"RemotePathMappingCheckDownloadPermissions": "{appName} kann den Download sehen, aber nicht verarbeiten {0}. Möglicherweise ein Rechteproblem.",
|
||||
"RemotePathMappingCheckFileRemoved": "Datei {0} wurde während des Verarbeitens entfernt.",
|
||||
"RemotePathMappingCheckFilesBadDockerPath": "Docker erkannt; Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe deine Remote-Pfadzuordnungen und die Downloader Einstellungen.",
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Downloader Einstellungen.",
|
||||
"RemotePathMappingCheckFilesWrongOSPath": "Downloader {0} meldet Dateien in {1}, aber dies ist kein valider {2} Pfad. Überprüfe deine Remote-Pfadzuordnungen und die Downloader Einstellungen.",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr konnte den Film nicht importieren. Prüfe die Logs für mehr Informtationen.",
|
||||
"RemotePathMappingCheckImportFailed": "{appName} konnte den Film nicht importieren. Prüfe die Logs für mehr Informtationen.",
|
||||
"RemotePathMappingCheckLocalFolderMissing": "Downloader {0} speichert Downloads in {1}, aber dieses Verzeichnis scheint nicht zu existieren. Möglicherweise eine fehlende oder falsche Remote-Pfadzuordnung.",
|
||||
"RemotePathMappingCheckRemoteDownloadClient": "Downloader {0} meldet Dateien in {1}, aber dieses Verzeichnis scheint nicht zu existieren. Möglicherweise fehle die Remote-Pfadzuordnung.",
|
||||
"RemotePathMappingCheckWrongOSPath": "Downloader {0} speichert Downloads in {1}, aber dies ist kein valider {2} Pfad. Überprüfe die Remote-Pfadzuordnungen und die Downloader Einstellungen.",
|
||||
"RestartReloadNote": "Hinweis: Während der wiederherstellung wird Radarr automatisch neugestartet und die Oberfläche neugelade.",
|
||||
"RestartReloadNote": "Hinweis: Während der wiederherstellung wird {appName} automatisch neugestartet und die Oberfläche neugelade.",
|
||||
"RootFolderCheckMultipleMessage": "Es fehlen mehrere Stammordner: {0}",
|
||||
"RootFolderCheckSingleMessage": "Fehlender Stammordner: {0}",
|
||||
"SettingsRemotePathMappingLocalPath": "Lokaler Pfad",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Pfad, den Radarr verwenden sollte, um lokal auf den Entfernten-Pfad zuzugreifen",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Pfad, den {appName} verwenden sollte, um lokal auf den Entfernten-Pfad zuzugreifen",
|
||||
"SettingsRemotePathMappingRemotePath": "Entfernter-Pfad",
|
||||
"UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
|
||||
"SystemTimeCheckMessage": "Die Systemzeit ist um einen Tag versetzt. Bis die Zeit korrigiert wurde, könnten die geplanten Aufgaben nicht korrekt ausgeführt werden",
|
||||
@@ -735,16 +733,16 @@
|
||||
"UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
|
||||
"WriteTagsNo": "Niemals",
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Wenn kein Ausschluss der Import Liste hinzugefügt wird und der Künstler ein anderes Metadaten Profil als 'Keine' hat, kann es passieren, dass dieses Album bei der nächsten Aktualisierung des Künstlers erneut hinzugefügt wird.",
|
||||
"MissingFromDisk": "Radarr konnte die Datei nicht auf der Festplatte finden, daher wurde die Verknüpfung auf die Datei aus der Datenbank entfernt",
|
||||
"MissingFromDisk": "{appName} konnte die Datei nicht auf der Festplatte finden, daher wurde die Verknüpfung auf die Datei aus der Datenbank entfernt",
|
||||
"ProxyCheckResolveIpMessage": "Fehler beim Auflösen der IP-Adresse für den konfigurierten Proxy-Host {0}",
|
||||
"QualitySettingsSummary": "Qualitätsgrößen und Namensgebung",
|
||||
"QueueIsEmpty": "Die Warteschlange ist leer",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Lidarr unterstützt mehrere Listen für den Import von Alben und Künstlern in die Datenbank.",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "{appName} unterstützt mehrere Listen für den Import von Alben und Künstlern in die Datenbank.",
|
||||
"TotalBookCountBooksTotalBookFileCountBooksWithFilesInterp": "{0} Titel insgesamt. {1} Titel mit Dateien.",
|
||||
"SearchFiltered": "Suche gefilterte",
|
||||
"AddList": "Liste hinzufügen",
|
||||
"InstanceName": "Instanzname",
|
||||
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
|
||||
"InstanceNameHelpText": "Instanzname im Tab und für den Syslog-App-Namen",
|
||||
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
|
||||
"UseCalibreContentServer": "Calibre-Content-Server",
|
||||
"DataExistingBooks": "Beobachte Bücher die Dateien haben oder noch nicht veröffentlicht wurden",
|
||||
@@ -758,7 +756,7 @@
|
||||
"MonitorBook": "Buch überwachen",
|
||||
"MinimumPages": "Mindestseiten",
|
||||
"MassBookSearch": "Massensuche nach Büchern",
|
||||
"MediaManagementSettingsSummary": "Namensgebung, Dateimanagement-Einstellungen und Root-Ordner",
|
||||
"MediaManagementSettingsSummary": "Einstellungen zu Benennung, Dateiverwaltung und Root-Ordnern",
|
||||
"MinimumPopularity": "Mindestpolularität",
|
||||
"MinPagesHelpText": "Bücher mit weniger Seiten als dieses ignorieren",
|
||||
"MinPopularityHelpText": "Popularität ist Durchschnittsbewertung * Anzahl der Stimmen",
|
||||
@@ -852,11 +850,11 @@
|
||||
"OnApplicationUpdateHelpText": "Bei Anwendungsaktualisierung",
|
||||
"ChooseImportMethod": "Wähle eine Importmethode",
|
||||
"ClickToChangeReleaseGroup": "Klicken Sie hier, um die Release-Gruppe zu ändern",
|
||||
"EnableRssHelpText": "Wird benutzt, wenn Radarr mittels RSS-Sync regelmäßig nach Releases schaut",
|
||||
"EnableRssHelpText": "Wird benutzt, wenn {appName} mittels RSS-Sync regelmäßig nach Releases schaut",
|
||||
"Theme": "Design",
|
||||
"ThemeHelpText": "Ändern Sie das Benutzeroberflächen-Design der Anwendung. Das „Auto“-Design verwendet Ihr Betriebssystemdesign, um den Hell- oder Dunkelmodus festzulegen. Inspiriert vom Theme.Park",
|
||||
"BypassIfHighestQuality": "Ignoriere wenn höchste Qualität",
|
||||
"MinimumCustomFormatScore": "Minimum der eigenen Formate Bewertungspunkte",
|
||||
"MinimumCustomFormatScore": "Mindestwert für benutzerdefinierte Formate",
|
||||
"CustomFormatScore": "Eigenes Format Bewertungspunkte",
|
||||
"CloneCustomFormat": "Benutzerdefiniertes Format klonen",
|
||||
"Conditions": "Bedingungen",
|
||||
@@ -865,7 +863,7 @@
|
||||
"CustomFormats": "Eigene Formate",
|
||||
"CutoffFormatScoreHelpText": "Sobald diese eigener Format Bewertung erreicht wird, werden keine neuen Releases erfasst",
|
||||
"DeleteFormatMessageText": "Bist du sicher, dass du das Formatierungstag {0} löschen willst?",
|
||||
"ExportCustomFormat": "Eigenes Format exportieren",
|
||||
"ExportCustomFormat": "Benutzerdefiniertes Format exportieren",
|
||||
"Formats": "Formate",
|
||||
"MinFormatScoreHelpText": "Mindester eigener Format Score bis zum Download",
|
||||
"NegateHelpText": "Wenn aktiviert wird das eigene Format nicht angewendet solange diese {0} Bedingung zutrifft.",
|
||||
@@ -881,11 +879,11 @@
|
||||
"UnableToLoadCustomFormats": "Eigene Formate konnten nicht geladen werden",
|
||||
"ImportListMissingRoot": "Fehlendes Stammverzeichnis für Importlist(en): {0}",
|
||||
"ImportListMultipleMissingRoots": "Mehrere Stammverzeichnisse fehlen für Importlist: {0}",
|
||||
"IndexerDownloadClientHelpText": "Wähle aus, welcher Download-Client für diesen Indexer verwendet wird",
|
||||
"IndexerDownloadClientHelpText": "Gib an, welcher Download-Client für Abrufe von diesem Indexer verwendet wird",
|
||||
"IndexerTagsHelpText": "Benutze den Indexer nur für Filme mit mindesens einen zutreffenden Tag. Leer lassen für alle Filme.",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Schreiben in konfigurierten Papierkorbordner nicht möglich: {0}. Stelle sicher, dass dieser Pfad existiert und von dem Benutzer, der Radarr ausführt, beschreibbar ist",
|
||||
"HiddenClickToShow": "Versteckt, klicken zum anzeigen",
|
||||
"HideAdvanced": "Erweiterte Ansicht",
|
||||
"RecycleBinUnableToWriteHealthCheck": "Schreiben in konfigurierten Papierkorbordner nicht möglich: {0}. Stelle sicher, dass dieser Pfad existiert und von dem Benutzer, der {appName} ausführt, beschreibbar ist",
|
||||
"HiddenClickToShow": "Versteckt, zum Anzeigen anklicken",
|
||||
"HideAdvanced": "Erweiterte Einstellungen ausblenden",
|
||||
"ShowAdvanced": "Erweitert anzeigen",
|
||||
"ShownClickToHide": "Angezeigt, zum Ausblenden klicken",
|
||||
"ColonReplacement": "Doppelpunktersatz",
|
||||
@@ -911,11 +909,11 @@
|
||||
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
|
||||
"EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten",
|
||||
"Implementation": "Integration",
|
||||
"NoEventsFound": "Keine Events gefunden",
|
||||
"NoEventsFound": "Keine Ereignisse gefunden",
|
||||
"NoImportListsFound": "Keine Einspiel-Listen gefunden",
|
||||
"NoIndexersFound": "Keine Indexer gefunden",
|
||||
"RemoveCompletedDownloads": "Entferne abgeschlossene Downloads",
|
||||
"RemoveDownloadsAlert": "Die Einstellungen zum Entfernen wurden in die individuellen Download Client Einstellungen in der obigen Tabelle verschoben.",
|
||||
"RemoveDownloadsAlert": "Die Entfernen-Einstellungen wurden in die einzelnen Download-Client-Einstellungen in der Tabelle oben verschoben.",
|
||||
"RemovingTag": "Tag entfernen",
|
||||
"Yes": "Ja",
|
||||
"BlocklistReleaseHelpText": "Dieses Release nicht automatisch erneut erfassen",
|
||||
@@ -924,7 +922,7 @@
|
||||
"DeleteConditionMessageText": "Bist du sicher, dass du die Bedingung '{0}' löschen willst?",
|
||||
"Negated": "Negiert",
|
||||
"ResetQualityDefinitions": "Qualitätsdefinitionen zurücksetzen",
|
||||
"RemoveSelectedItem": "Entferne ausgewählten Eintrag",
|
||||
"RemoveSelectedItem": "Ausgewähltes Element entfernen",
|
||||
"RemoveSelectedItems": "Markierte Einträge löschen",
|
||||
"Required": "Erforderlich",
|
||||
"RedownloadFailed": "Download fehlgeschlagen",
|
||||
@@ -958,19 +956,19 @@
|
||||
"Loading": "Lade",
|
||||
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
|
||||
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle Benachrichtigungen sind aufgrund von Fehlern nicht verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
|
||||
"TotalSpace": "Gesamter Speicherplatz",
|
||||
"Ui": "Benutzeroberfläche",
|
||||
"FreeSpace": "Freier Speicher",
|
||||
"FreeSpace": "Freier Platz",
|
||||
"Large": "Groß",
|
||||
"LastExecution": "Letzte Ausführung",
|
||||
"LastWriteTime": "Zuletzt beschrieben",
|
||||
"LastWriteTime": "Letzte Schreibzeit",
|
||||
"Library": "Bibliothek",
|
||||
"Location": "Speicherort",
|
||||
"Location": "Standort",
|
||||
"Small": "Klein",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Events": "Events",
|
||||
"Events": "Ereignisse",
|
||||
"LastDuration": "Letzte Dauer",
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"System": "System",
|
||||
@@ -982,15 +980,15 @@
|
||||
"Activity": "Aktivität",
|
||||
"AddNew": "Neue hinzufügen",
|
||||
"Backup": "Sicherung",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle Resultate werden wegen des angewandten Filters nicht angezeigt",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Alle Ergebnisse werden durch den angewendeten Filter ausgeblendet",
|
||||
"AppUpdated": "{appName} aktualisiert",
|
||||
"AppUpdatedVersion": "{appName} wurde auf die Version `{version}` aktualisiert. Um die neusten Funktionen zu bekommen lade {appName} neu",
|
||||
"Clone": "Klonen",
|
||||
"AutomaticUpdatesDisabledDocker": "Automatische Updates werden bei Verwendung des Docker-Update-Mechanismus nicht direkt unterstützt. Sie müssen das Container-Image außerhalb von {appName} aktualisieren oder ein Skript verwenden",
|
||||
"AutoAdd": "Automatisch hinzufügen",
|
||||
"WouldYouLikeToRestoreBackup": "Willst du das Backup '{name}' wiederherstellen?",
|
||||
"Unmonitored": "Nicht beobachtet",
|
||||
"Retention": "Aufbewahrung ( Retention )",
|
||||
"Unmonitored": "Nicht überwacht",
|
||||
"Retention": "Aufbewahrung",
|
||||
"ClickToChangeIndexerFlags": "Klicken, um Indexer-Flags zu ändern",
|
||||
"BlocklistAndSearch": "Sperrliste und Suche",
|
||||
"BlocklistAndSearchHint": "Starte Suche nach einer Alternative, falls es der Sperrliste hinzugefügt wurde",
|
||||
@@ -998,5 +996,119 @@
|
||||
"BlocklistMultipleOnlyHint": "Der Sperrliste hinzufügen, ohne nach Alternativen zu suchen",
|
||||
"BlocklistOnly": "Nur der Sperrliste hinzufügen",
|
||||
"BlocklistOnlyHint": "Der Sperrliste hinzufügen, ohne nach Alternative zu suchen",
|
||||
"ChangeCategory": "Kategorie wechseln"
|
||||
"ChangeCategory": "Kategorie wechseln",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht verwendet und kann gelöscht werden",
|
||||
"ExtraFileExtensionsHelpText": "Kommagetrennte Liste von zusätzlichen Dateien, die importiert werden sollen (.nfo wird als .nfo-orig importiert)",
|
||||
"DeleteImportListExclusion": "Importlisten Ausschluss löschen",
|
||||
"IndexerFlags": "Indexer-Flags",
|
||||
"CountAuthorsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Beispiele: '.sub, .nfo' oder 'sub,nfo'",
|
||||
"DownloadClient": "Downloader",
|
||||
"ShowMonitoredHelpText": "Überwachungsstatus unter dem Poster anzeigen",
|
||||
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
|
||||
"CountImportListsSelected": "{selectedCount} Künstler ausgewählt",
|
||||
"CustomFormatsSpecificationRegularExpression": "Regulären Ausdruck",
|
||||
"DeleteImportListExclusionMessageText": "Bist du sicher, dass du diesen Importlisten Ausschluss löschen willst?",
|
||||
"CustomFilter": "Benutzerdefinierter Filter",
|
||||
"AutoRedownloadFailed": "Erneuter Download fehlgeschlagen",
|
||||
"SourceTitle": "Quellentitel",
|
||||
"Tags": "Tags",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Optionaler Ort für Downloads, leer lassen, um den Standard-Deluge-Ort zu verwenden",
|
||||
"ErrorLoadingContent": "Es ist ein Fehler beim Laden dieses Inhalts aufgetreten",
|
||||
"BypassIfAboveCustomFormatScore": "Umgehen, wenn über dem Wert des benutzerdefinierten Formats liegt",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Aktivieren Sie die Umgehung, wenn die Veröffentlichung einen Wert hat, der höher ist als der konfigurierte Mindestwert für das benutzerdefinierte Format",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "Der Download-Client {downloadClientName} ist so eingestellt, dass abgeschlossene Downloads entfernt werden. Dies kann dazu führen, dass Downloads von Ihrem Client entfernt werden, bevor {appName} sie importieren kann.",
|
||||
"AutoRedownloadFailedFromInteractiveSearch": "Erneuter Download aus Interaktiver Suche fehlgeschlagen",
|
||||
"AutoRedownloadFailedFromInteractiveSearchHelpText": "Suchen Sie automatisch nach einer anderen Version und versuchen Sie, sie herunterzuladen, wenn eine fehlerhafte Version aus der interaktiven Suche ausgewählt wurde",
|
||||
"FailedLoadingSearchResults": "Die Suchergebnisse konnten nicht geladen werden. Bitte versuchen Sie es erneut.",
|
||||
"InteractiveSearchModalHeader": "Interaktive Suche",
|
||||
"MinimumCustomFormatScoreHelpText": "Mindestwert für benutzerdefiniertes Format, der erforderlich ist, um Verzögerungen für das bevorzugte Protokoll zu umgehen",
|
||||
"Rejections": "Ablehnungen",
|
||||
"RemoveQueueItemConfirmation": "Bist du sicher, dass du '{sourceTitle}' aus der Warteschlange entfernen möchtest?",
|
||||
"SelectDropdown": "Auswählen...",
|
||||
"SelectQuality": "Qualität auswählen",
|
||||
"SelectReleaseGroup": "Wähle Release-Gruppe",
|
||||
"ShowMonitored": "Überwachter Status anzeigen",
|
||||
"DeleteSelected": "Ausgewählte löschen",
|
||||
"Bookshelf": "Bücherregal",
|
||||
"BypassIfHighestQualityHelpText": "Umgehen der Verzögerung, wenn die Freigabe die höchste aktivierte Qualität im Qualitätsprofil hat",
|
||||
"CustomFormatsSpecificationFlag": "Markierung",
|
||||
"DeleteFormat": "Formatierung löschen",
|
||||
"CustomFormatsSpecificationRegularExpressionHelpText": "Benutzerdefiniertes Format RegEx ist nicht groß-/kleinschreibungssensitiv",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexer mit ungültigen Downloader: {0}.",
|
||||
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (Gesamt: {totalBookCount}, Dateien: {bookFileCount})",
|
||||
"BookProgressBarText": "{bookCount} / {totalBookCount} (Dateien: {bookFileCount})",
|
||||
"ChangeCategoryHint": "Änderung des Downloads in die 'Post-Import-Kategorie' vom Download-Client",
|
||||
"ChangeCategoryMultipleHint": "Änderung der Downloads in die 'Post-Import-Kategorie' vom Download-Client",
|
||||
"DoNotBlocklist": "Nicht Sperren",
|
||||
"DoNotBlocklistHint": "Entfernen ohne Sperren",
|
||||
"CustomFormatsSettingsTriggerInfo": "Ein Eigenes Format wird auf eine Veröffentlichung oder Datei angewandt, wenn sie mindestens einer der verschiedenen ausgewählten Bedingungen entspricht.",
|
||||
"ConnectionSettingsUrlBaseHelpText": "Fügt ein Präfix zur {connectionName} URL hinzu, z. B. {url}",
|
||||
"DownloadClientDelugeSettingsDirectory": "Download Verzeichnis",
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Verschieben, wenn abgeschlossen Verzeichnis",
|
||||
"IgnoreDownloadHint": "Hält {appName} von der weiteren Verarbeitung dieses Downloads ab",
|
||||
"IgnoreDownloads": "Downloads ignorieren",
|
||||
"IgnoreDownload": "Download ignorieren",
|
||||
"IgnoreDownloadsHint": "Hindert {appName}, diese Downloads weiter zu verarbeiten",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Optionaler Ort, an den abgeschlossene Downloads verschoben werden, leer lassen, um den Standard-Deluge-Ort zu verwenden",
|
||||
"ApiKey": "API-Schlüssel",
|
||||
"AuthBasic": "Basis (Browser-Popup)",
|
||||
"AuthForm": "Formulare (Anmeldeseite)",
|
||||
"AuthenticationMethod": "Authentifizierungsmethode",
|
||||
"AuthenticationMethodHelpTextWarning": "Bitte wähle eine gültige Authentifizierungsmethode aus",
|
||||
"AuthenticationRequired": "Authentifizierung benötigt",
|
||||
"AuthenticationRequiredHelpText": "Ändern, welche anfragen Authentifizierung benötigen. Ändere nichts wenn du dir nicht des Risikos bewusst bist.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Neues Passwort eingeben",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Neuen Benutzernamen eingeben",
|
||||
"AuthenticationRequiredWarning": "Um unberechtigte Fernzugriffe zu vermeiden benötigt {appName} jetzt , dass Authentifizierung eingeschaltet ist. Du kannst Authentifizierung optional für lokale Adressen ausschalten.",
|
||||
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
|
||||
"Enabled": "Aktiviert",
|
||||
"BuiltIn": "Eingebaut",
|
||||
"CurrentlyInstalled": "Derzeit installiert",
|
||||
"InstallLatest": "Neueste Version installieren",
|
||||
"OnLatestVersion": "Die neueste Version von {appName} ist bereits installiert",
|
||||
"Script": "Skript",
|
||||
"AptUpdater": "Verwenden Sie apt, um das Update zu installieren",
|
||||
"DockerUpdater": "Aktualisieren Sie den Docker-Container, um das Update zu erhalten",
|
||||
"ExternalUpdater": "{appName} ist so konfiguriert, dass es einen externen Aktualisierungsmechanismus verwendet",
|
||||
"UpdateAppDirectlyLoadError": "{appName} kann nicht direkt aktualisiert werden.",
|
||||
"External": "Extern",
|
||||
"FailedToFetchSettings": "Einstellungen können nicht abgerufen werden",
|
||||
"FailedToFetchUpdates": "Updates konnten nicht abgerufen werden",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Inhaltslayout",
|
||||
"IndexerSettingsSeedRatio": "Seed-Verhältnis",
|
||||
"RemoveMultipleFromDownloadClientHint": "Entfernt Downloads und Dateien aus dem Download-Client",
|
||||
"IndexerSettingsSeedTime": "Seed-Zeit",
|
||||
"Install": "Installieren",
|
||||
"InstallMajorVersionUpdate": "Update installieren",
|
||||
"RemoveQueueItem": "Entfernen - {sourceTitle}",
|
||||
"NotificationsPlexSettingsAuthenticateWithPlexTv": "Mit Plex.tv authentifizieren",
|
||||
"SmartReplace": "Smart Replace",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Ob das konfigurierte Inhaltslayout von qBittorrent, das ursprüngliche Layout des Torrents oder immer ein Unterordner erstellt werden soll (qBittorrent 4.3.2+)",
|
||||
"IndexerSettingsSeedRatioHelpText": "Das Verhältnis, das ein Torrent erreichen muss, bevor er gestoppt wird. Leer verwendet das Standardverhältnis des Download-Clients. Das Verhältnis sollte mindestens 1,0 betragen und den Regeln des Indexers folgen.",
|
||||
"IndexerSettingsSeedTimeHelpText": "Die Zeit, die ein Torrent gesät werden sollte, bevor er gestoppt wird. Leer verwendet die Standardzeit des Download-Clients",
|
||||
"InstallMajorVersionUpdateMessage": "Dieses Update wird eine neue Hauptversion installieren und ist möglicherweise nicht mit deinem System kompatibel. Bist du sicher, dass du dieses Update installieren möchtest?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Weitere Informationen findest du unter [{domain}]({url}).",
|
||||
"InvalidUILanguage": "Die UI ist auf eine ungültige Sprache eingestellt, korrigiere sie und speichere die Einstellungen",
|
||||
"LabelIsRequired": "Label ist erforderlich",
|
||||
"NotificationsPlexSettingsAuthToken": "Auth-Token",
|
||||
"NotificationsSettingsUpdateLibrary": "Bibliothek aktualisieren",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Pfade von",
|
||||
"NotificationsSettingsUpdateMapPathsTo": "Pfade zu",
|
||||
"NotificationsSettingsUseSslHelpText": "Mit {serviceName} über HTTPS anstatt HTTP verbinden",
|
||||
"PasswordConfirmation": "Passwortbestätigung",
|
||||
"PreviouslyInstalled": "Früher installiert",
|
||||
"RemoveFromDownloadClientHint": "Entfernt den Download und die Datei(en) aus dem Download-Client",
|
||||
"RemoveQueueItemRemovalMethod": "Entfernmethode",
|
||||
"RemoveQueueItemRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird den Download und die Datei(en) aus dem Download-Client löschen.",
|
||||
"RemoveQueueItemsRemovalMethodHelpTextWarning": "'Aus dem Download-Client entfernen' wird die Downloads und die Dateien aus dem Download-Client löschen.",
|
||||
"SelectIndexerFlags": "Indexer-Flags auswählen",
|
||||
"SetIndexerFlags": "Indexer-Flags festlegen",
|
||||
"InteractiveSearchModalHeaderBookAuthor": "Interaktive Suche - {bookTitle} von {authorName}",
|
||||
"NoMissingItems": "Keine fehlenden Einträge",
|
||||
"NoCutoffUnmetItems": "Keine nicht erfüllten Cutoff-Elemente",
|
||||
"DashOrSpaceDashDependingOnName": "Dash oder Space Dash je nach Name",
|
||||
"NotificationsSettingsUpdateMapPathsFromHelpText": "{appName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')",
|
||||
"NotificationsSettingsUpdateMapPathsToHelpText": "{serviceName}-Pfad, wird verwendet, um Serienpfade zu ändern, wenn {serviceName} den Bibliothekspfad anders sieht als {appName} (benötigt 'Bibliothek aktualisieren')"
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
"20MinutesTwenty": "20 λεπτά: {0}",
|
||||
"45MinutesFourtyFive": "45 λεπτά: {0}",
|
||||
"60MinutesSixty": "60 λεπτά: {0}",
|
||||
"APIKey": "Κλειδί API",
|
||||
"About": "Σχετικά",
|
||||
"AddListExclusion": "Προσθήκη εξαίρεσης λίστας",
|
||||
"AddingTag": "Προσθήκη ετικέτας",
|
||||
@@ -17,17 +16,17 @@
|
||||
"AlreadyInYourLibrary": "Ήδη στη βιβλιοθήκη σας",
|
||||
"AlternateTitles": "Εναλακτικός Τίτλος",
|
||||
"Analytics": "Αναλύσεις",
|
||||
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του Radarr. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες Radarr WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
|
||||
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του {appName}. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες {appName} WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
|
||||
"AnalyticsEnabledHelpTextWarning": "Απαιτείται επανεκκίνηση για να τεθεί σε ισχύ",
|
||||
"AppDataDirectory": "Κατάλογος AppData",
|
||||
"ApplyTags": "Εφαρμογή ετικετών",
|
||||
"Authentication": "Αυθεντικοποίηση",
|
||||
"AuthenticationMethodHelpText": "Απαιτήστε όνομα χρήστη και κωδικό πρόσβασης για πρόσβαση στο Radarr",
|
||||
"AuthenticationMethodHelpText": "Απαιτήστε όνομα χρήστη και κωδικό πρόσβασης για πρόσβαση στο {appName}",
|
||||
"AuthorClickToChangeBook": "Κάντε κλικ για να αλλάξετε ταινία",
|
||||
"AutoRedownloadFailedHelpText": "Αυτόματη αναζήτηση και απόπειρα λήψης διαφορετικής έκδοσης",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Οι ταινίες που διαγράφονται από το δίσκο δεν παρακολουθούνται αυτόματα στο Radarr",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Οι ταινίες που διαγράφονται από το δίσκο δεν παρακολουθούνται αυτόματα στο {appName}",
|
||||
"Automatic": "Αυτόματο",
|
||||
"BackupFolderHelpText": "Οι σχετικές διαδρομές θα βρίσκονται στον κατάλογο AppData του Radarr",
|
||||
"BackupFolderHelpText": "Οι σχετικές διαδρομές θα βρίσκονται στον κατάλογο AppData του {appName}",
|
||||
"BackupNow": "Δημιουργία Αντιγράφου Ασφαλείας",
|
||||
"BackupRetentionHelpText": "Τα αυτόματα αντίγραφα ασφαλείας που είναι παλαιότερα από την περίοδο διατήρησης θα καθαρίζονται αυτόματα",
|
||||
"Backups": "Δημιουργία αντιγράφων ασφαλείας",
|
||||
@@ -41,16 +40,16 @@
|
||||
"Calendar": "Ημερολόγιο",
|
||||
"CalendarWeekColumnHeaderHelpText": "Εμφανίζεται πάνω από κάθε στήλη όταν η εβδομάδα είναι η ενεργή προβολή",
|
||||
"Cancel": "Ακύρωση",
|
||||
"CancelMessageText": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;",
|
||||
"CancelPendingTask": "Είστε βέβαιοι ότι θέλετε να ακυρώσετε αυτήν την εργασία σε εκκρεμότητα;",
|
||||
"CertificateValidation": "Επικύρωση πιστοποιητικού",
|
||||
"CertificateValidationHelpText": "Αλλάξτε πόσο αυστηρή είναι η επικύρωση πιστοποίησης HTTPS.",
|
||||
"ChangeFileDate": "Αλλαγή ημερομηνίας αρχείου",
|
||||
"ChangeHasNotBeenSavedYet": "Η αλλαγή δεν έχει αποθηκευτεί ακόμα",
|
||||
"ChmodFolder": "φάκελος chmod",
|
||||
"ChmodFolderHelpText": "Οκτάλ, εφαρμόζεται κατά την εισαγωγή / μετονομασία σε φακέλους πολυμέσων και αρχεία (χωρίς εκτελέσιμα bit)",
|
||||
"ChmodFolderHelpTextWarning": "Αυτό λειτουργεί μόνο εάν ο χρήστης που εκτελεί το Radarr είναι ο κάτοχος του αρχείου. Είναι καλύτερο να διασφαλίσετε ότι ο πελάτης λήψης ορίζει σωστά τα δικαιώματα.",
|
||||
"ChmodFolderHelpTextWarning": "Αυτό λειτουργεί μόνο εάν ο χρήστης που εκτελεί το {appName} είναι ο κάτοχος του αρχείου. Είναι καλύτερο να διασφαλίσετε ότι ο πελάτης λήψης ορίζει σωστά τα δικαιώματα.",
|
||||
"ChownGroupHelpText": "Όνομα ομάδας ή gid. Χρησιμοποιήστε το gid για απομακρυσμένα συστήματα αρχείων.",
|
||||
"ChownGroupHelpTextWarning": "Αυτό λειτουργεί μόνο εάν ο χρήστης που εκτελεί το Radarr είναι ο κάτοχος του αρχείου. Είναι καλύτερο να διασφαλίσετε ότι ο πελάτης λήψης χρησιμοποιεί την ίδια ομάδα με το Radarr.",
|
||||
"ChownGroupHelpTextWarning": "Αυτό λειτουργεί μόνο εάν ο χρήστης που εκτελεί το {appName} είναι ο κάτοχος του αρχείου. Είναι καλύτερο να διασφαλίσετε ότι ο πελάτης λήψης χρησιμοποιεί την ίδια ομάδα με το {appName}.",
|
||||
"Clear": "Καθαρισμός",
|
||||
"ClickToChangeQuality": "Κάντε κλικ για να αλλάξετε την ποιότητα",
|
||||
"ClientPriority": "Προτεραιότητα πελάτη",
|
||||
@@ -61,10 +60,10 @@
|
||||
"ConnectSettings": "Σύνδεση ρυθμίσεων",
|
||||
"Connections": "Συνδέσεις",
|
||||
"CopyUsingHardlinksHelpText": "Οι σκληροί σύνδεσμοι επιτρέπουν στο Readarr να εισαγάγει τα torrents που έχουν κατέβει, στον φάκελο της ταινίας χωρίς να καταλαμβάνει περισσότερο χώρο στον δίσκο ή να αντιγράφει ολόκληρο το περιεχόμενο του αρχείου. Οι σκληροί σύνδεσμοι θα λειτουργήσουν μόνο αν η πηγή και ο προορισμός βρίσκονται στον ίδιο τόμο δίσκου",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Περιστασιακά, τα κλειδώματα αρχείων ενδέχεται να αποτρέψουν τη μετονομασία αρχείων που έχουν σπαρθεί. Μπορείτε προσωρινά να απενεργοποιήσετε τη σπορά και να χρησιμοποιήσετε τη λειτουργία μετονομασίας Radarr ως εργασία.",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Περιστασιακά, τα κλειδώματα αρχείων ενδέχεται να αποτρέψουν τη μετονομασία αρχείων που έχουν σπαρθεί. Μπορείτε προσωρινά να απενεργοποιήσετε τη σπορά και να χρησιμοποιήσετε τη λειτουργία μετονομασίας {appName} ως εργασία.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Δημιουργήστε φακέλους ταινιών που λείπουν κατά τη σάρωση δίσκου",
|
||||
"CreateGroup": "Δημιουργησε ΟΜΑΔΑ",
|
||||
"CutoffHelpText": "Μόλις επιτευχθεί αυτή η ποιότητα, το Radarr δεν θα κατεβάζει πλέον ταινίες",
|
||||
"CutoffHelpText": "Μόλις επιτευχθεί αυτή η ποιότητα, το {appName} δεν θα κατεβάζει πλέον ταινίες",
|
||||
"DatabaseMigration": "Μετεγκατάσταση DB",
|
||||
"Dates": "Ημερομηνίες",
|
||||
"DelayProfile": "Προφίλ χρονοκαθυστέρησης",
|
||||
@@ -143,7 +142,7 @@
|
||||
"Grab": "Αρπάζω",
|
||||
"GrabID": "Πιάσε ταυτότητα",
|
||||
"GrabRelease": "Πιάσε την απελευθέρωση",
|
||||
"GrabReleaseMessageText": "Ο Radarr δεν μπόρεσε να προσδιορίσει ποια ταινία ήταν αυτή η κυκλοφορία. Το Radarr ενδέχεται να μην μπορεί να εισαγάγει αυτόματα αυτήν την κυκλοφορία. Θέλετε να τραβήξετε το \"{0}\";",
|
||||
"GrabReleaseMessageText": "Ο {appName} δεν μπόρεσε να προσδιορίσει ποια ταινία ήταν αυτή η κυκλοφορία. Το {appName} ενδέχεται να μην μπορεί να εισαγάγει αυτόματα αυτήν την κυκλοφορία. Θέλετε να τραβήξετε το \"{0}\";",
|
||||
"GrabSelected": "Επιλογή αρπαγής",
|
||||
"Group": "Ομάδα",
|
||||
"HasPendingChangesNoChanges": "Χωρίς αλλαγές",
|
||||
@@ -177,7 +176,7 @@
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Αναβαθμίστε έως ότου ικανοποιηθεί ή ξεπεραστεί αυτή η ποιότητα",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Δεν είναι δυνατή η διαγραφή κατά τη χρήση",
|
||||
"Language": "Γλώσσα",
|
||||
"LaunchBrowserHelpText": " Ανοίξτε ένα πρόγραμμα περιήγησης ιστού και μεταβείτε στην αρχική σελίδα του Radarr κατά την έναρξη της εφαρμογής.",
|
||||
"LaunchBrowserHelpText": " Ανοίξτε ένα πρόγραμμα περιήγησης ιστού και μεταβείτε στην αρχική σελίδα του {appName} κατά την έναρξη της εφαρμογής.",
|
||||
"LoadingBookFilesFailed": "Η φόρτωση αρχείων ταινίας απέτυχε",
|
||||
"Local": "Τοπικός",
|
||||
"LogFiles": "Αρχεία καταγραφής",
|
||||
@@ -258,8 +257,8 @@
|
||||
"RSSSync": "Συγχρονισμός RSS",
|
||||
"RSSSyncInterval": "Διάστημα συγχρονισμού RSS",
|
||||
"ReadTheWikiForMoreInformation": "Διαβάστε το Wiki για περισσότερες πληροφορίες",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Το Radarr υποστηρίζει οποιοδήποτε ευρετήριο που χρησιμοποιεί το πρότυπο Newznab, καθώς και άλλους δείκτες που αναφέρονται παρακάτω.",
|
||||
"ReadarrTags": "Ετικέτες Radarr",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Το {appName} υποστηρίζει οποιοδήποτε ευρετήριο που χρησιμοποιεί το πρότυπο Newznab, καθώς και άλλους δείκτες που αναφέρονται παρακάτω.",
|
||||
"ReadarrTags": "Ετικέτες {appName}",
|
||||
"Real": "Πραγματικός",
|
||||
"Reason": "Λόγος",
|
||||
"RecycleBinCleanupDaysHelpText": "Ορίστε σε 0 για να απενεργοποιήσετε τον αυτόματο καθαρισμό",
|
||||
@@ -287,19 +286,19 @@
|
||||
"RemoveTagExistingTag": "Υφιστάμενη ετικέτα",
|
||||
"RemoveTagRemovingTag": "Κατάργηση ετικέτας",
|
||||
"RemovedFromTaskQueue": "Καταργήθηκε από την ουρά εργασιών",
|
||||
"RenameBooksHelpText": "Το Radarr θα χρησιμοποιήσει το υπάρχον όνομα αρχείου εάν η μετονομασία είναι απενεργοποιημένη",
|
||||
"RenameBooksHelpText": "Το {appName} θα χρησιμοποιήσει το υπάρχον όνομα αρχείου εάν η μετονομασία είναι απενεργοποιημένη",
|
||||
"Reorder": "Παραγγέλλω πάλι",
|
||||
"ReplaceIllegalCharacters": "Αντικαταστήστε τους παράνομους χαρακτήρες",
|
||||
"RequiredHelpText": "Αυτή η {0} συνθήκη πρέπει να ταιριάζει για να εφαρμοστεί το προσαρμοσμένο μορφότυπο. Διαφορετικά, αρκεί μία μόνο {0} αντιστοιχία.",
|
||||
"RequiredPlaceHolder": "Προσθέστε νέο περιορισμό",
|
||||
"RescanAfterRefreshHelpTextWarning": "Το Radarr δεν θα εντοπίσει αυτόματα αλλαγές στα αρχεία όταν δεν έχει οριστεί σε \"Πάντα\"",
|
||||
"RescanAfterRefreshHelpTextWarning": "Το {appName} δεν θα εντοπίσει αυτόματα αλλαγές στα αρχεία όταν δεν έχει οριστεί σε \"Πάντα\"",
|
||||
"RescanAuthorFolderAfterRefresh": "Επανεκκίνηση φακέλου ταινίας μετά την ανανέωση",
|
||||
"Reset": "Επαναφορά",
|
||||
"ResetAPIKey": "Επαναφορά κλειδιού API",
|
||||
"ResetAPIKeyMessageText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε το κλειδί API σας;",
|
||||
"Restart": "Επανεκκίνηση",
|
||||
"RestartNow": "Επανεκκίνηση τώρα",
|
||||
"RestartReadarr": "Επανεκκινήστε το Radarr",
|
||||
"RestartReadarr": "Επανεκκινήστε το {appName}",
|
||||
"Restore": "Επαναφέρω",
|
||||
"RestoreBackup": "Επαναφορά αντιγράφων ασφαλείας",
|
||||
"Result": "Αποτέλεσμα",
|
||||
@@ -356,7 +355,7 @@
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Επιτυχία! Η δουλειά μου ολοκληρώθηκε, δεν υπάρχουν αρχεία για μετονομασία.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "Το RSS δεν υποστηρίζεται με αυτό το ευρετήριο",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "Η αναζήτηση δεν υποστηρίζεται με αυτό το ευρετήριο",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Θα χρησιμοποιηθεί όταν πραγματοποιούνται αυτόματες αναζητήσεις μέσω του περιβάλλοντος χρήστη ή του Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Θα χρησιμοποιηθεί όταν πραγματοποιούνται αυτόματες αναζητήσεις μέσω του περιβάλλοντος χρήστη ή του {appName}",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Θα χρησιμοποιηθεί όταν χρησιμοποιείται διαδραστική αναζήτηση",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Η ετικέτα δεν χρησιμοποιείται και μπορεί να διαγραφεί",
|
||||
"Tags": "Ετικέτες",
|
||||
@@ -373,7 +372,7 @@
|
||||
"Torrents": "Torrents",
|
||||
"TotalFileSize": "Συνολικό μέγεθος αρχείου",
|
||||
"UILanguage": "Γλώσσα διεπαφής χρήστη",
|
||||
"UILanguageHelpText": "Γλώσσα που θα χρησιμοποιήσει ο Radarr για τη διεπαφή χρήστη",
|
||||
"UILanguageHelpText": "Γλώσσα που θα χρησιμοποιήσει ο {appName} για τη διεπαφή χρήστη",
|
||||
"UILanguageHelpTextWarning": "Απαιτείται επαναφόρτωση προγράμματος περιήγησης",
|
||||
"UISettings": "Ρυθμίσεις διεπαφής χρήστη",
|
||||
"URLBase": "Βάση διεύθυνσης URL",
|
||||
@@ -425,20 +424,19 @@
|
||||
"UsenetDelay": "Καθυστέρηση Usenet",
|
||||
"UsenetDelayHelpText": "Καθυστέρηση σε λίγα λεπτά για να περιμένετε πριν πάρετε μια κυκλοφορία από το Usenet",
|
||||
"Username": "Όνομα χρήστη",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Υποκατάστημα για χρήση για την ενημέρωση του Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Υποκατάστημα που χρησιμοποιείται από εξωτερικό μηχανισμό ενημέρωσης",
|
||||
"BranchUpdate": "Υποκατάστημα για χρήση για την ενημέρωση του {appName}",
|
||||
"BranchUpdateMechanism": "Υποκατάστημα που χρησιμοποιείται από εξωτερικό μηχανισμό ενημέρωσης",
|
||||
"Version": "Εκδοχή",
|
||||
"WeekColumnHeader": "Κεφαλίδα στήλης εβδομάδας",
|
||||
"Year": "Ετος",
|
||||
"YesCancel": "Ναι, Ακύρωση",
|
||||
"ApiKeyHelpTextWarning": "Απαιτείται επανεκκίνηση για να τεθεί σε ισχύ",
|
||||
"LoadingBooksFailed": "Η φόρτωση αρχείων ταινίας απέτυχε",
|
||||
"ProxyUsernameHelpText": "Πρέπει να εισαγάγετε ένα όνομα χρήστη και έναν κωδικό πρόσβασης μόνο εάν απαιτείται. Αφήστε τα κενά διαφορετικά.",
|
||||
"SslCertPathHelpTextWarning": "Απαιτείται επανεκκίνηση για να τεθεί σε ισχύ",
|
||||
"SslPortHelpTextWarning": "Απαιτείται επανεκκίνηση για να τεθεί σε ισχύ",
|
||||
"UnableToLoadMetadataProfiles": "Δεν είναι δυνατή η φόρτωση των Καθυστέρησης προφίλ",
|
||||
"DownloadClientCheckDownloadingToRoot": "Λήψη προγράμματος-πελάτη {0} τοποθετεί λήψεις στον ριζικό φάκελο {1}. Δεν πρέπει να κάνετε λήψη σε έναν ριζικό φάκελο.",
|
||||
"ReplaceIllegalCharactersHelpText": "Αντικαταστήστε τους παράνομους χαρακτήρες. Εάν δεν είναι επιλεγμένο, το Radarr θα τα καταργήσει",
|
||||
"ReplaceIllegalCharactersHelpText": "Αντικαταστήστε τους παράνομους χαρακτήρες. Εάν δεν είναι επιλεγμένο, το {appName} θα τα καταργήσει",
|
||||
"Tomorrow": "Αύριο",
|
||||
"Today": "Σήμερα",
|
||||
"Actions": "Ενέργειες",
|
||||
@@ -456,7 +454,7 @@
|
||||
"Time": "χρόνος",
|
||||
"UnableToLoadBlocklist": "Δεν είναι δυνατή η φόρτωση της μαύρης λίστας",
|
||||
"Level": "Επίπεδο",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Το υποκατάστημα {0} δεν είναι έγκυρο υποκατάστημα κυκλοφορίας Radarr, δεν θα λαμβάνετε ενημερώσεις",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Το υποκατάστημα {0} δεν είναι έγκυρο υποκατάστημα κυκλοφορίας {appName}, δεν θα λαμβάνετε ενημερώσεις",
|
||||
"Blocklist": "Αποριφθέντα",
|
||||
"BlocklistRelease": "Έκδοση μαύρης λίστας",
|
||||
"SelectAll": "Επιλογή όλων",
|
||||
@@ -470,7 +468,7 @@
|
||||
"ImportMechanismHealthCheckMessage": "Ενεργοποίηση ολοκληρωμένου χειρισμού λήψεων",
|
||||
"IndexerRssHealthCheckNoAvailableIndexers": "Όλοι οι δείκτες με δυνατότητα rss δεν είναι διαθέσιμοι προσωρινά λόγω πρόσφατων σφαλμάτων ευρετηρίου",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Όλοι οι δείκτες με δυνατότητα αναζήτησης δεν είναι διαθέσιμοι προσωρινά λόγω πρόσφατων σφαλμάτων ευρετηρίου",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένη την διαδραστική αναζήτηση, το Radarr δεν θα παρέχει αποτελέσματα διαδραστικής αναζήτησης",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένη την διαδραστική αναζήτηση, το {appName} δεν θα παρέχει αποτελέσματα διαδραστικής αναζήτησης",
|
||||
"MountCheckMessage": "Το προσάρτημα που περιέχει μια διαδρομή ταινίας είναι τοποθετημένο μόνο για ανάγνωση: ",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Διαγραφή αρχείου ταινίας για αναβάθμιση",
|
||||
"Connect": "Σύνδεση",
|
||||
@@ -487,8 +485,8 @@
|
||||
"RefreshAndScan": "Ανανέωση & σάρωση",
|
||||
"ShowUnknownAuthorItems": "Εμφάνιση άγνωστων στοιχείων ταινίας",
|
||||
"Yesterday": "Εχθές",
|
||||
"IndexerRssHealthCheckNoIndexers": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένο τον συγχρονισμό RSS, το Radarr δεν θα τραβήξει αυτόματα νέες κυκλοφορίες",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένη την αυτόματη αναζήτηση, το Radarr δεν θα παρέχει αποτελέσματα αυτόματης αναζήτησης",
|
||||
"IndexerRssHealthCheckNoIndexers": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένο τον συγχρονισμό RSS, το {appName} δεν θα τραβήξει αυτόματα νέες κυκλοφορίες",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Δεν υπάρχουν διαθέσιμα ευρετήρια με ενεργοποιημένη την αυτόματη αναζήτηση, το {appName} δεν θα παρέχει αποτελέσματα αυτόματης αναζήτησης",
|
||||
"CreateEmptyAuthorFolders": "Δημιουργήστε άδειους φακέλους ταινιών",
|
||||
"AppDataLocationHealthCheckMessage": "Η ενημέρωση δεν θα είναι δυνατή για να αποτραπεί η διαγραφή των δεδομένων εφαρμογής κατά την ενημέρωση",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Όλα τα προγράμματα λήψης είναι μη διαθέσιμα λόγων αποτυχιών",
|
||||
@@ -496,9 +494,9 @@
|
||||
"OnBookFileDeleteForUpgrade": "Διαγραφή αρχείου ταινίας για αναβάθμιση",
|
||||
"OnBookFileDeleteHelpText": "Διαγραφή αρχείου ταινίας",
|
||||
"OnGrab": "Στο Grab",
|
||||
"RestartReloadNote": "Σημείωση: Το Radarr θα επανεκκινήσει αυτόματα και θα φορτώσει ξανά το περιβάλλον εργασίας χρήστη κατά τη διαδικασία επαναφοράς.",
|
||||
"RestartReloadNote": "Σημείωση: Το {appName} θα επανεκκινήσει αυτόματα και θα φορτώσει ξανά το περιβάλλον εργασίας χρήστη κατά τη διαδικασία επαναφοράς.",
|
||||
"IndexerPriorityHelpText": "Προτεραιότητα ευρετηρίου από 1 (Υψηλότερη) έως 50 (Χαμηλότερη). Προεπιλογή: 25.",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Διαδρομή που πρέπει να χρησιμοποιήσει ο Radarr για πρόσβαση τοπικά στην απομακρυσμένη διαδρομή",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Διαδρομή που πρέπει να χρησιμοποιήσει ο {appName} για πρόσβαση τοπικά στην απομακρυσμένη διαδρομή",
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Διαδρομή ρίζας στον κατάλογο στον οποίο έχει πρόσβαση το πρόγραμμα λήψης πελάτη",
|
||||
"Disabled": "άτομα με ειδικές ανάγκες",
|
||||
"DownloadClientCheckUnableToCommunicateMessage": "Αδύνατο να επικοινωνήσει με {0}.",
|
||||
@@ -515,13 +513,13 @@
|
||||
"Lists": "Τόπος αγώνων",
|
||||
"MaintenanceRelease": "Έκδοση συντήρησης: επιδιορθώσεις σφαλμάτων και άλλες βελτιώσεις. Δείτε το Github Commit History για περισσότερες λεπτομέρειες",
|
||||
"MediaManagement": "Διαχείριση μέσων",
|
||||
"MissingFromDisk": "Ο Whisparr δεν μπόρεσε να βρει το αρχείο στο δίσκο και έτσι καταργήθηκε",
|
||||
"MissingFromDisk": "Ο {appName} δεν μπόρεσε να βρει το αρχείο στο δίσκο και έτσι καταργήθηκε",
|
||||
"Metadata": "Μεταδεδομένα",
|
||||
"OnHealthIssue": "Σχετικά με το θέμα της υγείας",
|
||||
"ProxyCheckBadRequestMessage": "Αποτυχία δοκιμής διακομιστή μεσολάβησης. StatusCode: {0}",
|
||||
"ProxyCheckFailedToTestMessage": "Αποτυχία δοκιμής διακομιστή μεσολάβησης: {0}",
|
||||
"ProxyCheckResolveIpMessage": "Αποτυχία επίλυσης της διεύθυνσης IP για τον Διαμορφωμένο διακομιστή μεσολάβησης {0}",
|
||||
"ReadarrSupportsAnyDownloadClient": "Το Whisparr υποστηρίζει οποιονδήποτε πελάτη λήψης που χρησιμοποιεί το πρότυπο Newznab, καθώς και άλλους πελάτες λήψης που αναφέρονται παρακάτω.",
|
||||
"ReadarrSupportsAnyDownloadClient": "Το {appName} υποστηρίζει οποιονδήποτε πελάτη λήψης που χρησιμοποιεί το πρότυπο Newznab, καθώς και άλλους πελάτες λήψης που αναφέρονται παρακάτω.",
|
||||
"RescanAfterRefreshHelpText": "Κάντε σάρωση του φακέλου ταινίας μετά την ανανέωση της ταινίας",
|
||||
"RootFolderCheckMultipleMessage": "Λείπουν πολλοί ριζικοί φάκελοι: {0}",
|
||||
"RootFolderCheckSingleMessage": "Λείπει ριζικός φάκελος: {0}",
|
||||
@@ -841,26 +839,26 @@
|
||||
"StatusEndedContinuing": "Συνεχίζοντας",
|
||||
"DefaultMetadataProfileIdHelpText": "Προεπιλεγμένο προφίλ μεταδεδομένων για καλλιτέχνες που εντοπίστηκαν σε αυτόν τον φάκελο",
|
||||
"DefaultQualityProfileIdHelpText": "Προεπιλεγμένο προφίλ ποιότητας για καλλιτέχνες που εντοπίστηκαν σε αυτόν τον φάκελο",
|
||||
"DefaultReadarrTags": "Προεπιλεγμένες ετικέτες Lidarr",
|
||||
"RemotePathMappingCheckGenericPermissions": "Το πρόγραμμα-πελάτης λήψης {0} τοποθετεί λήψεις στο {1} αλλά το Radarr δεν μπορεί να δει αυτόν τον κατάλογο. Ίσως χρειαστεί να προσαρμόσετε τα δικαιώματα του φακέλου.",
|
||||
"RemotePathMappingCheckImportFailed": "Η Radarr απέτυχε να εισαγάγει μια ταινία. Ελέγξτε τα αρχεία καταγραφής σας για λεπτομέρειες.",
|
||||
"DefaultReadarrTags": "Προεπιλεγμένες ετικέτες {appName}",
|
||||
"RemotePathMappingCheckGenericPermissions": "Το πρόγραμμα-πελάτης λήψης {0} τοποθετεί λήψεις στο {1} αλλά το {appName} δεν μπορεί να δει αυτόν τον κατάλογο. Ίσως χρειαστεί να προσαρμόσετε τα δικαιώματα του φακέλου.",
|
||||
"RemotePathMappingCheckImportFailed": "Η {appName} απέτυχε να εισαγάγει μια ταινία. Ελέγξτε τα αρχεία καταγραφής σας για λεπτομέρειες.",
|
||||
"CollapseMultipleBooksHelpText": "Σύμπτυξη πολλών άλμπουμ που κυκλοφορούν την ίδια μέρα",
|
||||
"AuthorFolderFormat": "Μορφή φακέλου καλλιτέχνη",
|
||||
"AuthorNameHelpText": "Το όνομα του καλλιτέχνη/άλμπουμ προς εξαίρεση (μπορεί να έχει οτιδήποτε σημαντικό)",
|
||||
"BackupIntervalHelpText": "Διάστημα για τη δημιουργία αντιγράφων ασφαλείας του Lidarr DB και των ρυθμίσεων",
|
||||
"BackupIntervalHelpText": "Διάστημα για τη δημιουργία αντιγράφων ασφαλείας του {appName} DB και των ρυθμίσεων",
|
||||
"DataListMonitorAll": "Εάν οι ταινίες ή οι συλλογές που προστίθενται από αυτήν τη λίστα πρέπει να προστεθούν υπό παρακολούθηση",
|
||||
"ContinuingAllBooksDownloaded": "Συνέχεια (Λήφθηκαν όλα τα κομμάτια)",
|
||||
"ContinuingNoAdditionalBooksAreExpected": "Δεν αναμένονται επιπλέον άλμπουμ",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Το Radarr μπορεί να δει αλλά δεν έχει πρόσβαση στην ταινία που έχει ληφθεί {0}. Πιθανό σφάλμα αδειών.",
|
||||
"RemotePathMappingCheckFolderPermissions": "Το Radarr μπορεί να δει αλλά δεν έχει πρόσβαση στον κατάλογο λήψεων {0}. Πιθανό σφάλμα αδειών.",
|
||||
"DefaultTagsHelpText": "Προεπιλεγμένες ετικέτες Lidarr για καλλιτέχνες που εντοπίστηκαν σε αυτόν τον φάκελο",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Το {appName} μπορεί να δει αλλά δεν έχει πρόσβαση στην ταινία που έχει ληφθεί {0}. Πιθανό σφάλμα αδειών.",
|
||||
"RemotePathMappingCheckFolderPermissions": "Το {appName} μπορεί να δει αλλά δεν έχει πρόσβαση στον κατάλογο λήψεων {0}. Πιθανό σφάλμα αδειών.",
|
||||
"DefaultTagsHelpText": "Προεπιλεγμένες ετικέτες {appName} για καλλιτέχνες που εντοπίστηκαν σε αυτόν τον φάκελο",
|
||||
"DefaultMonitorOptionHelpText": "Ποια άλμπουμ θα πρέπει να παρακολουθούνται κατά την αρχική προσθήκη για καλλιτέχνες που εντοπίστηκαν σε αυτόν τον φάκελο",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent που παρέχεται από την εφαρμογή που κάλεσε το API",
|
||||
"AllowAuthorChangeClickToChangeAuthor": "Κάντε κλικ για αλλαγή καλλιτέχνη",
|
||||
"AllowFingerprintingHelpText": "Χρησιμοποιήστε δακτυλικά αποτυπώματα για να βελτιώσετε την ακρίβεια της αντιστοίχισης κομματιών",
|
||||
"AllowFingerprintingHelpTextWarning": "Αυτό απαιτεί από το Lidarr να διαβάσει μέρη του αρχείου που θα επιβραδύνουν τις σαρώσεις και μπορεί να προκαλέσουν υψηλή δραστηριότητα δίσκου ή δικτύου.",
|
||||
"AnyEditionOkHelpText": "Το Lidarr θα μεταβεί αυτόματα στην κυκλοφορία που ταιριάζει καλύτερα στα ληφθέντα κομμάτια",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Λήψη αρχείων πελάτη {0} που αναφέρθηκαν στο {1} αλλά το Radarr δεν μπορεί να δει αυτόν τον κατάλογο. Ίσως χρειαστεί να προσαρμόσετε τα δικαιώματα του φακέλου.",
|
||||
"AllowFingerprintingHelpTextWarning": "Αυτό απαιτεί από το {appName} να διαβάσει μέρη του αρχείου που θα επιβραδύνουν τις σαρώσεις και μπορεί να προκαλέσουν υψηλή δραστηριότητα δίσκου ή δικτύου.",
|
||||
"AnyEditionOkHelpText": "Το {appName} θα μεταβεί αυτόματα στην κυκλοφορία που ταιριάζει καλύτερα στα ληφθέντα κομμάτια",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Λήψη αρχείων πελάτη {0} που αναφέρθηκαν στο {1} αλλά το {appName} δεν μπορεί να δει αυτόν τον κατάλογο. Ίσως χρειαστεί να προσαρμόσετε τα δικαιώματα του φακέλου.",
|
||||
"Theme": "Θέμα",
|
||||
"ThemeHelpText": "Αλλαγή του θέματος διεπαφής χρήστη εφαρμογής, το θέμα «Αυτόματο» θα χρησιμοποιήσει το Θέμα του λειτουργικού σας συστήματος για να ρυθμίσει τη λειτουργία Light ή Dark. Εμπνευσμένο από το Theme.Park",
|
||||
"EnableRssHelpText": "Θα χρησιμοποιηθεί όταν το Readarr αναζητά περιοδικά εκδόσεις μέσω RSS Sync",
|
||||
@@ -886,7 +884,7 @@
|
||||
"ResetDefinitions": "Επαναφορά ορισμών",
|
||||
"Conditions": "Συνθήκες",
|
||||
"CopyToClipboard": "Αντιγραφή στο πρόχειρο",
|
||||
"CutoffFormatScoreHelpText": "Μόλις επιτευχθεί αυτό το σκορ προσαρμοσμένης μορφής, το Radarr δεν θα κατεβάζει πλέον ταινίες",
|
||||
"CutoffFormatScoreHelpText": "Μόλις επιτευχθεί αυτό το σκορ προσαρμοσμένης μορφής, το {appName} δεν θα κατεβάζει πλέον ταινίες",
|
||||
"DataFutureBooks": "Παρακολουθήστε άλμπουμ που δεν έχουν κυκλοφορήσει ακόμα",
|
||||
"DeleteCustomFormat": "Διαγραφή προσαρμοσμένης μορφής",
|
||||
"DeleteCustomFormatMessageText": "Είστε σίγουροι πως θέλετε να διαγράψετε τη προσαρμοσμένη μορφή '{0}';",
|
||||
@@ -931,7 +929,7 @@
|
||||
"DeleteSelectedImportListsMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το ευρετήριο \"{0}\";",
|
||||
"DeleteSelectedIndexers": "Διαγραφή ευρετηρίου",
|
||||
"ExistingTag": "Υφιστάμενη ετικέτα",
|
||||
"BlocklistReleaseHelpText": "Αποτρέπει το Lidarr από το να πάρει ξανά αυτόματα αυτήν την έκδοση",
|
||||
"BlocklistReleaseHelpText": "Αποτρέπει το {appName} από το να πάρει ξανά αυτόματα αυτήν την έκδοση",
|
||||
"DeleteSelectedIndexersMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το ευρετήριο \"{0}\";",
|
||||
"DownloadClientTagHelpText": "Χρησιμοποιήστε αυτό το ευρετήριο μόνο για καλλιτέχνη με τουλάχιστον μία αντίστοιχη ετικέτα. Αφήστε το κενό για χρήση με όλους τους καλλιτέχνες",
|
||||
"ApplyTagsHelpTextReplace": "Αντικατάσταση: Αντικαταστήστε τις ετικέτες με τις εισαγόμενες ετικέτες (μην εισάγετε ετικέτες για να διαγράψετε όλες τις ετικέτες)",
|
||||
@@ -962,7 +960,7 @@
|
||||
"RemoveFailedDownloads": "Αφαίρεση Αποτυχημένων Λήψεων",
|
||||
"SetTags": "Ορισμός ετικετών",
|
||||
"Yes": "Ναί",
|
||||
"ConnectionLostToBackend": "Το Radarr έχασε τη σύνδεσή του με το backend και θα χρειαστεί να επαναφορτωθεί για να αποκαταστήσει τη λειτουργικότητά του.",
|
||||
"ConnectionLostToBackend": "Το {appName} έχασε τη σύνδεσή του με το backend και θα χρειαστεί να επαναφορτωθεί για να αποκαταστήσει τη λειτουργικότητά του.",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Όλα τα αποτελέσματα αποκρύπτονται από το εφαρμοσμένο φίλτρο",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Όλες οι λίστες δεν είναι διαθέσιμες λόγω αστοχιών",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Μη διαθέσιμες λίστες λόγω αποτυχιών: {0}",
|
||||
@@ -978,10 +976,10 @@
|
||||
"Location": "Τοποθεσία",
|
||||
"System": "Σύστημα",
|
||||
"FreeSpace": "Ελεύθερος Χώρος",
|
||||
"SkipRedownloadHelpText": "Αποτρέπει το Lidarr από το να δοκιμάσει τη λήψη εναλλακτικών εκδόσεων για τα αφαιρεμένα στοιχεία",
|
||||
"SkipRedownloadHelpText": "Αποτρέπει το {appName} από το να δοκιμάσει τη λήψη εναλλακτικών εκδόσεων για τα αφαιρεμένα στοιχεία",
|
||||
"Medium": "Μεσαίο",
|
||||
"ConnectionLost": "Η σύνδεση χάθηκε",
|
||||
"ConnectionLostReconnect": "Το Radarr θα προσπαθήσει να συνδεθεί αυτόματα, αλλιώς μπορείτε να κάνετε reload απο κάτω.",
|
||||
"ConnectionLostReconnect": "Το {appName} θα προσπαθήσει να συνδεθεί αυτόματα, αλλιώς μπορείτε να κάνετε reload απο κάτω.",
|
||||
"RecentChanges": "Πρόσφατες αλλαγές",
|
||||
"SomeResultsAreHiddenByTheAppliedFilter": "Ορισμένα αποτελέσματα αποκρύπτονται από το εφαρμοσμένο φίλτρο",
|
||||
"WhatsNew": "Τι νέα?",
|
||||
@@ -993,5 +991,35 @@
|
||||
"AppUpdated": "{appName} Ενημερώθηκε",
|
||||
"AppUpdatedVersion": "ξαναφορτωθεί",
|
||||
"AutoAdd": "Προσθήκη",
|
||||
"ErrorLoadingContent": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου"
|
||||
"ErrorLoadingContent": "Υπήρξε ένα σφάλμα κατά τη φόρτωση του αρχείου",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Παραδείγματα: «.sub, .nfo» ή «sub, nfo»",
|
||||
"IndexerFlags": "Σημαίες ευρετηρίου",
|
||||
"InteractiveSearchModalHeader": "Διαδραστική αναζήτηση",
|
||||
"ExtraFileExtensionsHelpText": "Λίστα πρόσθετων αρχείων που διαχωρίζονται με κόμμα για εισαγωγή (το .nfo θα εισαχθεί ως .nfo-orig)",
|
||||
"CustomFilter": "Custom Φιλτρα",
|
||||
"DeleteSelected": "Διαγραφή επιλεγμένων",
|
||||
"SourceTitle": "Τίτλος πηγής",
|
||||
"AutoRedownloadFailed": "Η λήψη απέτυχε",
|
||||
"FailedLoadingSearchResults": "Αποτυχία φόρτωσης αποτελεσμάτων αναζήτησης, δοκιμάστε ξανά.",
|
||||
"RemoveQueueItemConfirmation": "Είστε σίγουροι πως θέλετε να διαγράψετε {0} αντικείμενα από την ουρά;",
|
||||
"SelectDropdown": "'Επιλέγω...",
|
||||
"SelectQuality": "Επιλέξτε Ποιότητα",
|
||||
"SelectReleaseGroup": "Επιλέξτε Ομάδα έκδοσης",
|
||||
"AuthBasic": "Βασικό (Αναδυόμενο παράθυρο προγράμματος περιήγησης)",
|
||||
"AuthForm": "Φόρμες (σελίδα σύνδεσης)",
|
||||
"AuthenticationRequired": "Απαιτείται πιστοποίηση",
|
||||
"AuthenticationRequiredHelpText": "Αλλαγή για τα οποία απαιτείται έλεγχος ταυτότητας. Μην αλλάζετε αν δεν κατανοήσετε τους κινδύνους.",
|
||||
"AuthenticationRequiredWarning": "Για να αποτρέψει την απομακρυσμένη πρόσβαση χωρίς έλεγχο ταυτότητας, το {appName} απαιτεί τώρα να ενεργοποιηθεί ο έλεγχος ταυτότητας. Διαμορφώστε τη μέθοδο ελέγχου ταυτότητας και τα διαπιστευτήριά σας. Μπορείτε προαιρετικά να απενεργοποιήσετε τον έλεγχο ταυτότητας από τοπικές διευθύνσεις. Ανατρέξτε στις Συχνές Ερωτήσεις για πρόσθετες πληροφορίες.",
|
||||
"Enabled": "Ενεργοποιήθηκε",
|
||||
"ApiKey": "Κλειδί API",
|
||||
"DisabledForLocalAddresses": "Απενεργοποιήθηκε για τοπικές διευθύνσεις",
|
||||
"AptUpdater": "Χρησιμοποιήστε το apt για να εγκαταστήσετε την ενημέρωση",
|
||||
"BuiltIn": "Ενσωματωμένο",
|
||||
"CurrentlyInstalled": "Εγκατεστημένο αυτήν τη στιγμή",
|
||||
"DockerUpdater": "ενημερώστε το κοντέινερ για να λάβετε την ενημέρωση",
|
||||
"OnLatestVersion": "Η τελευταία έκδοση του {appName} είναι ήδη εγκατεστημένη",
|
||||
"Script": "Γραφή",
|
||||
"UpdateAppDirectlyLoadError": "Δεν είναι δυνατή η απευθείας ενημέρωση του {appName},",
|
||||
"ExternalUpdater": "Το {appName} έχει ρυθμιστεί να χρησιμοποιεί έναν εξωτερικό μηχανισμό ενημέρωσης",
|
||||
"InstallLatest": "Εγκατάσταση πιο πρόσφατου"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
"20MinutesTwenty": "20 Minutes: {0}",
|
||||
"45MinutesFourtyFive": "45 Minutes: {0}",
|
||||
"60MinutesSixty": "60 Minutes: {0}",
|
||||
"APIKey": "API Key",
|
||||
"ASIN": "ASIN",
|
||||
"About": "About",
|
||||
"Actions": "Actions",
|
||||
@@ -33,7 +32,7 @@
|
||||
"AnalyticsEnabledHelpText": "Send anonymous usage and error information to Readarr's servers. This includes information on your browser, which Readarr WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes.",
|
||||
"AnalyticsEnabledHelpTextWarning": "Requires restart to take effect",
|
||||
"AnyEditionOkHelpText": "Readarr will automatically switch to the edition best matching downloaded files",
|
||||
"ApiKeyHelpTextWarning": "Requires restart to take effect",
|
||||
"ApiKey": "API Key",
|
||||
"ApiKeyValidationHealthCheckMessage": "Please update your API key to be at least {0} characters long. You can do this via settings or the config file",
|
||||
"AppDataDirectory": "AppData Directory",
|
||||
"AppDataLocationHealthCheckMessage": "Updating will not be possible to prevent deleting AppData on Update",
|
||||
@@ -50,9 +49,20 @@
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "How to apply tags to the selected indexers",
|
||||
"ApplyTagsHelpTextRemove": "Remove: Remove the entered tags",
|
||||
"ApplyTagsHelpTextReplace": "Replace: Replace the tags with the entered tags (enter no tags to clear all tags)",
|
||||
"AptUpdater": "Use apt to install the update",
|
||||
"AudioFileMetadata": "Write Metadata to Audio Files",
|
||||
"AuthBasic": "Basic (Browser Popup)",
|
||||
"AuthForm": "Forms (Login Page)",
|
||||
"Authentication": "Authentication",
|
||||
"AuthenticationMethodHelpText": "Require Username and Password to access Readarr",
|
||||
"AuthenticationMethod": "Authentication Method",
|
||||
"AuthenticationMethodHelpText": "Require Username and Password to access {appName}",
|
||||
"AuthenticationMethodHelpTextWarning": "Please select a valid authentication method",
|
||||
"AuthenticationRequired": "Authentication Required",
|
||||
"AuthenticationRequiredHelpText": "Change which requests authentication is required for. Do not change unless you understand the risks.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirm new password",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Enter a new password",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Enter a new username",
|
||||
"AuthenticationRequiredWarning": "To prevent remote access without authentication, {appName} now requires authentication to be enabled. You can optionally disable authentication from local addresses.",
|
||||
"Author": "Author",
|
||||
"AuthorClickToChangeBook": "Click to change book",
|
||||
"AuthorEditor": "Author Editor",
|
||||
@@ -107,6 +117,9 @@
|
||||
"BooksTotal": "Books ({0})",
|
||||
"Bookshelf": "Bookshelf",
|
||||
"Branch": "Branch",
|
||||
"BranchUpdate": "Branch to use to update {appName}",
|
||||
"BranchUpdateMechanism": "Branch used by external update mechanism",
|
||||
"BuiltIn": "Built-In",
|
||||
"BypassIfAboveCustomFormatScore": "Bypass if Above Custom Format Score",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Enable bypass when release has a score higher than the configured minimum custom format score",
|
||||
"BypassIfHighestQuality": "Bypass if Highest Quality",
|
||||
@@ -128,7 +141,7 @@
|
||||
"CalibreUrlBase": "Calibre Url Base",
|
||||
"CalibreUsername": "Calibre Username",
|
||||
"Cancel": "Cancel",
|
||||
"CancelMessageText": "Are you sure you want to cancel this pending task?",
|
||||
"CancelPendingTask": "Are you sure you want to cancel this pending task?",
|
||||
"CatalogNumber": "Catalog Number",
|
||||
"CertificateValidation": "Certificate Validation",
|
||||
"CertificateValidationHelpText": "Change how strict HTTPS certification validation is. Do not change unless you understand the risks.",
|
||||
@@ -188,6 +201,7 @@
|
||||
"CreateEmptyAuthorFolders": "Create empty author folders",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Create missing author folders during disk scan",
|
||||
"CreateGroup": "Create group",
|
||||
"CurrentlyInstalled": "Currently Installed",
|
||||
"CustomFilter": "Custom Filter",
|
||||
"CustomFormat": "Custom Format",
|
||||
"CustomFormatScore": "Custom Format Score",
|
||||
@@ -277,12 +291,14 @@
|
||||
"DetailedProgressBarHelpText": "Show text on progress bar",
|
||||
"Development": "Development",
|
||||
"Disabled": "Disabled",
|
||||
"DisabledForLocalAddresses": "Disabled for Local Addresses",
|
||||
"DiscCount": "Disc Count",
|
||||
"DiscNumber": "Disc Number",
|
||||
"DiskSpace": "Disk Space",
|
||||
"DoNotBlocklist": "Do not Blocklist",
|
||||
"DoNotBlocklistHint": "Remove without blocklisting",
|
||||
"Docker": "Docker",
|
||||
"DockerUpdater": "Update the docker container to receive the update",
|
||||
"DownloadClient": "Download Client",
|
||||
"DownloadClientCheckDownloadingToRoot": "Download client {0} places downloads in the root folder {1}. You should not download to a root folder.",
|
||||
"DownloadClientCheckNoneAvailableMessage": "No download client is available",
|
||||
@@ -331,6 +347,7 @@
|
||||
"EnableRssHelpText": "Will be used when Readarr periodically looks for releases via RSS Sync",
|
||||
"EnableSSL": "Enable SSL",
|
||||
"EnableSslHelpText": " Requires restart running as administrator to take effect",
|
||||
"Enabled": "Enabled",
|
||||
"EnabledHelpText": "Check to enable release profile",
|
||||
"Ended": "Ended",
|
||||
"EndedAllBooksDownloaded": "Ended (All books downloaded)",
|
||||
@@ -345,9 +362,14 @@
|
||||
"ExistingTag": "Existing tag",
|
||||
"ExistingTagsScrubbed": "Existing tags scrubbed",
|
||||
"ExportCustomFormat": "Export Custom Format",
|
||||
"External": "External",
|
||||
"ExternalUpdater": "{appName} is configured to use an external update mechanism",
|
||||
"ExtraFileExtensionsHelpText": "Comma separated list of extra files to import (.nfo will be imported as .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Examples: '.sub, .nfo' or 'sub,nfo'",
|
||||
"FailedDownloadHandling": "Failed Download Handling",
|
||||
"FailedLoadingSearchResults": "Failed to load search results, please try again.",
|
||||
"FailedToFetchSettings": "Failed to fetch settings",
|
||||
"FailedToFetchUpdates": "Failed to fetch updates",
|
||||
"FailedToLoadQueue": "Failed to load Queue",
|
||||
"FileDateHelpText": "Change file date on import/rescan",
|
||||
"FileDetails": "File Details",
|
||||
@@ -465,6 +487,11 @@
|
||||
"IndexerTagsHelpText": "Only use this indexer for authors with at least one matching tag. Leave blank to use with all authors.",
|
||||
"Indexers": "Indexers",
|
||||
"IndexersSettingsSummary": "Indexers and release restrictions",
|
||||
"Install": "Install",
|
||||
"InstallLatest": "Install Latest",
|
||||
"InstallMajorVersionUpdate": "Install Update",
|
||||
"InstallMajorVersionUpdateMessage": "This update will install a new major version and may not be compatible with your system. Are you sure you want to install this update?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Please check [{domain}]({url}) for more information.",
|
||||
"InstanceName": "Instance Name",
|
||||
"InstanceNameHelpText": "Instance name in tab and for Syslog app name",
|
||||
"InteractiveSearchModalHeader": "Interactive Search",
|
||||
@@ -661,6 +688,7 @@
|
||||
"OnHealthIssueHelpText": "On Health Issue",
|
||||
"OnImportFailure": "On Import Failure",
|
||||
"OnImportFailureHelpText": "On Import Failure",
|
||||
"OnLatestVersion": "The latest version of {appName} is already installed",
|
||||
"OnReleaseImport": "On Release Import",
|
||||
"OnReleaseImportHelpText": "On Release Import",
|
||||
"OnRename": "On Rename",
|
||||
@@ -678,6 +706,7 @@
|
||||
"PageSize": "Page Size",
|
||||
"PageSizeHelpText": "Number of items to show on each page",
|
||||
"Password": "Password",
|
||||
"PasswordConfirmation": "Password Confirmation",
|
||||
"PasswordHelpText": "Calibre content server password",
|
||||
"PastDays": "Past Days",
|
||||
"PastDaysHelpText": "Days for iCal feed to look into the past",
|
||||
@@ -692,6 +721,7 @@
|
||||
"PosterSize": "Poster Size",
|
||||
"PreviewRename": "Preview Rename",
|
||||
"PreviewRetag": "Preview Retag",
|
||||
"PreviouslyInstalled": "Previously Installed",
|
||||
"Profiles": "Profiles",
|
||||
"ProfilesSettingsSummary": "Quality, Metadata, Delay, and Release profiles",
|
||||
"Progress": "Progress",
|
||||
@@ -844,6 +874,7 @@
|
||||
"SSLPort": "SSL Port",
|
||||
"Save": "Save",
|
||||
"Scheduled": "Scheduled",
|
||||
"Script": "Script",
|
||||
"ScriptPath": "Script Path",
|
||||
"Search": "Search",
|
||||
"SearchAll": "Search All",
|
||||
@@ -1037,6 +1068,7 @@
|
||||
"UnmonitoredHelpText": "Include unmonitored books in the iCal feed",
|
||||
"UnselectAll": "Unselect All",
|
||||
"UpdateAll": "Update all",
|
||||
"UpdateAppDirectlyLoadError": "Unable to update {appName} directly,",
|
||||
"UpdateAutomaticallyHelpText": "Automatically download and install updates. You will still be able to install from System: Updates",
|
||||
"UpdateAvailable": "New update is available",
|
||||
"UpdateCheckStartupNotWritableMessage": "Cannot install update because startup folder '{0}' is not writable by the user '{1}'.",
|
||||
@@ -1065,14 +1097,13 @@
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent provided by the app that called the API",
|
||||
"Username": "Username",
|
||||
"UsernameHelpText": "Calibre content server username",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Branch to use to update Readarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branch used by external update mechanism",
|
||||
"Version": "Version",
|
||||
"Wanted": "Wanted",
|
||||
"WatchLibraryForChangesHelpText": "Rescan automatically when files change in a root folder",
|
||||
"WatchRootFoldersForFileChanges": "Watch Root Folders for file changes",
|
||||
"WeekColumnHeader": "Week Column Header",
|
||||
"WhatsNew": "What's New?",
|
||||
"WhySearchesCouldBeFailing": "Click here to find out why searches could be failing",
|
||||
"WouldYouLikeToRestoreBackup": "Would you like to restore the backup '{name}'?",
|
||||
"WriteAudioTags": "Tag Audio Files with Metadata",
|
||||
"WriteAudioTagsScrub": "Scrub Existing Tags",
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"ApiKeyHelpTextWarning": "Requiere reiniciar para que surta efecto",
|
||||
"DeleteRootFolderMessageText": "¿Estás seguro que quieres eliminar la carpeta raíz '{name}'?",
|
||||
"LoadingBooksFailed": "La carga de los archivos ha fallado",
|
||||
"ProxyUsernameHelpText": "Solo necesitas introducir un usuario y contraseña si se requiere alguno. De otra forma déjalos en blanco.",
|
||||
@@ -12,7 +11,6 @@
|
||||
"ShowDateAdded": "Mostrar fecha de adición",
|
||||
"Tags": "Etiquetas",
|
||||
"60MinutesSixty": "60 Minutos: {0}",
|
||||
"APIKey": "Clave API",
|
||||
"About": "Acerca de",
|
||||
"AddListExclusion": "Añadir lista de exclusión",
|
||||
"AddingTag": "Añadir etiqueta",
|
||||
@@ -26,16 +24,16 @@
|
||||
"ApplyTags": "Aplicar Etiquetas",
|
||||
"45MinutesFourtyFive": "45 Minutos: {0}",
|
||||
"Authentication": "Autenticación",
|
||||
"AuthenticationMethodHelpText": "Requiere usuario y contraseña para acceder a Readarr",
|
||||
"AuthenticationMethodHelpText": "Requiere usuario y contraseña para acceder a {appName}",
|
||||
"AuthorClickToChangeBook": "Clic para cambiar la película",
|
||||
"AutoRedownloadFailedHelpText": "Buscar e intentar descargar automáticamente una versión diferente",
|
||||
"AutoRedownloadFailedHelpText": "Busca e intenta descargar automáticamente una versión diferente",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Los libros eliminados del disco se dejan de monitorizar automáticamente en Readarr",
|
||||
"Automatic": "Automático",
|
||||
"BackupFolderHelpText": "Las rutas relativas estarán bajo el directorio AppData de Readarr",
|
||||
"BackupNow": "Hacer copia de seguridad ahora",
|
||||
"BackupRetentionHelpText": "Las copias de seguridad automáticas anteriores al período de retención serán borradas automáticamente",
|
||||
"Backups": "Copias de seguridad",
|
||||
"BindAddress": "Dirección de Ligado",
|
||||
"BindAddress": "Dirección de enlace",
|
||||
"BindAddressHelpText": "Dirección IP4 válida, localhost o '*' para todas las interfaces",
|
||||
"BindAddressHelpTextWarning": "Requiere reiniciar para que surta efecto",
|
||||
"BookIsDownloadingInterp": "La película está descargando - {0}% {1}",
|
||||
@@ -44,12 +42,12 @@
|
||||
"Calendar": "Calendario",
|
||||
"CalendarWeekColumnHeaderHelpText": "Mostrado sobre cada columna cuando la vista activa es semana",
|
||||
"Cancel": "Cancelar",
|
||||
"CancelMessageText": "Seguro que quieres cancelar esta tarea pendiente?",
|
||||
"CancelPendingTask": "Seguro que quieres cancelar esta tarea pendiente?",
|
||||
"CertificateValidation": "Validacion de certificado",
|
||||
"CertificateValidationHelpText": "Cambiar como es la validacion de la certificacion estricta de HTTPS. No cambiar a menos que entiendas las consecuencias.",
|
||||
"CertificateValidationHelpText": "Cambia cómo de estricta es la validación de certificación de HTTPS. No cambiar a menos que entiendas los riesgos.",
|
||||
"ChangeFileDate": "Cambiar fecha de archivo",
|
||||
"ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado",
|
||||
"ChmodFolder": "Carpeta chmod",
|
||||
"ChmodFolder": "chmod de la carpeta",
|
||||
"ChmodFolderHelpText": "Octal, aplicado durante la importación / cambio de nombre a carpetas y archivos multimedia (sin bits de ejecución)",
|
||||
"ChmodFolderHelpTextWarning": "Esto solo funciona si el usuario que ejecuta Readarr es el propietario del archivo. Es mejor asegurarse de que el cliente de descarga establezca los permisos correctamente.",
|
||||
"ChownGroupHelpText": "Nombre del grupo o gid. Utilice gid para sistemas de archivos remotos.",
|
||||
@@ -64,7 +62,7 @@
|
||||
"CreateEmptyAuthorFoldersHelpText": "Crear carpetas de películas que faltan durante la exploración del disco",
|
||||
"CreateGroup": "Crear grupo",
|
||||
"CutoffHelpText": "Una vez que se alcance esta calidad, Readarr dejará de descargar libros",
|
||||
"CutoffUnmet": "Umbrales no alcanzados",
|
||||
"CutoffUnmet": "Límite no alcanzado",
|
||||
"DatabaseMigration": "Migración de la base de datos",
|
||||
"Dates": "Fechas",
|
||||
"DelayProfile": "Perfil de retardo",
|
||||
@@ -114,7 +112,7 @@
|
||||
"EnableAutomaticSearch": "Habilitar Búsqueda Automática",
|
||||
"EnableColorImpairedMode": "Habilitar Modo de dificultad con los colores",
|
||||
"EnableColorImpairedModeHelpText": "Estilo modificado para permitir que usuarios con problemas de color distingan mejor la información codificada por colores",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importar automáticamente las descargas completas del gestor de descargas",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importa automáticamente las descargas completas del gestor de descargas",
|
||||
"EnableHelpText": "Habilitar la creación de un fichero de metadatos para este tipo de metadato",
|
||||
"EnableInteractiveSearch": "Habilitar Búsqueda Interactiva",
|
||||
"EnableRSS": "Habilitar RSS",
|
||||
@@ -153,7 +151,7 @@
|
||||
"ICalFeed": "Canal de iCal",
|
||||
"ICalHttpUrlHelpText": "Copia esta URL a tu gestor(es) o haz click en subscribir si tu navegador soporta webcal",
|
||||
"ICalLink": "Enlace de iCal",
|
||||
"IconForCutoffUnmet": "Icono para Umbrales no alcanzados",
|
||||
"IconForCutoffUnmet": "Icono de límite no alcanzado",
|
||||
"IconTooltip": "Programado",
|
||||
"IgnoredAddresses": "Ignorar direcciones",
|
||||
"IgnoredHelpText": "Este lanzamiento será rechazado si contiene uno ó más de estos términos (mayúsculas ó minúsculas)",
|
||||
@@ -166,13 +164,13 @@
|
||||
"Importing": "Importando",
|
||||
"IncludeHealthWarningsHelpText": "Incluir Alertas de Salud",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mostrar elementos sin un autor en la cola. Esto podría incluir autores eliminados, libros o cualquier otra cosa en la categoría de Readarr",
|
||||
"IncludeUnmonitored": "Incluir sin monitorizar",
|
||||
"IncludeUnmonitored": "Incluir no monitorizadas",
|
||||
"Indexer": "Indexador",
|
||||
"IndexerPriority": "Prioridad del indexador",
|
||||
"IndexerSettings": "Opciones del indexador",
|
||||
"Indexers": "Indexadores",
|
||||
"Interval": "Intervalo",
|
||||
"IsCutoffCutoff": "Corte",
|
||||
"IsCutoffCutoff": "Límite",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Actualizar hasta que se alcance o supere esta calidad",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "No se puede eliminar estando en uso",
|
||||
"Language": "Idioma",
|
||||
@@ -315,7 +313,7 @@
|
||||
"ScriptPath": "Ruta del script",
|
||||
"Search": "Buscar",
|
||||
"SearchAll": "Buscar todo",
|
||||
"SearchForMissing": "Buscar perdidos",
|
||||
"SearchForMissing": "Buscar faltantes",
|
||||
"SearchSelected": "Buscar seleccionados",
|
||||
"Security": "Seguridad",
|
||||
"SendAnonymousUsageData": "Enviar datos de uso anónimos",
|
||||
@@ -324,7 +322,7 @@
|
||||
"SetPermissionsLinuxHelpTextWarning": "Si no estás seguro qué configuraciones hacer, no las cambies.",
|
||||
"Settings": "Ajustes",
|
||||
"ShortDateFormat": "Formato de fecha breve",
|
||||
"ShowCutoffUnmetIconHelpText": "Mostrar el icono para los ficheros cuando no se ha alcanzado el corte",
|
||||
"ShowCutoffUnmetIconHelpText": "Muestra un icono para archivos cuando el límite no haya sido alcanzado",
|
||||
"ShowMonitored": "Mostrar monitorizado",
|
||||
"ShowMonitoredHelpText": "Muestra el estado monitorizado bajo el póster",
|
||||
"ShowPath": "Mostrar ruta",
|
||||
@@ -412,7 +410,7 @@
|
||||
"Unmonitored": "Sin monitorizar",
|
||||
"UnmonitoredHelpText": "Incluir los libros sin monitorizar en el canal de iCal",
|
||||
"UpdateAll": "Actualizar Todo",
|
||||
"UpdateAutomaticallyHelpText": "Descargar e instalar actualizaciones automáticamente. Todavía puedes instalar desde Sistema: Actualizaciones",
|
||||
"UpdateAutomaticallyHelpText": "Descarga e instala actualizaciones automáticamente. Podrás seguir instalándolas desde Sistema: Actualizaciones",
|
||||
"UpdateMechanismHelpText": "Usar el actualizador integrado de Readarr o un script",
|
||||
"UpdateScriptPathHelpText": "Ruta a un script personalizado que toma un paquete de actualización extraído y gestiona el resto del proceso de actualización",
|
||||
"Updates": "Actualizaciones",
|
||||
@@ -425,8 +423,8 @@
|
||||
"UsenetDelay": "Retraso de usenet",
|
||||
"UsenetDelayHelpText": "Retraso en minutos a esperar antes de capturar un lanzamiento desde usenet",
|
||||
"Username": "Usuario",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Rama a utilizar para actualizar Readarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Rama usada por el mecanismo de actualización externo",
|
||||
"BranchUpdate": "Rama a utilizar para actualizar Readarr",
|
||||
"BranchUpdateMechanism": "Rama usada por el mecanismo de actualización externo",
|
||||
"Version": "Versión",
|
||||
"WeekColumnHeader": "Cabecera de columna de semana",
|
||||
"Year": "Año",
|
||||
@@ -606,7 +604,7 @@
|
||||
"ResetDefinitions": "Restablecer definiciones",
|
||||
"UnableToLoadCustomFormats": "No se pueden cargar los Formatos Propios",
|
||||
"Theme": "Tema",
|
||||
"ThemeHelpText": "Cambiar el tema de la interfaz de la aplicación, el tema 'Auto' usará el tema de tu sistema para establecer el modo luminoso u oscuro. Inspirado por Theme.Park",
|
||||
"ThemeHelpText": "Cambia el tema de la interfaz de la aplicación, el tema 'Auto' usará el tema de tu sistema para establecer el modo luminoso u oscuro. Inspirado por Theme.Park",
|
||||
"CustomFormatSettings": "Ajustes de formato personalizado",
|
||||
"CutoffFormatScoreHelpText": "Una vez alcanzada la puntuación del formato personalizado Readarr dejará de capturar lanzamientos de libros",
|
||||
"DeleteCustomFormatMessageText": "¿Estás seguro que quieres eliminar el formato personalizado '{name}'?",
|
||||
@@ -644,7 +642,7 @@
|
||||
"Yes": "Sí",
|
||||
"RedownloadFailed": "La descarga ha fallado",
|
||||
"RemoveCompleted": "Eliminar completado",
|
||||
"RemoveDownloadsAlert": "Las opciones de Eliminar fueron movidas a las opciones del cliente de descarga individual en la table anterior.",
|
||||
"RemoveDownloadsAlert": "Las opciones de eliminación fueron trasladadas a las opciones del cliente de descarga individual en la tabla anterior.",
|
||||
"RemoveFailed": "Fallo al eliminar",
|
||||
"ApplyTagsHelpTextAdd": "Añadir: Añade las etiquetas a la lista de etiquetas existente",
|
||||
"ApplyTagsHelpTextHowToApplyDownloadClients": "Cómo añadir etiquetas a los clientes de descargas seleccionados",
|
||||
@@ -686,7 +684,7 @@
|
||||
"Activity": "Actividad",
|
||||
"Location": "Ubicación",
|
||||
"Ui": "Interfaz",
|
||||
"AddNew": "Añadir Nuevo",
|
||||
"AddNew": "Añadir nuevo",
|
||||
"Backup": "Copia de seguridad",
|
||||
"ManageClients": "Gestionar Clientes",
|
||||
"ManageDownloadClients": "Gestionar Clientes de Descarga",
|
||||
@@ -764,13 +762,13 @@
|
||||
"ExtraFileExtensionsHelpText": "Lista de archivos adicionales separados por coma para importar (.nfo será importado como .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Ejemplos: '.sub, .nfo' o 'sub,nfo'",
|
||||
"ImportLists": "Importar listas",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {downloadClientName} está configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas de tu cliente antes de que {1} pueda importarlas.",
|
||||
"DownloadClientRemovesCompletedDownloadsHealthCheckMessage": "El cliente de descarga {0} está configurado para eliminar las descargas completadas. Esto puede causar que las descargas sean eliminadas de tu cliente antes de que {1} pueda importarlas.",
|
||||
"Continuing": "Continua",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Diseño del contenido",
|
||||
"InvalidUILanguage": "Su interfaz de usuario está configurada en un idioma no válido, corríjalo y guarde la configuración",
|
||||
"NoCutoffUnmetItems": "Sin objetos sin condiciones de corte incumplidas",
|
||||
"NoCutoffUnmetItems": "Ningún elemento con límite no alcanzado",
|
||||
"StatusEndedContinuing": "Continua",
|
||||
"ChownGroup": "chown grupo",
|
||||
"ChownGroup": "chown del grupo",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usar el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crear una subcarpeta (qBittorrent 4.3.2+)",
|
||||
"CustomFormatsSpecificationRegularExpression": "Expresión regular",
|
||||
"ErrorLoadingContent": "Hubo un error cargando este contenido",
|
||||
@@ -810,7 +808,7 @@
|
||||
"DataListMonitorAll": "Monitoriza los autores y todos los álbumes de cada artista incluido en la lista de importación",
|
||||
"MetadataSettingsSummary": "Crea archivos de metadatos cuando los episodios son importados o las series son refrescadas",
|
||||
"MonitoredAuthorIsUnmonitored": "El artista no está vigilado",
|
||||
"SearchForAllCutoffUnmetBooks": "Buscar todos los episodios en Umbrales no alcanzados",
|
||||
"SearchForAllCutoffUnmetBooks": "Buscar todos los libros con límites no alcanzados",
|
||||
"ConsoleLogLevel": "Nivel de registro de consola",
|
||||
"DataMissingBooks": "Monitoriza libros que no tienen archivos o que no se han lanzado aún",
|
||||
"EnabledHelpText": "Señalar para habilitar el perfil de lanzamiento",
|
||||
@@ -832,7 +830,7 @@
|
||||
"SelectReleaseGroup": "Seleccionar grupo de lanzamiento",
|
||||
"ThereWasAnErrorLoadingThisItem": "Hubo un error cargando este elemento",
|
||||
"ThereWasAnErrorLoadingThisPage": "Hubo un error cargando esta página",
|
||||
"SourceTitle": "Título de la fuente",
|
||||
"SourceTitle": "Título de origen",
|
||||
"ShowBanners": "Mostrar banners",
|
||||
"SearchMonitored": "Buscar monitorizados",
|
||||
"Other": "Otro",
|
||||
@@ -875,7 +873,7 @@
|
||||
"DownloadClientDelugeSettingsDirectoryCompleted": "Directorio al que mover cuando se complete",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Ubicación opcional a la que mover las descargas completadas, dejar en blanco para usar la ubicación predeterminada de Deluge",
|
||||
"DownloadClientDelugeSettingsDirectoryHelpText": "Ubicación opcional en la que poner las descargas, dejar en blanco para usar la ubicación predeterminada de Deluge",
|
||||
"InteractiveSearchModalHeader": "Búsqueda Interactiva",
|
||||
"InteractiveSearchModalHeader": "Búsqueda interactiva",
|
||||
"NotificationsPlexSettingsAuthToken": "Token de autenticación",
|
||||
"CustomFormatsSettingsTriggerInfo": "Un formato personalizado será aplicado al lanzamiento o archivo cuando coincida con al menos uno de los diferentes tipos de condición elegidos.",
|
||||
"ShouldSearchHelpText": "Buscar indexadores para elementos añadido recientemente. Usar con precaución en listas largas.",
|
||||
@@ -898,7 +896,7 @@
|
||||
"DataListMonitorNone": "No monitorizar autores o libros",
|
||||
"Iso639-3": "Códigos de idioma ISO 639-3, o 'nulo', separados por coma",
|
||||
"MinPopularityHelpText": "Popularidad es la media de valoraciones * número de votos",
|
||||
"DeleteSelected": "Eliminar seleccionados",
|
||||
"DeleteSelected": "Borrar seleccionados",
|
||||
"IsExpandedShowFileInfo": "Mostrar información de archivo",
|
||||
"MassBookSearchWarning": "¿Estás seguro que quieres llevar a cabo una búsqueda masiva para {0} libros?",
|
||||
"MonitorNewItemsHelpText": "Qué nuevos libros deberían ser monitorizados",
|
||||
@@ -1082,5 +1080,42 @@
|
||||
"CalibrePassword": "Contraseña de Calibre",
|
||||
"CalibrePort": "Puerto de Calibre",
|
||||
"InteractiveSearchModalHeaderBookAuthor": "Búsqueda interactiva - {bookTitle} por {authorName}",
|
||||
"OnAuthorAdded": "En autor añadido"
|
||||
"OnAuthorAdded": "En autor añadido",
|
||||
"IndexerSettingsSeedRatio": "Ratio de sembrado",
|
||||
"IndexerSettingsSeedRatioHelpText": "El ratio que un torrent debería alcanzar antes de parar, vacío usa el predeterminado del cliente de descarga. El ratio debería ser al menos 1.0 y seguir las reglas de los indexadores",
|
||||
"IndexerSettingsSeedTime": "Tiempo de sembrado",
|
||||
"IndexerSettingsSeedTimeHelpText": "El tiempo que un torrent debería ser sembrado antes de parar, vacío usa el predeterminado del cliente de descarga",
|
||||
"FailedLoadingSearchResults": "Error al cargar los resultados de la busqueda, prueba otra vez.",
|
||||
"WhySearchesCouldBeFailing": "Pulsa aquí para descubrir por qué las búsquedas podrían estar fallando",
|
||||
"ApiKey": "Clave API",
|
||||
"AuthenticationRequiredHelpText": "Cambia para qué solicitudes se requiere autenticación. No cambiar a menos que entiendas los riesgos.",
|
||||
"AuthForm": "Formularios (Página de inicio de sesión)",
|
||||
"AuthenticationRequiredWarning": "Para evitar el acceso remoto sin autenticación, {appName} ahora requiere que la autenticación sea habilitada. Opcionalmente puedes deshabilitar la autenticación desde direcciones locales.",
|
||||
"DisabledForLocalAddresses": "Deshabilitada para direcciones locales",
|
||||
"Enabled": "Habilitada",
|
||||
"PasswordConfirmation": "Confirmación de contraseña",
|
||||
"AuthBasic": "Básica (Ventana emergente del navegador)",
|
||||
"AuthenticationMethod": "Método de autenticación",
|
||||
"AuthenticationMethodHelpTextWarning": "Por favor selecciona un método de autenticación válido",
|
||||
"AuthenticationRequired": "Autenticación requerida",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirma la nueva contraseña",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Introduce una nueva contraseña",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Introduce un nuevo usuario",
|
||||
"External": "Externa",
|
||||
"AptUpdater": "Usa apt para instalar la actualización",
|
||||
"BuiltIn": "Integrado",
|
||||
"CurrentlyInstalled": "Actualmente instalado",
|
||||
"DockerUpdater": "Actualiza el contenedor docker para recibir la actualización",
|
||||
"ExternalUpdater": "{appName} está configurado para usar un mecanismo de actualización externo",
|
||||
"FailedToFetchSettings": "Error al recuperar la configuración",
|
||||
"Install": "Instalar",
|
||||
"OnLatestVersion": "La última versión de {appName} ya está instalada",
|
||||
"PreviouslyInstalled": "Previamente instalado",
|
||||
"Script": "Script",
|
||||
"UpdateAppDirectlyLoadError": "No se pudo actualizar {appName} directamente,",
|
||||
"FailedToFetchUpdates": "Fallo al buscar las actualizaciones",
|
||||
"InstallLatest": "Instala el último",
|
||||
"InstallMajorVersionUpdate": "Instalar actualización",
|
||||
"InstallMajorVersionUpdateMessage": "Esta actualización instalará una nueva versión principal y podría no ser compatible con tu sistema. ¿Estás seguro que quieres instalar esta actualización?",
|
||||
"InstallMajorVersionUpdateMessageLink": "Por favor revisa [{domain}]({url}) para más información."
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"20MinutesTwenty": "20 minuuttia: {0}",
|
||||
"45MinutesFourtyFive": "45 minuuttia: {0}",
|
||||
"60MinutesSixty": "60 minuuttia: {0}",
|
||||
"APIKey": "Rajapinnan avain",
|
||||
"About": "Tietoja",
|
||||
"AddListExclusion": "Lisää listapoikkeus",
|
||||
"AddingTag": "Tunniste lisätään",
|
||||
@@ -39,7 +38,7 @@
|
||||
"Calendar": "Kalenteri",
|
||||
"CalendarWeekColumnHeaderHelpText": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.",
|
||||
"Cancel": "Peruuta",
|
||||
"CancelMessageText": "Haluatko varmasti perua tämän odottavan tehtävän?",
|
||||
"CancelPendingTask": "Haluatko varmasti perua tämän odottavan tehtävän?",
|
||||
"CertificateValidation": "Varmenteen vahvistus",
|
||||
"CertificateValidationHelpText": "Määritä HTTPS-varmennevahvistuksen tiukkuus. Älä muta, jos et ymmärrä riskejä.",
|
||||
"ChangeFileDate": "Muuta tiedoston päiväys",
|
||||
@@ -163,7 +162,7 @@
|
||||
"ImportExtraFilesHelpText": "Tuo kirjatiedoston tuonnin yhteydessä sääntöjä vastaavat tiedostot, kuten tekstitykset, .nfo-tiedostot, yms.",
|
||||
"ImportFailedInterp": "Tuonti epäonnistui: {0}",
|
||||
"ImportedTo": "Tuontikohde",
|
||||
"Importing": "Tuonti",
|
||||
"Importing": "Tuodaan",
|
||||
"IncludeHealthWarningsHelpText": "Sisällytä kuntovaroitukset",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Näytä jonossa kohteet, joille ei ole kirjailijaa. Tämä voi sisältää poistettuja kirjailijoita tai mitä tahansa muuta Readarrille luokiteltua.",
|
||||
"IncludeUnmonitored": "Sisällytä valvomattomat",
|
||||
@@ -298,7 +297,7 @@
|
||||
"ResetAPIKeyMessageText": "Haluatko varmasti korvata rajapinnan avaimen uudella?",
|
||||
"Restart": "Käynnistä uudelleen",
|
||||
"RestartNow": "Käynnistä uudelleen nyt",
|
||||
"RestartReadarr": "Käynnistä Radarr uudelleen",
|
||||
"RestartReadarr": "Käynnistä {appName} uudelleen",
|
||||
"Restore": "Palauta",
|
||||
"RestoreBackup": "Palauta varmuuskopio",
|
||||
"Result": "Tulos",
|
||||
@@ -425,13 +424,12 @@
|
||||
"UsenetDelay": "Usenet-viive",
|
||||
"UsenetDelayHelpText": "Minuuttiviive, joka odotetaan ennen julkaisun Usenet-kaappausta.",
|
||||
"Username": "Käyttäjätunnus",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Sovelluksen versiopäivityksiin käytettävä kehityshaara.",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.",
|
||||
"BranchUpdate": "Sovelluksen versiopäivityksiin käytettävä kehityshaara.",
|
||||
"BranchUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.",
|
||||
"Version": "Versio",
|
||||
"WeekColumnHeader": "Viikkosarakkeen otsikko",
|
||||
"Year": "Vuosi",
|
||||
"YesCancel": "Kyllä, peru",
|
||||
"ApiKeyHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.",
|
||||
"DeleteRootFolderMessageText": "Haluatko varmasti poistaa juurikansion \"{name}\"?",
|
||||
"LoadingBooksFailed": "Kirjojen lataus epäonnistui",
|
||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
|
||||
@@ -1008,5 +1006,39 @@
|
||||
"CustomFormatsSpecificationFlag": "Lippu",
|
||||
"SelectIndexerFlags": "Valitse tietolähteen liput",
|
||||
"SetIndexerFlags": "Aseta tietolähteen liput",
|
||||
"LabelIsRequired": "Nimi on pakollinen"
|
||||
"LabelIsRequired": "Nimi on pakollinen",
|
||||
"IndexerSettingsSeedRatio": "Jakosuhde",
|
||||
"DownloadClientDelugeSettingsDirectoryCompletedHelpText": "Valinnainen latuasten tallennussijainti. Käytä Aria2-oletusta jättämällä tyhjäksi.",
|
||||
"IndexerSettingsSeedRatioHelpText": "Suhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi. Suhteen tulisi olla ainakin 1.0 ja noudattaa tietolähteen sääntöjä.",
|
||||
"IndexerSettingsSeedTime": "Jakoaika",
|
||||
"IndexerSettingsSeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä lataustyökalun oletusta jättämällä tyhjäksi.",
|
||||
"FailedLoadingSearchResults": "Hakutulosten lataus epäonnistui. Yritä uudelleen.",
|
||||
"WhySearchesCouldBeFailing": "Selvitä miksi haku saattaa epäonnistua painamalla tästä",
|
||||
"ApiKey": "Rajapinnan avain",
|
||||
"AuthBasic": "Perus (ponnahdusikkuna)",
|
||||
"AuthForm": "Lomake (kirjautumissivu)",
|
||||
"AuthenticationMethod": "Tunnistautumistapa",
|
||||
"AuthenticationMethodHelpTextWarning": "Valitse sopiva tunnistautumistapa",
|
||||
"AuthenticationRequired": "Vaadi tunnistautuminen",
|
||||
"AuthenticationRequiredHelpText": "Valitse mitkä pyynnöt vaativat tunnistautumisen. Älä muuta, jos et ymmärrä riskejä.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Syötä uusi salasana",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus",
|
||||
"AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.",
|
||||
"Enabled": "Käytössä",
|
||||
"External": "Ulkoinen",
|
||||
"PasswordConfirmation": "Salasanan vahvistus",
|
||||
"DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "{appName} tukee useita listoja, joilta sarjoja voidaan tuoda tietokantaan.",
|
||||
"BuiltIn": "Sisäänrakennettu",
|
||||
"CurrentlyInstalled": "Nykyinen asennettu versio",
|
||||
"DockerUpdater": "Hanki päivitys päivittämällä Docker-säiliö",
|
||||
"ExternalUpdater": "{appName} on määritetty käyttämään ulkoista päivitysratkaisua.",
|
||||
"FailedToFetchUpdates": "Päivitysten nouto epäonnistui",
|
||||
"InstallLatest": "Asenna uusin",
|
||||
"OnLatestVersion": "Uusin {appName}-versio on jo asennettu",
|
||||
"PreviouslyInstalled": "Edellinen asennettu versio",
|
||||
"Script": "Skripti",
|
||||
"UpdateAppDirectlyLoadError": "{appName}ia ei voida päivittää suoraan,",
|
||||
"AptUpdater": "Asenna päivitys APT-työkalun avulla"
|
||||
}
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
"20MinutesTwenty": "20 Minutes : {0}",
|
||||
"45MinutesFourtyFive": "45 Minutes : {0}",
|
||||
"60MinutesSixty": "60 Minutes : {0}",
|
||||
"APIKey": "Clé API",
|
||||
"About": "À propos",
|
||||
"AddListExclusion": "Ajouter une liste d'exclusion",
|
||||
"BindAddressHelpTextWarning": "Nécessite un redémarrage pour prendre effet",
|
||||
"ApiKeyHelpTextWarning": "Nécessite un redémarrage pour prendre effet",
|
||||
"Branch": "Branche",
|
||||
"Docker": "Docker",
|
||||
"DeleteRootFolderMessageText": "Êtes-vous sûr de vouloir supprimer le dossier racine « {name} » ?",
|
||||
@@ -33,7 +31,7 @@
|
||||
"AppDataDirectory": "Dossier AppData",
|
||||
"ApplyTags": "Appliquer les étiquettes",
|
||||
"Authentication": "Authentification",
|
||||
"AuthenticationMethodHelpText": "Exiger un nom d'utilisateur et un mot de passe pour accéder à Readarr",
|
||||
"AuthenticationMethodHelpText": "Exiger un nom d'utilisateur et un mot de passe pour accéder à {appName}",
|
||||
"AuthorClickToChangeBook": "Cliquer pour changer le livre",
|
||||
"AutoRedownloadFailedHelpText": "Recherche automatique et tentative de téléchargement d'une version différente",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "Les livres effacés du disque dur ne seront plus surveillés dans Readarr",
|
||||
@@ -50,7 +48,7 @@
|
||||
"Calendar": "Calendrier",
|
||||
"CalendarWeekColumnHeaderHelpText": "Affiché au dessus de chaque colonne quand \"Semaine\" est l'affichage actif",
|
||||
"Cancel": "Annuler",
|
||||
"CancelMessageText": "Êtes-vous sur de vouloir annuler cette tâche en attente ?",
|
||||
"CancelPendingTask": "Êtes-vous sur de vouloir annuler cette tâche en attente ?",
|
||||
"CertificateValidation": "Validation du certificat",
|
||||
"CertificateValidationHelpText": "Modifier le niveau de rigueur de la validation de la certification HTTPS. Ne pas modifier si vous ne maîtrisez pas les risques.",
|
||||
"ChangeFileDate": "Changer la date du fichier",
|
||||
@@ -112,7 +110,7 @@
|
||||
"DiskSpace": "Espace disque",
|
||||
"DownloadClient": "Client de téléchargement",
|
||||
"DownloadClientSettings": "Télécharger les paramètres client",
|
||||
"DownloadClients": "Clients de téléchargement",
|
||||
"DownloadClients": "Clients de télécharg.",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Téléchargement échoué : voir le client de téléchargement pour plus de détails",
|
||||
"DownloadFailedInterp": "Échec du téléchargement : {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "S'il faut ou non mettre à niveau automatiquement vers Propres/Repacks",
|
||||
@@ -179,7 +177,7 @@
|
||||
"IndexerSettings": "Paramètres de l'indexeur",
|
||||
"Indexers": "Indexeurs",
|
||||
"Interval": "Intervalle",
|
||||
"IsCutoffCutoff": "Limite",
|
||||
"IsCutoffCutoff": "Couper",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Mettre à niveau jusqu'à ce que cette qualité soit atteinte ou dépassée",
|
||||
"IsTagUsedCannotBeDeletedWhileInUse": "Ne peut pas être supprimé pendant l'utilisation",
|
||||
"Language": "Langue",
|
||||
@@ -357,7 +355,7 @@
|
||||
"Status": "État",
|
||||
"StatusEndedEnded": "Terminé",
|
||||
"Style": "Style",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "Victoire ! Mon travail est terminé, aucun fichier à renommer.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRename": "C'est fait ! Mon travail est terminé, plus aucun fichier à renommer.",
|
||||
"SuccessMyWorkIsDoneNoFilesToRetag": "Victoire ! Mon travail est terminé, aucun fichier à renommer.",
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS n'est pas pris en charge avec cet indexeur",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "La recherche n'est pas prise en charge avec cet indexeur",
|
||||
@@ -431,8 +429,8 @@
|
||||
"UsenetDelay": "Retard Usenet",
|
||||
"UsenetDelayHelpText": "Délai en minutes avant de récupérer une release de Usenet",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Branche à utiliser pour mettre à jour Readarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branche utilisée par le mécanisme de mise à jour extérieur",
|
||||
"BranchUpdate": "Branche à utiliser pour mettre à jour Readarr",
|
||||
"BranchUpdateMechanism": "Branche utilisée par le mécanisme de mise à jour extérieur",
|
||||
"Version": "Version",
|
||||
"WeekColumnHeader": "En-tête de colonne de la semaine",
|
||||
"Year": "Année",
|
||||
@@ -449,7 +447,7 @@
|
||||
"NotAvailable": "Indisponible",
|
||||
"NotMonitored": "Pas surveillé",
|
||||
"Progress": "Progression",
|
||||
"LogSqlHelpText": "Enregistrez toutes les requêtes SQL de Prowlarr",
|
||||
"LogSqlHelpText": "Enregistrez toutes les requêtes SQL de {appName}",
|
||||
"Actions": "Actions",
|
||||
"Today": "Aujourd'hui",
|
||||
"Tomorrow": "Demain",
|
||||
@@ -545,15 +543,15 @@
|
||||
"ImportListStatusCheckSingleClientMessage": "Listes indisponibles en raison d'échecs : {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs de plus de 6 heures",
|
||||
"Lists": "Listes",
|
||||
"Monitor": "Surveillé",
|
||||
"Monitor": "Surveiller",
|
||||
"MissingFromDisk": "Readarr n'a pas pu trouver le fichier sur le disque, il a donc été supprimé dans la base de données",
|
||||
"MountCheckMessage": "Le montage contenant un chemin d'auteur est monté en lecture seule : ",
|
||||
"OnBookFileDelete": "À la suppression d'un fichier vidéo",
|
||||
"OnBookFileDeleteForUpgrade": "À la suppression du fichier vidéo pour mise à niveau",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "À la suppression du fichier vidéo pour mise à niveau",
|
||||
"OnBookFileDeleteHelpText": "À la suppression d'un fichier vidéo",
|
||||
"OnBookFileDelete": "Lors de la suppression du fichier d'un livre",
|
||||
"OnBookFileDeleteForUpgrade": "Lors de la suppression du fichier d'un livre pour la mise à niveau",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Lors de la suppression du fichier d'un livre pour la mise à niveau",
|
||||
"OnBookFileDeleteHelpText": "Lors de la suppression du fichier d'un livre",
|
||||
"OnGrab": "Lors de la saisie",
|
||||
"OnHealthIssue": "Sur la question de la santé",
|
||||
"OnHealthIssue": "Lors de problème de santé",
|
||||
"OnRename": "Au renommage",
|
||||
"ProxyCheckBadRequestMessage": "Échec du test du proxy. StatusCode : {0}",
|
||||
"ProxyCheckFailedToTestMessage": "Échec du test du proxy : {0}",
|
||||
@@ -666,8 +664,8 @@
|
||||
"ClickToChangeReleaseGroup": "Cliquez pour changer de groupe de diffusion",
|
||||
"HardlinkCopyFiles": "Lien physique/Copie de fichiers",
|
||||
"MoveFiles": "Déplacer des fichiers",
|
||||
"OnApplicationUpdate": "Sur la mise à jour de l'application",
|
||||
"OnApplicationUpdateHelpText": "Lors de la mise à jour de l'app",
|
||||
"OnApplicationUpdate": "Lors de la mise à jour de l'application",
|
||||
"OnApplicationUpdateHelpText": "Lors de la mise à jour de l'application",
|
||||
"BypassIfAboveCustomFormatScore": "Contourner si au-dessus du score du format personnalisé",
|
||||
"BypassIfHighestQuality": "Contourner si la qualité est la plus élevée",
|
||||
"BypassIfAboveCustomFormatScoreHelpText": "Activez le contournement lorsque la version a un score supérieur au score minimum configuré pour le format personnalisé",
|
||||
@@ -681,7 +679,7 @@
|
||||
"CopyToClipboard": "Copier dans le presse-papier",
|
||||
"CustomFormat": "Format personnalisé",
|
||||
"CustomFormatSettings": "Réglages Formats Personnalisés",
|
||||
"CustomFormats": "Formats perso.",
|
||||
"CustomFormats": "Formats personnalisés",
|
||||
"DeleteCustomFormat": "Supprimer le format personnalisé",
|
||||
"DeleteCustomFormatMessageText": "Voulez-vous vraiment supprimer le format personnalisé « {name} » ?",
|
||||
"DeleteFormatMessageText": "Êtes-vous sûr de vouloir supprimer le tag « {0} » ?",
|
||||
@@ -732,7 +730,7 @@
|
||||
"ApplyTagsHelpTextHowToApplyAuthors": "Comment appliquer des étiquettes aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Supprimer : supprime les étiquettes renseignées",
|
||||
"AutomaticAdd": "Ajout automatique",
|
||||
"BlocklistReleaseHelpText": "Empêche Lidarr de récupérer automatiquement cette version",
|
||||
"BlocklistReleaseHelpText": "Empêche {appName} de récupérer automatiquement cette version",
|
||||
"NoChange": "Pas de changement",
|
||||
"NoEventsFound": "Aucun événement trouvé",
|
||||
"RemoveDownloadsAlert": "Les paramètres de suppression ont été déplacés vers les paramètres individuels du client de téléchargement dans le tableau ci-dessus.",
|
||||
@@ -768,7 +766,7 @@
|
||||
"ConnectionLostToBackend": "{appName} a perdu sa connexion au backend et devra être rechargé pour fonctionner à nouveau.",
|
||||
"RecentChanges": "Changements récents",
|
||||
"System": "Système",
|
||||
"WhatsNew": "Quoi de neuf ?",
|
||||
"WhatsNew": "Quoi de neuf ?",
|
||||
"AllResultsAreHiddenByTheAppliedFilter": "Tous les résultats sont masqués par le filtre appliqué",
|
||||
"Location": "Emplacement",
|
||||
"NoResultsFound": "Aucun résultat trouvé",
|
||||
@@ -889,18 +887,18 @@
|
||||
"MonitorBookExistingOnlyWarning": "Il s’agit d’un ajustement unique du paramètre surveillé pour chaque album. Utilisez l'option sous Artiste/Modifier pour contrôler ce qui se passe pour les albums nouvellement ajoutés",
|
||||
"SearchForMonitoredBooks": "Rechercher des albums surveillés",
|
||||
"WriteAudioTagsScrub": "Effacer les balises existantes",
|
||||
"ShouldMonitorExistingHelpText": "Surveiller automatiquement les albums de cette liste qui sont déjà dans Lidarr",
|
||||
"ShouldMonitorExistingHelpText": "Surveiller automatiquement les albums de cette liste qui sont déjà dans {appName}",
|
||||
"IfYouDontAddAnImportListExclusionAndTheAuthorHasAMetadataProfileOtherThanNoneThenThisBookMayBeReaddedDuringTheNextAuthorRefresh": "Si vous n'ajoutez pas d'exclusion de liste d'importation et que l'artiste a un profil de métadonnées autre que « Aucun », cet album pourra être ajouté à nouveau lors de la prochaine actualisation de l'artiste.",
|
||||
"MetadataSettingsSummary": "Créez des fichiers de métadonnées lorsque les épisodes sont importés ou que les sites sont actualisés",
|
||||
"MonitoringOptionsHelpText": "Quels albums doivent être surveillés après l'ajout de l'artiste (ajustement unique)",
|
||||
"EnableAutomaticAddHelpText": "Ajoutez des artistes/albums à Lidarr lorsque les synchronisations sont effectuées via l'interface utilisateur ou par Lidarr",
|
||||
"EnableAutomaticAddHelpText": "Ajoutez des artistes/albums à {appName} lorsque les synchronisations sont effectuées via l'interface utilisateur ou par {appName}",
|
||||
"IsInUseCantDeleteAMetadataProfileThatIsAttachedToAnAuthorOrImportList": "Impossible de supprimer un profil de métadonnées associé à un artiste ou à une liste d'importation",
|
||||
"ListsSettingsSummary": "Importer des listes",
|
||||
"ProfilesSettingsSummary": "Profils de qualité, de langue, de délai et de release",
|
||||
"SkipRedownloadHelpText": "Empêche Lidarr d'essayer de télécharger des versions alternatives pour les éléments supprimés",
|
||||
"SkipRedownloadHelpText": "Empêche {appName} d'essayer de télécharger des versions alternatives pour les éléments supprimés",
|
||||
"CountAuthorsSelected": "{selectedCount} artiste(s) sélectionné(s)",
|
||||
"SearchForAllCutoffUnmetBooks": "Rechercher tous les albums de Cutoff Unmet",
|
||||
"WriteAudioTagsScrubHelp": "Supprimez les balises existantes des fichiers, en ne laissant que celles ajoutées par Lidarr.",
|
||||
"WriteAudioTagsScrubHelp": "Supprimez les balises existantes des fichiers, en ne laissant que celles ajoutées par {appName}.",
|
||||
"EndedAllBooksDownloaded": "Terminé (Toutes les pistes téléchargées)",
|
||||
"ForeignId": "ID étranger",
|
||||
"GoToAuthorListing": "Aller à la liste des artistes",
|
||||
@@ -914,7 +912,7 @@
|
||||
"WriteBookTagsHelpTextWarning": "La sélection de « Tous les fichiers » modifiera les fichiers existants lors de leur importation.",
|
||||
"IsInUseCantDeleteAQualityProfileThatIsAttachedToAnAuthorOrImportList": "Impossible de supprimer un profil de qualité associé à un artiste ou à une liste d'importation",
|
||||
"PathHelpText": "Dossier racine contenant votre bibliothèque musicale",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "Lidarr prend en charge plusieurs listes pour importer des albums et des artistes dans la base de données.",
|
||||
"ReadarrSupportsMultipleListsForImportingBooksAndAuthorsIntoTheDatabase": "{appName} prend en charge plusieurs listes pour importer des albums et des artistes dans la base de données.",
|
||||
"TotalBookCountBooksTotalBookFileCountBooksWithFilesInterp": "{0} pistes au total. {1} pistes avec fichiers.",
|
||||
"SearchForAllMissingBooks": "Rechercher tous les albums manquants",
|
||||
"ForeignIdHelpText": "L'identifiant Musicbrainz de l'artiste/album à exclure",
|
||||
@@ -925,7 +923,7 @@
|
||||
"ExtraFileExtensionsHelpText": "Liste de fichiers supplémentaires séparés par des virgules à importer (.nfo sera importé en tant que .nfo-orig)",
|
||||
"ExtraFileExtensionsHelpTextsExamples": "Exemples : '.sub, .nfo' ou 'sub,nfo'",
|
||||
"UseSSL": "Utiliser SSL",
|
||||
"DeleteSelected": "Supprimer sélectionnée",
|
||||
"DeleteSelected": "Supprimer la sélection",
|
||||
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Disposition du contenu",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Utiliser la disposition du contenu configurée par qBittorrent, la disposition originale du torrent ou toujours créer un sous-dossier (qBittorrent 4.3.2+)",
|
||||
@@ -976,7 +974,7 @@
|
||||
"EditAuthor": "Éditer l'auteur",
|
||||
"EditBook": "Modifier le livre",
|
||||
"EditList": "Modifier la liste",
|
||||
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (Total: {totalBookCount}, Fichiers : {bookFileCount})",
|
||||
"AuthorProgressBarText": "{availableBookCount} / {bookCount} (Total : {totalBookCount}, Fichiers : {bookFileCount})",
|
||||
"BookProgressBarText": "{bookCount} / {totalBookCount} (Fichiers : {bookFileCount})",
|
||||
"CustomFormatsSettingsTriggerInfo": "Un format personnalisé sera appliqué à une version ou à un fichier lorsqu'il correspond à au moins un de chacun des différents types de conditions choisis.",
|
||||
"IndexerFlags": "Drapeaux de l'indexeur",
|
||||
@@ -988,5 +986,136 @@
|
||||
"NotificationsSettingsUpdateLibrary": "Mettre à jour la bibliothèque",
|
||||
"NotificationsSettingsUpdateMapPathsFrom": "Mapper les chemins depuis",
|
||||
"NotificationsSettingsUseSslHelpText": "Se connecter à {serviceName} en HTTPS plutôt qu'en HTTP",
|
||||
"NotificationsSettingsUpdateMapPathsTo": "Mapper les chemins vers"
|
||||
"NotificationsSettingsUpdateMapPathsTo": "Mapper les chemins vers",
|
||||
"InteractiveSearchModalHeader": "Recherche interactive",
|
||||
"FailedLoadingSearchResults": "Échec du chargement des résultats de recherche, veuillez réessayer.",
|
||||
"MonitoredAuthorIsMonitored": "Artiste non surveillé",
|
||||
"IndexerSettingsSeedRatio": "Ratio d'envoi",
|
||||
"IndexerSettingsSeedRatioHelpText": "Le ratio qu'un torrent doit atteindre avant de s'arrêter, vide utilise la valeur par défaut du client de téléchargement. Le ratio doit être d'au moins 1.0 et suivre les règles des indexeurs",
|
||||
"IndexerSettingsSeedTime": "Temps d'envoi",
|
||||
"IndexerSettingsSeedTimeHelpText": "Durée pendant laquelle un torrent doit être envoyé avant de s'arrêter, vide utilise la valeur par défaut du client de téléchargement",
|
||||
"WhySearchesCouldBeFailing": "Cliquez ici pour savoir pourquoi les recherches pourraient échouer",
|
||||
"ApiKey": "Clé API",
|
||||
"AuthBasic": "Basique (fenêtre surgissante du navigateur)",
|
||||
"AuthForm": "Formulaire (page de connexion)",
|
||||
"AuthenticationMethod": "Méthode d'authentification",
|
||||
"AuthenticationMethodHelpTextWarning": "Veuillez choisir une méthode d'authentification valide",
|
||||
"AuthenticationRequired": "Authentification requise",
|
||||
"AuthenticationRequiredHelpText": "Modifier les demandes pour lesquelles l'authentification est requise. Ne rien modifier si vous n'en comprenez pas les risques.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmer le nouveau mot de passe",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Saisir un nouveau mot de passe",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Saisir un nouveau nom d'utilisateur",
|
||||
"AuthenticationRequiredWarning": "Pour empêcher l'accès à distance sans authentification, {appName} exige désormais que l'authentification soit activée. Vous pouvez éventuellement désactiver l'authentification pour les adresses locales.",
|
||||
"DisabledForLocalAddresses": "Désactivée pour les adresses IP locales",
|
||||
"Enabled": "Activé",
|
||||
"External": "Externe",
|
||||
"PasswordConfirmation": "Confirmation du mot de passe",
|
||||
"TagsSettingsSummary": "Gérer les étiquettes d'auteur, de profil, de restriction et de notification",
|
||||
"RefreshAuthor": "Actualiser l'auteur",
|
||||
"RenameBooks": "Renommer les livres",
|
||||
"ShouldMonitorExisting": "Surveiller les livres existants",
|
||||
"LatestBook": "Dernier livre",
|
||||
"WriteTagsNew": "Pour les nouveaux téléchargements uniquement",
|
||||
"FirstBook": "Premier livre",
|
||||
"RefreshInformation": "Actualiser les informations",
|
||||
"ISBN": "ISBN",
|
||||
"EmbedMetadataInBookFiles": "Intégrer des métadonnées dans les fichiers des livres",
|
||||
"IgnoredMetaHelpText": "Les livres seront ignorés s'ils contiennent un ou plusieurs termes (insensible à la casse)",
|
||||
"NewBooks": "Nouveaux livres",
|
||||
"NoName": "Ne pas afficher le nom",
|
||||
"HideBooks": "Masquer les livres",
|
||||
"IsExpandedHideBooks": "Masquer les livres",
|
||||
"TooManyBooks": "Il vous manque ou il y a trop de livres ? Modifier ou créer un nouveau",
|
||||
"FileDetails": "Détails du fichier",
|
||||
"LogSQL": "Log SQL",
|
||||
"EditionsHelpText": "Changer d'édition pour ce livre",
|
||||
"ExistingItems": "Éléments existants",
|
||||
"SendMetadataToCalibre": "Envoyer des métadonnées à Calibre",
|
||||
"MonitorNewItems": "Surveiller les nouveaux livres",
|
||||
"NameFirstLast": "Prénom Nom",
|
||||
"UsernameHelpText": "Nom d'utilisateur du serveur de contenu Calibre",
|
||||
"SearchBook": "Rechercher un livre",
|
||||
"HostHelpText": "Hôte du serveur de contenu Calibre",
|
||||
"MonitorAuthor": "Surveiller l'auteur",
|
||||
"MonitoredHelpText": "Readarr recherchera et téléchargera le livre",
|
||||
"NETCore": ".NET Core",
|
||||
"PasswordHelpText": "Mot de passe du serveur de contenu Calibre",
|
||||
"ExistingBooks": "Livres existants",
|
||||
"SelectEdition": "Sélectionnez une édition",
|
||||
"FilterPlaceHolder": "Filtrer par livre",
|
||||
"OnAuthorAdded": "Lors de l'ajout d'un auteur",
|
||||
"OnAuthorAddedHelpText": "Lors de l'ajout d'un auteur",
|
||||
"EmbedMetadataHelpText": "Dites à Calibre d'écrire les métadonnées dans le fichier du livre actuel",
|
||||
"UrlBaseHelpText": "Ajoute un préfixe à l'URL de Calibre, par exemple http://[host]:[port]/[urlBase]",
|
||||
"HasMonitoredBooksNoMonitoredBooksForThisAuthor": "Aucun livre surveillé pour cet auteur",
|
||||
"IsCalibreLibraryHelpText": "Utiliser le serveur de contenu Calibre pour manipuler la bibliothèque",
|
||||
"IsExpandedShowBooks": "Afficher les livres",
|
||||
"LibraryHelpText": "Nom de la bibliothèque du serveur de contenu Calibre. Laissez vide par défaut.",
|
||||
"MetadataSourceHelpText": "Source de métadonnées alternative (laisser vide par défaut)",
|
||||
"MissingBooksAuthorNotMonitored": "Livres manquants (auteur non surveillé)",
|
||||
"NoTagsHaveBeenAddedYet": "Aucun tag n'a été ajouté pour l'instant. Ajoutez des tag s pour lier les auteurs avec des profils de retard, des restrictions ou des notifications. Cliquez sur {0} pour en savoir plus sur les tags dans Readarr.",
|
||||
"PortHelpText": "Port du serveur de contenu Calibre",
|
||||
"SelectBook": "Sélectionnez un livre",
|
||||
"SelectedCountAuthorsSelectedInterp": "{0} Auteur(s) sélectionné(s)",
|
||||
"UpdateCovers": "Mettre à jour les couvertures",
|
||||
"UpdateCoversHelpText": "Définir les couvertures de livres dans Calibre pour qu'elles correspondent à celles de Readarr",
|
||||
"MinimumPages": "Pages minimum",
|
||||
"FilterAuthor": "Filtrer par auteur",
|
||||
"FutureBooks": "Livres futurs",
|
||||
"IgnoreDeletedBooks": "Ignorer les livres supprimés",
|
||||
"InteractiveSearchModalHeaderBookAuthor": "Recherche interactive - {bookTitle} de {authorName}",
|
||||
"LoadingEditionsFailed": "Le chargement des éditions a échoué",
|
||||
"MassBookSearch": "Recherche de livres de masse",
|
||||
"MassBookSearchWarning": "Voulez-vous vraiment effectuer une recherche groupée de {0} livres ?",
|
||||
"MetadataProviderSource": "Source du fournisseur de métadonnées",
|
||||
"MinPagesHelpText": "Ignorer les livres avec moins de pages que cela",
|
||||
"MinPopularityHelpText": "La popularité est la note moyenne * le nombre de votes",
|
||||
"MissingBooks": "Livres manquants",
|
||||
"MissingBooksAuthorMonitored": "Livres manquants (auteur surveillé)",
|
||||
"MonitorBook": "Surveiller le livre",
|
||||
"MonitorExistingBooks": "Surveiller les livres existants",
|
||||
"MonitorNewBooks": "Surveiller les nouveaux livres",
|
||||
"NameLastFirst": "Nom, Prénom",
|
||||
"NameStyle": "Style du nom de l'auteur",
|
||||
"OnAuthorDelete": "Lors de la suppression d'un auteur",
|
||||
"OnAuthorDeleteHelpText": "Lors de la suppression d'un auteur",
|
||||
"OnBookDelete": "Lors de la suppression d'un livre",
|
||||
"OnBookDeleteHelpText": "Lors de la suppression d'un livre",
|
||||
"OnBookRetagHelpText": "Lors du réétiquetage d'un livre",
|
||||
"OnBookTagUpdate": "Lors de la mise à jour des étiquettes d'un livre",
|
||||
"OutputFormatHelpText": "Demandez éventuellement à Calibre de convertir vers d'autres formats lors de l'importation. Liste séparée par des virgules.",
|
||||
"RefreshBook": "Actualiser le livre",
|
||||
"SeriesNumber": "Numéro de série",
|
||||
"SeriesTotal": "Séries ({0})",
|
||||
"SetReadarrTags": "Définir les étiquettes Readarr",
|
||||
"ShouldMonitorHelpText": "Surveiller les nouveaux auteurs et livres ajoutés à partir de cette liste",
|
||||
"ShowBookCount": "Afficher le nombre de livres",
|
||||
"ShowLastBook": "Afficher le dernier livre",
|
||||
"SkipBooksWithMissingReleaseDate": "Ignorer les livres dont la date de sortie est manquante",
|
||||
"SkipBooksWithNoISBNOrASIN": "Ignorer les livres sans ISBN ou ASIN",
|
||||
"TagsHelpText": "S'applique aux auteurs avec au moins une étiquette correspondante. Laisser vide pour appliquer à tous les auteurs",
|
||||
"TheFollowingFilesWillBeDeleted": "Les fichiers suivants seront supprimés :",
|
||||
"UseSslHelpText": "Utilisez SSL pour vous connecter au serveur de contenu Calibre",
|
||||
"WriteTagsAll": "Tous les fichiers ; importation initiale uniquement",
|
||||
"WriteTagsSync": "Tous les fichiers ; rester synchronisé avec Goodreads",
|
||||
"Iso639-3": "Codes de langage ISO 639-3, ou 'null', séparés par des virgules",
|
||||
"SpecificBook": "Livre spécifique",
|
||||
"SkipSecondarySeriesBooks": "Sauter les livres de séries secondaires",
|
||||
"SkipPartBooksAndSets": "Livres et coffrets \"Skip part\"",
|
||||
"AptUpdater": "Utiliser apt pour installer la mise à jour",
|
||||
"BuiltIn": "Intégré",
|
||||
"CurrentlyInstalled": "Actuellement installé",
|
||||
"DockerUpdater": "Mettez à jour le conteneur Docker pour recevoir la mise à jour",
|
||||
"ExternalUpdater": "{appName} est configuré pour utiliser un mécanisme de mise à jour externe",
|
||||
"FailedToFetchSettings": "Échec de la récupération des paramètres",
|
||||
"FailedToFetchUpdates": "Échec de la récupération des mises à jour",
|
||||
"Install": "Installer",
|
||||
"InstallLatest": "Installer la dernière",
|
||||
"InstallMajorVersionUpdate": "Installer la mise à jour",
|
||||
"InstallMajorVersionUpdateMessageLink": "Veuillez consulter [{domain}]({url}) pour plus d'informations.",
|
||||
"OnLatestVersion": "La dernière version de {appName} est déjà installée",
|
||||
"PreviouslyInstalled": "Installé précédemment",
|
||||
"Script": "Script",
|
||||
"UpdateAppDirectlyLoadError": "Impossible de mettre à jour directement {appName},",
|
||||
"InstallMajorVersionUpdateMessage": "Cette mise à jour installera une nouvelle version majeure et pourrait ne pas être compatible avec votre système. Êtes-vous sûr de vouloir installer cette mise à jour ?"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user