mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-03-05 13:40:08 -05:00
Compare commits
22 Commits
v1.8.2.386
...
v1.8.3.388
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba2aab6bb3 | ||
|
|
5c8ae82f11 | ||
|
|
bcbeac1e83 | ||
|
|
b36d793d85 | ||
|
|
b0162ccc5b | ||
|
|
f0892eb4b8 | ||
|
|
e456979467 | ||
|
|
66ca47b615 | ||
|
|
2b7771bfe0 | ||
|
|
955bc472a1 | ||
|
|
e024bba6b6 | ||
|
|
aeb3b7d8b5 | ||
|
|
a7b25b8b93 | ||
|
|
130257fdd4 | ||
|
|
b618f23bc0 | ||
|
|
a758161e31 | ||
|
|
27928103c5 | ||
|
|
d5b3961e8a | ||
|
|
307adf053e | ||
|
|
31261f66ad | ||
|
|
5dbb59dfaa | ||
|
|
25c1803d0e |
@@ -29,7 +29,6 @@ Prowlarr is an indexer manager/proxy built on the popular \*arr .net/reactjs bas
|
||||
|
||||
[](https://wiki.servarr.com/prowlarr)
|
||||
[](https://prowlarr.com/discord)
|
||||
[](https://www.reddit.com/r/Prowlarr)
|
||||
|
||||
Note: GitHub Issues are for Bugs and Feature Requests Only
|
||||
|
||||
|
||||
@@ -9,15 +9,15 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '1.8.2'
|
||||
majorVersion: '1.8.3'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.408'
|
||||
nodeVersion: '16.X'
|
||||
innoVersion: '6.2.0'
|
||||
nodeVersion: '16.x'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
macImage: 'macOS-11'
|
||||
@@ -27,6 +27,10 @@ trigger:
|
||||
include:
|
||||
- develop
|
||||
- master
|
||||
paths:
|
||||
exclude:
|
||||
- .github
|
||||
- src/Prowlarr.Api.*/openapi.json
|
||||
|
||||
pr:
|
||||
branches:
|
||||
@@ -34,8 +38,9 @@ pr:
|
||||
- develop
|
||||
paths:
|
||||
exclude:
|
||||
- .github
|
||||
- src/NzbDrone.Core/Localization/Core
|
||||
- src/Prowlarr.API.*/openapi.json
|
||||
- src/Prowlarr.Api.*/openapi.json
|
||||
|
||||
stages:
|
||||
- stage: Setup
|
||||
@@ -349,7 +354,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create FreeBSD Core Core tar
|
||||
displayName: Create freebsd-x64 tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).freebsd-core-x64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -528,8 +533,8 @@ stages:
|
||||
testRunTitle: '$(testName) Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- job: Unit_LinuxCore_Postgres
|
||||
displayName: Unit Native LinuxCore with Postgres Database
|
||||
- job: Unit_LinuxCore_Postgres14
|
||||
displayName: Unit Native LinuxCore with Postgres14 Database
|
||||
dependsOn: Prepare
|
||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||
variables:
|
||||
@@ -578,7 +583,60 @@ stages:
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'LinuxCore Postgres Unit Tests'
|
||||
testRunTitle: 'LinuxCore Postgres14 Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- job: Unit_LinuxCore_Postgres15
|
||||
displayName: Unit Native LinuxCore with Postgres15 Database
|
||||
dependsOn: Prepare
|
||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||
variables:
|
||||
pattern: 'Prowlarr.*.linux-core-x64.tar.gz'
|
||||
artifactName: linux-x64-tests
|
||||
Prowlarr__Postgres__Host: 'localhost'
|
||||
Prowlarr__Postgres__Port: '5432'
|
||||
Prowlarr__Postgres__User: 'prowlarr'
|
||||
Prowlarr__Postgres__Password: 'prowlarr'
|
||||
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
|
||||
timeoutInMinutes: 10
|
||||
|
||||
steps:
|
||||
- task: UseDotNet@2
|
||||
displayName: 'Install .net core'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: $(artifactName)
|
||||
targetPath: $(testsFolder)
|
||||
- bash: find ${TESTSFOLDER} -name "Prowlarr.Test.Dummy" -exec chmod a+x {} \;
|
||||
displayName: Make Test Dummy Executable
|
||||
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
|
||||
- bash: |
|
||||
docker run -d --name=postgres15 \
|
||||
-e POSTGRES_PASSWORD=prowlarr \
|
||||
-e POSTGRES_USER=prowlarr \
|
||||
-p 5432:5432/tcp \
|
||||
-v /usr/share/zoneinfo/America/Chicago:/etc/localtime:ro \
|
||||
postgres:15
|
||||
displayName: Start postgres
|
||||
- bash: |
|
||||
chmod a+x ${TESTSFOLDER}/test.sh
|
||||
ls -lR ${TESTSFOLDER}
|
||||
${TESTSFOLDER}/test.sh Linux Unit Test
|
||||
displayName: Run Tests
|
||||
- task: PublishTestResults@2
|
||||
displayName: Publish Test Results
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'LinuxCore Postgres15 Unit Tests'
|
||||
failTaskOnFailedTests: true
|
||||
|
||||
- stage: Integration
|
||||
@@ -664,8 +722,8 @@ stages:
|
||||
failTaskOnFailedTests: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
- job: Integration_LinuxCore_Postgres
|
||||
displayName: Integration Native LinuxCore with Postgres Database
|
||||
- job: Integration_LinuxCore_Postgres14
|
||||
displayName: Integration Native LinuxCore with Postgres14 Database
|
||||
dependsOn: Prepare
|
||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||
variables:
|
||||
@@ -722,7 +780,70 @@ stages:
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'Integration LinuxCore Postgres Database Integration Tests'
|
||||
testRunTitle: 'Integration LinuxCore Postgres14 Database Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
|
||||
- job: Integration_LinuxCore_Postgres15
|
||||
displayName: Integration Native LinuxCore with Postgres Database
|
||||
dependsOn: Prepare
|
||||
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
|
||||
variables:
|
||||
pattern: 'Prowlarr.*.linux-core-x64.tar.gz'
|
||||
Prowlarr__Postgres__Host: 'localhost'
|
||||
Prowlarr__Postgres__Port: '5432'
|
||||
Prowlarr__Postgres__User: 'prowlarr'
|
||||
Prowlarr__Postgres__Password: 'prowlarr'
|
||||
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
|
||||
steps:
|
||||
- task: UseDotNet@2
|
||||
displayName: 'Install .net core'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: 'linux-x64-tests'
|
||||
targetPath: $(testsFolder)
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Build Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: Packages
|
||||
itemPattern: '**/$(pattern)'
|
||||
targetPath: $(Build.ArtifactStagingDirectory)
|
||||
- task: ExtractFiles@1
|
||||
inputs:
|
||||
archiveFilePatterns: '$(Build.ArtifactStagingDirectory)/**/$(pattern)'
|
||||
destinationFolder: '$(Build.ArtifactStagingDirectory)/bin'
|
||||
displayName: Extract Package
|
||||
- bash: |
|
||||
mkdir -p ./bin/
|
||||
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Prowlarr/. ./bin/
|
||||
displayName: Move Package Contents
|
||||
- bash: |
|
||||
docker run -d --name=postgres15 \
|
||||
-e POSTGRES_PASSWORD=prowlarr \
|
||||
-e POSTGRES_USER=prowlarr \
|
||||
-p 5432:5432/tcp \
|
||||
-v /usr/share/zoneinfo/America/Chicago:/etc/localtime:ro \
|
||||
postgres:15
|
||||
displayName: Start postgres
|
||||
- bash: |
|
||||
chmod a+x ${TESTSFOLDER}/test.sh
|
||||
${TESTSFOLDER}/test.sh Linux Integration Test
|
||||
displayName: Run Integration Tests
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFormat: 'NUnit'
|
||||
testResultsFiles: '**/TestResult.xml'
|
||||
testRunTitle: 'Integration LinuxCore Postgres15 Database Integration Tests'
|
||||
failTaskOnFailedTests: true
|
||||
displayName: Publish Test Results
|
||||
|
||||
@@ -1005,7 +1126,7 @@ stages:
|
||||
git add .
|
||||
if git status | grep -q modified
|
||||
then
|
||||
git commit -am 'Automated API Docs update [skip ci]'
|
||||
git commit -am 'Automated API Docs update'
|
||||
git push -f --set-upstream origin api-docs
|
||||
curl -X POST -H "Authorization: token ${GITHUBTOKEN}" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/prowlarr/prowlarr/pulls -d '{"head":"api-docs","base":"develop","title":"Update API docs"}'
|
||||
else
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
.version {
|
||||
margin: 0 3px;
|
||||
font-weight: bold;
|
||||
font-family: var(--defaultFontFamily);
|
||||
}
|
||||
|
||||
.maintenance {
|
||||
|
||||
@@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Button from 'Components/Link/Button';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
|
||||
import ModalBody from 'Components/Modal/ModalBody';
|
||||
import ModalContent from 'Components/Modal/ModalContent';
|
||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
@@ -64,12 +65,12 @@ function AppUpdatedModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Prowlarr Updated
|
||||
{translate('AppUpdated', { appName: 'Prowlarr' })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
<div>
|
||||
Version <span className={styles.version}>{version}</span> of Prowlarr has been installed, in order to get the latest changes you'll need to reload Prowlarr.
|
||||
<InlineMarkdown data={translate('AppUpdatedVersion', { appName: 'Prowlarr', version })} blockClassName={styles.version} />
|
||||
</div>
|
||||
|
||||
{
|
||||
@@ -77,16 +78,14 @@ function AppUpdatedModalContent(props) {
|
||||
<div>
|
||||
{
|
||||
!update.changes &&
|
||||
<div className={styles.maintenance}>
|
||||
{translate('MaintenanceRelease')}
|
||||
</div>
|
||||
<div className={styles.maintenance}>{translate('MaintenanceRelease')}</div>
|
||||
}
|
||||
|
||||
{
|
||||
!!update.changes &&
|
||||
<div>
|
||||
<div className={styles.changes}>
|
||||
What's new?
|
||||
{translate('WhatsNew')}
|
||||
</div>
|
||||
|
||||
<UpdateChanges
|
||||
@@ -113,14 +112,14 @@ function AppUpdatedModalContent(props) {
|
||||
<Button
|
||||
onPress={onSeeChangesPress}
|
||||
>
|
||||
Recent Changes
|
||||
{translate('RecentChanges')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
kind={kinds.PRIMARY}
|
||||
onPress={onModalClose}
|
||||
>
|
||||
Reload
|
||||
{translate('Reload')}
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
||||
@@ -28,11 +28,11 @@ function ConnectionLostModal(props) {
|
||||
|
||||
<ModalBody>
|
||||
<div>
|
||||
{translate('ConnectionLostMessage')}
|
||||
{translate('ConnectionLostToBackend', { appName: 'Prowlarr' })}
|
||||
</div>
|
||||
|
||||
<div className={styles.automatic}>
|
||||
{translate('ConnectionLostAutomaticMessage')}
|
||||
{translate('ConnectionLostReconnect', { appName: 'Prowlarr' })}
|
||||
</div>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
|
||||
@@ -41,7 +41,7 @@ class NumberInput extends Component {
|
||||
componentDidUpdate(prevProps, prevState) {
|
||||
const { value } = this.props;
|
||||
|
||||
if (value !== prevProps.value && !this.state.isFocused) {
|
||||
if (!isNaN(value) && value !== prevProps.value && !this.state.isFocused) {
|
||||
this.setState({
|
||||
value: value == null ? '' : value.toString()
|
||||
});
|
||||
|
||||
@@ -97,6 +97,7 @@ class SpinnerErrorButton extends Component {
|
||||
|
||||
render() {
|
||||
const {
|
||||
kind,
|
||||
isSpinning,
|
||||
error,
|
||||
children,
|
||||
@@ -112,7 +113,7 @@ class SpinnerErrorButton extends Component {
|
||||
const showIcon = wasSuccessful || hasWarning || hasError;
|
||||
|
||||
let iconName = icons.CHECK;
|
||||
let iconKind = kinds.SUCCESS;
|
||||
let iconKind = kind === kinds.PRIMARY ? kinds.DEFAULT : kinds.SUCCESS;
|
||||
|
||||
if (hasWarning) {
|
||||
iconName = icons.WARNING;
|
||||
@@ -126,6 +127,7 @@ class SpinnerErrorButton extends Component {
|
||||
|
||||
return (
|
||||
<SpinnerButton
|
||||
kind={kind}
|
||||
isSpinning={isSpinning}
|
||||
{...otherProps}
|
||||
>
|
||||
@@ -154,6 +156,7 @@ class SpinnerErrorButton extends Component {
|
||||
}
|
||||
|
||||
SpinnerErrorButton.propTypes = {
|
||||
kind: PropTypes.oneOf(kinds.all),
|
||||
isSpinning: PropTypes.bool.isRequired,
|
||||
error: PropTypes.object,
|
||||
children: PropTypes.node.isRequired
|
||||
|
||||
@@ -10,27 +10,55 @@ class InlineMarkdown extends Component {
|
||||
render() {
|
||||
const {
|
||||
className,
|
||||
data
|
||||
data,
|
||||
blockClassName
|
||||
} = this.props;
|
||||
|
||||
// For now only replace links
|
||||
// For now only replace links or code blocks (not both)
|
||||
const markdownBlocks = [];
|
||||
if (data) {
|
||||
const regex = RegExp(/\[(.+?)\]\((.+?)\)/g);
|
||||
const linkRegex = RegExp(/\[(.+?)\]\((.+?)\)/g);
|
||||
|
||||
let endIndex = 0;
|
||||
let match = null;
|
||||
while ((match = regex.exec(data)) !== null) {
|
||||
|
||||
while ((match = linkRegex.exec(data)) !== null) {
|
||||
if (match.index > endIndex) {
|
||||
markdownBlocks.push(data.substr(endIndex, match.index - endIndex));
|
||||
}
|
||||
|
||||
markdownBlocks.push(<Link key={match.index} to={match[2]}>{match[1]}</Link>);
|
||||
endIndex = match.index + match[0].length;
|
||||
}
|
||||
|
||||
if (endIndex !== data.length) {
|
||||
if (endIndex !== data.length && markdownBlocks.length > 0) {
|
||||
markdownBlocks.push(data.substr(endIndex, data.length - endIndex));
|
||||
}
|
||||
|
||||
const codeRegex = RegExp(/(?=`)`(?!`)[^`]*(?=`)`(?!`)/g);
|
||||
|
||||
endIndex = 0;
|
||||
match = null;
|
||||
let matchedCode = false;
|
||||
|
||||
while ((match = codeRegex.exec(data)) !== null) {
|
||||
matchedCode = true;
|
||||
|
||||
if (match.index > endIndex) {
|
||||
markdownBlocks.push(data.substr(endIndex, match.index - endIndex));
|
||||
}
|
||||
|
||||
markdownBlocks.push(<code key={`code-${match.index}`} className={blockClassName ?? null}>{match[0].substring(1, match[0].length - 1)}</code>);
|
||||
endIndex = match.index + match[0].length;
|
||||
}
|
||||
|
||||
if (endIndex !== data.length && markdownBlocks.length > 0 && matchedCode) {
|
||||
markdownBlocks.push(data.substr(endIndex, data.length - endIndex));
|
||||
}
|
||||
|
||||
if (markdownBlocks.length === 0) {
|
||||
markdownBlocks.push(data);
|
||||
}
|
||||
}
|
||||
|
||||
return <span className={className}>{markdownBlocks}</span>;
|
||||
@@ -39,7 +67,8 @@ class InlineMarkdown extends Component {
|
||||
|
||||
InlineMarkdown.propTypes = {
|
||||
className: PropTypes.string,
|
||||
data: PropTypes.string
|
||||
data: PropTypes.string,
|
||||
blockClassName: PropTypes.string
|
||||
};
|
||||
|
||||
export default InlineMarkdown;
|
||||
|
||||
@@ -10,6 +10,7 @@ export const INFO = 'info';
|
||||
export const MOVIE_MONITORED_SELECT = 'movieMonitoredSelect';
|
||||
export const CATEGORY_SELECT = 'newznabCategorySelect';
|
||||
export const DOWNLOAD_CLIENT_SELECT = 'downloadClientSelect';
|
||||
export const FLOAT = 'float';
|
||||
export const NUMBER = 'number';
|
||||
export const OAUTH = 'oauth';
|
||||
export const PASSWORD = 'password';
|
||||
@@ -35,6 +36,7 @@ export const all = [
|
||||
INFO,
|
||||
MOVIE_MONITORED_SELECT,
|
||||
CATEGORY_SELECT,
|
||||
FLOAT,
|
||||
NUMBER,
|
||||
OAUTH,
|
||||
PASSWORD,
|
||||
|
||||
@@ -263,6 +263,7 @@ class AddIndexerModalContent extends Component {
|
||||
<SelectIndexerRowConnector
|
||||
key={`${indexer.implementation}-${indexer.name}`}
|
||||
implementation={indexer.implementation}
|
||||
implementationName={indexer.implementationName}
|
||||
{...indexer}
|
||||
onIndexerSelect={onIndexerSelect}
|
||||
/>
|
||||
@@ -288,7 +289,7 @@ class AddIndexerModalContent extends Component {
|
||||
<div className={styles.available}>
|
||||
{
|
||||
isPopulated ?
|
||||
translate('CountIndexersAvailable', [filteredIndexers.length]) :
|
||||
translate('CountIndexersAvailable', { count: filteredIndexers.length }) :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
|
||||
@@ -49,8 +49,8 @@ class AddIndexerModalContentConnector extends Component {
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onIndexerSelect = ({ implementation, name }) => {
|
||||
this.props.selectIndexerSchema({ implementation, name });
|
||||
onIndexerSelect = ({ implementation, implementationName, name }) => {
|
||||
this.props.selectIndexerSchema({ implementation, implementationName, name });
|
||||
this.props.onSelectIndexer();
|
||||
};
|
||||
|
||||
|
||||
@@ -10,12 +10,14 @@ class AddIndexerPresetMenuItem extends Component {
|
||||
onPress = () => {
|
||||
const {
|
||||
name,
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
} = this.props;
|
||||
|
||||
this.props.onPress({
|
||||
name,
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
});
|
||||
};
|
||||
|
||||
@@ -26,6 +28,7 @@ class AddIndexerPresetMenuItem extends Component {
|
||||
const {
|
||||
name,
|
||||
implementation,
|
||||
implementationName,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
@@ -43,6 +46,7 @@ class AddIndexerPresetMenuItem extends Component {
|
||||
AddIndexerPresetMenuItem.propTypes = {
|
||||
name: PropTypes.string.isRequired,
|
||||
implementation: PropTypes.string.isRequired,
|
||||
implementationName: PropTypes.string.isRequired,
|
||||
onPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -17,10 +17,11 @@ class SelectIndexerRow extends Component {
|
||||
onPress = () => {
|
||||
const {
|
||||
implementation,
|
||||
implementationName,
|
||||
name
|
||||
} = this.props;
|
||||
|
||||
this.props.onIndexerSelect({ implementation, name });
|
||||
this.props.onIndexerSelect({ implementation, implementationName, name });
|
||||
};
|
||||
|
||||
//
|
||||
@@ -81,6 +82,7 @@ SelectIndexerRow.propTypes = {
|
||||
language: PropTypes.string.isRequired,
|
||||
description: PropTypes.string.isRequired,
|
||||
implementation: PropTypes.string.isRequired,
|
||||
implementationName: PropTypes.string.isRequired,
|
||||
onIndexerSelect: PropTypes.func.isRequired,
|
||||
isExistingIndexer: PropTypes.bool.isRequired
|
||||
};
|
||||
|
||||
@@ -37,7 +37,7 @@ function DeleteIndexerModalContent(props: DeleteIndexerModalContentProps) {
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
{translate('AreYouSureYouWantToDeleteIndexer', [name])}
|
||||
{translate('AreYouSureYouWantToDeleteIndexer', { name })}
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
|
||||
@@ -61,7 +61,7 @@ function EditIndexerModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? translate('EditIndexer') : translate('AddIndexer')} - ${indexerDisplayName}`}
|
||||
{id ? translate('EditIndexerImplementation', { implementationName: indexerDisplayName }) : translate('AddIndexerImplementation', { implementationName: indexerDisplayName })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -48,7 +48,9 @@ function DeleteIndexerModalContent(props: DeleteIndexerModalContentProps) {
|
||||
|
||||
<ModalBody>
|
||||
<div className={styles.message}>
|
||||
{translate('DeleteSelectedIndexersMessageText', [indexers.length])}
|
||||
{translate('DeleteSelectedIndexersMessageText', {
|
||||
count: indexers.length,
|
||||
})}
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
|
||||
@@ -257,7 +257,7 @@ function EditIndexerModalContent(props: EditIndexerModalContentProps) {
|
||||
|
||||
<ModalFooter className={styles.modalFooter}>
|
||||
<div className={styles.selected}>
|
||||
{translate('CountIndexersSelected', [selectedCount])}
|
||||
{translate('CountIndexersSelected', { count: selectedCount })}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -165,7 +165,7 @@ function IndexerIndexSelectFooter() {
|
||||
</div>
|
||||
|
||||
<div className={styles.selected}>
|
||||
{translate('CountIndexersSelected', [selectedCount])}
|
||||
{translate('CountIndexersSelected', { count: selectedCount })}
|
||||
</div>
|
||||
|
||||
<EditIndexerModal
|
||||
|
||||
@@ -191,10 +191,10 @@ class SearchFooter extends Component {
|
||||
icon = icons.SEARCH;
|
||||
}
|
||||
|
||||
let footerLabel = searchIndexerIds.length === 0 ? translate('SearchAllIndexers') : translate('SearchCountIndexers', [searchIndexerIds.length]);
|
||||
let footerLabel = searchIndexerIds.length === 0 ? translate('SearchAllIndexers') : translate('SearchCountIndexers', { count: searchIndexerIds.length });
|
||||
|
||||
if (isPopulated) {
|
||||
footerLabel = selectedCount === 0 ? translate('FoundCountReleases', [itemCount]) : translate('SelectedCountOfCountReleases', [selectedCount, itemCount]);
|
||||
footerLabel = selectedCount === 0 ? translate('FoundCountReleases', { itemCount }) : translate('SelectedCountOfCountReleases', { selectedCount, itemCount });
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -16,10 +16,11 @@ class AddApplicationItem extends Component {
|
||||
|
||||
onApplicationSelect = () => {
|
||||
const {
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
} = this.props;
|
||||
|
||||
this.props.onApplicationSelect({ implementation });
|
||||
this.props.onApplicationSelect({ implementation, implementationName });
|
||||
};
|
||||
|
||||
//
|
||||
@@ -77,6 +78,7 @@ class AddApplicationItem extends Component {
|
||||
key={preset.name}
|
||||
name={preset.name}
|
||||
implementation={implementation}
|
||||
implementationName={implementationName}
|
||||
onPress={onApplicationSelect}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -10,12 +10,14 @@ class AddApplicationPresetMenuItem extends Component {
|
||||
onPress = () => {
|
||||
const {
|
||||
name,
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
} = this.props;
|
||||
|
||||
this.props.onPress({
|
||||
name,
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
});
|
||||
};
|
||||
|
||||
@@ -26,6 +28,7 @@ class AddApplicationPresetMenuItem extends Component {
|
||||
const {
|
||||
name,
|
||||
implementation,
|
||||
implementationName,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
@@ -43,6 +46,7 @@ class AddApplicationPresetMenuItem extends Component {
|
||||
AddApplicationPresetMenuItem.propTypes = {
|
||||
name: PropTypes.string.isRequired,
|
||||
implementation: PropTypes.string.isRequired,
|
||||
implementationName: PropTypes.string.isRequired,
|
||||
onPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ class Application extends Component {
|
||||
isOpen={this.state.isDeleteApplicationModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteApplication')}
|
||||
message={translate('DeleteApplicationMessageText', [name])}
|
||||
message={translate('DeleteApplicationMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeleteApplication}
|
||||
onCancel={this.onDeleteApplicationModalClose}
|
||||
|
||||
@@ -71,7 +71,7 @@ function EditApplicationModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? translate('Edit') : translate('Add')} ${translate('Application')} - ${implementationName}`}
|
||||
{id ? translate('EditApplicationImplementation', { implementationName }) : translate('AddApplicationImplementation', { implementationName })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -114,7 +114,7 @@ function ManageApplicationsEditModalContent(
|
||||
|
||||
<ModalFooter className={styles.modalFooter}>
|
||||
<div className={styles.selected}>
|
||||
{translate('CountApplicationsSelected', [selectedCount])}
|
||||
{translate('CountApplicationsSelected', { count: selectedCount })}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -268,9 +268,9 @@ function ManageApplicationsModalContent(
|
||||
isOpen={isDeleteModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteSelectedApplications')}
|
||||
message={translate('DeleteSelectedApplicationsMessageText', [
|
||||
selectedIds.length,
|
||||
])}
|
||||
message={translate('DeleteSelectedApplicationsMessageText', {
|
||||
count: selectedIds.length,
|
||||
})}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={onConfirmDelete}
|
||||
onCancel={onDeleteModalClose}
|
||||
|
||||
@@ -35,7 +35,7 @@ function AddCategoryModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onCancelPress}>
|
||||
<ModalHeader>
|
||||
{`${id ? 'Edit' : 'Add'} Category`}
|
||||
{id ? translate('EditCategory') : translate('AddCategory')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -88,7 +88,7 @@ class Category extends Component {
|
||||
message={
|
||||
<div>
|
||||
<div>
|
||||
{translate('AreYouSureYouWantToDeleteCategory', [name])}
|
||||
{translate('AreYouSureYouWantToDeleteCategory')}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ class DownloadClient extends Component {
|
||||
isOpen={this.state.isDeleteDownloadClientModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteDownloadClient')}
|
||||
message={translate('DeleteDownloadClientMessageText', [name])}
|
||||
message={translate('DeleteDownloadClientMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeleteDownloadClient}
|
||||
onCancel={this.onDeleteDownloadClientModalClose}
|
||||
|
||||
@@ -84,7 +84,7 @@ class EditDownloadClientModalContent extends Component {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? translate('Edit') : translate('Add')} ${translate('DownloadClient')} - ${implementationName}`}
|
||||
{id ? translate('EditDownloadClientImplementation', { implementationName }) : translate('AddDownloadClientImplementation', { implementationName })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -129,7 +129,7 @@ function ManageDownloadClientsEditModalContent(
|
||||
|
||||
<ModalFooter className={styles.modalFooter}>
|
||||
<div className={styles.selected}>
|
||||
{translate('CountDownloadClientsSelected', [selectedCount])}
|
||||
{translate('CountDownloadClientsSelected', { count: selectedCount })}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -226,9 +226,9 @@ function ManageDownloadClientsModalContent(
|
||||
isOpen={isDeleteModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteSelectedDownloadClients')}
|
||||
message={translate('DeleteSelectedDownloadClientsMessageText', [
|
||||
selectedIds.length,
|
||||
])}
|
||||
message={translate('DeleteSelectedDownloadClientsMessageText', {
|
||||
count: selectedIds.length,
|
||||
})}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={onConfirmDelete}
|
||||
onCancel={onDeleteModalClose}
|
||||
|
||||
@@ -16,10 +16,11 @@ class AddIndexerProxyItem extends Component {
|
||||
|
||||
onIndexerProxySelect = () => {
|
||||
const {
|
||||
implementation
|
||||
implementation,
|
||||
implementationName
|
||||
} = this.props;
|
||||
|
||||
this.props.onIndexerProxySelect({ implementation });
|
||||
this.props.onIndexerProxySelect({ implementation, implementationName });
|
||||
};
|
||||
|
||||
//
|
||||
@@ -77,6 +78,7 @@ class AddIndexerProxyItem extends Component {
|
||||
key={preset.name}
|
||||
name={preset.name}
|
||||
implementation={implementation}
|
||||
implementationName={implementationName}
|
||||
onPress={onIndexerProxySelect}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -47,7 +47,7 @@ function EditIndexerProxyModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? 'Edit' : 'Add'} Proxy - ${implementationName}`}
|
||||
{id ? translate('EditIndexerProxyImplementation', { implementationName }) : translate('AddIndexerProxyImplementation', { implementationName })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -122,7 +122,7 @@ class IndexerProxy extends Component {
|
||||
isOpen={this.state.isDeleteIndexerProxyModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteIndexerProxy')}
|
||||
message={translate('DeleteIndexerProxyMessageText', [name])}
|
||||
message={translate('DeleteIndexerProxyMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeleteIndexerProxy}
|
||||
onCancel={this.onDeleteIndexerProxyModalClose}
|
||||
|
||||
@@ -28,7 +28,7 @@ class AddNotificationModalContent extends Component {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
Add Notification
|
||||
{translate('AddConnection')}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -48,7 +48,7 @@ function EditNotificationModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{`${id ? 'Edit' : 'Add'} Connection - ${implementationName}`}
|
||||
{id ? translate('EditConnectionImplementation', { implementationName }) : translate('AddConnectionImplementation', { implementationName })}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
|
||||
@@ -137,7 +137,7 @@ class Notification extends Component {
|
||||
isOpen={this.state.isDeleteNotificationModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteNotification')}
|
||||
message={translate('DeleteNotificationMessageText', [name])}
|
||||
message={translate('DeleteNotificationMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeleteNotification}
|
||||
onCancel={this.onDeleteNotificationModalClose}
|
||||
|
||||
@@ -130,7 +130,7 @@ class AppProfile extends Component {
|
||||
isOpen={this.state.isDeleteAppProfileModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteAppProfile')}
|
||||
message={translate('AppProfileDeleteConfirm', [name])}
|
||||
message={translate('DeleteAppProfileMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
isSpinning={isDeleting}
|
||||
onConfirm={this.onConfirmDeleteAppProfile}
|
||||
|
||||
@@ -137,7 +137,7 @@ class Tag extends Component {
|
||||
isOpen={isDeleteTagModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteTag')}
|
||||
message={translate('DeleteTagMessageText', [label])}
|
||||
message={translate('DeleteTagMessageText', { label })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeleteTag}
|
||||
onCancel={this.onDeleteTagModalClose}
|
||||
|
||||
@@ -147,7 +147,7 @@ class UISettings extends Component {
|
||||
<FormInputGroup
|
||||
type={inputTypes.SELECT}
|
||||
name="theme"
|
||||
helpText={translate('ThemeHelpText', ['Theme.Park'])}
|
||||
helpText={translate('ThemeHelpText', { inspiredBy: 'Theme.Park' })}
|
||||
values={themeOptions}
|
||||
onChange={onInputChange}
|
||||
{...settings.theme}
|
||||
|
||||
@@ -184,6 +184,8 @@ export const reducers = createHandleActions({
|
||||
|
||||
[SELECT_INDEXER_SCHEMA]: (state, { payload }) => {
|
||||
return selectSchema(state, payload, (selectedSchema) => {
|
||||
selectedSchema.name = payload.name ?? payload.implementationName;
|
||||
selectedSchema.implementationName = payload.implementationName;
|
||||
selectedSchema.enable = selectedSchema.supportsRss;
|
||||
|
||||
return selectedSchema;
|
||||
|
||||
@@ -138,7 +138,7 @@ class BackupRow extends Component {
|
||||
isOpen={isConfirmDeleteModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('DeleteBackup')}
|
||||
message={translate('DeleteBackupMessageText', [name])}
|
||||
message={translate('DeleteBackupMessageText', { name })}
|
||||
confirmLabel={translate('Delete')}
|
||||
onConfirm={this.onConfirmDeletePress}
|
||||
onCancel={this.onConfirmDeleteModalClose}
|
||||
|
||||
@@ -33,6 +33,14 @@ function getInternalLink(source) {
|
||||
to="/settings/downloadclients"
|
||||
/>
|
||||
);
|
||||
case 'NotificationStatusCheck':
|
||||
return (
|
||||
<IconButton
|
||||
name={icons.SETTINGS}
|
||||
title={translate('Settings')}
|
||||
to="/settings/connect"
|
||||
/>
|
||||
);
|
||||
case 'IndexerRssCheck':
|
||||
case 'IndexerSearchCheck':
|
||||
case 'IndexerStatusCheck':
|
||||
|
||||
@@ -114,7 +114,7 @@ class Updates extends Component {
|
||||
/>
|
||||
|
||||
<div className={styles.message}>
|
||||
{translate('TheLatestVersionIsAlreadyInstalled', ['Prowlarr'])}
|
||||
{translate('TheLatestVersionIsAlreadyInstalled', { appName: 'Prowlarr' })}
|
||||
</div>
|
||||
|
||||
{
|
||||
|
||||
@@ -25,14 +25,19 @@ export async function fetchTranslations(): Promise<boolean> {
|
||||
|
||||
export default function translate(
|
||||
key: string,
|
||||
args?: (string | number | boolean)[]
|
||||
tokens?: Record<string, string | number | boolean>
|
||||
) {
|
||||
const translation = translations[key] || key;
|
||||
|
||||
if (args) {
|
||||
return translation.replace(/\{(\d+)\}/g, (match, index) => {
|
||||
return String(args[index]) ?? match;
|
||||
if (tokens) {
|
||||
// Fallback to the old behaviour for translations not yet updated to use named tokens
|
||||
Object.values(tokens).forEach((value, index) => {
|
||||
tokens[index] = value;
|
||||
});
|
||||
|
||||
return translation.replace(/\{([a-z0-9]+?)\}/gi, (match, tokenMatch) =>
|
||||
String(tokens[tokenMatch] ?? match)
|
||||
);
|
||||
}
|
||||
|
||||
return translation;
|
||||
|
||||
@@ -39,6 +39,10 @@ namespace NzbDrone.Automation.Test.PageModel
|
||||
var element = d.FindElement(By.ClassName("followingBalls"));
|
||||
return !element.Displayed;
|
||||
}
|
||||
catch (StaleElementReferenceException)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
catch (NoSuchElementException)
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -162,6 +162,7 @@ namespace NzbDrone.Common.Disk
|
||||
|
||||
return Directory.EnumerateFiles(path, "*", new EnumerationOptions
|
||||
{
|
||||
AttributesToSkip = FileAttributes.System,
|
||||
RecurseSubdirectories = recursive,
|
||||
IgnoreInaccessible = true
|
||||
});
|
||||
@@ -528,6 +529,7 @@ namespace NzbDrone.Common.Disk
|
||||
|
||||
return di.EnumerateFiles("*", new EnumerationOptions
|
||||
{
|
||||
AttributesToSkip = FileAttributes.System,
|
||||
RecurseSubdirectories = recursive,
|
||||
IgnoreInaccessible = true
|
||||
}).ToList();
|
||||
|
||||
@@ -78,8 +78,8 @@ namespace NzbDrone.Common.EnvironmentInfo
|
||||
}
|
||||
|
||||
if (IsLinux &&
|
||||
((File.Exists("/proc/1/cgroup") && File.ReadAllText("/proc/1/cgroup").Contains("/docker/")) ||
|
||||
(File.Exists("/proc/1/mountinfo") && File.ReadAllText("/proc/1/mountinfo").Contains("/docker/"))))
|
||||
(File.Exists("/.dockerenv") ||
|
||||
(File.Exists("/proc/1/cgroup") && File.ReadAllText("/proc/1/cgroup").Contains("/docker/"))))
|
||||
{
|
||||
IsDocker = true;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.2.0" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.0" />
|
||||
<PackageReference Include="Npgsql" Version="6.0.9" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.4" />
|
||||
<PackageReference Include="Sentry" Version="3.29.1" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.HealthCheck.Checks;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.HealthCheck.Checks
|
||||
{
|
||||
[TestFixture]
|
||||
public class NotificationStatusCheckFixture : CoreTest<NotificationStatusCheck>
|
||||
{
|
||||
private List<INotification> _notifications = new List<INotification>();
|
||||
private List<NotificationStatus> _blockedNotifications = new List<NotificationStatus>();
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
Mocker.GetMock<INotificationFactory>()
|
||||
.Setup(v => v.GetAvailableProviders())
|
||||
.Returns(_notifications);
|
||||
|
||||
Mocker.GetMock<INotificationStatusService>()
|
||||
.Setup(v => v.GetBlockedProviders())
|
||||
.Returns(_blockedNotifications);
|
||||
|
||||
Mocker.GetMock<ILocalizationService>()
|
||||
.Setup(s => s.GetLocalizedString(It.IsAny<string>()))
|
||||
.Returns("Some Warning Message");
|
||||
}
|
||||
|
||||
private Mock<INotification> GivenNotification(int id, double backoffHours, double failureHours)
|
||||
{
|
||||
var mockNotification = new Mock<INotification>();
|
||||
mockNotification.SetupGet(s => s.Definition).Returns(new NotificationDefinition { Id = id });
|
||||
|
||||
_notifications.Add(mockNotification.Object);
|
||||
|
||||
if (backoffHours != 0.0)
|
||||
{
|
||||
_blockedNotifications.Add(new NotificationStatus
|
||||
{
|
||||
ProviderId = id,
|
||||
InitialFailure = DateTime.UtcNow.AddHours(-failureHours),
|
||||
MostRecentFailure = DateTime.UtcNow.AddHours(-0.1),
|
||||
EscalationLevel = 5,
|
||||
DisabledTill = DateTime.UtcNow.AddHours(backoffHours)
|
||||
});
|
||||
}
|
||||
|
||||
return mockNotification;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_return_error_when_no_notifications()
|
||||
{
|
||||
Subject.Check().ShouldBeOk();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_warning_if_notification_unavailable()
|
||||
{
|
||||
GivenNotification(1, 10.0, 24.0);
|
||||
GivenNotification(2, 0.0, 0.0);
|
||||
|
||||
Subject.Check().ShouldBeWarning();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_error_if_all_notifications_unavailable()
|
||||
{
|
||||
GivenNotification(1, 10.0, 24.0);
|
||||
|
||||
Subject.Check().ShouldBeError();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_return_warning_if_few_notifications_unavailable()
|
||||
{
|
||||
GivenNotification(1, 10.0, 24.0);
|
||||
GivenNotification(2, 10.0, 24.0);
|
||||
GivenNotification(3, 0.0, 0.0);
|
||||
|
||||
Subject.Check().ShouldBeWarning();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Housekeeping.Housekeepers;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using NzbDrone.Core.Notifications.Join;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
|
||||
{
|
||||
[TestFixture]
|
||||
public class CleanupOrphanedNotificationStatusFixture : DbTest<CleanupOrphanedNotificationStatus, NotificationStatus>
|
||||
{
|
||||
private NotificationDefinition _notification;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_notification = Builder<NotificationDefinition>.CreateNew()
|
||||
.With(s => s.Settings = new JoinSettings { })
|
||||
.BuildNew();
|
||||
}
|
||||
|
||||
private void GivenNotification()
|
||||
{
|
||||
Db.Insert(_notification);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_delete_orphaned_notificationstatus()
|
||||
{
|
||||
var status = Builder<NotificationStatus>.CreateNew()
|
||||
.With(h => h.ProviderId = _notification.Id)
|
||||
.BuildNew();
|
||||
Db.Insert(status);
|
||||
|
||||
Subject.Clean();
|
||||
AllStoredModels.Should().BeEmpty();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_delete_unorphaned_notificationstatus()
|
||||
{
|
||||
GivenNotification();
|
||||
|
||||
var status = Builder<NotificationStatus>.CreateNew()
|
||||
.With(h => h.ProviderId = _notification.Id)
|
||||
.BuildNew();
|
||||
Db.Insert(status);
|
||||
|
||||
Subject.Clean();
|
||||
AllStoredModels.Should().HaveCount(1);
|
||||
AllStoredModels.Should().Contain(h => h.ProviderId == _notification.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.NotificationTests
|
||||
{
|
||||
public class NotificationStatusServiceFixture : CoreTest<NotificationStatusService>
|
||||
{
|
||||
private DateTime _epoch;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_epoch = DateTime.UtcNow;
|
||||
|
||||
Mocker.GetMock<IRuntimeInfo>()
|
||||
.SetupGet(v => v.StartTime)
|
||||
.Returns(_epoch - TimeSpan.FromHours(1));
|
||||
}
|
||||
|
||||
private NotificationStatus WithStatus(NotificationStatus status)
|
||||
{
|
||||
Mocker.GetMock<INotificationStatusRepository>()
|
||||
.Setup(v => v.FindByProviderId(1))
|
||||
.Returns(status);
|
||||
|
||||
Mocker.GetMock<INotificationStatusRepository>()
|
||||
.Setup(v => v.All())
|
||||
.Returns(new[] { status });
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
private void VerifyUpdate()
|
||||
{
|
||||
Mocker.GetMock<INotificationStatusRepository>()
|
||||
.Verify(v => v.Upsert(It.IsAny<NotificationStatus>()), Times.Once());
|
||||
}
|
||||
|
||||
private void VerifyNoUpdate()
|
||||
{
|
||||
Mocker.GetMock<INotificationStatusRepository>()
|
||||
.Verify(v => v.Upsert(It.IsAny<NotificationStatus>()), Times.Never());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_consider_blocked_within_5_minutes_since_initial_failure()
|
||||
{
|
||||
WithStatus(new NotificationStatus
|
||||
{
|
||||
InitialFailure = _epoch - TimeSpan.FromMinutes(4),
|
||||
MostRecentFailure = _epoch - TimeSpan.FromSeconds(4),
|
||||
EscalationLevel = 3
|
||||
});
|
||||
|
||||
Subject.RecordFailure(1);
|
||||
|
||||
VerifyUpdate();
|
||||
|
||||
var status = Subject.GetBlockedProviders().FirstOrDefault();
|
||||
status.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_consider_blocked_after_5_minutes_since_initial_failure()
|
||||
{
|
||||
WithStatus(new NotificationStatus
|
||||
{
|
||||
InitialFailure = _epoch - TimeSpan.FromMinutes(6),
|
||||
MostRecentFailure = _epoch - TimeSpan.FromSeconds(120),
|
||||
EscalationLevel = 3
|
||||
});
|
||||
|
||||
Subject.RecordFailure(1);
|
||||
|
||||
VerifyUpdate();
|
||||
|
||||
var status = Subject.GetBlockedProviders().FirstOrDefault();
|
||||
status.Should().NotBeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_escalate_further_till_after_5_minutes_since_initial_failure()
|
||||
{
|
||||
var origStatus = WithStatus(new NotificationStatus
|
||||
{
|
||||
InitialFailure = _epoch - TimeSpan.FromMinutes(4),
|
||||
MostRecentFailure = _epoch - TimeSpan.FromSeconds(4),
|
||||
EscalationLevel = 3
|
||||
});
|
||||
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
|
||||
var status = Subject.GetBlockedProviders().FirstOrDefault();
|
||||
status.Should().BeNull();
|
||||
|
||||
origStatus.EscalationLevel.Should().Be(3);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_escalate_further_after_5_minutes_since_initial_failure()
|
||||
{
|
||||
WithStatus(new NotificationStatus
|
||||
{
|
||||
InitialFailure = _epoch - TimeSpan.FromMinutes(6),
|
||||
MostRecentFailure = _epoch - TimeSpan.FromSeconds(120),
|
||||
EscalationLevel = 3
|
||||
});
|
||||
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
|
||||
var status = Subject.GetBlockedProviders().FirstOrDefault();
|
||||
status.Should().NotBeNull();
|
||||
|
||||
status.EscalationLevel.Should().BeGreaterThan(3);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_escalate_beyond_3_hours()
|
||||
{
|
||||
WithStatus(new NotificationStatus
|
||||
{
|
||||
InitialFailure = _epoch - TimeSpan.FromMinutes(6),
|
||||
MostRecentFailure = _epoch - TimeSpan.FromSeconds(120),
|
||||
EscalationLevel = 3
|
||||
});
|
||||
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
Subject.RecordFailure(1);
|
||||
|
||||
var status = Subject.GetBlockedProviders().FirstOrDefault();
|
||||
status.Should().NotBeNull();
|
||||
status.DisabledTill.Should().HaveValue();
|
||||
status.DisabledTill.Should().NotBeAfter(_epoch + TimeSpan.FromHours(3.1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(037)]
|
||||
public class add_notification_status : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Create.TableForModel("NotificationStatus")
|
||||
.WithColumn("ProviderId").AsInt32().NotNullable().Unique()
|
||||
.WithColumn("InitialFailure").AsDateTimeOffset().Nullable()
|
||||
.WithColumn("MostRecentFailure").AsDateTimeOffset().Nullable()
|
||||
.WithColumn("EscalationLevel").AsInt32().NotNullable()
|
||||
.WithColumn("DisabledTill").AsDateTimeOffset().Nullable();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -91,10 +91,9 @@ namespace NzbDrone.Core.Datastore
|
||||
.Ignore(c => c.Message);
|
||||
|
||||
Mapper.Entity<IndexerStatus>("IndexerStatus").RegisterModel();
|
||||
|
||||
Mapper.Entity<DownloadClientStatus>("DownloadClientStatus").RegisterModel();
|
||||
|
||||
Mapper.Entity<ApplicationStatus>("ApplicationStatus").RegisterModel();
|
||||
Mapper.Entity<NotificationStatus>("NotificationStatus").RegisterModel();
|
||||
|
||||
Mapper.Entity<CustomFilter>("CustomFilters").RegisterModel();
|
||||
Mapper.Entity<UpdateHistory>("UpdateHistory").RegisterModel();
|
||||
|
||||
@@ -57,11 +57,11 @@ namespace NzbDrone.Core.Download
|
||||
|
||||
private IEnumerable<IDownloadClient> FilterBlockedClients(IEnumerable<IDownloadClient> clients)
|
||||
{
|
||||
var blockedIndexers = _downloadClientStatusService.GetBlockedProviders().ToDictionary(v => v.ProviderId, v => v);
|
||||
var blockedClients = _downloadClientStatusService.GetBlockedProviders().ToDictionary(v => v.ProviderId, v => v);
|
||||
|
||||
foreach (var client in clients)
|
||||
{
|
||||
if (blockedIndexers.TryGetValue(client.Definition.Id, out var downloadClientStatus))
|
||||
if (blockedClients.TryGetValue(client.Definition.Id, out var downloadClientStatus))
|
||||
{
|
||||
_logger.Debug("Temporarily ignoring download client {0} till {1} due to recent failures.", client.Definition.Name, downloadClientStatus.DisabledTill.Value.ToLocalTime());
|
||||
continue;
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Localization;
|
||||
using NzbDrone.Core.Notifications;
|
||||
using NzbDrone.Core.ThingiProvider.Events;
|
||||
|
||||
namespace NzbDrone.Core.HealthCheck.Checks
|
||||
{
|
||||
[CheckOn(typeof(ProviderUpdatedEvent<INotification>))]
|
||||
[CheckOn(typeof(ProviderDeletedEvent<INotification>))]
|
||||
[CheckOn(typeof(ProviderStatusChangedEvent<INotification>))]
|
||||
public class NotificationStatusCheck : HealthCheckBase
|
||||
{
|
||||
private readonly INotificationFactory _providerFactory;
|
||||
private readonly INotificationStatusService _providerStatusService;
|
||||
|
||||
public NotificationStatusCheck(INotificationFactory providerFactory, INotificationStatusService providerStatusService, ILocalizationService localizationService)
|
||||
: base(localizationService)
|
||||
{
|
||||
_providerFactory = providerFactory;
|
||||
_providerStatusService = providerStatusService;
|
||||
}
|
||||
|
||||
public override HealthCheck Check()
|
||||
{
|
||||
var enabledProviders = _providerFactory.GetAvailableProviders();
|
||||
var backOffProviders = enabledProviders.Join(_providerStatusService.GetBlockedProviders(),
|
||||
i => i.Definition.Id,
|
||||
s => s.ProviderId,
|
||||
(i, s) => new { Provider = i, Status = s })
|
||||
.ToList();
|
||||
|
||||
if (backOffProviders.Empty())
|
||||
{
|
||||
return new HealthCheck(GetType());
|
||||
}
|
||||
|
||||
if (backOffProviders.Count == enabledProviders.Count)
|
||||
{
|
||||
return new HealthCheck(GetType(),
|
||||
HealthCheckResult.Error,
|
||||
_localizationService.GetLocalizedString("NotificationStatusAllClientHealthCheckMessage"),
|
||||
"#notifications-are-unavailable-due-to-failures");
|
||||
}
|
||||
|
||||
return new HealthCheck(GetType(),
|
||||
HealthCheckResult.Warning,
|
||||
string.Format(_localizationService.GetLocalizedString("NotificationStatusSingleClientHealthCheckMessage"), string.Join(", ", backOffProviders.Select(v => v.Provider.Definition.Name))),
|
||||
"#notifications-are-unavailable-due-to-failures");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using Dapper;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.Housekeeping.Housekeepers
|
||||
{
|
||||
public class CleanupOrphanedNotificationStatus : IHousekeepingTask
|
||||
{
|
||||
private readonly IMainDatabase _database;
|
||||
|
||||
public CleanupOrphanedNotificationStatus(IMainDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
|
||||
public void Clean()
|
||||
{
|
||||
using var mapper = _database.OpenConnection();
|
||||
|
||||
mapper.Execute(@"DELETE FROM ""NotificationStatus""
|
||||
WHERE ""Id"" IN (
|
||||
SELECT ""NotificationStatus"".""Id"" FROM ""NotificationStatus""
|
||||
LEFT OUTER JOIN ""Notifications""
|
||||
ON ""NotificationStatus"".""ProviderId"" = ""Notifications"".""Id""
|
||||
WHERE ""Notifications"".""Id"" IS NULL)");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using NzbDrone.Core.Notifications;
|
||||
|
||||
namespace NzbDrone.Core.Housekeeping.Housekeepers
|
||||
{
|
||||
public class FixFutureNotificationStatusTimes : FixFutureProviderStatusTimes<NotificationStatus>, IHousekeepingTask
|
||||
{
|
||||
public FixFutureNotificationStatusTimes(INotificationStatusRepository notificationStatusRepository)
|
||||
: base(notificationStatusRepository)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,6 @@
|
||||
"UpdateCheckStartupNotWritableMessage": "لا يمكن تثبيت التحديث لأن مجلد بدء التشغيل \"{0}\" غير قابل للكتابة بواسطة المستخدم \"{1}\".",
|
||||
"UpdateMechanismHelpText": "استخدم المحدث أو البرنامج النصي المدمج في Prowlarr",
|
||||
"AppDataDirectory": "دليل AppData",
|
||||
"ConnectionLostAutomaticMessage": "سيحاول Prowlarr الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
|
||||
"ConnectSettings": "ربط الإعدادات",
|
||||
"CouldNotConnectSignalR": "تعذر الاتصال بـ SignalR ، لن يتم تحديث واجهة المستخدم",
|
||||
"Dates": "تواريخ",
|
||||
@@ -316,7 +315,6 @@
|
||||
"OnGrab": "عند الاستيلاء",
|
||||
"OnHealthIssue": "في قضية الصحة",
|
||||
"TestAllIndexers": "اختبار كافة المفهرسات",
|
||||
"ConnectionLostMessage": "فقد Whisparr اتصاله بالواجهة الخلفية وسيحتاج إلى إعادة تحميله لاستعادة الوظائف.",
|
||||
"Link": "الروابط",
|
||||
"MappedDrivesRunningAsService": "لا تتوفر محركات أقراص الشبكة المعينة عند التشغيل كخدمة Windows. يرجى الاطلاع على التعليمات لمزيد من المعلومات",
|
||||
"UnableToLoadIndexers": "تعذر تحميل المفهرسات",
|
||||
@@ -343,5 +341,10 @@
|
||||
"Genre": "الأنواع",
|
||||
"More": "أكثر",
|
||||
"Track": "أثر",
|
||||
"Year": "عام"
|
||||
"Year": "عام",
|
||||
"ConnectionLostReconnect": "سيحاول Radarr الاتصال تلقائيًا ، أو يمكنك النقر فوق إعادة التحميل أدناه.",
|
||||
"DeleteAppProfileMessageText": "هل أنت متأكد من أنك تريد حذف ملف تعريف الجودة {0}",
|
||||
"RecentChanges": "التغييرات الأخيرة",
|
||||
"WhatsNew": "ما هو الجديد؟",
|
||||
"minutes": "الدقائق"
|
||||
}
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
"CertificateValidationHelpText": "Променете колко строго е валидирането на HTTPS сертифициране",
|
||||
"Clear": "Ясно",
|
||||
"ClientPriority": "Приоритет на клиента",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr ще се опита да се свърже автоматично или можете да щракнете върху презареждане по-долу.",
|
||||
"Connections": "Връзки",
|
||||
"CouldNotConnectSignalR": "Не можах да се свържа със SignalR, потребителският интерфейс няма да се актуализира",
|
||||
"DeleteBackupMessageText": "Наистина ли искате да изтриете резервното копие '{0}'?",
|
||||
@@ -321,7 +320,6 @@
|
||||
"No": "Не",
|
||||
"UnableToLoadIndexers": "Индексаторите не могат да се заредят",
|
||||
"Yes": "Да",
|
||||
"ConnectionLostMessage": "Whisparr е загубил връзката си с бекенда и ще трябва да се презареди, за да възстанови функционалността.",
|
||||
"MappedDrivesRunningAsService": "Картографираните мрежови устройства не са налични, когато се изпълняват като услуга на Windows. Моля, вижте често задаваните въпроси за повече информация",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Индексатори не са налични поради неуспехи за повече от 6 часа: {0}",
|
||||
"Ended": "Приключи",
|
||||
@@ -343,5 +341,10 @@
|
||||
"ApplyTagsHelpTextReplace": "Замяна: Заменете маркерите с въведените маркери (не въвеждайте маркери, за да изчистите всички маркери)",
|
||||
"DownloadClientPriorityHelpText": "Приоритизирайте множество клиенти за изтегляне. Round-Robin се използва за клиенти със същия приоритет.",
|
||||
"Track": "Проследяване",
|
||||
"Year": "Година"
|
||||
"Year": "Година",
|
||||
"ConnectionLostReconnect": "Radarr ще се опита да се свърже автоматично или можете да щракнете върху презареждане по-долу.",
|
||||
"DeleteAppProfileMessageText": "Наистина ли искате да изтриете качествения профил {0}",
|
||||
"RecentChanges": "Последни промени",
|
||||
"WhatsNew": "Какво ново?",
|
||||
"minutes": "Минути"
|
||||
}
|
||||
|
||||
@@ -302,8 +302,6 @@
|
||||
"Yesterday": "Ahir",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Llistes no disponibles a causa d'errors: {0}",
|
||||
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de Prowlarr. Això inclou informació sobre el vostre navegador, quines pàgines Prowlarr 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.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
|
||||
"ConnectionLostMessage": "Prowlarr ha perdut la connexió amb el backend i s'haurà de tornar a carregar per restaurar la funcionalitat.",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Els fitxers de la paperera de reciclatge més antics que el nombre de dies seleccionat es netejaran automàticament",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "No es pot afegir un perfil de qualitat nou, torneu-ho a provar.",
|
||||
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData del Prowlarr",
|
||||
@@ -365,5 +363,11 @@
|
||||
"Theme": "Tema",
|
||||
"Track": "Traça",
|
||||
"Year": "Any",
|
||||
"UpdateAvailable": "Nova actualització disponible"
|
||||
"UpdateAvailable": "Nova actualització disponible",
|
||||
"ConnectionLostReconnect": "Radarr intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
|
||||
"ConnectionLostToBackend": "Radarr ha perdut la connexió amb el backend i s'haurà de tornar a carregar per restaurar la funcionalitat.",
|
||||
"RecentChanges": "Canvis recents",
|
||||
"WhatsNew": "Que hi ha de nou?",
|
||||
"minutes": "Minuts",
|
||||
"DeleteAppProfileMessageText": "Esteu segur que voleu suprimir el perfil de qualitat {0}"
|
||||
}
|
||||
|
||||
@@ -241,7 +241,6 @@
|
||||
"ClientPriority": "Priorita klienta",
|
||||
"CloneProfile": "Klonovat profil",
|
||||
"Close": "Zavřít",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr se pokusí připojit automaticky, nebo můžete kliknout na znovu načíst níže.",
|
||||
"CouldNotConnectSignalR": "Nelze se připojit k SignalR, uživatelské rozhraní se neaktualizuje",
|
||||
"CustomFilters": "Vlastní filtry",
|
||||
"Date": "datum",
|
||||
@@ -310,7 +309,6 @@
|
||||
"UpdateAutomaticallyHelpText": "Automaticky stahovat a instalovat aktualizace. Stále budete moci instalovat ze systému: Aktualizace",
|
||||
"NetCore": ".NET Core",
|
||||
"Filters": "Filtr",
|
||||
"ConnectionLostMessage": "Prowlarr ztratil spojení s back-endem a pro obnovení funkčnosti bude nutné jej znovu načíst.",
|
||||
"HistoryCleanupDaysHelpText": "Nastavením na 0 zakážete automatické čištění",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Soubory v koši starší než vybraný počet dní budou automaticky vyčištěny",
|
||||
"MaintenanceRelease": "Údržbové vydání: opravy chyb a další vylepšení. Další podrobnosti najdete v GitHub Commit History",
|
||||
@@ -346,5 +344,11 @@
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Jak použít značky na vybrané filmy",
|
||||
"ApplyTagsHelpTextReplace": "Nahradit: Nahradit tagy zadanými tagy (pro vymazání všech tagů zadejte žádné tagy)",
|
||||
"Track": "Stopa",
|
||||
"Genre": "Žánry"
|
||||
"Genre": "Žánry",
|
||||
"ConnectionLostReconnect": "Radarr se pokusí připojit automaticky, nebo můžete kliknout na znovu načíst níže.",
|
||||
"RecentChanges": "Nedávné změny",
|
||||
"WhatsNew": "Co je nového?",
|
||||
"DeleteAppProfileMessageText": "Opravdu chcete smazat kvalitní profil {0}",
|
||||
"ConnectionLostToBackend": "Radarr ztratil spojení s back-endem a pro obnovení funkčnosti bude nutné jej znovu načíst.",
|
||||
"minutes": "Minut"
|
||||
}
|
||||
|
||||
@@ -33,8 +33,6 @@
|
||||
"CustomFilters": "Bruger Tilpassede Filtere",
|
||||
"ConnectSettingsSummary": "Notifikationer, forbindelser til medieservere/-afspillere og brugerdefinerede scripts",
|
||||
"Connections": "Forbindelser",
|
||||
"ConnectionLostMessage": "Prowlarr har mistet forbindelsen til backend'en og har brug for at blive genindlæst for at genetablere funktionaliteten.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
|
||||
"ConnectionLost": "Forbindelse Mistet",
|
||||
"Connect": "Notifikationer",
|
||||
"Component": "Komponent",
|
||||
@@ -336,7 +334,6 @@
|
||||
"AddRemoveOnly": "Tilføj og fjern kun",
|
||||
"AddNewIndexer": "Tilføj en ny indeksør",
|
||||
"AddToDownloadClient": "Føj udgivelse til downloadklient",
|
||||
"AppProfileDeleteConfirm": "Er du sikker på at du vil fjerne {0}?",
|
||||
"AddIndexerProxy": "Tilføj en indeksørproxy",
|
||||
"AddSyncProfile": "Tilføj synkroniseringsprofil",
|
||||
"EditSyncProfile": "Tilføj synkroniseringsprofil",
|
||||
@@ -360,5 +357,10 @@
|
||||
"ApplyTagsHelpTextRemove": "Fjern: Fjern de indtastede tags",
|
||||
"ApplyTagsHelpTextReplace": "Erstat: Udskift tags med de indtastede tags (indtast ingen tags for at rydde alle tags)",
|
||||
"DownloadClientPriorityHelpText": "Prioriter flere downloadklienter. Round-Robin bruges til klienter med samme prioritet.",
|
||||
"Track": "Spor"
|
||||
"Track": "Spor",
|
||||
"DeleteAppProfileMessageText": "Er du sikker på, at du vil slette kvalitetsprofilen {0}",
|
||||
"RecentChanges": "Seneste ændringer",
|
||||
"WhatsNew": "Hvad er nyt?",
|
||||
"ConnectionLostReconnect": "Radarr vil prøve at tilslutte automatisk, eller du kan klikke genindlæs forneden.",
|
||||
"minutes": "Protokoller"
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "Bitte den API Schlüssel korrigieren, dieser muss mindestens {0} Zeichen lang sein. Die Änderung kann über die Einstellungen oder die Konfigurationsdatei erfolgen",
|
||||
"AppDataDirectory": "AppData Ordner",
|
||||
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
|
||||
"AppProfileDeleteConfirm": "Möchten Sie {0} wirklich löschen?",
|
||||
"AppProfileInUse": "App-Profil im Einsatz",
|
||||
"AppProfileSelectHelpText": "App-Profile werden verwendet, um die Einstellungen für RSS, automatische Suche und interaktive Suche bei der Anwendungssynchronisierung zu steuern",
|
||||
"AppSettingsSummary": "Anwendungen und Einstellungen um zu konfigurieren, wie Prowlarr mit deinen PVR Programmen interagiert",
|
||||
@@ -78,8 +77,6 @@
|
||||
"ConnectSettings": "Eintellungen für Verbindungen",
|
||||
"ConnectSettingsSummary": "Benachrichtigungen und eigene Scripte",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr wird automatisch versuchen zu verbinden oder klicke unten auf neuladen.",
|
||||
"ConnectionLostMessage": "Prowlarr hat die Verbindung zum Backend verloren und muss neugeladen werden.",
|
||||
"Connections": "Verbindungen",
|
||||
"CouldNotConnectSignalR": "Es konnte keine Verbindung zu SignalR hergestellt werden, die Benutzeroberfläche wird nicht aktualisiert",
|
||||
"Custom": "Benutzerdefiniert",
|
||||
@@ -201,7 +198,6 @@
|
||||
"IndexerVipCheckExpiredClientMessage": "Die VIP Indexer Vorteile sind abgelaufen: {0}",
|
||||
"IndexerVipCheckExpiringClientMessage": "Die Indexer VIP Vorteile verfallen bald: {0}",
|
||||
"Indexers": "Indexer",
|
||||
"IndexersSelectedInterp": "{0} Indexer ausgewählt",
|
||||
"Info": "Info",
|
||||
"InstanceName": "Instanzname",
|
||||
"InstanceNameHelpText": "Instanzname im Browser-Tab und für Syslog-Anwendungsname",
|
||||
@@ -495,5 +491,11 @@
|
||||
"Album": "Album",
|
||||
"Artist": "Künstler",
|
||||
"Author": "Autor",
|
||||
"Book": "Buch"
|
||||
"Book": "Buch",
|
||||
"ConnectionLostReconnect": "Radarr wird automatisch versuchen zu verbinden oder klicke unten auf neuladen.",
|
||||
"ConnectionLostToBackend": "Radarr hat die Verbindung zum Backend verloren und muss neugeladen werden.",
|
||||
"RecentChanges": "Neuste Änderungen",
|
||||
"WhatsNew": "Was gibt's Neues?",
|
||||
"minutes": "Minuten",
|
||||
"DeleteAppProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?"
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
"CustomFilters": "Custom Φιλτρα",
|
||||
"ConnectSettingsSummary": "Ειδοποιήσεις και προσαρμοσμένα σενάρια",
|
||||
"AppDataLocationHealthCheckMessage": "Η ενημέρωση δεν θα είναι δυνατή για να αποτραπεί η διαγραφή των δεδομένων εφαρμογής κατά την ενημέρωση",
|
||||
"ConnectionLostAutomaticMessage": "Το Prowlarr θα προσπαθήσει να συνδεθεί αυτόματα, αλλιώς μπορείτε να κάνετε reload απο κάτω.",
|
||||
"Component": "Στοιχείο",
|
||||
"Columns": "Στήλες",
|
||||
"Close": "Κλείσιμο",
|
||||
@@ -318,7 +317,6 @@
|
||||
"OnHealthIssue": "Σχετικά με το θέμα της υγείας",
|
||||
"TestAllIndexers": "Δοκιμάστε όλους τους δείκτες",
|
||||
"MaintenanceRelease": "Έκδοση συντήρησης: επιδιορθώσεις σφαλμάτων και άλλες βελτιώσεις. Δείτε το Github Commit History για περισσότερες λεπτομέρειες",
|
||||
"ConnectionLostMessage": "Το Prowlarr έχει χάσει τη σύνδεσή του με το backend και θα χρειαστεί να φορτωθεί ξανά για να επαναφέρετε τη λειτουργικότητα.",
|
||||
"NetCore": ".NET",
|
||||
"GrabReleases": "Πιάσε την απελευθέρωση",
|
||||
"Link": "Συνδέσεις",
|
||||
@@ -347,7 +345,6 @@
|
||||
"ThemeHelpText": "Αλλαγή του θέματος διεπαφής χρήστη εφαρμογής, το θέμα «Αυτόματο» θα χρησιμοποιήσει το Θέμα του λειτουργικού σας συστήματος για να ρυθμίσει τη λειτουργία Light ή Dark. Εμπνευσμένο από το Theme.Park",
|
||||
"SettingsFilterSentryEvents": "Φιλτράρισμα συμβάντων Analytics",
|
||||
"SettingsSqlLoggingHelpText": "Καταγράψτε όλα τα ερωτήματα SQL από το Prowlarr",
|
||||
"AppProfileDeleteConfirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το {0};",
|
||||
"SettingsConsoleLogLevel": "Επίπεδο καταγραφής κονσόλας",
|
||||
"SettingsLogRotate": "Περιστροφή καταγραφής",
|
||||
"SettingsLogRotateHelpText": "Μέγιστος αριθμός αρχείων καταγραφής που θα διατηρηθούν αποθηκευμένα στο φάκελο καταγραφής",
|
||||
@@ -415,7 +412,6 @@
|
||||
"TestAllApps": "Δοκιμάστε όλες τις εφαρμογές",
|
||||
"UnableToLoadIndexerProxies": "Δεν είναι δυνατή η φόρτωση των Proxer Indexer",
|
||||
"AddDownloadClientToProwlarr": "Η προσθήκη ενός προγράμματος-πελάτη λήψης επιτρέπει στο Prowlarr να στέλνει εκδόσεις απευθείας από τη διεπαφή χρήστη ενώ κάνει μια μη αυτόματη αναζήτηση.",
|
||||
"IndexersSelectedInterp": "{0}Επιλέχτηκε ευρετήριο",
|
||||
"Application": "Εφαρμογή",
|
||||
"IndexerAuth": "Indexer Auth",
|
||||
"AddIndexerProxy": "Προσθήκη Indexer Proxy",
|
||||
@@ -497,5 +493,11 @@
|
||||
"Label": "Επιγραφή",
|
||||
"Episode": "Επεισόδιο",
|
||||
"Genre": "Είδη",
|
||||
"Publisher": "Εκδότης"
|
||||
"Publisher": "Εκδότης",
|
||||
"ConnectionLostReconnect": "Το Radarr θα προσπαθήσει να συνδεθεί αυτόματα, αλλιώς μπορείτε να κάνετε reload απο κάτω.",
|
||||
"RecentChanges": "Πρόσφατες αλλαγές",
|
||||
"WhatsNew": "Τι νέα?",
|
||||
"ConnectionLostToBackend": "Το Radarr έχασε τη σύνδεσή του με το backend και θα χρειαστεί να επαναφορτωθεί για να αποκαταστήσει τη λειτουργικότητά του.",
|
||||
"minutes": "Λεπτά",
|
||||
"DeleteAppProfileMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το προφίλ ποιότητας '{0}'?"
|
||||
}
|
||||
|
||||
@@ -4,11 +4,18 @@
|
||||
"Actions": "Actions",
|
||||
"Add": "Add",
|
||||
"AddApplication": "Add Application",
|
||||
"AddApplicationImplementation": "Add Application - {implementationName}",
|
||||
"AddCategory": "Add Category",
|
||||
"AddConnection": "Add Connection",
|
||||
"AddConnectionImplementation": "Add Connection - {implementationName}",
|
||||
"AddCustomFilter": "Add Custom Filter",
|
||||
"AddDownloadClient": "Add Download Client",
|
||||
"AddDownloadClientImplementation": "Add Download Client - {implementationName}",
|
||||
"AddDownloadClientToProwlarr": "Adding a download client allows Prowlarr to send releases direct from the UI while doing a manual search.",
|
||||
"AddIndexer": "Add Indexer",
|
||||
"AddIndexerImplementation": "Add Indexer - {implementationName}",
|
||||
"AddIndexerProxy": "Add Indexer Proxy",
|
||||
"AddIndexerProxyImplementation": "Add Indexer Proxy - {implementationName}",
|
||||
"AddNewIndexer": "Add New Indexer",
|
||||
"AddRemoveOnly": "Add and Remove Only",
|
||||
"AddSyncProfile": "Add Sync Profile",
|
||||
@@ -28,10 +35,11 @@
|
||||
"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",
|
||||
"AppProfileDeleteConfirm": "Are you sure you want to delete {0}?",
|
||||
"AppProfileInUse": "App Profile in Use",
|
||||
"AppProfileSelectHelpText": "App profiles are used to control RSS, Automatic Search and Interactive Search settings on application sync",
|
||||
"AppSettingsSummary": "Applications and settings to configure how Prowlarr interacts with your PVR programs",
|
||||
"AppUpdated": "{appName} Updated",
|
||||
"AppUpdatedVersion": "{appName} has been updated to version `{version}`, in order to get the latest changes you'll need to reload {appName}",
|
||||
"Application": "Application",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "All applications are unavailable due to failures for more than 6 hours",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Applications unavailable due to failures for more than 6 hours: {0}",
|
||||
@@ -52,7 +60,7 @@
|
||||
"AppsMinimumSeeders": "Apps Minimum Seeders",
|
||||
"AppsMinimumSeedersHelpText": "Minimum seeders required by the Applications for the indexer to grab, empty is Sync profile's default",
|
||||
"AreYouSureYouWantToDeleteCategory": "Are you sure you want to delete mapped category?",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Are you sure you want to delete '{0}' from Prowlarr?",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Are you sure you want to delete '{name}' from Prowlarr?",
|
||||
"AreYouSureYouWantToResetYourAPIKey": "Are you sure you want to reset your API Key?",
|
||||
"Artist": "Artist",
|
||||
"AudioSearch": "Audio Search",
|
||||
@@ -104,14 +112,14 @@
|
||||
"ConnectSettings": "Connect Settings",
|
||||
"ConnectSettingsSummary": "Notifications and custom scripts",
|
||||
"ConnectionLost": "Connection Lost",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr will try to connect automatically, or you can click reload below.",
|
||||
"ConnectionLostMessage": "Prowlarr has lost its connection to the backend and will need to be reloaded to restore functionality.",
|
||||
"ConnectionLostReconnect": "{appName} will try to connect automatically, or you can click reload below.",
|
||||
"ConnectionLostToBackend": "{appName} has lost its connection to the backend and will need to be reloaded to restore functionality.",
|
||||
"Connections": "Connections",
|
||||
"CouldNotConnectSignalR": "Could not connect to SignalR, UI won't update",
|
||||
"CountApplicationsSelected": "{0} application(s) selected",
|
||||
"CountDownloadClientsSelected": "{0} download client(s) selected",
|
||||
"CountIndexersAvailable": "{0} indexer(s) available",
|
||||
"CountIndexersSelected": "{0} indexer(s) selected",
|
||||
"CountApplicationsSelected": "{count} application(s) selected",
|
||||
"CountDownloadClientsSelected": "{count} download client(s) selected",
|
||||
"CountIndexersAvailable": "{count} indexer(s) available",
|
||||
"CountIndexersSelected": "{count} indexer(s) selected",
|
||||
"Custom": "Custom",
|
||||
"CustomFilters": "Custom Filters",
|
||||
"DBMigration": "DB Migration",
|
||||
@@ -120,26 +128,27 @@
|
||||
"Dates": "Dates",
|
||||
"Delete": "Delete",
|
||||
"DeleteAppProfile": "Delete App Profile",
|
||||
"DeleteAppProfileMessageText": "Are you sure you want to delete the app profile '{name}'?",
|
||||
"DeleteApplication": "Delete Application",
|
||||
"DeleteApplicationMessageText": "Are you sure you want to delete the application '{0}'?",
|
||||
"DeleteApplicationMessageText": "Are you sure you want to delete the application '{name}'?",
|
||||
"DeleteBackup": "Delete Backup",
|
||||
"DeleteBackupMessageText": "Are you sure you want to delete the backup '{0}'?",
|
||||
"DeleteBackupMessageText": "Are you sure you want to delete the backup '{name}'?",
|
||||
"DeleteClientCategory": "Delete Download Client Category",
|
||||
"DeleteDownloadClient": "Delete Download Client",
|
||||
"DeleteDownloadClientMessageText": "Are you sure you want to delete the download client '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Are you sure you want to delete the download client '{name}'?",
|
||||
"DeleteIndexerProxy": "Delete Indexer Proxy",
|
||||
"DeleteIndexerProxyMessageText": "Are you sure you want to delete the proxy '{0}'?",
|
||||
"DeleteIndexerProxyMessageText": "Are you sure you want to delete the indexer proxy '{name}'?",
|
||||
"DeleteNotification": "Delete Notification",
|
||||
"DeleteNotificationMessageText": "Are you sure you want to delete the notification '{0}'?",
|
||||
"DeleteNotificationMessageText": "Are you sure you want to delete the notification '{name}'?",
|
||||
"DeleteSelectedApplications": "Delete Selected Applications",
|
||||
"DeleteSelectedApplicationsMessageText": "Are you sure you want to delete {0} selected application(s)?",
|
||||
"DeleteSelectedApplicationsMessageText": "Are you sure you want to delete {count} selected application(s)?",
|
||||
"DeleteSelectedDownloadClients": "Delete Download Client(s)",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Are you sure you want to delete {0} selected download client(s)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Are you sure you want to delete {count} selected download client(s)?",
|
||||
"DeleteSelectedIndexer": "Delete Selected Indexer",
|
||||
"DeleteSelectedIndexers": "Delete Selected Indexers",
|
||||
"DeleteSelectedIndexersMessageText": "Are you sure you want to delete {0} selected indexer(s)?",
|
||||
"DeleteSelectedIndexersMessageText": "Are you sure you want to delete {count} selected indexer(s)?",
|
||||
"DeleteTag": "Delete Tag",
|
||||
"DeleteTagMessageText": "Are you sure you want to delete the tag '{0}'?",
|
||||
"DeleteTagMessageText": "Are you sure you want to delete the tag '{label}'?",
|
||||
"Description": "Description",
|
||||
"Details": "Details",
|
||||
"DevelopmentSettings": "Development Settings",
|
||||
@@ -158,7 +167,13 @@
|
||||
"DownloadClientsSettingsSummary": "Download clients configuration for integration into Prowlarr UI search",
|
||||
"Duration": "Duration",
|
||||
"Edit": "Edit",
|
||||
"EditApplicationImplementation": "Edit Application - {implementationName}",
|
||||
"EditCategory": "Edit Category",
|
||||
"EditConnectionImplementation": "Edit Connection - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Edit Download Client - {implementationName}",
|
||||
"EditIndexer": "Edit Indexer",
|
||||
"EditIndexerImplementation": "Edit Indexer - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Edit Indexer Proxy - {implementationName}",
|
||||
"EditSelectedDownloadClients": "Edit Selected Download Clients",
|
||||
"EditSelectedIndexers": "Edit Selected Indexers",
|
||||
"EditSyncProfile": "Edit Sync Profile",
|
||||
@@ -195,7 +210,7 @@
|
||||
"FocusSearchBox": "Focus Search Box",
|
||||
"Folder": "Folder",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "For more information on the individual download clients, click on the info buttons.",
|
||||
"FoundCountReleases": "Found {0} releases",
|
||||
"FoundCountReleases": "Found {itemCount} releases",
|
||||
"FullSync": "Full Sync",
|
||||
"General": "General",
|
||||
"GeneralSettings": "General Settings",
|
||||
@@ -257,7 +272,6 @@
|
||||
"IndexerVipCheckExpiredClientMessage": "Indexer VIP benefits have expired: {0}",
|
||||
"IndexerVipCheckExpiringClientMessage": "Indexer VIP benefits expiring soon: {0}",
|
||||
"Indexers": "Indexers",
|
||||
"IndexersSelectedInterp": "{0} Indexer(s) Selected",
|
||||
"Info": "Info",
|
||||
"InitialFailure": "Initial Failure",
|
||||
"InstanceName": "Instance Name",
|
||||
@@ -319,6 +333,8 @@
|
||||
"NoUpdatesAreAvailable": "No updates are available",
|
||||
"NotSupported": "Not Supported",
|
||||
"Notification": "Notification",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "All notifications are unavailable due to failures",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notifications unavailable due to failures: {0}",
|
||||
"NotificationTriggers": "Notification Triggers",
|
||||
"NotificationTriggersHelpText": "Select which events should trigger this notification",
|
||||
"Notifications": "Notifications",
|
||||
@@ -358,7 +374,7 @@
|
||||
"Proxies": "Proxies",
|
||||
"Proxy": "Proxy",
|
||||
"ProxyBypassFilterHelpText": "Use ',' as a separator, and '*.' as a wildcard for subdomains",
|
||||
"ProxyCheckBadRequestMessage": "Failed to test proxy. StatusCode: {0}",
|
||||
"ProxyCheckBadRequestMessage": "Failed to test proxy. Status code: {0}",
|
||||
"ProxyCheckFailedToTestMessage": "Failed to test proxy: {0}",
|
||||
"ProxyCheckResolveIpMessage": "Failed to resolve the IP Address for the Configured Proxy Host {0}",
|
||||
"ProxyPasswordHelpText": "You only need to enter a username and password if one is required. Leave them blank otherwise.",
|
||||
@@ -376,6 +392,7 @@
|
||||
"RSSIsNotSupportedWithThisIndexer": "RSS is not supported with this indexer",
|
||||
"RawSearchSupported": "Raw Search Supported",
|
||||
"ReadTheWikiForMoreInformation": "Read the Wiki for more information",
|
||||
"RecentChanges": "Recent Changes",
|
||||
"Reddit": "Reddit",
|
||||
"Redirect": "Redirect",
|
||||
"RedirectHelpText": "Redirect incoming download request for indexer and pass the grab directly instead of proxying the request via Prowlarr",
|
||||
@@ -415,7 +432,7 @@
|
||||
"Search": "Search",
|
||||
"SearchAllIndexers": "Search all indexers",
|
||||
"SearchCapabilities": "Search Capabilities",
|
||||
"SearchCountIndexers": "Search {0} indexers",
|
||||
"SearchCountIndexers": "Search {count} indexer(s)",
|
||||
"SearchIndexers": "Search Indexers",
|
||||
"SearchQueries": "Search Queries",
|
||||
"SearchType": "Search Type",
|
||||
@@ -429,7 +446,7 @@
|
||||
"Seeders": "Seeders",
|
||||
"SelectAll": "Select All",
|
||||
"SelectIndexers": "Select Indexers",
|
||||
"SelectedCountOfCountReleases": "Selected {0} of {1} releases",
|
||||
"SelectedCountOfCountReleases": "Selected {selectedCount} of {itemCount} releases",
|
||||
"SemiPrivate": "Semi-Private",
|
||||
"SendAnonymousUsageData": "Send Anonymous Usage Data",
|
||||
"SetTags": "Set Tags",
|
||||
@@ -487,9 +504,9 @@
|
||||
"TestAllApps": "Test All Apps",
|
||||
"TestAllClients": "Test All Clients",
|
||||
"TestAllIndexers": "Test All Indexers",
|
||||
"TheLatestVersionIsAlreadyInstalled": "The latest version of {0} is already installed",
|
||||
"TheLatestVersionIsAlreadyInstalled": "The latest version of {appName} is already installed",
|
||||
"Theme": "Theme",
|
||||
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {0}",
|
||||
"ThemeHelpText": "Change Application UI Theme, 'Auto' Theme will use your OS Theme to set Light or Dark mode. Inspired by {inspiredBy}.",
|
||||
"Time": "Time",
|
||||
"Title": "Title",
|
||||
"Today": "Today",
|
||||
@@ -553,6 +570,7 @@
|
||||
"VipExpiration": "VIP Expiration",
|
||||
"Warn": "Warn",
|
||||
"Website": "Website",
|
||||
"WhatsNew": "What's New?",
|
||||
"Wiki": "Wiki",
|
||||
"Year": "Year",
|
||||
"Yes": "Yes",
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
"Connections": "Conexiones",
|
||||
"Connect": "Notificaciones",
|
||||
"Clear": "Borrar",
|
||||
"BackupNow": "Hacer copia de seguridad",
|
||||
"Backup": "Backup",
|
||||
"AppDataLocationHealthCheckMessage": "No será posible actualizar para prevenir que AppData se borre durante la actualización",
|
||||
"BackupNow": "Hacer copia de seguridad ahora",
|
||||
"Backup": "Copia de seguridad",
|
||||
"AppDataLocationHealthCheckMessage": "No será posible actualizar para prevenir la eliminación de AppData al Actualizar",
|
||||
"Analytics": "Analíticas",
|
||||
"All": "Todas",
|
||||
"About": "Acerca",
|
||||
"All": "Todo",
|
||||
"About": "Acerca de",
|
||||
"View": "Vista",
|
||||
"Updates": "Actualizaciones",
|
||||
"UpdateCheckUINotWritableMessage": "No se puede instalar la actualización porque la carpeta UI '{0}' no tiene permisos de escritura para el usuario '{1}'.",
|
||||
@@ -63,7 +63,7 @@
|
||||
"LogFiles": "Archivos de Registro",
|
||||
"Language": "Idioma",
|
||||
"IndexerStatusCheckAllClientMessage": "Los indexers no están disponibles debido a errores",
|
||||
"Added": "An̄adida",
|
||||
"Added": "Añadido",
|
||||
"Actions": "Acciones",
|
||||
"UISettingsSummary": "Calendario, fecha y opciones de color deteriorado",
|
||||
"TagsSettingsSummary": "Ver todas las etiquetas y cómo se usan. Las etiquetas no utilizadas se pueden eliminar",
|
||||
@@ -73,10 +73,10 @@
|
||||
"LastWriteTime": "Última Fecha de Escritura",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexers no disponibles debido a errores: {0}",
|
||||
"Indexer": "Indexador",
|
||||
"Grabbed": "Capturado",
|
||||
"Grabbed": "Añadido",
|
||||
"GeneralSettingsSummary": "Puerto, SSL, nombre de usuario/contraseña , proxy, analíticas y actualizaciones",
|
||||
"Filename": "Nombre del archivo",
|
||||
"Failed": "Ha fallado",
|
||||
"Failed": "Fallido",
|
||||
"EventType": "Tipo de Evento",
|
||||
"DownloadClientsSettingsSummary": "Gestores de descargas, manipulación de descargas y mapeados remotos",
|
||||
"DownloadClient": "Gestor de Descargas",
|
||||
@@ -85,12 +85,12 @@
|
||||
"Warn": "Advertencia",
|
||||
"Type": "Tipo",
|
||||
"Title": "Título",
|
||||
"Time": "Fecha",
|
||||
"Time": "Tiempo",
|
||||
"TestAll": "Testear Todo",
|
||||
"Test": "Test",
|
||||
"TableOptionsColumnsMessage": "Escoger qué columnas son visibles y en que orden aparecerán",
|
||||
"TableOptions": "Opciones de Tabla",
|
||||
"Source": "Origen",
|
||||
"Source": "Fuente",
|
||||
"Shutdown": "Apagar",
|
||||
"Seeders": "Semillas",
|
||||
"Save": "Guardar",
|
||||
@@ -104,18 +104,16 @@
|
||||
"Message": "Mensaje",
|
||||
"Level": "Nivel",
|
||||
"KeyboardShortcuts": "Atajos de Teclado",
|
||||
"Info": "Información",
|
||||
"Info": "Info",
|
||||
"HealthNoIssues": "No hay problemas con tu configuración",
|
||||
"Error": "Error",
|
||||
"ConnectionLostMessage": "Prowlarr ha perdido su conexión con el backend y tendrá que ser recargado para recuperar su funcionalidad.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr intentará conectarse automáticamente, o haz clic en el botón de recarga abajo.",
|
||||
"ConnectionLost": "Conexión perdida",
|
||||
"Component": "Componente",
|
||||
"Columns": "Columnas",
|
||||
"Close": "Cerrar",
|
||||
"Cancel": "Cancelar",
|
||||
"Apply": "Aplicar",
|
||||
"Age": "Edad",
|
||||
"Age": "Antigüedad",
|
||||
"SystemTimeCheckMessage": "El reloj del sistema está retrasado más de un día. Las tareas de mantenimiento no se ejecutarán correctamente hasta que se haya corregido",
|
||||
"UnsavedChanges": "Cambios no guardados",
|
||||
"ShowSearchHelpText": "Mostrar botón de búsqueda al pasar el cursor por encima",
|
||||
@@ -148,20 +146,20 @@
|
||||
"CertificateValidation": "Validación del certificado",
|
||||
"BypassProxyForLocalAddresses": "Omitir Proxy para Direcciones Locales",
|
||||
"Branch": "Rama",
|
||||
"BindAddressHelpText": "Dirección IP4 válida o '*' para todas las interfaces",
|
||||
"BindAddressHelpText": "Dirección IP4 válida, localhost o '*' para todas las interfaces",
|
||||
"Backups": "Copias de seguridad",
|
||||
"BackupRetentionHelpText": "Backups automáticos anteriores al período de retención serán borrados automáticamente",
|
||||
"BackupIntervalHelpText": "Intervalo entre backups automáticos",
|
||||
"BackupRetentionHelpText": "Las copias de seguridad automáticas anteriores al período de retención serán borradas automáticamente",
|
||||
"BackupIntervalHelpText": "Intervalo entre copias de seguridad automáticas",
|
||||
"BackupFolderHelpText": "Las rutas relativas estarán en el directorio AppData de Prowlarr",
|
||||
"Automatic": "Automático",
|
||||
"AuthenticationMethodHelpText": "Requerir nombre de usuario y contraseña para acceder Prowlarr",
|
||||
"Authentication": "Autenticación",
|
||||
"AreYouSureYouWantToResetYourAPIKey": "¿Está seguro de que desea restablecer su clave API?",
|
||||
"ApiKey": "Clave API",
|
||||
"ApiKey": "Clave de API",
|
||||
"ApplyTags": "Aplicar Etiquetas",
|
||||
"AppDataDirectory": "Directorio de AppData",
|
||||
"AppDataDirectory": "Directorio AppData",
|
||||
"AnalyticsEnabledHelpText": "Envíe información anónima de uso y error a los servidores de Prowlarr. Esto incluye información sobre su navegador, qué páginas de Prowlarr WebUI utiliza, informes de errores, así como el sistema operativo y la versión en tiempo de ejecución. Usaremos esta información para priorizar funciones y correcciones de errores.",
|
||||
"YesCancel": "Si, cancelar",
|
||||
"YesCancel": "Sí, Cancelar",
|
||||
"Version": "Versión",
|
||||
"Username": "Nombre de usuario",
|
||||
"UseProxy": "Usar el Proxy",
|
||||
@@ -192,7 +190,7 @@
|
||||
"RestartProwlarr": "Reiniciar Prowlarr",
|
||||
"RestartNow": "Reiniciar Ahora",
|
||||
"ResetAPIKey": "Reajustar API",
|
||||
"Reset": "Reajustar",
|
||||
"Reset": "Reiniciar",
|
||||
"RemoveFilter": "Eliminar filtro",
|
||||
"RemovedFromTaskQueue": "Eliminar de la cola de tareas",
|
||||
"RefreshMovie": "Actualizar película",
|
||||
@@ -208,7 +206,7 @@
|
||||
"PackageVersion": "Versión del paquete",
|
||||
"NotificationTriggers": "Desencadenantes de Notificaciones",
|
||||
"NoLeaveIt": "No, Déjalo",
|
||||
"New": "Nueva",
|
||||
"New": "Nuevo",
|
||||
"NetCore": ".NET Core",
|
||||
"Mode": "Modo",
|
||||
"MIA": "MIA",
|
||||
@@ -247,7 +245,7 @@
|
||||
"BranchUpdateMechanism": "Rama usada por el mecanismo de actualización externo",
|
||||
"BranchUpdate": "Qué rama usar para actualizar Prowlarr",
|
||||
"BeforeUpdate": "Antes de actualizar",
|
||||
"AddingTag": "Añadiendo etiqueta",
|
||||
"AddingTag": "Añadir etiqueta",
|
||||
"UnableToLoadUISettings": "No se han podido cargar los ajustes de UI",
|
||||
"UnableToLoadHistory": "No se ha podido cargar la historia",
|
||||
"UnableToLoadGeneralSettings": "No se han podido cargar los ajustes Generales",
|
||||
@@ -279,7 +277,7 @@
|
||||
"EditIndexer": "Editar Indexer",
|
||||
"Disabled": "Deshabilitado",
|
||||
"AutomaticSearch": "Búsqueda Automática",
|
||||
"AddIndexer": "Añadir Indexer",
|
||||
"AddIndexer": "Añadir Indexador",
|
||||
"FocusSearchBox": "Enfocar Cuadro de búsqueda",
|
||||
"SaveSettings": "Grabar Ajustes",
|
||||
"OpenThisModal": "Abrir este Modal",
|
||||
@@ -314,7 +312,7 @@
|
||||
"IndexerProxyStatusCheckAllClientMessage": "Los indexers no están disponibles debido a errores",
|
||||
"IndexerProxyStatusCheckSingleClientMessage": "Indexers no disponibles debido a errores: {0}",
|
||||
"NoLinks": "Sin enlaces",
|
||||
"AddDownloadClient": "Añadir Gestor de Descargas",
|
||||
"AddDownloadClient": "Añadir Cliente de Descarga",
|
||||
"CouldNotConnectSignalR": "No se pudo conectar a SignalR, la interfaz de usuario no se actualiza",
|
||||
"EnableRss": "Habilitar RSS",
|
||||
"FeatureRequests": "Peticiones de características",
|
||||
@@ -334,7 +332,6 @@
|
||||
"AddNewIndexer": "Añadir nuevo indexador",
|
||||
"AddToDownloadClient": "Añadir descarga al cliente de descargas",
|
||||
"Applications": "Aplicaciones",
|
||||
"AppProfileDeleteConfirm": "¿Seguro que quieres eliminar {0}?",
|
||||
"AppProfileInUse": "Perfil de aplicación en uso",
|
||||
"AddDownloadClientToProwlarr": "Añadir un cliente de descargas permite a Prowlarr enviar descargas directamente desde la interfaz en una búsqueda manual.",
|
||||
"Category": "Categoría",
|
||||
@@ -351,7 +348,7 @@
|
||||
"Notification": "Notificaciones",
|
||||
"Notifications": "Notificaciones",
|
||||
"UnableToLoadIndexers": "No se pueden cargar los indexers",
|
||||
"Yes": "si",
|
||||
"Yes": "Sí",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent proporcionado por la aplicación llamó a la API",
|
||||
"InstanceName": "Nombre de Instancia",
|
||||
"InstanceNameHelpText": "Nombre de instancia en pestaña y para nombre de aplicación en Syslog",
|
||||
@@ -359,7 +356,7 @@
|
||||
"Duration": "Duración",
|
||||
"LastDuration": "Duración",
|
||||
"LastExecution": "Última ejecución",
|
||||
"Queued": "En Cola",
|
||||
"Queued": "Encolado",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Ningún indexer está disponible por errores durando más de 6 horas",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexers no disponible por errores durando más de 6 horas: {0}",
|
||||
"Ended": "Terminó",
|
||||
@@ -372,18 +369,18 @@
|
||||
"AddApplication": "Añadir aplicación",
|
||||
"AddCustomFilter": "Añadir filtro personalizado",
|
||||
"Description": "Descripción",
|
||||
"ApplicationURL": "",
|
||||
"ApplicationUrlHelpText": "",
|
||||
"ApplicationURL": "URL de la aplicación",
|
||||
"ApplicationUrlHelpText": "La URL externa de la aplicación incluyendo http(s)://, puerto y URL base",
|
||||
"Label": "Etiqueta",
|
||||
"Theme": "Tema",
|
||||
"ApplyTagsHelpTextAdd": "Añadir: Añadir las etiquetas a la lista de etiquetas existente",
|
||||
"ApplyTagsHelpTextAdd": "Añadir: Añadir a las etiquetas la lista existente de etiquetas",
|
||||
"DeleteSelectedApplicationsMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteSelectedDownloadClients": "Borrar Gestor de Descargas",
|
||||
"DeleteSelectedIndexersMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Seguro que quieres eliminar el indexer '{0}'?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {0} cliente(s) de descarga seleccionado(s)?",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Cómo añadir etiquetas a las películas seleccionadas",
|
||||
"SelectIndexers": "Buscar películas",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Cómo añadir etiquetas a las películas seleccionadas",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Cómo añadir etiquetas a los indexadores seleccionados",
|
||||
"ApplyTagsHelpTextRemove": "Eliminar: Eliminar las etiquetas introducidas",
|
||||
"ApplyTagsHelpTextReplace": "Reemplazar: Reemplazar las etiquetas con las etiquetas introducidas (no introducir etiquetas para eliminar todas las etiquetas)",
|
||||
"ThemeHelpText": "Cambia el tema de la interfaz de usuario de la aplicación. El tema \"automático\" utilizará el tema de tu sistema operativo para establecer el modo claro u oscuro. Inspirado por Theme.Park",
|
||||
@@ -394,5 +391,24 @@
|
||||
"Year": "Año",
|
||||
"UpdateAvailable": "La nueva actualización está disponible",
|
||||
"Genre": "Géneros",
|
||||
"Publisher": "Editor"
|
||||
"Publisher": "Editor",
|
||||
"AuthenticationRequired": "Autenticación Requerida",
|
||||
"ApplyChanges": "Aplicar Cambios",
|
||||
"CountIndexersSelected": "{0} indexador(es) seleccionado(s)",
|
||||
"CountDownloadClientsSelected": "{0} cliente(s) de descarga seleccionado(s)",
|
||||
"EditSelectedDownloadClients": "Editar Clientes de Descarga Seleccionados",
|
||||
"EditSelectedIndexers": "Editar Indexadores Seleccionados",
|
||||
"Implementation": "Implementación",
|
||||
"ManageDownloadClients": "Gestionar Clientes de Descarga",
|
||||
"ApiKeyValidationHealthCheckMessage": "Actualice su clave de API para que tenga al menos {0} carácteres. Puede hacerlo en los ajustes o en el archivo de configuración",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadores con clientes de descarga inválidos: {0}.",
|
||||
"Episode": "Episodio",
|
||||
"ConnectionLostReconnect": "Radarr intentará conectarse automáticamente, o haz clic en el botón de recarga abajo.",
|
||||
"ConnectionLostToBackend": "Radarr ha perdido su conexión con el backend y tendrá que ser recargado para recuperar su funcionalidad.",
|
||||
"RecentChanges": "Cambios recientes",
|
||||
"WhatsNew": "¿Qué hay de nuevo?",
|
||||
"minutes": "Minutos",
|
||||
"Album": "álbum",
|
||||
"Artist": "artista",
|
||||
"DeleteAppProfileMessageText": "Seguro que quieres eliminar el perfil de calidad {0}"
|
||||
}
|
||||
|
||||
@@ -176,7 +176,6 @@
|
||||
"UnsavedChanges": "Tallentamattomia muutoksia",
|
||||
"Yesterday": "Eilen",
|
||||
"ConnectionLost": "Yhteys on katkennut",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr pyrkii muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun '{0}'?",
|
||||
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen '{0}'?",
|
||||
"Discord": "Discord",
|
||||
@@ -354,7 +353,6 @@
|
||||
"SettingsLogRotate": "Lokitiedostojen kierrätys",
|
||||
"SettingsLogSql": "Kirjaa SQL",
|
||||
"SettingsSqlLoggingHelpText": "Kirjaa kaikki Prowlarrin SQL-kyselyt",
|
||||
"ConnectionLostMessage": "Prowlarr on menettänyt yhteyden taustajärjestelmään ja sivu on päivitettävä toiminnallisuuden palauttamiseksi.",
|
||||
"ConnectSettingsSummary": "Ilmoitukset ja omat komentosarjat.",
|
||||
"DevelopmentSettings": "Kehittäjäasetukset",
|
||||
"Description": "Kuvaus",
|
||||
@@ -362,7 +360,6 @@
|
||||
"SettingsConsoleLogLevel": "Valvontalokin taso",
|
||||
"SettingsFilterSentryEvents": "Suodata analytiikan tapahtumia",
|
||||
"SettingsFilterSentryEventsHelpText": "Suodata tunnetut käyttäjävirheet pois analytiikkalähetyksistä",
|
||||
"AppProfileDeleteConfirm": "Haluatko varmasti poistaa sovellusprofiilin {0}?",
|
||||
"Applications": "Sovellukset",
|
||||
"AppProfileInUse": "Sovellusprofiili on käytössä",
|
||||
"Apps": "Sovellukset",
|
||||
@@ -376,7 +373,6 @@
|
||||
"DeleteAppProfile": "Poista sovellusprofiili",
|
||||
"IndexerProxies": "Tietolähteiden välityspalvelimet",
|
||||
"IndexerAuth": "Tietolähteen todennus",
|
||||
"IndexersSelectedInterp": "{0} valittua tietolähdettä",
|
||||
"Notifications": "Kytkennät",
|
||||
"NotificationTriggersHelpText": "Valitse tapahtumat, jotka aiheuttavat ilmoituksen.",
|
||||
"Stats": "Tilastot",
|
||||
@@ -489,5 +485,11 @@
|
||||
"UpdateAvailable": "Uusi päivitys on saatavilla",
|
||||
"Episode": "Jakso",
|
||||
"Label": "Tunniste",
|
||||
"Theme": "Teema"
|
||||
"Theme": "Teema",
|
||||
"ConnectionLostReconnect": "Radarr pyrkii muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".",
|
||||
"DeleteAppProfileMessageText": "Haluatko varmasti poistaa laatuprofiilin '{0}'?",
|
||||
"RecentChanges": "Viimeaikaiset muutokset",
|
||||
"WhatsNew": "Mikä on uutta?",
|
||||
"ConnectionLostToBackend": "Radarr on menettänyt yhteyden taustajärjestelmään ja sivu on päivitettävä toiminnallisuuden palauttamiseksi.",
|
||||
"minutes": "Minuuttia"
|
||||
}
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"Clear": "Effacer",
|
||||
"BackupNow": "Sauvegarder maintenant",
|
||||
"Backup": "Sauvegarde",
|
||||
"AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible pour empêcher la suppression de AppData lors de la mise à jour",
|
||||
"Analytics": "Analytique",
|
||||
"AppDataLocationHealthCheckMessage": "La mise à jour ne sera pas possible afin empêcher la suppression de AppData lors de la mise à jour",
|
||||
"Analytics": "Statistiques",
|
||||
"All": "Tout",
|
||||
"About": "À propos",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}",
|
||||
@@ -80,7 +80,7 @@
|
||||
"EventType": "Type d'événement",
|
||||
"Details": "Détails",
|
||||
"ConnectSettingsSummary": "Notifications et scripts personnalisés",
|
||||
"Added": "Ajouter",
|
||||
"Added": "Ajouté",
|
||||
"Actions": "Actions",
|
||||
"Info": "Info",
|
||||
"Error": "Erreur",
|
||||
@@ -91,7 +91,6 @@
|
||||
"Cancel": "Annuler",
|
||||
"Apply": "Appliquer",
|
||||
"Age": "Âge",
|
||||
"ConnectionLostMessage": "Prowlarr a perdu sa connexion au backend et devra être rechargé pour fonctionner à nouveau.",
|
||||
"Warn": "Avertissement",
|
||||
"Type": "Type",
|
||||
"Title": "Titre",
|
||||
@@ -115,7 +114,6 @@
|
||||
"Level": "Niveau",
|
||||
"KeyboardShortcuts": "Raccourcis clavier",
|
||||
"HealthNoIssues": "Aucun problème avec votre configuration",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr essaiera de se connecter automatiquement, ou bien vous pouvez cliquer sur \"Recharger\" en bas.",
|
||||
"SystemTimeCheckMessage": "L'heure du système est décalée de plus d'un jour. Les tâches planifiées peuvent ne pas s'exécuter correctement tant que l'heure ne sera pas corrigée",
|
||||
"SettingsShowRelativeDates": "Afficher les dates relatives",
|
||||
"UnsavedChanges": "Changement non sauvegardés",
|
||||
@@ -130,14 +128,14 @@
|
||||
"PendingChangesStayReview": "Rester et vérifier les changements",
|
||||
"PendingChangesMessage": "Vous avez effectué des changements non sauvegardés, souhaitez vous quitter cette page ?",
|
||||
"PendingChangesDiscardChanges": "Abandonner les changements et quitter",
|
||||
"CloneProfile": "Cloner le profil",
|
||||
"CloneProfile": "Dupliqué le profil",
|
||||
"ClientPriority": "Priorité du client",
|
||||
"ChangeHasNotBeenSavedYet": "Les changements n'ont pas encore été sauvegardés",
|
||||
"CertificateValidationHelpText": "Change la rigueur de la vérification du certificat HTTPS",
|
||||
"CertificateValidation": "Validation du certificat",
|
||||
"BypassProxyForLocalAddresses": "Contourner le proxy pour les adresses locales",
|
||||
"Branch": "Branche",
|
||||
"BindAddressHelpText": "Adresse IPv4 valide, localhost ou '*' pour toutes les interfaces",
|
||||
"BindAddressHelpText": "Adresse IP valide, localhost ou '*' pour toutes les interfaces",
|
||||
"BindAddress": "Adresse d'attache",
|
||||
"Backups": "Sauvegardes",
|
||||
"BackupRetentionHelpText": "Les sauvegardes automatiques plus anciennes que la période de conservation seront automatiquement effacées",
|
||||
@@ -146,9 +144,9 @@
|
||||
"AuthenticationMethodHelpText": "Exiger un identifiant et un mot de passe pour accéder à Prowlarr",
|
||||
"Authentication": "Authentification",
|
||||
"AreYouSureYouWantToResetYourAPIKey": "Êtes vous sûr de vouloir réinitialiser votre Clé d'API ?",
|
||||
"ApplyTags": "Appliquer les Étiquettes",
|
||||
"ApplyTags": "Appliquer les tags",
|
||||
"AppDataDirectory": "Dossier AppData",
|
||||
"ApiKey": "Clé d'API",
|
||||
"ApiKey": "Clé API",
|
||||
"AnalyticsEnabledHelpText": "Envoyer des informations anonymes sur l'utilisation et les erreurs vers les serveurs de Prowlarr. Cela inclut des informations sur votre navigateur, quelle page Prowlarr WebUI vous utilisez, les rapports d'erreurs, ainsi que le système d'exploitation et sa version. Nous utiliserons ces informations pour prioriser les nouvelles fonctionnalités et les corrections de bugs.",
|
||||
"IgnoredAddresses": "Adresses ignorées",
|
||||
"Hostname": "Nom d'hôte",
|
||||
@@ -172,7 +170,7 @@
|
||||
"CancelPendingTask": "Êtes-vous sur de vouloir annuler cette tâche en attente ?",
|
||||
"BranchUpdateMechanism": "Branche utilisée par le mécanisme de mise à jour extérieur",
|
||||
"BranchUpdate": "Branche à utiliser pour mettre Prowlarr à jour",
|
||||
"BeforeUpdate": "Avant mise à jour",
|
||||
"BeforeUpdate": "Avant la mise à jour",
|
||||
"DeleteDownloadClientMessageText": "Êtes-vous sûr de vouloir supprimer le client de téléchargement '{0}' ?",
|
||||
"DeleteBackupMessageText": "Êtes-vous sûr de vouloir supprimer la sauvegarde '{0}' ?",
|
||||
"ErrorLoadingContents": "Erreur lors du chargement du contenu",
|
||||
@@ -285,7 +283,7 @@
|
||||
"CloseCurrentModal": "Fermer le modal actuel",
|
||||
"AddingTag": "Ajouter un tag",
|
||||
"OnHealthIssueHelpText": "Sur un problème de santé",
|
||||
"AcceptConfirmationModal": "Accepter la fenêtre de confirmation",
|
||||
"AcceptConfirmationModal": "Accepter les modalités d'utilisations",
|
||||
"OpenThisModal": "Ouvrer ce modal",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison de pannes pendant plus de 6 heures : {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Tous les indexeurs sont indisponibles en raison d'échecs de plus de 6 heures",
|
||||
@@ -305,7 +303,6 @@
|
||||
"SettingsFilterSentryEvents": "Filtrer les événements d'analyse",
|
||||
"SettingsConsoleLogLevel": "Niveau de journalisation de la console",
|
||||
"SearchIndexers": "Recherche indexeurs",
|
||||
"IndexersSelectedInterp": "{0} indexeur(s) sélectionné(s)",
|
||||
"IndexerRss": "Indexeur Rss",
|
||||
"IndexerQuery": "Requête indexeur",
|
||||
"IndexerObsoleteCheckMessage": "Les indexeurs sont obsolètes ou ont été mis à jour : {0}. Veuillez supprimer et (ou) rajouter à Prowlarr",
|
||||
@@ -339,7 +336,6 @@
|
||||
"NotificationTriggersHelpText": "Sélectionnez les événements qui doivent déclencher cette notification",
|
||||
"AddDownloadClient": "Ajouter un client de téléchargement",
|
||||
"Applications": "Applications",
|
||||
"AppProfileDeleteConfirm": "Voulez-vous vraiment supprimer {0} ?",
|
||||
"AppProfileInUse": "Profil d'application en cours d'utilisation",
|
||||
"Apps": "Applications",
|
||||
"Auth": "Auth",
|
||||
@@ -499,17 +495,17 @@
|
||||
"Year": "Année",
|
||||
"ApplicationURL": "URL de l'application",
|
||||
"ApiKeyValidationHealthCheckMessage": "Veuillez mettre à jour votre clé API pour qu'elle contienne au moins {0} caractères. Vous pouvez le faire via les paramètres ou le fichier de configuration",
|
||||
"ApplicationUrlHelpText": "URL externe de cette application, y compris http(s)://, le port et l'URL de base",
|
||||
"ApplicationUrlHelpText": "URL externe de cette application, y compris http(s)://, le port ainsi que la base de URL",
|
||||
"ApplyChanges": "Appliquer les modifications",
|
||||
"ApplyTagsHelpTextAdd": "Ajouter : Ajouter les étiquettes à la liste des étiquettes existantes",
|
||||
"ApplyTagsHelpTextAdd": "Ajouter : Ajouter les tags à la liste de tags existantes",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Comment appliquer des tags à l'auteur sélectionné",
|
||||
"CountIndexersSelected": "{0} indexeur(s) sélectionné(s)",
|
||||
"DeleteSelectedApplicationsMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"DeleteSelectedIndexersMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
"DownloadClientPriorityHelpText": "Donnez la priorité à plusieurs clients de téléchargement. Le Round-Robin est utilisé pour les clients ayant la même priorité.",
|
||||
"SelectIndexers": "Recherche indexeurs",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Comment appliquer des étiquettes aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Retirer : Retire les étiquettes renseignées",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Comment appliquer des tags aux indexeurs sélectionnés",
|
||||
"ApplyTagsHelpTextRemove": "Suprimer : Suprime les étiquettes renseignées",
|
||||
"ApplyTagsHelpTextReplace": "Remplacer : Remplace les tags par les tags renseignés (ne pas renseigner de tags pour effacer tous les tags)",
|
||||
"DeleteSelectedDownloadClients": "Supprimer le client de téléchargement",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Voulez-vous vraiment supprimer l'indexeur '{0}' ?",
|
||||
@@ -529,5 +525,11 @@
|
||||
"AreYouSureYouWantToDeleteIndexer": "Êtes-vous sûr de vouloir supprimer “{0}” de Prowlarr ?",
|
||||
"AuthQueries": "Requêtes d’authentification",
|
||||
"CountApplicationsSelected": "{0} application(s) sélectionnée(s)",
|
||||
"CountDownloadClientsSelected": "{0} client(s) de téléchargement sélectionné(s)"
|
||||
"CountDownloadClientsSelected": "{0} client(s) de téléchargement sélectionné(s)",
|
||||
"ConnectionLostReconnect": "Radarr essaiera de se connecter automatiquement, ou vous pouvez cliquer sur \"Recharger\" en bas.",
|
||||
"ConnectionLostToBackend": "Radarr a perdu sa connexion au backend et devra être rechargé pour fonctionner à nouveau.",
|
||||
"RecentChanges": "Changements récents",
|
||||
"WhatsNew": "Quoi de neuf ?",
|
||||
"minutes": "Minutes",
|
||||
"DeleteAppProfileMessageText": "Voulez-vous vraiment supprimer le profil de qualité {0} ?"
|
||||
}
|
||||
|
||||
@@ -182,7 +182,6 @@
|
||||
"CancelPendingTask": "האם אתה בטוח שברצונך לבטל משימה זו בהמתנה?",
|
||||
"CertificateValidationHelpText": "שנה את מידת אימות ההסמכה של HTTPS",
|
||||
"ChangeHasNotBeenSavedYet": "השינוי עדיין לא נשמר",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr ינסה להתחבר אוטומטית, או שתלחץ על טען מחדש למטה.",
|
||||
"Connections": "חיבורים",
|
||||
"ConnectSettings": "חבר הגדרות",
|
||||
"Queue": "תוֹר",
|
||||
@@ -246,7 +245,7 @@
|
||||
"InteractiveSearch": "חיפוש אינטראקטיבי",
|
||||
"IllRestartLater": "אתחיל מאוחר יותר",
|
||||
"IncludeHealthWarningsHelpText": "כלול אזהרות בריאות",
|
||||
"Indexer": "מַפתְחָן",
|
||||
"Indexer": "אינדקסר",
|
||||
"IndexerFlags": "אינדקס דגלים",
|
||||
"NoChanges": "אין שינויים",
|
||||
"NoLeaveIt": "לא, עזוב את זה",
|
||||
@@ -315,7 +314,6 @@
|
||||
"OnGrab": "על לתפוס",
|
||||
"OnHealthIssue": "בנושא הבריאות",
|
||||
"TestAllIndexers": "בדוק את כל האינדקסים",
|
||||
"ConnectionLostMessage": "Prowlarr איבד את החיבור לשרת הפנימי ובכדי שיהיה פעיל, יש לבצע טעינה מחדש.",
|
||||
"GrabReleases": "שחרור תפוס",
|
||||
"Link": "קישורים",
|
||||
"NetCore": ".NET Core",
|
||||
@@ -356,7 +354,6 @@
|
||||
"Auth": "אימות",
|
||||
"AudioSearch": "חיפוש שמע",
|
||||
"Application": "אפליקציה",
|
||||
"AppProfileDeleteConfirm": "האם למחוק את {0}?",
|
||||
"DeleteApplication": "מחיקת אפליקציה",
|
||||
"DeleteAppProfile": "מחיקת פרופיל אפליקציה",
|
||||
"AddIndexerProxy": "הוספת פרוקסי לאינדקסר",
|
||||
@@ -395,5 +392,13 @@
|
||||
"Track": "זֵכֶר",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "כיצד להחיל תגים על הסרטים שנבחרו",
|
||||
"DeleteSelectedDownloadClientsMessageText": "האם אתה בטוח שברצונך למחוק את האינדקס '{0}'?",
|
||||
"Year": "שָׁנָה"
|
||||
"Year": "שָׁנָה",
|
||||
"DeleteAppProfileMessageText": "האם אתה בטוח שברצונך למחוק את פרופיל האיכות {0}",
|
||||
"RecentChanges": "שינויים אחרונים",
|
||||
"WhatsNew": "מה חדש?",
|
||||
"minutes": "דקות",
|
||||
"Theme": "ערכת נושא",
|
||||
"ConnectionLostReconnect": "Radarr ינסה להתחבר אוטומטית, או שתלחץ על טען מחדש למטה.",
|
||||
"Album": "אלבום",
|
||||
"Artist": "אמן"
|
||||
}
|
||||
|
||||
@@ -207,7 +207,6 @@
|
||||
"Warn": "चेतावनी देना",
|
||||
"Wiki": "विकि",
|
||||
"ConnectionLost": "संपर्क टूट गया",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr अपने आप कनेक्ट होने का प्रयास करेगा, या आप नीचे पुनः लोड कर सकते हैं।",
|
||||
"ConnectSettings": "कनेक्ट सेटिंग्स",
|
||||
"CouldNotConnectSignalR": "सिग्नलआर से कनेक्ट नहीं हो सका, UI अपडेट नहीं होगा",
|
||||
"Custom": "रिवाज",
|
||||
@@ -316,7 +315,6 @@
|
||||
"HistoryCleanupDaysHelpText": "स्वचालित सफाई को अक्षम करने के लिए 0 पर सेट करें",
|
||||
"HistoryCleanupDaysHelpTextWarning": "रीसायकल बिन में चयनित दिनों की तुलना में पुरानी फाइलें अपने आप साफ हो जाएंगी",
|
||||
"NetCore": ".NET कोर",
|
||||
"ConnectionLostMessage": "रैडियर ने बैकएंड से कनेक्शन खो दिया है और कार्यक्षमता को बहाल करने के लिए इसे फिर से लोड करना होगा।",
|
||||
"GrabReleases": "पकड़ो रिलीज",
|
||||
"Yes": "हाँ",
|
||||
"Link": "लिंक",
|
||||
@@ -343,5 +341,10 @@
|
||||
"ApplyTagsHelpTextReplace": "प्रतिस्थापित करें: दर्ज किए गए टैगों के साथ टैग बदलें (सभी टैग्स को खाली करने के लिए कोई टैग दर्ज न करें)",
|
||||
"DownloadClientPriorityHelpText": "एकाधिक डाउनलोड ग्राहकों को प्राथमिकता दें। राउंड-रॉबिन का उपयोग उसी प्राथमिकता वाले ग्राहकों के लिए किया जाता है।",
|
||||
"Year": "साल",
|
||||
"Genre": "शैलियां"
|
||||
"Genre": "शैलियां",
|
||||
"ConnectionLostReconnect": "Radarr अपने आप कनेक्ट होने का प्रयास करेगा, या आप नीचे पुनः लोड कर सकते हैं।",
|
||||
"RecentChanges": "हाल में हुए बदलाव",
|
||||
"WhatsNew": "नया क्या है?",
|
||||
"minutes": "मिनट",
|
||||
"DeleteAppProfileMessageText": "क्या आप वाकई गुणवत्ता प्रोफ़ाइल {0} को हटाना चाहते हैं"
|
||||
}
|
||||
|
||||
@@ -170,5 +170,6 @@
|
||||
"Priority": "Prioritet",
|
||||
"Url": "Url",
|
||||
"Result": "Rezultat",
|
||||
"SaveChanges": "Spremi izmjene"
|
||||
"SaveChanges": "Spremi izmjene",
|
||||
"DeleteAppProfileMessageText": "Jeste li sigurni da želite obrisati ovaj profil odgode?"
|
||||
}
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
"ConnectSettingsSummary": "Értesítések és egyéni szkriptek",
|
||||
"ConnectSettings": "Kapcsolódási Beállítások",
|
||||
"Connections": "Kapcsolatok",
|
||||
"ConnectionLostMessage": "A Prowlarr elvesztette kapcsolatát a háttérrendszerrel, a funkciók helyreállításához frissíts.",
|
||||
"ConnectionLostAutomaticMessage": "A Prowlarr megpróbál automatikusan csatlakozni, vagy kattints a frissítés gombra.",
|
||||
"ConnectionLost": "Kapcsolódás Elveszett",
|
||||
"Connect": "Értesítések",
|
||||
"Component": "Komponens",
|
||||
@@ -307,7 +305,6 @@
|
||||
"SettingsFilterSentryEvents": "Az Analytics-események szűrése",
|
||||
"SettingsConsoleLogLevel": "Konzol naplószint",
|
||||
"SearchIndexers": "Indexelők keresése",
|
||||
"IndexersSelectedInterp": "{0} Indexelő(k) kiválasztva",
|
||||
"IndexerQuery": "Indexelő lekérdezés",
|
||||
"IndexerHealthCheckNoIndexers": "Nincs engedélyezve indexelő, a Prowlarr nem ad vissza keresési eredményeket",
|
||||
"EnableIndexer": "Indexelő engedélyezése",
|
||||
@@ -338,7 +335,6 @@
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Nem lehet új alkalmazásprofilt hozzáadni, próbálkozzon újra.",
|
||||
"AddDownloadClient": "Letöltőkliens hozzáadása",
|
||||
"Applications": "Alkalmazások",
|
||||
"AppProfileDeleteConfirm": "Biztosan törli a következőt: {0}?",
|
||||
"AppProfileInUse": "Használatban lévő alkalmazásprofil",
|
||||
"Apps": "Appok",
|
||||
"Auth": "Engedélyek",
|
||||
@@ -492,5 +488,11 @@
|
||||
"Season": "Évad",
|
||||
"Album": "Album",
|
||||
"Artist": "Előadó",
|
||||
"Author": "Szerző"
|
||||
"Author": "Szerző",
|
||||
"ConnectionLostReconnect": "A Radarr megpróbál automatikusan csatlakozni, vagy kattints a frissítés gombra.",
|
||||
"DeleteAppProfileMessageText": "Biztosan törli a {0} minőségi profilt?",
|
||||
"RecentChanges": "Friss változtatások",
|
||||
"WhatsNew": "Mi az újdonság?",
|
||||
"ConnectionLostToBackend": "A Radarr elvesztette kapcsolatát a háttérrendszerrel, a funkciók helyreállításához frissíts.",
|
||||
"minutes": "percek"
|
||||
}
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
"Indexers": "Pengindeks",
|
||||
"Name": "Nama",
|
||||
"NetCore": ".NET",
|
||||
"ConnectionLostAutomaticMessage": "Radarr akan mencoba untuk menghubungi secara otomatis, atau klik muat ulang di bawah.",
|
||||
"Grabs": "Peroleh",
|
||||
"UILanguageHelpText": "Bahasa yang digunakan UI Sonarr",
|
||||
"Actions": "Tindakan",
|
||||
"AllIndexersHiddenDueToFilter": "Semua film disembunyikan karena penyaringan yang diterapkan.",
|
||||
"AnalyticsEnabledHelpText": "Kirimkan informasi penggunaan secara anonim ke server Radarr. Informasi tersebut mengandung browser kamu, halaman WebUI Radarr yang kamu gunakan, pelaporan masalah serta OS dan versi runtime. Kami akan memanfaatkan informasi ini untuk memprioritaskan fitur dan perbaikan bug."
|
||||
"AnalyticsEnabledHelpText": "Kirimkan informasi penggunaan secara anonim ke server Radarr. Informasi tersebut mengandung browser kamu, halaman WebUI Radarr yang kamu gunakan, pelaporan masalah serta OS dan versi runtime. Kami akan memanfaatkan informasi ini untuk memprioritaskan fitur dan perbaikan bug.",
|
||||
"ConnectionLostReconnect": "Radarr akan mencoba untuk menghubungi secara otomatis, atau klik muat ulang di bawah."
|
||||
}
|
||||
|
||||
@@ -158,7 +158,6 @@
|
||||
"Columns": "Súlur",
|
||||
"Component": "Hluti",
|
||||
"ConnectionLost": "Tenging rofin",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr mun reyna að tengjast sjálfkrafa eða þú getur smellt á endurhlaða hér að neðan.",
|
||||
"Folder": "Mappa",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Fyrir frekari upplýsingar um einstaka niðurhal viðskiptavini, smelltu á upplýsingatakkana.",
|
||||
"GeneralSettings": "Almennar stillingar",
|
||||
@@ -322,7 +321,6 @@
|
||||
"No": "Nei",
|
||||
"UnableToLoadIndexers": "Ekki er hægt að hlaða Indexers",
|
||||
"Yes": "Já",
|
||||
"ConnectionLostMessage": "Whisparr hefur misst tenginguna við bakendann og þarf að endurhlaða hann til að endurheimta virkni.",
|
||||
"LastExecution": "Síðasta aftaka",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Allir verðtryggingaraðilar eru ekki tiltækir vegna bilana í meira en 6 klukkustundir",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Vísitölufólk er ekki tiltækt vegna bilana í meira en 6 klukkustundir: {0}",
|
||||
@@ -343,5 +341,10 @@
|
||||
"ApplyTagsHelpTextRemove": "Fjarlægja: Fjarlægðu innsláttarmerkin",
|
||||
"DownloadClientPriorityHelpText": "Forgangsraðaðu mörgum niðurhal viðskiptavinum. Round-Robin er notað fyrir viðskiptavini með sömu forgang.",
|
||||
"Track": "Spor",
|
||||
"Year": "Ár"
|
||||
"Year": "Ár",
|
||||
"DeleteAppProfileMessageText": "Ertu viss um að þú viljir eyða gæðasniðinu {0}",
|
||||
"RecentChanges": "Nýlegar breytingar",
|
||||
"WhatsNew": "Hvað er nýtt?",
|
||||
"ConnectionLostReconnect": "Radarr mun reyna að tengjast sjálfkrafa eða þú getur smellt á endurhlaða hér að neðan.",
|
||||
"minutes": "Fundargerð"
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
"Branch": "Ramo",
|
||||
"BindAddressHelpText": "Indirizzo IP valido, localhost o '*' per tutte le interfacce di rete",
|
||||
"BindAddress": "Indirizzo di Bind",
|
||||
"Backups": "I Backup",
|
||||
"Backups": "Backups",
|
||||
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
|
||||
"BackupIntervalHelpText": "Intervallo tra i backup automatici",
|
||||
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di Prowlarr",
|
||||
@@ -142,8 +142,6 @@
|
||||
"DeleteBackup": "Cancella Backup",
|
||||
"DBMigration": "Migrazione DB",
|
||||
"ConnectSettings": "Impostazioni di Connessione",
|
||||
"ConnectionLostMessage": "Prowlarr ha perso la connessione al backend e dovrà essere ricaricato per ripristinare la funzionalità.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr cercherà di connettersi automaticamente, oppure clicca su ricarica qui sotto.",
|
||||
"ConnectionLost": "Connessione Persa",
|
||||
"Component": "Componente",
|
||||
"Columns": "Colonne",
|
||||
@@ -151,7 +149,7 @@
|
||||
"CancelPendingTask": "Sei sicuro di voler cancellare questa operazione in sospeso?",
|
||||
"BranchUpdateMechanism": "Ramo utilizzato dal sistema di aggiornamento esterno",
|
||||
"BranchUpdate": "Ramo da usare per aggiornare Prowlarr",
|
||||
"AddingTag": "Aggiungi etichetta",
|
||||
"AddingTag": "Aggiungendo etichetta",
|
||||
"Password": "Password",
|
||||
"OnHealthIssueHelpText": "Quando c'è un problema",
|
||||
"NotificationTriggers": "Attivatori di Notifica",
|
||||
@@ -365,7 +363,6 @@
|
||||
"AppProfileInUse": "Profilo App in Uso",
|
||||
"Application": "Applicazione",
|
||||
"BookSearchTypes": "Tipi di Ricerca Libri",
|
||||
"AppProfileDeleteConfirm": "Sicuro di voler eliminare {0}?",
|
||||
"AppSettingsSummary": "Applicazioni e impostazioni per configurare come Prowlarr interagisce con i tuoi programmi PVR",
|
||||
"Apps": "Le App",
|
||||
"DevelopmentSettings": "Impostazioni di Sviluppo",
|
||||
@@ -380,7 +377,6 @@
|
||||
"Proxies": "Proxy",
|
||||
"UnableToLoadApplicationList": "Impossibile careicare la lista applicazioni",
|
||||
"Website": "Sito",
|
||||
"IndexersSelectedInterp": "{0} Indicizzatore(i) Selezionato(i)",
|
||||
"Privacy": "Privacy",
|
||||
"SettingsIndexerLogging": "Logging Migliorato dell'Indicizzatore",
|
||||
"TestAllApps": "Prova Tutte le App",
|
||||
@@ -491,5 +487,13 @@
|
||||
"Season": "Stagione",
|
||||
"Year": "Anno",
|
||||
"UpdateAvailable": "É disponibile un nuovo aggiornamento",
|
||||
"Author": "Autore"
|
||||
"Author": "Autore",
|
||||
"ApplyChanges": "Applica Cambiamenti",
|
||||
"ApiKeyValidationHealthCheckMessage": "Aggiorna la tua chiave API in modo che abbia una lunghezza di almeno {0} caratteri. Puoi farlo dalle impostazioni o dal file di configurazione",
|
||||
"DeleteAppProfileMessageText": "Sicuro di voler cancellare il profilo di qualità {0}",
|
||||
"RecentChanges": "Cambiamenti recenti",
|
||||
"WhatsNew": "Cosa c'è di nuovo?",
|
||||
"ConnectionLostReconnect": "Radarr cercherà di connettersi automaticamente, oppure clicca su ricarica qui sotto.",
|
||||
"ConnectionLostToBackend": "Radarr ha perso la connessione al backend e dovrà essere ricaricato per ripristinare la funzionalità.",
|
||||
"minutes": "Minuti"
|
||||
}
|
||||
|
||||
@@ -131,7 +131,6 @@
|
||||
"Columns": "列",
|
||||
"Component": "成分",
|
||||
"ConnectionLost": "接続切断",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarrは自動的に接続を試みます。または、下の[再読み込み]をクリックしてください。",
|
||||
"Connections": "接続",
|
||||
"ConnectSettings": "接続設定",
|
||||
"Options": "オプション",
|
||||
@@ -322,7 +321,6 @@
|
||||
"No": "番号",
|
||||
"UnableToLoadIndexers": "インデクサーを読み込めません",
|
||||
"Yes": "はい",
|
||||
"ConnectionLostMessage": "Whisparrはバックエンドへの接続を失ったため、機能を復元するには再ロードする必要があります。",
|
||||
"LastDuration": "lastDuration",
|
||||
"LastExecution": "最後の実行",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "6時間以上の障害のため、すべてのインデクサーが使用できなくなります",
|
||||
@@ -343,5 +341,10 @@
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "選択した映画にタグを適用する方法",
|
||||
"ApplyTagsHelpTextRemove": "削除:入力したタグを削除します",
|
||||
"DownloadClientPriorityHelpText": "複数のダウンロードクライアントに優先順位を付けます。ラウンドロビンは、同じ優先度のクライアントに使用されます。",
|
||||
"More": "もっと"
|
||||
"More": "もっと",
|
||||
"ConnectionLostReconnect": "Radarrは自動的に接続を試みます。または、下の[再読み込み]をクリックしてください。",
|
||||
"DeleteAppProfileMessageText": "品質プロファイル{0}を削除してもよろしいですか",
|
||||
"RecentChanges": "最近の変化",
|
||||
"WhatsNew": "新着情報?",
|
||||
"minutes": "議事録"
|
||||
}
|
||||
|
||||
@@ -111,7 +111,6 @@
|
||||
"Uptime": "가동 시간",
|
||||
"YesCancel": "예, 취소합니다",
|
||||
"Folder": "폴더",
|
||||
"ConnectionLostMessage": "Prowlarr는 백엔드와의 연결이 끊어졌으며 기능을 복원하려면 다시 로딩해야 합니다.",
|
||||
"EnableAutomaticSearch": "자동 검색 활성화",
|
||||
"EnableAutomaticSearchHelpText": "UI 또는 Prowlarr를 통해 자동 검색을 수행 할 때 사용됩니다.",
|
||||
"ErrorLoadingContents": "콘텐츠로드 오류",
|
||||
@@ -166,7 +165,6 @@
|
||||
"UnableToLoadHistory": "기록을로드 할 수 없습니다.",
|
||||
"UnableToLoadTags": "태그를로드 할 수 없습니다.",
|
||||
"UnableToLoadUISettings": "UI 설정을로드 할 수 없습니다.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr가 자동으로 연결을 시도하거나 아래에서 새로고침을 클릭할 수 있습니다.",
|
||||
"RemovingTag": "태그 제거",
|
||||
"IndexerPriority": "인덱서 우선 순위",
|
||||
"Language": "언어",
|
||||
@@ -344,5 +342,8 @@
|
||||
"ApplyTagsHelpTextReplace": "바꾸기 : 태그를 입력 한 태그로 바꿉니다 (모든 태그를 지우려면 태그를 입력하지 않음)",
|
||||
"DeleteSelectedIndexersMessageText": "인덱서 '{0}'을 (를) 삭제 하시겠습니까?",
|
||||
"Track": "자취",
|
||||
"Year": "년"
|
||||
"Year": "년",
|
||||
"ConnectionLostReconnect": "Radarr가 자동으로 연결을 시도하거나 아래에서 새로고침을 클릭할 수 있습니다.",
|
||||
"ConnectionLostToBackend": "Radarr는 백엔드와의 연결이 끊어졌으며 기능을 복원하려면 다시 로딩해야 합니다.",
|
||||
"DeleteAppProfileMessageText": "품질 프로필 {0}을 (를) 삭제 하시겠습니까?"
|
||||
}
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
"New": "Ny",
|
||||
"RSS": "RSS",
|
||||
"Applications": "Applikasjoner",
|
||||
"ConnectionLostMessage": "Prowlarr har mistet tilkoblingen til baksystemet og må lastes inn på nytt for å gjenopprette funksjonalitet.",
|
||||
"Connections": "Tilkoblinger",
|
||||
"Usenet": "Usenet",
|
||||
"Username": "Brukernavn",
|
||||
@@ -80,7 +79,6 @@
|
||||
"Columns": "Kolonner",
|
||||
"Component": "Komponent",
|
||||
"Connect": "Varslinger",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr vil forsøke å koble til automatisk, eller du kan klikke oppdater nedenfor.",
|
||||
"ConnectSettings": "Tilkoblingsinnstillinger",
|
||||
"CouldNotConnectSignalR": "Kunne ikke koble til SignalR, grensesnitt vil ikke oppdateres",
|
||||
"Custom": "Tilpass",
|
||||
@@ -130,5 +128,8 @@
|
||||
"Artist": "artist",
|
||||
"ApplicationUrlHelpText": "Denne applikasjonens eksterne URL inkludert http(s)://, port og URL base",
|
||||
"ApplyChanges": "Bekreft endringer",
|
||||
"ApiKeyValidationHealthCheckMessage": "Vennligst oppdater din API-nøkkel til å være minst {0} tegn lang. Du kan gjøre dette via innstillinger eller konfigurasjonsfilen"
|
||||
"ApiKeyValidationHealthCheckMessage": "Vennligst oppdater din API-nøkkel til å være minst {0} tegn lang. Du kan gjøre dette via innstillinger eller konfigurasjonsfilen",
|
||||
"ConnectionLostReconnect": "Radarr vil forsøke å koble til automatisk, eller du kan klikke oppdater nedenfor.",
|
||||
"ConnectionLostToBackend": "Radarr har mistet tilkoblingen til baksystemet og må lastes inn på nytt for å gjenopprette funksjonalitet.",
|
||||
"DeleteAppProfileMessageText": "Er du sikker på at du vil slette denne forsinkelsesprofilen?"
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "Maak je API sleutel alsjeblieft minimaal {0} karakters lang. Dit kan gedaan worden via de instellingen of het configuratiebestand",
|
||||
"AppDataDirectory": "AppData folder",
|
||||
"AppDataLocationHealthCheckMessage": "Updaten zal niet mogelijk zijn om het verwijderen van AppData te voorkomen",
|
||||
"AppProfileDeleteConfirm": "Weet u zeker dat u {0} wilt verwijderen?",
|
||||
"AppProfileInUse": "App-profiel in gebruik",
|
||||
"AppProfileSelectHelpText": "App-profielen worden gebruikt om de instellingen voor RSS, Automatisch zoeken en Interactief zoeken bij applicatiesynchronisatie te beheren",
|
||||
"AppSettingsSummary": "Applicaties en instellingen om te configureren hoe Prowlarr met uw PVR-programma's omgaat",
|
||||
@@ -79,8 +78,6 @@
|
||||
"ConnectSettings": "Connecties Instellingen",
|
||||
"ConnectSettingsSummary": "Meldingen en aangepaste scripts",
|
||||
"ConnectionLost": "Verbinding Onderbroken",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr zal automatisch proberen te verbinden, of u kunt hieronder op herladen klikken.",
|
||||
"ConnectionLostMessage": "Prowlarr heeft zijn verbinding met de backend verloren en zal moeten worden herladen om functionaliteit te herstellen.",
|
||||
"Connections": "Connecties",
|
||||
"CouldNotConnectSignalR": "Kan geen verbinding maken met SignalR, gebruikersinterface wordt niet bijgewerkt",
|
||||
"Custom": "Aangepast",
|
||||
@@ -192,7 +189,6 @@
|
||||
"IndexerVipCheckExpiredClientMessage": "Indexeerder VIP-voordelen zijn verlopen: {0}",
|
||||
"IndexerVipCheckExpiringClientMessage": "Indexeerder VIP-voordelen verlopen binnenkort: {0}",
|
||||
"Indexers": "Indexeerders",
|
||||
"IndexersSelectedInterp": "{0} Indexer(s) Geselecteerd",
|
||||
"Info": "Info",
|
||||
"InstanceName": "Naam van de instantie",
|
||||
"InteractiveSearch": "Interactief Zoeken",
|
||||
@@ -446,5 +442,12 @@
|
||||
"UpdateAvailable": "Nieuwe update is beschikbaar",
|
||||
"Label": "Label",
|
||||
"Publisher": "Uitgever",
|
||||
"ApplyChanges": "Pas Wijzigingen Toe"
|
||||
"ApplyChanges": "Pas Wijzigingen Toe",
|
||||
"CountDownloadClientsSelected": "{count} download client(s) geselecteerd",
|
||||
"ConnectionLostReconnect": "Radarr zal automatisch proberen te verbinden, of u kunt hieronder op herladen klikken.",
|
||||
"RecentChanges": "Recente wijzigingen",
|
||||
"WhatsNew": "Wat is er nieuw?",
|
||||
"ConnectionLostToBackend": "Radarr heeft zijn verbinding met de backend verloren en zal moeten worden herladen om de functionaliteit te kunnen herstellen.",
|
||||
"minutes": "Minuten",
|
||||
"DeleteAppProfileMessageText": "Bent u zeker dat u het kwaliteitsprofiel {0} wilt verwijderen"
|
||||
}
|
||||
|
||||
@@ -119,7 +119,6 @@
|
||||
"CloneProfile": "Klonuj profil",
|
||||
"Component": "Składnik",
|
||||
"ConnectionLost": "Utracono połączenie",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr spróbuje połączyć się automatycznie lub możesz kliknąć przycisk przeładuj poniżej.",
|
||||
"Custom": "Zwyczaj",
|
||||
"Date": "Data",
|
||||
"Dates": "Daktyle",
|
||||
@@ -315,7 +314,6 @@
|
||||
"OnGrab": "Na Grab",
|
||||
"OnHealthIssue": "W kwestii zdrowia",
|
||||
"TestAllIndexers": "Przetestuj wszystkie indeksatory",
|
||||
"ConnectionLostMessage": "Whisparr utracił połączenie z zapleczem i będzie musiał zostać ponownie załadowany, aby przywrócić funkcjonalność.",
|
||||
"GrabReleases": "Grab Release",
|
||||
"No": "Nie",
|
||||
"NetCore": ".NET Core",
|
||||
@@ -363,5 +361,11 @@
|
||||
"UpdateAvailable": "Dostępna jest aktualizacja",
|
||||
"Genre": "Gatunki",
|
||||
"ApplyChanges": "Zastosuj zmiany",
|
||||
"ApiKeyValidationHealthCheckMessage": "Zaktualizuj swój klucz API aby był długi na co najmniej {0} znaków. Możesz to zrobić poprzez ustawienia lub plik konfiguracyjny"
|
||||
"ApiKeyValidationHealthCheckMessage": "Zaktualizuj swój klucz API aby był długi na co najmniej {0} znaków. Możesz to zrobić poprzez ustawienia lub plik konfiguracyjny",
|
||||
"DeleteAppProfileMessageText": "Czy na pewno chcesz usunąć profil jakości '{0}'?",
|
||||
"ConnectionLostReconnect": "Radarr spróbuje połączyć się automatycznie lub możesz kliknąć przycisk przeładuj poniżej.",
|
||||
"RecentChanges": "Ostatnie zmiany",
|
||||
"WhatsNew": "Co nowego?",
|
||||
"ConnectionLostToBackend": "Radarr utracił połączenie z silnikiem programu, aby przywrócić funkcjonalność musi zostać zrestartowany.",
|
||||
"minutes": "Minuty"
|
||||
}
|
||||
|
||||
@@ -112,8 +112,6 @@
|
||||
"CustomFilters": "Filtros personalizados",
|
||||
"ConnectSettingsSummary": "Notificações, ligações para servidores/leitores de multimédia e scripts personalizados",
|
||||
"Connections": "Ligações",
|
||||
"ConnectionLostMessage": "O Prowlarr perdeu a ligação com o back-end e precisará recarregar para restaurar a funcionalidade.",
|
||||
"ConnectionLostAutomaticMessage": "O Prowlarr tentará ligar automaticamente, ou você pode clicar em Recarregar abaixo.",
|
||||
"ConnectionLost": "Ligação perdida",
|
||||
"Connect": "Conexões",
|
||||
"Component": "Componente",
|
||||
@@ -289,7 +287,6 @@
|
||||
"MovieIndexScrollBottom": "Índice do filme: deslocar para baixo",
|
||||
"SettingsConsoleLogLevel": "Nível de registo do console",
|
||||
"SearchIndexers": "Pesquisar indexadores",
|
||||
"IndexersSelectedInterp": "{0} indexador(es) selecionado(s)",
|
||||
"IndexerRss": "RSS do indexador",
|
||||
"IndexerQuery": "Consulta do indexador",
|
||||
"IndexerObsoleteCheckMessage": "Os seguintes indexadores são obsoletos ou foram atualizados: {0}. Remova-os e/ou adicione-os novamente ao Prowlarr",
|
||||
@@ -348,7 +345,6 @@
|
||||
"Auth": "Autenticação",
|
||||
"Apps": "Aplicações",
|
||||
"AppProfileInUse": "Perfil da aplicação em uso",
|
||||
"AppProfileDeleteConfirm": "Tem a certeza que quer eliminar {0}?",
|
||||
"Applications": "Aplicações",
|
||||
"AddDownloadClient": "Adicionar cliente de transferências",
|
||||
"CouldNotConnectSignalR": "Não é possível ligar-se ao SignalR, a IU não atualizará",
|
||||
@@ -437,5 +433,11 @@
|
||||
"Theme": "Tema",
|
||||
"Track": "Rastreio",
|
||||
"UpdateAvailable": "Nova atualização disponível",
|
||||
"Label": "Rótulo"
|
||||
"Label": "Rótulo",
|
||||
"ConnectionLostReconnect": "O Radarr tentará ligar-se automaticamente, ou você pode clicar em Recarregar abaixo.",
|
||||
"ConnectionLostToBackend": "O Radarr perdeu a ligação com o back-end e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"WhatsNew": "O que há de novo?",
|
||||
"RecentChanges": "Mudanças recentes",
|
||||
"minutes": "Minutos",
|
||||
"DeleteAppProfileMessageText": "Tem a certeza que quer eliminar o perfil de qualidade \"{0}\"?"
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "Atualize sua chave de API para ter pelo menos {0} caracteres. Você pode fazer isso através das configurações ou do arquivo de configuração",
|
||||
"AppDataDirectory": "Diretório AppData",
|
||||
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização",
|
||||
"AppProfileDeleteConfirm": "Tem certeza que deseja excluir {0}?",
|
||||
"AppProfileInUse": "Perfil de aplicativo em uso",
|
||||
"AppProfileSelectHelpText": "Os perfis de aplicativos são usados para controlar as configurações de RSS, Pesquisa automática e Pesquisa interativa ao sincronizar o aplicativo",
|
||||
"AppSettingsSummary": "Aplicativos e configurações para configurar como Prowlarr interage com seus programas PVR",
|
||||
@@ -48,7 +47,7 @@
|
||||
"Auth": "Autenticação",
|
||||
"Authentication": "Autenticação",
|
||||
"AuthenticationMethodHelpText": "Requer nome de usuário e senha para acessar o Prowlarr",
|
||||
"AuthenticationRequired": "Autenticação Requerida",
|
||||
"AuthenticationRequired": "Autentificação Requerida",
|
||||
"AuthenticationRequiredHelpText": "Altere para quais solicitações a autenticação é necessária. Não mude a menos que você entenda os riscos.",
|
||||
"AuthenticationRequiredWarning": "Para impedir o acesso remoto sem autenticação, o Prowlarr agora exige que a autenticação seja habilitada. Configure seu método de autenticação e credenciais. Você pode, opcionalmente, desabilitar a autenticação de endereços locais. Consulte o FAQ para obter informações adicionais.",
|
||||
"Author": "Autor",
|
||||
@@ -58,10 +57,10 @@
|
||||
"Backup": "Backup",
|
||||
"BackupFolderHelpText": "Os caminhos relativos estarão no diretório AppData do Prowlarr",
|
||||
"BackupIntervalHelpText": "Intervalo entre backups automáticos",
|
||||
"BackupNow": "Fazer Backup Agora",
|
||||
"BackupNow": "Fazer backup agora",
|
||||
"BackupRetentionHelpText": "Backups automáticos anteriores ao período de retenção serão limpos automaticamente",
|
||||
"Backups": "Backups",
|
||||
"BeforeUpdate": "Antes de atualizar",
|
||||
"BeforeUpdate": "Antes da atualização",
|
||||
"BindAddress": "Fixar Endereço",
|
||||
"BindAddressHelpText": "Endereço IP válido, localhost ou '*' para todas as interfaces",
|
||||
"Book": "Livro",
|
||||
@@ -72,7 +71,7 @@
|
||||
"BranchUpdateMechanism": "Ramificação usada pelo mecanismo externo de atualização",
|
||||
"BypassProxyForLocalAddresses": "Ignorar proxy para endereços locais",
|
||||
"Cancel": "Cancelar",
|
||||
"CancelPendingTask": "Tem certeza de que deseja cancelar esta tarefa pendente?",
|
||||
"CancelPendingTask": "Tem certeza de que deseja cancelar essa tarefa pendente?",
|
||||
"Categories": "Categorias",
|
||||
"Category": "Categoria",
|
||||
"CertificateValidation": "Validação de Certificado",
|
||||
@@ -90,9 +89,7 @@
|
||||
"Connect": "Notificações",
|
||||
"ConnectSettings": "Configurações de Conexão",
|
||||
"ConnectSettingsSummary": "Notificações e scripts personalizados",
|
||||
"ConnectionLost": "Conexão perdida",
|
||||
"ConnectionLostAutomaticMessage": "O Prowlarr tentará se conectar automaticamente, ou você pode clicar em Recarregar abaixo.",
|
||||
"ConnectionLostMessage": "O Prowlarr perdeu sua conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"ConnectionLost": "Conexão Perdida",
|
||||
"Connections": "Conexões",
|
||||
"CouldNotConnectSignalR": "Não é possível conectar ao SignalR, a interface não atualizará",
|
||||
"Custom": "Personalizar",
|
||||
@@ -104,18 +101,18 @@
|
||||
"Delete": "Excluir",
|
||||
"DeleteAppProfile": "Excluir perfil do aplicativo",
|
||||
"DeleteApplication": "Excluir aplicativo",
|
||||
"DeleteApplicationMessageText": "Tem certeza de que deseja excluir o aplicativo \"{0}\"?",
|
||||
"DeleteApplicationMessageText": "Tem certeza de que deseja excluir o aplicativo '{name}'?",
|
||||
"DeleteBackup": "Excluir Backup",
|
||||
"DeleteBackupMessageText": "Tem certeza que deseja excluir o backup \"{0}\"?",
|
||||
"DeleteBackupMessageText": "Tem certeza de que deseja excluir o backup '{name}'?",
|
||||
"DeleteClientCategory": "Excluir Categoria de Cliente de Download",
|
||||
"DeleteDownloadClient": "Excluir Cliente de Download",
|
||||
"DeleteDownloadClientMessageText": "Tem certeza que deseja excluir o cliente de download \"{0}\"?",
|
||||
"DeleteDownloadClientMessageText": "Tem certeza de que deseja excluir o cliente de download '{name}'?",
|
||||
"DeleteIndexerProxy": "Apagar Proxy do Indexador",
|
||||
"DeleteIndexerProxyMessageText": "Tem certeza que deseja apagar o proxy '{0}'?",
|
||||
"DeleteIndexerProxyMessageText": "Tem certeza de que deseja excluir o proxy do indexador '{name}'?",
|
||||
"DeleteNotification": "Excluir Notificação",
|
||||
"DeleteNotificationMessageText": "Tem certeza de que deseja excluir a notificação \"{0}\"?",
|
||||
"DeleteNotificationMessageText": "Tem certeza de que deseja excluir o perfil de metadados '{name}'?",
|
||||
"DeleteTag": "Excluir tag",
|
||||
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag \"{0}\"?",
|
||||
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag '{label}'?",
|
||||
"Description": "Descrição",
|
||||
"Details": "Detalhes",
|
||||
"DevelopmentSettings": "Configurações de desenvolvimento",
|
||||
@@ -137,7 +134,7 @@
|
||||
"EditSyncProfile": "Editar Perfil de Sincronização",
|
||||
"ElapsedTime": "Tempo Decorrido",
|
||||
"Enable": "Habilitar",
|
||||
"EnableAutomaticSearch": "Ativar pesquisa automática",
|
||||
"EnableAutomaticSearch": "Ativar a pesquisa automática",
|
||||
"EnableAutomaticSearchHelpText": "Será usado ao realizar pesquisas automáticas pela interface ou pelo Prowlarr",
|
||||
"EnableIndexer": "Habilitar indexador",
|
||||
"EnableInteractiveSearch": "Ativar pesquisa interativa",
|
||||
@@ -158,7 +155,7 @@
|
||||
"Exception": "Exceção",
|
||||
"ExistingTag": "Etiqueta existente",
|
||||
"Failed": "Falhou",
|
||||
"FeatureRequests": "Solicitações de recursos",
|
||||
"FeatureRequests": "Solicitação de recursos",
|
||||
"Filename": "Nome do arquivo",
|
||||
"Files": "Arquivos",
|
||||
"Filter": "Filtrar",
|
||||
@@ -170,7 +167,7 @@
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Para saber mais sobre cada cliente de download, clique nos botões de informações.",
|
||||
"FullSync": "Sincronização completa",
|
||||
"General": "Geral",
|
||||
"GeneralSettings": "Configurações Gerais",
|
||||
"GeneralSettings": "Configurações gerais",
|
||||
"GeneralSettingsSummary": "Porta, SSL, nome de usuário/senha, proxy, análises e atualizações",
|
||||
"Genre": "Gênero",
|
||||
"GrabReleases": "Capturar lançamento(s)",
|
||||
@@ -185,7 +182,7 @@
|
||||
"HistoryCleanupDaysHelpText": "Defina como 0 para desabilitar a limpeza automática",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Os arquivos na lixeira mais antigos do que o número de dias selecionado serão limpos automaticamente",
|
||||
"HistoryDetails": "Detalhes do histórico",
|
||||
"HomePage": "Página Inicial",
|
||||
"HomePage": "Página inicial",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"Id": "ID",
|
||||
@@ -223,7 +220,6 @@
|
||||
"IndexerVipCheckExpiredClientMessage": "Benefícios VIP do Indexador expiraram: {0}",
|
||||
"IndexerVipCheckExpiringClientMessage": "Os benefícios VIPS do Indexador expirarão em breve: {0}",
|
||||
"Indexers": "Indexadores",
|
||||
"IndexersSelectedInterp": "{0} indexador(es) selecionado(s)",
|
||||
"Info": "Info",
|
||||
"InitialFailure": "Falha Inicial",
|
||||
"InstanceName": "Nome da Instância",
|
||||
@@ -240,13 +236,13 @@
|
||||
"LaunchBrowserHelpText": " Abrir o navegador Web e navegar até a página inicial do Prowlarr ao iniciar o aplicativo.",
|
||||
"Level": "Nível",
|
||||
"Link": "Link",
|
||||
"LogFiles": "Arquivos de log",
|
||||
"LogFiles": "Arquivos de registro",
|
||||
"LogLevel": "Nível de Registro",
|
||||
"LogLevelTraceHelpTextWarning": "O registro de rastreamento deve ser ativado apenas temporariamente",
|
||||
"Logging": "Registrando",
|
||||
"Logs": "Registros",
|
||||
"MIA": "Desaparecidos",
|
||||
"MaintenanceRelease": "Versão de manutenção: correções de bugs e outras melhorias. Veja Github Commit History para mais detalhes",
|
||||
"MaintenanceRelease": "Versão de manutenção: correções de bugs e outros aprimoramentos. Consulte o Histórico de Commit do Github para obter mais detalhes",
|
||||
"Manual": "Manual",
|
||||
"MappedCategories": "Categorias Mapeadas",
|
||||
"MappedDrivesRunningAsService": "As unidades de rede mapeadas não estão disponíveis quando executadas como um serviço do Windows. Consulte as Perguntas frequentes para saber mais",
|
||||
@@ -271,12 +267,12 @@
|
||||
"NoBackupsAreAvailable": "Não há backups disponíveis",
|
||||
"NoChange": "Sem alteração",
|
||||
"NoChanges": "Sem Alterações",
|
||||
"NoLeaveIt": "Não, deixe-o",
|
||||
"NoLeaveIt": "Não, deixe",
|
||||
"NoLinks": "Sem Links",
|
||||
"NoLogFiles": "Nenhum arquivo de log",
|
||||
"NoLogFiles": "Nenhum arquivo de registro",
|
||||
"NoSearchResultsFound": "Nenhum resultado encontrado, tente fazer uma nova busca abaixo.",
|
||||
"NoTagsHaveBeenAddedYet": "Nenhuma tag foi adicionada ainda",
|
||||
"NoUpdatesAreAvailable": "Nenhuma atualização está disponível",
|
||||
"NoUpdatesAreAvailable": "Não há atualizações disponíveis",
|
||||
"NotSupported": "Não Suportado",
|
||||
"Notification": "Notificação",
|
||||
"NotificationTriggers": "Gatilhos de Notificação",
|
||||
@@ -328,11 +324,11 @@
|
||||
"QueryOptions": "Opções de Consulta",
|
||||
"QueryResults": "Resultados da Consulta",
|
||||
"Queue": "Fila",
|
||||
"Queued": "Enfileirados",
|
||||
"Queued": "Na fila",
|
||||
"RSS": "RSS",
|
||||
"RSSIsNotSupportedWithThisIndexer": "O RSS não é compatível com este indexador",
|
||||
"RawSearchSupported": "Pesquisa Bruta Suportada",
|
||||
"ReadTheWikiForMoreInformation": "Leia o Wiki para mais informações",
|
||||
"ReadTheWikiForMoreInformation": "Leia o Wiki para obter mais informações",
|
||||
"Reddit": "Reddit",
|
||||
"Redirect": "Redirecionar",
|
||||
"RedirectHelpText": "Redirecionar a solicitação de download de entrada para o indexador e passar diretamente para a obtenção, em vez de por proxy usando o Prowlarr",
|
||||
@@ -343,7 +339,7 @@
|
||||
"Reload": "Recarregar",
|
||||
"Remove": "Remover",
|
||||
"RemoveFilter": "Remover filtro",
|
||||
"RemovedFromTaskQueue": "Removido da fila de tarefas",
|
||||
"RemovedFromTaskQueue": "Removido da Fila de Tarefas",
|
||||
"RemovingTag": "Removendo etiqueta",
|
||||
"RepeatSearch": "Repetir pesquisa",
|
||||
"Replace": "Substituir",
|
||||
@@ -366,7 +362,7 @@
|
||||
"Save": "Salvar",
|
||||
"SaveChanges": "Salvar Mudanças",
|
||||
"SaveSettings": "Salvar Configurações",
|
||||
"Scheduled": "Agendado",
|
||||
"Scheduled": "Programado",
|
||||
"ScriptPath": "Caminho do Script",
|
||||
"Search": "Pesquisar",
|
||||
"SearchCapabilities": "Recursos de Pesquisa",
|
||||
@@ -403,12 +399,12 @@
|
||||
"Shutdown": "Desligar",
|
||||
"Size": "Tamanho",
|
||||
"Sort": "Classificar",
|
||||
"Source": "Fonte",
|
||||
"Source": "Origem",
|
||||
"StartTypingOrSelectAPathBelow": "Comece a digitar ou selecione um caminho abaixo",
|
||||
"Started": "Iniciado",
|
||||
"StartupDirectory": "Diretório de inicialização",
|
||||
"Stats": "Estatísticas",
|
||||
"Status": "Estado",
|
||||
"Status": "Status",
|
||||
"StopSelecting": "Parar Seleção",
|
||||
"Style": "Estilo",
|
||||
"SuggestTranslationChange": "Sugerir mudança de tradução",
|
||||
@@ -425,19 +421,19 @@
|
||||
"TableOptionsColumnsMessage": "Escolha quais colunas são visíveis e em que ordem aparecem",
|
||||
"TagCannotBeDeletedWhileInUse": "Não pode ser excluído durante o uso",
|
||||
"TagIsNotUsedAndCanBeDeleted": "A tag não é usada e pode ser excluída",
|
||||
"Tags": "Tags",
|
||||
"Tags": "Etiquetas",
|
||||
"TagsHelpText": "Aplica-se a indexadores com pelo menos uma tag correspondente",
|
||||
"TagsSettingsSummary": "Veja todas as tags e como elas são usadas. Tags não utilizadas podem ser removidas",
|
||||
"Tasks": "Tarefas",
|
||||
"Test": "Testar",
|
||||
"TestAll": "Testar Tudo",
|
||||
"TestAll": "Testar tudo",
|
||||
"TestAllApps": "Testar todos os aplicativos",
|
||||
"TestAllClients": "Testar todos os clientes",
|
||||
"TestAllIndexers": "Testar todos os indexadores",
|
||||
"TheLatestVersionIsAlreadyInstalled": "A versão mais recente do Prowlarr já está instalada",
|
||||
"TheLatestVersionIsAlreadyInstalled": "A versão mais recente do {appName} já está instalada",
|
||||
"Theme": "Tema",
|
||||
"ThemeHelpText": "Alterar o tema da interface do usuário do aplicativo, o tema 'Auto' usará o tema do sistema operacional para definir o modo Claro ou Escuro. Inspirado por {0}",
|
||||
"Time": "Horário",
|
||||
"ThemeHelpText": "Alterar o tema da interface do usuário do aplicativo, o tema 'Auto' usará o tema do sistema operacional para definir o modo Claro ou Escuro. Inspirado por {inspiredBy}.",
|
||||
"Time": "Tempo",
|
||||
"Title": "Título",
|
||||
"Today": "Hoje",
|
||||
"Tomorrow": "Amanhã",
|
||||
@@ -452,7 +448,7 @@
|
||||
"Track": "Faixa",
|
||||
"TvSearch": "Pesquisar Séries",
|
||||
"Type": "Tipo",
|
||||
"UI": "Interface",
|
||||
"UI": "IU",
|
||||
"UILanguage": "Idioma da interface",
|
||||
"UILanguageHelpText": "Idioma que o Prowlarr usará para a interface",
|
||||
"UILanguageHelpTextWarning": "É necessário recarregar o navegador",
|
||||
@@ -467,7 +463,7 @@
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação, tente novamente.",
|
||||
"UnableToLoadAppProfiles": "Não foi possível carregar os perfis de aplicativos",
|
||||
"UnableToLoadApplicationList": "Não é possível carregar a lista de aplicativos",
|
||||
"UnableToLoadBackups": "Não foi possível carregar os backups",
|
||||
"UnableToLoadBackups": "Não é possível carregar backups",
|
||||
"UnableToLoadDevelopmentSettings": "Não foi possível carregar as configurações de desenvolvimento",
|
||||
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de download",
|
||||
"UnableToLoadGeneralSettings": "Não foi possível carregar as configurações gerais",
|
||||
@@ -512,12 +508,12 @@
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Como aplicar tags aos indexadores selecionados",
|
||||
"ApplyTagsHelpTextRemove": "Remover: remove as etiquetas inseridas",
|
||||
"ApplyTagsHelpTextReplace": "Substituir: Substitua as etiquetas pelas etiquetas inseridas (não digite nenhuma etiqueta para limpar todas as etiquetas)",
|
||||
"CountDownloadClientsSelected": "{0} cliente(s) de download selecionado(s)",
|
||||
"CountIndexersSelected": "{0} indexador(es) selecionado(s)",
|
||||
"DeleteSelectedApplicationsMessageText": "Tem certeza de que deseja excluir {0} lista(s) de importação selecionada(s)?",
|
||||
"CountDownloadClientsSelected": "{count} cliente(s) de download selecionado(s)",
|
||||
"CountIndexersSelected": "{count} indexador(es) selecionado(s)",
|
||||
"DeleteSelectedApplicationsMessageText": "Tem certeza de que deseja excluir {count} aplicativos selecionados?",
|
||||
"DeleteSelectedDownloadClients": "Excluir cliente(s) de download",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir {0} cliente(s) de download selecionado(s)?",
|
||||
"DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir {0} indexador(es) selecionado(s)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Tem certeza de que deseja excluir {count} cliente(s) de download selecionado(s)?",
|
||||
"DeleteSelectedIndexersMessageText": "Tem certeza de que deseja excluir {count} indexadores selecionados?",
|
||||
"DownloadClientPriorityHelpText": "Priorizar vários clientes de download. Usamos um rodízio para clientes com a mesma prioridade.",
|
||||
"EditSelectedDownloadClients": "Editar clientes de download selecionados",
|
||||
"EditSelectedIndexers": "Editar indexadores selecionados",
|
||||
@@ -529,11 +525,11 @@
|
||||
"AppsMinimumSeeders": "Semeadores mínimos de aplicativos",
|
||||
"AppsMinimumSeedersHelpText": "Semeadores mínimos exigidos pelos aplicativos para o indexador pegar, vazio é o padrão do perfil de sincronização",
|
||||
"BasicSearch": "Pesquisa básica",
|
||||
"CountApplicationsSelected": "{0} aplicativo(s) selecionado(s)",
|
||||
"CountIndexersAvailable": "{0} indexadores disponíveis",
|
||||
"CountApplicationsSelected": "{count} aplicativos selecionados",
|
||||
"CountIndexersAvailable": "{count} indexadores disponíveis",
|
||||
"DeleteSelectedIndexers": "Excluir indexadores selecionados",
|
||||
"DeleteSelectedApplications": "Excluir aplicativos selecionados",
|
||||
"FoundCountReleases": "Encontrou {0} lançamentos",
|
||||
"FoundCountReleases": "Encontrou {itemCount} lançamentos",
|
||||
"DeleteSelectedIndexer": "Excluir indexador selecionado",
|
||||
"IndexerCategories": "Categorias do indexador",
|
||||
"IndexerDownloadClientHelpText": "Especifique qual cliente de download é usado para capturas feitas no Prowlarr a partir deste indexador",
|
||||
@@ -545,19 +541,41 @@
|
||||
"QueryType": "Tipo de consulta",
|
||||
"SeedTime": "Tempo de Semeação",
|
||||
"SearchAllIndexers": "Pesquisar todos os indexadores",
|
||||
"SearchCountIndexers": "Pesquise {0} indexadores",
|
||||
"SearchCountIndexers": "Pesquisar {count} indexador(es)",
|
||||
"SeedRatio": "Proporção de sementes",
|
||||
"SeedRatioHelpText": "A proporção que um torrent deve atingir antes de parar, vazio é o padrão do aplicativo",
|
||||
"SeedTimeHelpText": "O tempo que um torrent deve ser propagado antes de parar, vazio é o padrão do aplicativo",
|
||||
"SelectedCountOfCountReleases": "{0} de {1} lançamentos selecionados",
|
||||
"SelectedCountOfCountReleases": "{selectedCount} de {itemCount} lançamentos selecionados",
|
||||
"NewznabUrl": "Url Newznab",
|
||||
"TorznabUrl": "Url Torznab",
|
||||
"GoToApplication": "Ir para o aplicativo",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Tem certeza de que deseja excluir '{0}' do Prowlarr?",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Tem certeza de que deseja excluir '{name}' do Prowlarr?",
|
||||
"AuthQueries": "Consultas de autenticação",
|
||||
"RssQueries": "Consultas RSS",
|
||||
"SearchQueries": "Consultas de pesquisa",
|
||||
"minutes": "minutos",
|
||||
"days": "dias",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadores com clientes de download inválidos: {0}."
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadores com clientes de download inválidos: {0}.",
|
||||
"DeleteAppProfileMessageText": "Tem certeza de que deseja excluir o perfil do aplicativo '{name}'?",
|
||||
"AppUpdated": "{appName} Atualizado",
|
||||
"AppUpdatedVersion": "{appName} foi atualizado para a versão `{version}`, para obter as alterações mais recentes, você precisará recarregar {appName}",
|
||||
"ConnectionLostToBackend": "{appName} perdeu sua conexão com o backend e precisará ser recarregado para restaurar a funcionalidade.",
|
||||
"RecentChanges": "Mudanças Recentes",
|
||||
"WhatsNew": "O quê há de novo?",
|
||||
"ConnectionLostReconnect": "{appName} tentará se conectar automaticamente ou você pode clicar em recarregar abaixo.",
|
||||
"AddApplicationImplementation": "Adicionar Aplicativo - {implementationName}",
|
||||
"AddConnectionImplementation": "Adicionar Conexão - {implementationName}",
|
||||
"EditApplicationImplementation": "Editar Aplicativo - {implementationName}",
|
||||
"AddCategory": "Adicionar Categoria",
|
||||
"AddConnection": "Adicionar Conexão",
|
||||
"AddDownloadClientImplementation": "Adicionar Cliente de Download - {implementationName}",
|
||||
"AddIndexerImplementation": "Adicionar Indexador - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Adicionar Proxy do Indexador - {implementationName}",
|
||||
"EditCategory": "Editar Categoria",
|
||||
"EditConnectionImplementation": "Editar Conexão - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Editar Cliente de Download - {implementationName}",
|
||||
"EditIndexerImplementation": "Editar Indexador - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Editar Proxy do Indexador - {implementationName}",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Todas as notificações estão indisponíveis devido a falhas",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Notificações indisponíveis devido a falhas: {0}"
|
||||
}
|
||||
|
||||
@@ -59,8 +59,6 @@
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexatoare indisponibile datorită erorilor: {0}",
|
||||
"HealthNoIssues": "Nicio problemă de configurare",
|
||||
"Error": "Eroare",
|
||||
"ConnectionLostMessage": "Prowlarr a pierdut conexiunea cu backend-ul și trebuie reîncărcat pentru a restabili funcționalitatea.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr va încerca să se conecteze automat, sau poți apăsa reîncarcă mai jos.",
|
||||
"ConnectionLost": "Conexiune Pierdută",
|
||||
"Component": "Componentă",
|
||||
"Columns": "Coloane",
|
||||
@@ -139,7 +137,7 @@
|
||||
"ApplicationStatusCheckAllClientMessage": "Toate aplicațiile sunt indisponibile datorită erorilor",
|
||||
"AreYouSureYouWantToResetYourAPIKey": "Sigur doriți să vă resetați cheia API?",
|
||||
"Authentication": "Autentificare",
|
||||
"AuthenticationMethodHelpText": "Solicitați numele de utilizator și parola pentru a accesa Prowlarr",
|
||||
"AuthenticationMethodHelpText": "Solicitați nume utilizator și parola pentru a accesa Prowlarr",
|
||||
"AutomaticSearch": "Căutare automată",
|
||||
"BackupFolderHelpText": "Căile relative vor fi în directorul AppData al lui Prowlarr",
|
||||
"BackupIntervalHelpText": "Interval între crearea copiile de rezervă automate",
|
||||
@@ -233,7 +231,7 @@
|
||||
"NoLeaveIt": "Nu, lasă-l",
|
||||
"DBMigration": "Migrarea BD",
|
||||
"DeleteBackupMessageText": "Sigur doriți să ștergeți copia de siguranță „{0}”?",
|
||||
"DeleteTagMessageText": "Sigur doriți să ștergeți eticheta „{0}”?",
|
||||
"DeleteTagMessageText": "Sigur doriți să ștergeți eticheta '{label}'?",
|
||||
"EnableInteractiveSearch": "Activați căutarea interactivă",
|
||||
"EnableSSL": "Activați SSL",
|
||||
"EnableSslHelpText": " Necesită repornirea în funcție de administrator pentru a intra în vigoare",
|
||||
@@ -311,7 +309,7 @@
|
||||
"ApplicationStatusCheckSingleClientMessage": "Aplicații indisponibile datorită erorilor: {0}",
|
||||
"ApplyTags": "Aplicați etichete",
|
||||
"Automatic": "Automat",
|
||||
"DeleteApplicationMessageText": "Sigur doriți să ștergeți aplicația „{0}”?",
|
||||
"DeleteApplicationMessageText": "Sigur doriți să ștergeți aplicația '{name}'?",
|
||||
"Exception": "Excepție",
|
||||
"MaintenanceRelease": "Versiune de întreținere: remedieri de erori și alte îmbunătățiri. Consultați Istoricul comiterilor Github pentru mai multe detalii",
|
||||
"Filters": "Filtre",
|
||||
@@ -347,7 +345,6 @@
|
||||
"IndexerInfo": "Informații indexator",
|
||||
"IndexerQuery": "Căutare indexator",
|
||||
"IndexerSite": "Site indexator",
|
||||
"IndexersSelectedInterp": "{0} Indexatoare selectate",
|
||||
"IndexerTagsHelpText": "Folosiți etichete pentru a specifica proxiurile indexatoarelor, cu ce aplicații sunt sincronizate indexatoarele, sau doar pentru a le organiza.",
|
||||
"SyncAppIndexers": "Sincronizați indexatoare aplicații",
|
||||
"SyncLevelAddRemove": "Doar adaugă și șterge: Când indexatoarele sunt adăugate sau șterse din Prowlarr, va actualiza această aplicație.",
|
||||
@@ -387,10 +384,10 @@
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Cum se aplică etichete indexatoarelor selectate",
|
||||
"ApplyTagsHelpTextRemove": "Eliminați: eliminați etichetele introduse",
|
||||
"CountIndexersSelected": "{0} Indexatoare selectate",
|
||||
"DeleteSelectedApplicationsMessageText": "Sigur doriți să ștergeți indexatorul „{0}”?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sigur doriți să ștergeți indexatorul „{0}”?",
|
||||
"DeleteSelectedDownloadClients": "Ștergeți clientul de descărcare",
|
||||
"DeleteSelectedIndexersMessageText": "Sigur doriți să ștergeți indexatorul „{0}”?",
|
||||
"DeleteSelectedApplicationsMessageText": "Sigur doriți să ștergeți {count} aplicații selectate?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sigur doriți să ștergeți {count} clienți de descărcare selectați?",
|
||||
"DeleteSelectedDownloadClients": "Ștergere clienți de descărcare",
|
||||
"DeleteSelectedIndexersMessageText": "Sigur doriți să ștergeți {count} indexatori selectați?",
|
||||
"DownloadClientPriorityHelpText": "Prioritizați mai mulți clienți de descărcare. Round-Robin este utilizat pentru clienții cu aceeași prioritate.",
|
||||
"Genre": "Genuri",
|
||||
"Label": "Etichetă",
|
||||
@@ -427,5 +424,19 @@
|
||||
"IndexerCategories": "Categorii indexator",
|
||||
"Episode": "Episod",
|
||||
"Category": "Categorie",
|
||||
"AddRemoveOnly": "Doar adaugă și șterge"
|
||||
"AddRemoveOnly": "Doar adaugă și șterge",
|
||||
"AuthenticationRequired": "Autentificare necesara",
|
||||
"DeleteClientCategory": "Ștergeți categoria din clientul de descărcare",
|
||||
"Description": "Descriere",
|
||||
"DeleteSelectedIndexer": "Ștergeți indexatorul selectat",
|
||||
"DeleteSelectedIndexers": "Ștergeți indexatorii selectați",
|
||||
"DeleteSelectedApplications": "Ștergeți aplicațiile selectate",
|
||||
"DevelopmentSettings": "Setări dezvoltare",
|
||||
"DisabledUntil": "Dezactivat până la",
|
||||
"DeleteApplication": "Şterge aplicaţia",
|
||||
"ConnectionLostReconnect": "{appName} va încerca să se conecteze automat, sau poți apăsa reîncarcă mai jos.",
|
||||
"ConnectionLostToBackend": "{appName} a pierdut conexiunea cu backend-ul și trebuie reîncărcat pentru a restabili funcționalitatea.",
|
||||
"RecentChanges": "Schimbări recente",
|
||||
"WhatsNew": "Ce mai e nou?",
|
||||
"DeleteAppProfileMessageText": "Sigur doriți să ștergeți profilul de aplicație '{0}'?"
|
||||
}
|
||||
|
||||
@@ -291,7 +291,6 @@
|
||||
"NotificationTriggers": "Триггеры уведомления",
|
||||
"ApplicationStatusCheckAllClientMessage": "Все листы недоступны из-за ошибок",
|
||||
"Automatic": "Автоматически",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr попытается соединиться автоматически или нажмите кнопку внизу.",
|
||||
"DeleteApplicationMessageText": "Вы уверены, что хотите удалить уведомление '{0}'?",
|
||||
"DeleteDownloadClient": "Удалить программу для скачивания",
|
||||
"EnableInteractiveSearchHelpText": "Будет использовано при автоматических поисках",
|
||||
@@ -308,7 +307,6 @@
|
||||
"Tags": "Тэги",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Листы недоступны из-за ошибок: {0}",
|
||||
"EditIndexer": "Редактировать индексатор",
|
||||
"ConnectionLostMessage": "Prowlarr потерял связь с сервером и его необходимо перезагрузить, чтобы восстановить работоспособность.",
|
||||
"MaintenanceRelease": "Техническая версия: исправления ошибок и другие улучшения. См. Историю коммитов Github для более подробной информации",
|
||||
"Filters": "Фильтры",
|
||||
"HistoryCleanupDaysHelpText": "Установите 0, чтобы отключить автоматическую очистку",
|
||||
@@ -377,5 +375,11 @@
|
||||
"Track": "След",
|
||||
"UpdateAvailable": "Доступно новое обновление",
|
||||
"More": "Более",
|
||||
"Publisher": "Издатель"
|
||||
"Publisher": "Издатель",
|
||||
"ConnectionLostReconnect": "Radarr попытается соединиться автоматически или нажмите кнопку внизу.",
|
||||
"ConnectionLostToBackend": "Radarr потерял связь с сервером и его необходимо перезагрузить, чтобы восстановить работоспособность.",
|
||||
"RecentChanges": "Последние изменения",
|
||||
"WhatsNew": "Что нового?",
|
||||
"minutes": "Минуты",
|
||||
"DeleteAppProfileMessageText": "Вы действительно хотите удалить профиль качества {0}"
|
||||
}
|
||||
|
||||
@@ -113,5 +113,6 @@
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Ako použiť značky na vybrané filmy",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Ako použiť značky na vybrané filmy",
|
||||
"Season": "Séria",
|
||||
"Publisher": "Vydavateľ"
|
||||
"Publisher": "Vydavateľ",
|
||||
"DeleteAppProfileMessageText": "Naozaj chcete zmazať tento profil oneskorenia?"
|
||||
}
|
||||
|
||||
@@ -107,8 +107,6 @@
|
||||
"Info": "Info",
|
||||
"HealthNoIssues": "Inga problem hittades med din konfiguration",
|
||||
"Error": "Fel",
|
||||
"ConnectionLostMessage": "Prowlarr har tappat anslutningen till sin backend och behöver laddas om för att återställa funktionalitet.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr kommer försöka ansluta automatiskt, du kan även klicka på ladda om nedan.",
|
||||
"ConnectionLost": "Anslutning saknas",
|
||||
"Component": "Komponent",
|
||||
"Columns": "Kolumner",
|
||||
@@ -348,7 +346,6 @@
|
||||
"IndexerVipCheckExpiringClientMessage": "Indexer VIP förmåner utgår snart: {0}",
|
||||
"IndexerVipCheckExpiredClientMessage": "Indexer VIP förmåner har utgått: {0}",
|
||||
"IndexerTagsHelpText": "Använd taggar för att specificera standardklient, specificera Indexer Proxies, eller bara för att organisera dina indexers.",
|
||||
"IndexersSelectedInterp": "{0} Indexer(s) Markerade",
|
||||
"IndexerSettingsSummary": "Konfigurera flera globala Indexerinställningar, includerat Proxies.",
|
||||
"IndexerRss": "Indexer Rss",
|
||||
"IndexerQuery": "Indexer Fråga",
|
||||
@@ -382,7 +379,6 @@
|
||||
"Apps": "Appar",
|
||||
"AppProfileSelectHelpText": "App profiler är använda för att kontrollera RSS, Automatisk Sökning och interaktiv Sökningsinställningar på applikationen sync",
|
||||
"AppProfileInUse": "App Profil i användning",
|
||||
"AppProfileDeleteConfirm": "Är du säker på att du vill radera {0}?",
|
||||
"Applications": "Applikationer",
|
||||
"Filters": "Filter",
|
||||
"HistoryCleanupDaysHelpText": "Ställ in på 0 för att inaktivera automatisk rensning",
|
||||
@@ -430,5 +426,10 @@
|
||||
"Artist": "Artist",
|
||||
"Author": "Författare",
|
||||
"Book": "Bok",
|
||||
"Publisher": "Utgivare"
|
||||
"Publisher": "Utgivare",
|
||||
"ConnectionLostReconnect": "Radarr kommer försöka ansluta automatiskt, du kan även klicka på ladda om nedan.",
|
||||
"DeleteAppProfileMessageText": "Är du säker på att du vill ta bort kvalitetsprofilen '{0}'?",
|
||||
"RecentChanges": "Senaste ändringar",
|
||||
"WhatsNew": "Vad är nytt?",
|
||||
"minutes": "Minuter"
|
||||
}
|
||||
|
||||
@@ -133,7 +133,6 @@
|
||||
"CloneProfile": "โปรไฟล์โคลน",
|
||||
"Close": "ปิด",
|
||||
"ConnectionLost": "ขาดการเชื่อมต่อ",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr จะพยายามเชื่อมต่อโดยอัตโนมัติหรือคุณสามารถคลิกโหลดซ้ำด้านล่าง",
|
||||
"Connections": "การเชื่อมต่อ",
|
||||
"ConnectSettings": "เชื่อมต่อการตั้งค่า",
|
||||
"CouldNotConnectSignalR": "ไม่สามารถเชื่อมต่อกับ SignalR UI จะไม่อัปเดต",
|
||||
@@ -315,7 +314,6 @@
|
||||
"OnGrab": "บน Grab",
|
||||
"OnHealthIssue": "เกี่ยวกับปัญหาสุขภาพ",
|
||||
"TestAllIndexers": "ทดสอบดัชนีทั้งหมด",
|
||||
"ConnectionLostMessage": "Whisparr สูญเสียการเชื่อมต่อกับแบ็กเอนด์และจะต้องโหลดใหม่เพื่อกู้คืนฟังก์ชันการทำงาน",
|
||||
"GrabReleases": "คว้ารีลีส",
|
||||
"NetCore": ".NET Core",
|
||||
"MappedDrivesRunningAsService": "ไดรฟ์เครือข่ายที่แมปไม่พร้อมใช้งานเมื่อเรียกใช้เป็นบริการ Windows โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติม",
|
||||
@@ -346,5 +344,10 @@
|
||||
"DeleteSelectedDownloadClientsMessageText": "แน่ใจไหมว่าต้องการลบตัวสร้างดัชนี \"{0}\"",
|
||||
"Genre": "ประเภท",
|
||||
"Year": "ปี",
|
||||
"More": "มากกว่า"
|
||||
"More": "มากกว่า",
|
||||
"ConnectionLostReconnect": "Radarr จะพยายามเชื่อมต่อโดยอัตโนมัติหรือคุณสามารถคลิกโหลดซ้ำด้านล่าง",
|
||||
"DeleteAppProfileMessageText": "แน่ใจไหมว่าต้องการลบโปรไฟล์คุณภาพ {0}",
|
||||
"minutes": "นาที",
|
||||
"WhatsNew": "มีอะไรใหม่",
|
||||
"RecentChanges": "การเปลี่ยนแปลงล่าสุด"
|
||||
}
|
||||
|
||||
@@ -143,7 +143,6 @@
|
||||
"OnHealthIssueHelpText": "Sağlık Sorunu Hakkında",
|
||||
"BranchUpdate": "Prowlarr'ı güncellemek için kullanılacak dal",
|
||||
"Close": "Kapat",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr otomatik olarak bağlanmayı deneyecek veya aşağıdan yeniden yükle'yi tıklayabilirsiniz.",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Hatalar nedeniyle kullanılamayan listeler: {0}",
|
||||
"ApplyTags": "Etiketleri Uygula",
|
||||
"RSSIsNotSupportedWithThisIndexer": "RSS, bu indeksleyici ile desteklenmiyor",
|
||||
@@ -318,7 +317,6 @@
|
||||
"OnGrab": "Yakalandığında",
|
||||
"OnHealthIssue": "Sağlık Sorunu Hakkında",
|
||||
"TestAllIndexers": "Tüm Dizinleyicileri Test Et",
|
||||
"ConnectionLostMessage": "Whisparr arka uçla olan bağlantısını kaybetti ve işlevselliği geri yüklemek için yeniden yüklenmesi gerekecek.",
|
||||
"GrabReleases": "Bırakma",
|
||||
"No": "Hayır",
|
||||
"NetCore": ".NET Çekirdeği",
|
||||
@@ -346,5 +344,10 @@
|
||||
"Genre": "Türler",
|
||||
"Track": "İzleme",
|
||||
"Year": "Yıl",
|
||||
"More": "Daha"
|
||||
"More": "Daha",
|
||||
"DeleteAppProfileMessageText": "Kalite profilini silmek istediğinizden emin misiniz {0}",
|
||||
"RecentChanges": "Son değişiklikler",
|
||||
"minutes": "Dakika",
|
||||
"WhatsNew": "Ne var ne yok?",
|
||||
"ConnectionLostReconnect": "Radarr otomatik olarak bağlanmayı deneyecek veya aşağıdan yeniden yükle'yi tıklayabilirsiniz."
|
||||
}
|
||||
|
||||
@@ -60,8 +60,6 @@
|
||||
"BranchUpdate": "Гілка для оновлення Prowlarr",
|
||||
"AllIndexersHiddenDueToFilter": "Всі фільми заховані відповідно до фільтра.",
|
||||
"AnalyticsEnabledHelpText": "Надсилайте анонімну інформацію про використання та помилки на сервери Prowlarr. Це включає інформацію про ваш веб-переглядач, які сторінки Prowlarr WebUI ви використовуєте, звіти про помилки, а також версію ОС і часу виконання. Ми будемо використовувати цю інформацію, щоб визначити пріоритети функцій і виправлення помилок.",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr спробує підключитися автоматично, або ви можете натиснути перезавантажити нижче.",
|
||||
"ConnectionLostMessage": "Prowlarr втратив зв’язок із бекендом, і його потрібно перезавантажити, щоб відновити функціональність.",
|
||||
"Delete": "Видалити",
|
||||
"DeleteApplicationMessageText": "Ви впевнені, що хочете видалити клієнт завантаження '{0}'?",
|
||||
"DeleteTagMessageText": "Ви впевнені, що хочете видалити тег {0} ?",
|
||||
@@ -357,5 +355,11 @@
|
||||
"Track": "Трасувати",
|
||||
"Year": "Рік",
|
||||
"UpdateAvailable": "Доступне нове оновлення",
|
||||
"Genre": "Жанри"
|
||||
"Genre": "Жанри",
|
||||
"ConnectionLostReconnect": "Radarr спробує підключитися автоматично, або ви можете натиснути перезавантажити нижче.",
|
||||
"ConnectionLostToBackend": "Radarr втратив зв’язок із бекендом, і його потрібно перезавантажити, щоб відновити функціональність.",
|
||||
"DeleteAppProfileMessageText": "Ви впевнені, що хочете видалити цей профіль затримки?",
|
||||
"RecentChanges": "Останні зміни",
|
||||
"minutes": "Хвилин",
|
||||
"WhatsNew": "Що нового?"
|
||||
}
|
||||
|
||||
@@ -170,7 +170,6 @@
|
||||
"Columns": "Cột",
|
||||
"Component": "Thành phần",
|
||||
"ConnectionLost": "Kết nối bị mất",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr sẽ cố gắng kết nối tự động hoặc bạn có thể nhấp vào tải lại bên dưới.",
|
||||
"Connections": "Kết nối",
|
||||
"ConnectSettings": "Kết nối Cài đặt",
|
||||
"CouldNotConnectSignalR": "Không thể kết nối với SignalR, giao diện người dùng sẽ không cập nhật",
|
||||
@@ -315,7 +314,6 @@
|
||||
"Filters": "Bộ lọc",
|
||||
"OnGrab": "Trên Grab",
|
||||
"TestAllIndexers": "Kiểm tra tất cả các chỉ mục",
|
||||
"ConnectionLostMessage": "Whisparr đã mất kết nối với phần phụ trợ và sẽ cần được tải lại để khôi phục chức năng.",
|
||||
"GrabReleases": "Lấy bản phát hành",
|
||||
"Link": "Liên kết",
|
||||
"No": "Không",
|
||||
@@ -344,5 +342,10 @@
|
||||
"More": "Hơn",
|
||||
"Track": "Dấu vết",
|
||||
"Year": "Năm",
|
||||
"Genre": "Thể loại"
|
||||
"Genre": "Thể loại",
|
||||
"DeleteAppProfileMessageText": "Bạn có chắc chắn muốn xóa cấu hình chất lượng không {0}",
|
||||
"RecentChanges": "Những thay đổi gần đây",
|
||||
"minutes": "Phút",
|
||||
"ConnectionLostReconnect": "Radarr sẽ cố gắng kết nối tự động hoặc bạn có thể nhấp vào tải lại bên dưới.",
|
||||
"WhatsNew": "Có gì mới?"
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
"ApiKeyValidationHealthCheckMessage": "请将API密钥更新为至少{0}个字符长。您可以通过设置或配置文件执行此操作",
|
||||
"AppDataDirectory": "AppData目录",
|
||||
"AppDataLocationHealthCheckMessage": "正在更新期间的 AppData 不会被更新删除",
|
||||
"AppProfileDeleteConfirm": "您确认您想删除吗?",
|
||||
"AppProfileInUse": "正在使用的应用程序配置文件",
|
||||
"AppProfileSelectHelpText": "应用程序配置用于控制应用程序同步设置 RSS、自动搜索和交互式搜索设置",
|
||||
"AppSettingsSummary": "配置Prowlarr与PVR程序交互方式的应用和设置",
|
||||
@@ -90,8 +89,6 @@
|
||||
"ConnectSettings": "连接设置",
|
||||
"ConnectSettingsSummary": "通知和自定义脚本",
|
||||
"ConnectionLost": "连接丢失",
|
||||
"ConnectionLostAutomaticMessage": "Prowlarr 将会自动重连,您也可以点击下方的重新加载。",
|
||||
"ConnectionLostMessage": "Prowlarr 已与服务端断开链接,请尝试刷新来恢复使用。",
|
||||
"Connections": "连接",
|
||||
"CouldNotConnectSignalR": "无法连接至SignalR,不会升级UI",
|
||||
"Custom": "自定义",
|
||||
@@ -222,7 +219,6 @@
|
||||
"IndexerVipCheckExpiredClientMessage": "索引器VIP特权已过期:{0}",
|
||||
"IndexerVipCheckExpiringClientMessage": "索引器VIP特权即将过期:{0}",
|
||||
"Indexers": "索引器",
|
||||
"IndexersSelectedInterp": "已选择 {0} 个搜刮器",
|
||||
"Info": "信息",
|
||||
"InitialFailure": "初始化失败",
|
||||
"InstanceName": "中文",
|
||||
@@ -552,5 +548,17 @@
|
||||
"SeedTimeHelpText": "种子停止下载前应做种的时长,应用的默认设置为空",
|
||||
"TorznabUrl": "Torznab链接",
|
||||
"days": "天",
|
||||
"minutes": "分钟"
|
||||
"minutes": "分钟",
|
||||
"ConnectionLostReconnect": "Radarr将会尝试自动连接,您也可以点击下方的重新加载。",
|
||||
"DeleteAppProfileMessageText": "您确定要删除备份“{name}”吗?",
|
||||
"RecentChanges": "最近修改",
|
||||
"ConnectionLostToBackend": "Radarr与后端的链接已断开,需要重新加载恢复功能。",
|
||||
"WhatsNew": "什么是新的?",
|
||||
"AddApplicationImplementation": "添加应用-{实体名称}",
|
||||
"AddConnection": "添加连接",
|
||||
"AddIndexerImplementation": "添加索引器-{实体名称}",
|
||||
"AddCategory": "添加目录",
|
||||
"AddConnectionImplementation": "添加连接-{实体名称}",
|
||||
"AddDownloadClientImplementation": "添加下载客户端-{实体名称}",
|
||||
"AddIndexerProxyImplementation": "添加搜刮器代理-{实体名称}"
|
||||
}
|
||||
|
||||
@@ -9,39 +9,80 @@ namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public interface INotificationFactory : IProviderFactory<INotification, NotificationDefinition>
|
||||
{
|
||||
List<INotification> OnGrabEnabled();
|
||||
List<INotification> OnHealthIssueEnabled();
|
||||
List<INotification> OnHealthRestoredEnabled();
|
||||
List<INotification> OnApplicationUpdateEnabled();
|
||||
List<INotification> OnGrabEnabled(bool filterBlockedNotifications = true);
|
||||
List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true);
|
||||
List<INotification> OnHealthRestoredEnabled(bool filterBlockedNotifications = true);
|
||||
List<INotification> OnApplicationUpdateEnabled(bool filterBlockedNotifications = true);
|
||||
}
|
||||
|
||||
public class NotificationFactory : ProviderFactory<INotification, NotificationDefinition>, INotificationFactory
|
||||
{
|
||||
public NotificationFactory(INotificationRepository providerRepository, IEnumerable<INotification> providers, IServiceProvider container, IEventAggregator eventAggregator, Logger logger)
|
||||
private readonly INotificationStatusService _notificationStatusService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public NotificationFactory(INotificationStatusService notificationStatusService, INotificationRepository providerRepository, IEnumerable<INotification> providers, IServiceProvider container, IEventAggregator eventAggregator, Logger logger)
|
||||
: base(providerRepository, providers, container, eventAggregator, logger)
|
||||
{
|
||||
_notificationStatusService = notificationStatusService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public List<INotification> OnGrabEnabled()
|
||||
public List<INotification> OnGrabEnabled(bool filterBlockedNotifications = true)
|
||||
{
|
||||
if (filterBlockedNotifications)
|
||||
{
|
||||
return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnGrab)).ToList();
|
||||
}
|
||||
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnGrab).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnHealthIssueEnabled()
|
||||
public List<INotification> OnHealthIssueEnabled(bool filterBlockedNotifications = true)
|
||||
{
|
||||
if (filterBlockedNotifications)
|
||||
{
|
||||
return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthIssue)).ToList();
|
||||
}
|
||||
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthIssue).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnHealthRestoredEnabled()
|
||||
public List<INotification> OnHealthRestoredEnabled(bool filterBlockedNotifications = true)
|
||||
{
|
||||
if (filterBlockedNotifications)
|
||||
{
|
||||
return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthRestored)).ToList();
|
||||
}
|
||||
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnHealthRestored).ToList();
|
||||
}
|
||||
|
||||
public List<INotification> OnApplicationUpdateEnabled()
|
||||
public List<INotification> OnApplicationUpdateEnabled(bool filterBlockedNotifications = true)
|
||||
{
|
||||
if (filterBlockedNotifications)
|
||||
{
|
||||
return FilterBlockedNotifications(GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnApplicationUpdate)).ToList();
|
||||
}
|
||||
|
||||
return GetAvailableProviders().Where(n => ((NotificationDefinition)n.Definition).OnApplicationUpdate).ToList();
|
||||
}
|
||||
|
||||
private IEnumerable<INotification> FilterBlockedNotifications(IEnumerable<INotification> notifications)
|
||||
{
|
||||
var blockedNotifications = _notificationStatusService.GetBlockedProviders().ToDictionary(v => v.ProviderId, v => v);
|
||||
|
||||
foreach (var notification in notifications)
|
||||
{
|
||||
if (blockedNotifications.TryGetValue(notification.Definition.Id, out var notificationStatus))
|
||||
{
|
||||
_logger.Debug("Temporarily ignoring notification {0} till {1} due to recent failures.", notification.Definition.Name, notificationStatus.DisabledTill.Value.ToLocalTime());
|
||||
continue;
|
||||
}
|
||||
|
||||
yield return notification;
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetProviderCharacteristics(INotification provider, NotificationDefinition definition)
|
||||
{
|
||||
base.SetProviderCharacteristics(provider, definition);
|
||||
|
||||
@@ -20,42 +20,34 @@ namespace NzbDrone.Core.Notifications
|
||||
IHandle<IndexerDownloadEvent>
|
||||
{
|
||||
private readonly INotificationFactory _notificationFactory;
|
||||
private readonly INotificationStatusService _notificationStatusService;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public NotificationService(INotificationFactory notificationFactory, Logger logger)
|
||||
public NotificationService(INotificationFactory notificationFactory, INotificationStatusService notificationStatusService, Logger logger)
|
||||
{
|
||||
_notificationFactory = notificationFactory;
|
||||
_notificationStatusService = notificationStatusService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
private bool ShouldHandleHealthFailure(HealthCheck.HealthCheck healthCheck, bool includeWarnings)
|
||||
{
|
||||
if (healthCheck.Type == HealthCheckResult.Error)
|
||||
return healthCheck.Type switch
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (healthCheck.Type == HealthCheckResult.Warning && includeWarnings)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
HealthCheckResult.Error => true,
|
||||
HealthCheckResult.Warning when includeWarnings => true,
|
||||
_ => false
|
||||
};
|
||||
}
|
||||
|
||||
private bool ShouldHandleOnGrab(GrabMessage message, bool includeManual)
|
||||
{
|
||||
if (message.GrabTrigger == GrabTrigger.Api)
|
||||
return message.GrabTrigger switch
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (message.GrabTrigger == GrabTrigger.Manual && includeManual)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
GrabTrigger.Api => true,
|
||||
GrabTrigger.Manual when includeManual => true,
|
||||
_ => false
|
||||
};
|
||||
}
|
||||
|
||||
private string GetMessage(ReleaseInfo release, GrabTrigger grabTrigger, string source, string downloadClient)
|
||||
@@ -96,10 +88,12 @@ namespace NzbDrone.Core.Notifications
|
||||
if (ShouldHandleHealthFailure(message.HealthCheck, ((NotificationDefinition)notification.Definition).IncludeHealthWarnings))
|
||||
{
|
||||
notification.OnHealthIssue(message.HealthCheck);
|
||||
_notificationStatusService.RecordSuccess(notification.Definition.Id);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationStatusService.RecordFailure(notification.Definition.Id);
|
||||
_logger.Warn(ex, "Unable to send OnHealthIssue notification to: " + notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
@@ -119,10 +113,12 @@ namespace NzbDrone.Core.Notifications
|
||||
if (ShouldHandleHealthFailure(message.PreviousCheck, ((NotificationDefinition)notification.Definition).IncludeHealthWarnings))
|
||||
{
|
||||
notification.OnHealthRestored(message.PreviousCheck);
|
||||
_notificationStatusService.RecordSuccess(notification.Definition.Id);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationStatusService.RecordFailure(notification.Definition.Id);
|
||||
_logger.Warn(ex, "Unable to send OnHealthRestored notification to: " + notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
@@ -145,9 +141,11 @@ namespace NzbDrone.Core.Notifications
|
||||
try
|
||||
{
|
||||
notification.OnApplicationUpdate(updateMessage);
|
||||
_notificationStatusService.RecordSuccess(notification.Definition.Id);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationStatusService.RecordFailure(notification.Definition.Id);
|
||||
_logger.Warn(ex, "Unable to send OnApplicationUpdate notification to: " + notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
@@ -192,10 +190,12 @@ namespace NzbDrone.Core.Notifications
|
||||
ShouldHandleOnGrab(grabMessage, ((NotificationDefinition)notification.Definition).IncludeManualGrabs))
|
||||
{
|
||||
notification.OnGrab(grabMessage);
|
||||
_notificationStatusService.RecordSuccess(notification.Definition.Id);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationStatusService.RecordFailure(notification.Definition.Id);
|
||||
_logger.Error(ex, "Unable to send OnGrab notification to {0}", notification.Definition.Name);
|
||||
}
|
||||
}
|
||||
|
||||
8
src/NzbDrone.Core/Notifications/NotificationStatus.cs
Normal file
8
src/NzbDrone.Core/Notifications/NotificationStatus.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using NzbDrone.Core.ThingiProvider.Status;
|
||||
|
||||
namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public class NotificationStatus : ProviderStatusBase
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.ThingiProvider.Status;
|
||||
|
||||
namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public interface INotificationStatusRepository : IProviderStatusRepository<NotificationStatus>
|
||||
{
|
||||
}
|
||||
|
||||
public class NotificationStatusRepository : ProviderStatusRepository<NotificationStatus>, INotificationStatusRepository
|
||||
{
|
||||
public NotificationStatusRepository(IMainDatabase database, IEventAggregator eventAggregator)
|
||||
: base(database, eventAggregator)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
22
src/NzbDrone.Core/Notifications/NotificationStatusService.cs
Normal file
22
src/NzbDrone.Core/Notifications/NotificationStatusService.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using NLog;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.ThingiProvider.Status;
|
||||
|
||||
namespace NzbDrone.Core.Notifications
|
||||
{
|
||||
public interface INotificationStatusService : IProviderStatusServiceBase<NotificationStatus>
|
||||
{
|
||||
}
|
||||
|
||||
public class NotificationStatusService : ProviderStatusServiceBase<INotification, NotificationStatus>, INotificationStatusService
|
||||
{
|
||||
public NotificationStatusService(INotificationStatusRepository providerStatusRepository, IEventAggregator eventAggregator, IRuntimeInfo runtimeInfo, Logger logger)
|
||||
: base(providerStatusRepository, eventAggregator, runtimeInfo, logger)
|
||||
{
|
||||
MinimumTimeSinceInitialFailure = TimeSpan.FromMinutes(5);
|
||||
MaximumEscalationLevel = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="6.0.16" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" Version="7.0.0" />
|
||||
<PackageReference Include="Npgsql" Version="6.0.9" />
|
||||
<PackageReference Include="Npgsql" Version="7.0.4" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner" Version="3.3.2.9" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner.Postgres" Version="3.3.2.9" />
|
||||
<PackageReference Include="Servarr.FluentMigrator.Runner.SQLite" Version="3.3.2.9" />
|
||||
|
||||
@@ -4428,6 +4428,9 @@
|
||||
"placeholder": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"isFloat": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace Prowlarr.Http.ClientSchema
|
||||
public string Section { get; set; }
|
||||
public string Hidden { get; set; }
|
||||
public string Placeholder { get; set; }
|
||||
public bool IsFloat { get; set; }
|
||||
|
||||
public Field Clone()
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user