mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2026-04-17 21:44:48 -04:00
Compare commits
59 Commits
v1.11.4.41
...
v1.13.1.42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f7bf21df68 | ||
|
|
d764e3405d | ||
|
|
16baceb784 | ||
|
|
5d2b80d15a | ||
|
|
a20a81f424 | ||
|
|
ebb66e9086 | ||
|
|
cb8797693e | ||
|
|
255c6335ae | ||
|
|
155cd53dcd | ||
|
|
ae70a96c10 | ||
|
|
16c0daf090 | ||
|
|
34c78c5a9d | ||
|
|
dd5b108ffd | ||
|
|
0b83986255 | ||
|
|
2bd25fb6f3 | ||
|
|
0f5eb5d3a3 | ||
|
|
c9434c61e3 | ||
|
|
ee969b7a06 | ||
|
|
cfdf88a1e2 | ||
|
|
70a5dae293 | ||
|
|
b53f8d4552 | ||
|
|
9668e91b21 | ||
|
|
49857693c0 | ||
|
|
850315ad1c | ||
|
|
86124d4319 | ||
|
|
4f28d583d7 | ||
|
|
01f3930211 | ||
|
|
7c7114c87a | ||
|
|
ef8e6d774b | ||
|
|
2960fc37d9 | ||
|
|
8bddf753bb | ||
|
|
cff24b3fd4 | ||
|
|
031d81330d | ||
|
|
6201b42fbd | ||
|
|
7022054dd7 | ||
|
|
c9b663247c | ||
|
|
0b0a0cfa5b | ||
|
|
3c0fea8b7c | ||
|
|
ac97952fd7 | ||
|
|
c3e40c0564 | ||
|
|
ce615a77c2 | ||
|
|
0f6dfe389c | ||
|
|
25d94a9286 | ||
|
|
52a690b41a | ||
|
|
56c8c3d6c6 | ||
|
|
5cee8990b3 | ||
|
|
9679e88717 | ||
|
|
f4203993ba | ||
|
|
4be0715fe3 | ||
|
|
f9c9d4a0e0 | ||
|
|
bf47380f7b | ||
|
|
e27a46f578 | ||
|
|
af4e69f8fb | ||
|
|
1b2106d4f0 | ||
|
|
bdfbda3805 | ||
|
|
cb98b10468 | ||
|
|
ae1bc8366c | ||
|
|
67eeb4373c | ||
|
|
9d40a64be4 |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '1.11.4'
|
||||
majorVersion: '1.13.1'
|
||||
minorVersion: $[counter('minorVersion', 1)]
|
||||
prowlarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
|
||||
@@ -17,7 +17,7 @@ variables:
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.417'
|
||||
nodeVersion: '16.X'
|
||||
innoVersion: '6.2.0'
|
||||
innoVersion: '6.2.2'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
macImage: 'macOS-11'
|
||||
@@ -1206,6 +1206,7 @@ stages:
|
||||
- stage: Report_Out
|
||||
dependsOn:
|
||||
- Analyze
|
||||
- Installer
|
||||
- Unit_Test
|
||||
- Integration
|
||||
- Automation
|
||||
|
||||
2
build.sh
2
build.sh
@@ -254,7 +254,7 @@ InstallInno()
|
||||
ProgressStart "Installing portable Inno Setup"
|
||||
|
||||
rm -rf _inno
|
||||
curl -s --output innosetup.exe "https://files.jrsoftware.org/is/6/innosetup-${INNOVERSION:-6.2.0}.exe"
|
||||
curl -s --output innosetup.exe "https://files.jrsoftware.org/is/6/innosetup-${INNOVERSION:-6.2.2}.exe"
|
||||
mkdir _inno
|
||||
./innosetup.exe //portable=1 //silent //currentuser //dir=.\\_inno
|
||||
rm innosetup.exe
|
||||
|
||||
@@ -2,6 +2,8 @@ const loose = true;
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
'@babel/plugin-transform-logical-assignment-operators',
|
||||
|
||||
// Stage 1
|
||||
'@babel/plugin-proposal-export-default-from',
|
||||
['@babel/plugin-transform-optional-chaining', { loose }],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import SortDirection from 'Helpers/Props/SortDirection';
|
||||
import { FilterBuilderProp } from './AppState';
|
||||
|
||||
export interface Error {
|
||||
responseJSON: {
|
||||
@@ -20,6 +21,10 @@ export interface PagedAppSectionState {
|
||||
pageSize: number;
|
||||
}
|
||||
|
||||
export interface AppSectionFilterState<T> {
|
||||
filterBuilderProps: FilterBuilderProp<T>[];
|
||||
}
|
||||
|
||||
export interface AppSectionSchemaState<T> {
|
||||
isSchemaFetching: boolean;
|
||||
isSchemaPopulated: boolean;
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
import AppSectionState from 'App/State/AppSectionState';
|
||||
import AppSectionState, {
|
||||
AppSectionFilterState,
|
||||
} from 'App/State/AppSectionState';
|
||||
import Column from 'Components/Table/Column';
|
||||
import History from 'typings/History';
|
||||
|
||||
interface HistoryAppState extends AppSectionState<History> {
|
||||
interface HistoryAppState
|
||||
extends AppSectionState<History>,
|
||||
AppSectionFilterState<History> {
|
||||
pageSize: number;
|
||||
columns: Column[];
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import AppSectionState, {
|
||||
AppSectionItemState,
|
||||
AppSectionSaveState,
|
||||
} from 'App/State/AppSectionState';
|
||||
import { IndexerCategory } from 'Indexer/Indexer';
|
||||
import Application from 'typings/Application';
|
||||
import DownloadClient from 'typings/DownloadClient';
|
||||
import Notification from 'typings/Notification';
|
||||
@@ -25,6 +26,11 @@ export interface DownloadClientAppState
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface IndexerCategoryAppState
|
||||
extends AppSectionState<IndexerCategory>,
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface NotificationAppState
|
||||
extends AppSectionState<Notification>,
|
||||
AppSectionDeleteState {}
|
||||
@@ -35,6 +41,7 @@ interface SettingsAppState {
|
||||
appProfiles: AppProfileAppState;
|
||||
applications: ApplicationAppState;
|
||||
downloadClients: DownloadClientAppState;
|
||||
indexerCategories: IndexerCategoryAppState;
|
||||
notifications: NotificationAppState;
|
||||
ui: UiSettingsAppState;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import React from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import AppState from 'App/State/AppState';
|
||||
import { IndexerCategory } from 'Indexer/Indexer';
|
||||
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
|
||||
|
||||
const indexerCategoriesSelector = createSelector(
|
||||
(state: AppState) => state.settings.indexerCategories,
|
||||
(categories) => categories.items
|
||||
);
|
||||
|
||||
function CategoryFilterBuilderRowValue(props: FilterBuilderRowValueProps) {
|
||||
const categories: IndexerCategory[] = useSelector(indexerCategoriesSelector);
|
||||
|
||||
const tagList = categories.reduce(
|
||||
(acc: { id: number; name: string }[], element) => {
|
||||
acc.push({
|
||||
id: element.id,
|
||||
name: `${element.name} (${element.id})`,
|
||||
});
|
||||
|
||||
if (element.subCategories && element.subCategories.length > 0) {
|
||||
element.subCategories.forEach((subCat) => {
|
||||
acc.push({
|
||||
id: subCat.id,
|
||||
name: `${subCat.name} (${subCat.id})`,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return acc;
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
return <FilterBuilderRowValue {...props} tagList={tagList} />;
|
||||
}
|
||||
|
||||
export default CategoryFilterBuilderRowValue;
|
||||
@@ -5,8 +5,10 @@ import IconButton from 'Components/Link/IconButton';
|
||||
import { filterBuilderTypes, filterBuilderValueTypes, icons } from 'Helpers/Props';
|
||||
import AppProfileFilterBuilderRowValueConnector from './AppProfileFilterBuilderRowValueConnector';
|
||||
import BoolFilterBuilderRowValue from './BoolFilterBuilderRowValue';
|
||||
import CategoryFilterBuilderRowValue from './CategoryFilterBuilderRowValue';
|
||||
import DateFilterBuilderRowValue from './DateFilterBuilderRowValue';
|
||||
import FilterBuilderRowValueConnector from './FilterBuilderRowValueConnector';
|
||||
import HistoryEventTypeFilterBuilderRowValue from './HistoryEventTypeFilterBuilderRowValue';
|
||||
import IndexerFilterBuilderRowValueConnector from './IndexerFilterBuilderRowValueConnector';
|
||||
import PrivacyFilterBuilderRowValue from './PrivacyFilterBuilderRowValue';
|
||||
import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';
|
||||
@@ -55,9 +57,15 @@ function getRowValueConnector(selectedFilterBuilderProp) {
|
||||
case filterBuilderValueTypes.BOOL:
|
||||
return BoolFilterBuilderRowValue;
|
||||
|
||||
case filterBuilderValueTypes.CATEGORY:
|
||||
return CategoryFilterBuilderRowValue;
|
||||
|
||||
case filterBuilderValueTypes.DATE:
|
||||
return DateFilterBuilderRowValue;
|
||||
|
||||
case filterBuilderValueTypes.HISTORY_EVENT_TYPE:
|
||||
return HistoryEventTypeFilterBuilderRowValue;
|
||||
|
||||
case filterBuilderValueTypes.INDEXER:
|
||||
return IndexerFilterBuilderRowValueConnector;
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { FilterBuilderProp } from 'App/State/AppState';
|
||||
|
||||
interface FilterBuilderRowOnChangeProps {
|
||||
name: string;
|
||||
value: unknown[];
|
||||
}
|
||||
|
||||
interface FilterBuilderRowValueProps {
|
||||
filterType?: string;
|
||||
filterValue: string | number | object | string[] | number[] | object[];
|
||||
selectedFilterBuilderProp: FilterBuilderProp<unknown>;
|
||||
sectionItem: unknown[];
|
||||
onChange: (payload: FilterBuilderRowOnChangeProps) => void;
|
||||
}
|
||||
|
||||
export default FilterBuilderRowValueProps;
|
||||
@@ -0,0 +1,39 @@
|
||||
import React from 'react';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
import FilterBuilderRowValueProps from './FilterBuilderRowValueProps';
|
||||
|
||||
const EVENT_TYPE_OPTIONS = [
|
||||
{
|
||||
id: 1,
|
||||
get name() {
|
||||
return translate('Grabbed');
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
get name() {
|
||||
return translate('IndexerRss');
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
get name() {
|
||||
return translate('IndexerQuery');
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
get name() {
|
||||
return translate('IndexerAuth');
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
function HistoryEventTypeFilterBuilderRowValue(
|
||||
props: FilterBuilderRowValueProps
|
||||
) {
|
||||
return <FilterBuilderRowValue {...props} tagList={EVENT_TYPE_OPTIONS} />;
|
||||
}
|
||||
|
||||
export default HistoryEventTypeFilterBuilderRowValue;
|
||||
@@ -30,22 +30,24 @@ function CustomFiltersModalContent(props) {
|
||||
|
||||
<ModalBody>
|
||||
{
|
||||
customFilters.map((customFilter) => {
|
||||
return (
|
||||
<CustomFilter
|
||||
key={customFilter.id}
|
||||
id={customFilter.id}
|
||||
label={customFilter.label}
|
||||
filters={customFilter.filters}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
isDeleting={isDeleting}
|
||||
deleteError={deleteError}
|
||||
dispatchSetFilter={dispatchSetFilter}
|
||||
dispatchDeleteCustomFilter={dispatchDeleteCustomFilter}
|
||||
onEditPress={onEditCustomFilter}
|
||||
/>
|
||||
);
|
||||
})
|
||||
customFilters
|
||||
.sort((a, b) => a.label.localeCompare(b.label))
|
||||
.map((customFilter) => {
|
||||
return (
|
||||
<CustomFilter
|
||||
key={customFilter.id}
|
||||
id={customFilter.id}
|
||||
label={customFilter.label}
|
||||
filters={customFilter.filters}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
isDeleting={isDeleting}
|
||||
deleteError={deleteError}
|
||||
dispatchSetFilter={dispatchSetFilter}
|
||||
dispatchDeleteCustomFilter={dispatchDeleteCustomFilter}
|
||||
onEditPress={onEditCustomFilter}
|
||||
/>
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
<div className={styles.addButtonContainer}>
|
||||
|
||||
@@ -147,7 +147,7 @@ EnhancedSelectInputConnector.propTypes = {
|
||||
provider: PropTypes.string.isRequired,
|
||||
providerData: PropTypes.object.isRequired,
|
||||
name: PropTypes.string.isRequired,
|
||||
value: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])).isRequired,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,
|
||||
values: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
selectOptionsProviderAction: PropTypes.string,
|
||||
onChange: PropTypes.func.isRequired,
|
||||
|
||||
@@ -40,18 +40,26 @@ class FilterMenuContent extends Component {
|
||||
}
|
||||
|
||||
{
|
||||
customFilters.map((filter) => {
|
||||
return (
|
||||
<FilterMenuItem
|
||||
key={filter.id}
|
||||
filterKey={filter.id}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
{filter.label}
|
||||
</FilterMenuItem>
|
||||
);
|
||||
})
|
||||
customFilters.length > 0 ?
|
||||
<MenuItemSeparator /> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
customFilters
|
||||
.sort((a, b) => a.label.localeCompare(b.label))
|
||||
.map((filter) => {
|
||||
return (
|
||||
<FilterMenuItem
|
||||
key={filter.id}
|
||||
filterKey={filter.id}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
{filter.label}
|
||||
</FilterMenuItem>
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -2,9 +2,10 @@ export const BOOL = 'bool';
|
||||
export const BYTES = 'bytes';
|
||||
export const DATE = 'date';
|
||||
export const DEFAULT = 'default';
|
||||
export const HISTORY_EVENT_TYPE = 'historyEventType';
|
||||
export const INDEXER = 'indexer';
|
||||
export const PROTOCOL = 'protocol';
|
||||
export const PRIVACY = 'privacy';
|
||||
export const APP_PROFILE = 'appProfile';
|
||||
export const MOVIE_STATUS = 'movieStatus';
|
||||
export const CATEGORY = 'category';
|
||||
export const TAG = 'tag';
|
||||
|
||||
@@ -15,6 +15,7 @@ import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptions
|
||||
import TablePager from 'Components/Table/TablePager';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import HistoryFilterModal from './HistoryFilterModal';
|
||||
import HistoryOptionsConnector from './HistoryOptionsConnector';
|
||||
import HistoryRowConnector from './HistoryRowConnector';
|
||||
|
||||
@@ -63,6 +64,7 @@ class History extends Component {
|
||||
columns,
|
||||
selectedFilterKey,
|
||||
filters,
|
||||
customFilters,
|
||||
totalRecords,
|
||||
onFilterSelect,
|
||||
onFirstPagePress,
|
||||
@@ -108,7 +110,8 @@ class History extends Component {
|
||||
alignMenu={align.RIGHT}
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
filters={filters}
|
||||
customFilters={[]}
|
||||
customFilters={customFilters}
|
||||
filterModalConnectorComponent={HistoryFilterModal}
|
||||
onFilterSelect={onFilterSelect}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
@@ -193,8 +196,9 @@ History.propTypes = {
|
||||
indexersError: PropTypes.object,
|
||||
items: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
selectedFilterKey: PropTypes.string.isRequired,
|
||||
selectedFilterKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
filters: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
customFilters: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
totalRecords: PropTypes.number,
|
||||
onFilterSelect: PropTypes.func.isRequired,
|
||||
onFirstPagePress: PropTypes.func.isRequired,
|
||||
|
||||
@@ -6,6 +6,7 @@ import * as commandNames from 'Commands/commandNames';
|
||||
import withCurrentPage from 'Components/withCurrentPage';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import * as historyActions from 'Store/Actions/historyActions';
|
||||
import { createCustomFiltersSelector } from 'Store/Selectors/createClientSideCollectionSelector';
|
||||
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
|
||||
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
|
||||
import History from './History';
|
||||
@@ -14,13 +15,15 @@ function createMapStateToProps() {
|
||||
return createSelector(
|
||||
(state) => state.history,
|
||||
(state) => state.indexers,
|
||||
createCustomFiltersSelector('history'),
|
||||
createCommandExecutingSelector(commandNames.CLEAR_HISTORY),
|
||||
(history, indexers, isHistoryClearing) => {
|
||||
(history, indexers, customFilters, isHistoryClearing) => {
|
||||
return {
|
||||
isIndexersFetching: indexers.isFetching,
|
||||
isIndexersPopulated: indexers.isPopulated,
|
||||
indexersError: indexers.error,
|
||||
isHistoryClearing,
|
||||
customFilters,
|
||||
...history
|
||||
};
|
||||
}
|
||||
|
||||
54
frontend/src/History/HistoryFilterModal.tsx
Normal file
54
frontend/src/History/HistoryFilterModal.tsx
Normal file
@@ -0,0 +1,54 @@
|
||||
import React, { useCallback } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import AppState from 'App/State/AppState';
|
||||
import FilterModal from 'Components/Filter/FilterModal';
|
||||
import { setHistoryFilter } from 'Store/Actions/historyActions';
|
||||
|
||||
function createHistorySelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.history.items,
|
||||
(queueItems) => {
|
||||
return queueItems;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function createFilterBuilderPropsSelector() {
|
||||
return createSelector(
|
||||
(state: AppState) => state.history.filterBuilderProps,
|
||||
(filterBuilderProps) => {
|
||||
return filterBuilderProps;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
interface HistoryFilterModalProps {
|
||||
isOpen: boolean;
|
||||
}
|
||||
|
||||
export default function HistoryFilterModal(props: HistoryFilterModalProps) {
|
||||
const sectionItems = useSelector(createHistorySelector());
|
||||
const filterBuilderProps = useSelector(createFilterBuilderPropsSelector());
|
||||
const customFilterType = 'history';
|
||||
|
||||
const dispatch = useDispatch();
|
||||
|
||||
const dispatchSetFilter = useCallback(
|
||||
(payload: unknown) => {
|
||||
dispatch(setHistoryFilter(payload));
|
||||
},
|
||||
[dispatch]
|
||||
);
|
||||
|
||||
return (
|
||||
<FilterModal
|
||||
// TODO: Don't spread all the props
|
||||
{...props}
|
||||
sectionItems={sectionItems}
|
||||
filterBuilderProps={filterBuilderProps}
|
||||
customFilterType={customFilterType}
|
||||
dispatchSetFilter={dispatchSetFilter}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -11,6 +11,12 @@
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.id {
|
||||
composes: cell;
|
||||
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.sortName {
|
||||
composes: cell;
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ interface CssExports {
|
||||
'cell': string;
|
||||
'checkInput': string;
|
||||
'externalLink': string;
|
||||
'id': string;
|
||||
'minimumSeeders': string;
|
||||
'packSeedTime': string;
|
||||
'priority': string;
|
||||
|
||||
@@ -34,7 +34,7 @@ function IndexerIndexRow(props: IndexerIndexRowProps) {
|
||||
const { indexerId, columns, isSelectMode, onCloneIndexerPress } = props;
|
||||
|
||||
const { indexer, appProfile, status, longDateFormat, timeFormat } =
|
||||
useSelector(createIndexerIndexItemSelector(props.indexerId));
|
||||
useSelector(createIndexerIndexItemSelector(indexerId));
|
||||
|
||||
const {
|
||||
id,
|
||||
@@ -148,12 +148,24 @@ function IndexerIndexRow(props: IndexerIndexRowProps) {
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'id') {
|
||||
return (
|
||||
<VirtualTableRowCell key={name} className={styles[name]}>
|
||||
<IndexerTitleLink
|
||||
indexerId={indexerId}
|
||||
title={`${indexerId}`}
|
||||
onCloneIndexerPress={onCloneIndexerPress}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'sortName') {
|
||||
return (
|
||||
<VirtualTableRowCell key={name} className={styles[name]}>
|
||||
<IndexerTitleLink
|
||||
indexerId={indexerId}
|
||||
indexerName={indexerName}
|
||||
title={indexerName}
|
||||
onCloneIndexerPress={onCloneIndexerPress}
|
||||
/>
|
||||
</VirtualTableRowCell>
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.id {
|
||||
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.sortName {
|
||||
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ interface CssExports {
|
||||
'added': string;
|
||||
'appProfileId': string;
|
||||
'capabilities': string;
|
||||
'id': string;
|
||||
'minimumSeeders': string;
|
||||
'packSeedTime': string;
|
||||
'priority': string;
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { useCallback, useState } from 'react';
|
||||
import Link from 'Components/Link/Link';
|
||||
import IndexerInfoModal from './Info/IndexerInfoModal';
|
||||
import styles from './IndexerTitleLink.css';
|
||||
|
||||
interface IndexerTitleLinkProps {
|
||||
indexerName: string;
|
||||
indexerId: number;
|
||||
title: string;
|
||||
onCloneIndexerPress(id: number): void;
|
||||
}
|
||||
|
||||
function IndexerTitleLink(props: IndexerTitleLinkProps) {
|
||||
const { indexerName, indexerId, onCloneIndexerPress } = props;
|
||||
const { title, indexerId, onCloneIndexerPress } = props;
|
||||
|
||||
const [isIndexerInfoModalOpen, setIsIndexerInfoModalOpen] = useState(false);
|
||||
|
||||
@@ -26,7 +25,7 @@ function IndexerTitleLink(props: IndexerTitleLinkProps) {
|
||||
return (
|
||||
<div>
|
||||
<Link className={styles.link} onPress={onIndexerInfoPress}>
|
||||
{indexerName}
|
||||
{title}
|
||||
</Link>
|
||||
|
||||
<IndexerInfoModal
|
||||
@@ -39,8 +38,4 @@ function IndexerTitleLink(props: IndexerTitleLinkProps) {
|
||||
);
|
||||
}
|
||||
|
||||
IndexerTitleLink.propTypes = {
|
||||
indexerName: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
export default IndexerTitleLink;
|
||||
|
||||
@@ -12,8 +12,9 @@ import FilterMenu from 'Components/Menu/FilterMenu';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import { align, kinds } from 'Helpers/Props';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import {
|
||||
fetchIndexerStats,
|
||||
setIndexerStatsFilter,
|
||||
@@ -194,6 +195,10 @@ function IndexerStats() {
|
||||
dispatch(fetchIndexerStats());
|
||||
}, [dispatch]);
|
||||
|
||||
const onRefreshPress = useCallback(() => {
|
||||
dispatch(fetchIndexerStats());
|
||||
}, [dispatch]);
|
||||
|
||||
const onFilterSelect = useCallback(
|
||||
(value: string) => {
|
||||
dispatch(setIndexerStatsFilter({ selectedFilterKey: value }));
|
||||
@@ -219,8 +224,17 @@ function IndexerStats() {
|
||||
}, 0) ?? 0;
|
||||
|
||||
return (
|
||||
<PageContent>
|
||||
<PageContent title={translate('Stats')}>
|
||||
<PageToolbar>
|
||||
<PageToolbarSection>
|
||||
<PageToolbarButton
|
||||
label={translate('Refresh')}
|
||||
iconName={icons.REFRESH}
|
||||
isSpinning={isFetching}
|
||||
onPress={onRefreshPress}
|
||||
/>
|
||||
</PageToolbarSection>
|
||||
|
||||
<PageToolbarSection alignContent={align.RIGHT} collapseButtons={false}>
|
||||
<FilterMenu
|
||||
alignMenu={align.RIGHT}
|
||||
|
||||
@@ -285,7 +285,7 @@ class SearchIndex extends Component {
|
||||
const hasNoIndexer = !totalItems;
|
||||
|
||||
return (
|
||||
<PageContent>
|
||||
<PageContent title={translate('Search')}>
|
||||
<PageToolbar>
|
||||
<PageToolbarSection
|
||||
alignContent={align.RIGHT}
|
||||
|
||||
@@ -62,7 +62,7 @@ class Applications extends Component {
|
||||
return (
|
||||
<FieldSet legend={translate('Applications')}>
|
||||
<PageSectionContent
|
||||
errorMessage={translate('UnableToLoadApplicationList')}
|
||||
errorMessage={translate('ApplicationsLoadError')}
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.applications}>
|
||||
|
||||
@@ -14,9 +14,11 @@ import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import useSelectState from 'Helpers/Hooks/useSelectState';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import SortDirection from 'Helpers/Props/SortDirection';
|
||||
import {
|
||||
bulkDeleteApplications,
|
||||
bulkEditApplications,
|
||||
setManageApplicationsSort,
|
||||
} from 'Store/Actions/settingsActions';
|
||||
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
|
||||
import { SelectStateInputProps } from 'typings/props';
|
||||
@@ -62,6 +64,8 @@ const COLUMNS = [
|
||||
|
||||
interface ManageApplicationsModalContentProps {
|
||||
onModalClose(): void;
|
||||
sortKey?: string;
|
||||
sortDirection?: SortDirection;
|
||||
}
|
||||
|
||||
function ManageApplicationsModalContent(
|
||||
@@ -76,6 +80,8 @@ function ManageApplicationsModalContent(
|
||||
isSaving,
|
||||
error,
|
||||
items,
|
||||
sortKey,
|
||||
sortDirection,
|
||||
}: ApplicationAppState = useSelector(
|
||||
createClientSideCollectionSelector('settings.applications')
|
||||
);
|
||||
@@ -96,6 +102,13 @@ function ManageApplicationsModalContent(
|
||||
|
||||
const selectedCount = selectedIds.length;
|
||||
|
||||
const onSortPress = useCallback(
|
||||
(value: string) => {
|
||||
dispatch(setManageApplicationsSort({ sortKey: value }));
|
||||
},
|
||||
[dispatch]
|
||||
);
|
||||
|
||||
const onDeletePress = useCallback(() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
}, [setIsDeleteModalOpen]);
|
||||
@@ -201,6 +214,9 @@ function ManageApplicationsModalContent(
|
||||
allSelected={allSelected}
|
||||
allUnselected={allUnselected}
|
||||
onSelectAllChange={onSelectAllChange}
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onSortPress={onSortPress}
|
||||
>
|
||||
<TableBody>
|
||||
{items.map((item) => {
|
||||
|
||||
@@ -84,7 +84,7 @@ class DownloadClientSettings extends Component {
|
||||
/>
|
||||
|
||||
<PageToolbarButton
|
||||
label={translate('ManageDownloadClients')}
|
||||
label={translate('ManageClients')}
|
||||
iconName={icons.MANAGE}
|
||||
onPress={this.onManageDownloadClientsPress}
|
||||
/>
|
||||
|
||||
@@ -61,7 +61,7 @@ class DownloadClients extends Component {
|
||||
return (
|
||||
<FieldSet legend={translate('DownloadClients')}>
|
||||
<PageSectionContent
|
||||
errorMessage={translate('UnableToLoadDownloadClients')}
|
||||
errorMessage={translate('DownloadClientsLoadError')}
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.downloadClients}>
|
||||
|
||||
@@ -14,9 +14,11 @@ import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import useSelectState from 'Helpers/Hooks/useSelectState';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import SortDirection from 'Helpers/Props/SortDirection';
|
||||
import {
|
||||
bulkDeleteDownloadClients,
|
||||
bulkEditDownloadClients,
|
||||
setManageDownloadClientsSort,
|
||||
} from 'Store/Actions/settingsActions';
|
||||
import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector';
|
||||
import { SelectStateInputProps } from 'typings/props';
|
||||
@@ -61,6 +63,8 @@ const COLUMNS = [
|
||||
|
||||
interface ManageDownloadClientsModalContentProps {
|
||||
onModalClose(): void;
|
||||
sortKey?: string;
|
||||
sortDirection?: SortDirection;
|
||||
}
|
||||
|
||||
function ManageDownloadClientsModalContent(
|
||||
@@ -75,6 +79,8 @@ function ManageDownloadClientsModalContent(
|
||||
isSaving,
|
||||
error,
|
||||
items,
|
||||
sortKey,
|
||||
sortDirection,
|
||||
}: DownloadClientAppState = useSelector(
|
||||
createClientSideCollectionSelector('settings.downloadClients')
|
||||
);
|
||||
@@ -93,6 +99,13 @@ function ManageDownloadClientsModalContent(
|
||||
|
||||
const selectedCount = selectedIds.length;
|
||||
|
||||
const onSortPress = useCallback(
|
||||
(value: string) => {
|
||||
dispatch(setManageDownloadClientsSort({ sortKey: value }));
|
||||
},
|
||||
[dispatch]
|
||||
);
|
||||
|
||||
const onDeletePress = useCallback(() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
}, [setIsDeleteModalOpen]);
|
||||
@@ -174,6 +187,9 @@ function ManageDownloadClientsModalContent(
|
||||
allSelected={allSelected}
|
||||
allUnselected={allUnselected}
|
||||
onSelectAllChange={onSelectAllChange}
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onSortPress={onSortPress}
|
||||
>
|
||||
<TableBody>
|
||||
{items.map((item) => {
|
||||
|
||||
@@ -97,20 +97,6 @@ class EditAppProfileModalContent extends Component {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('EnableInteractiveSearch')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="enableInteractiveSearch"
|
||||
{...enableInteractiveSearch}
|
||||
helpText={translate('EnableInteractiveSearchHelpText')}
|
||||
onChange={onInputChange}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('EnableAutomaticSearch')}
|
||||
@@ -125,6 +111,20 @@ class EditAppProfileModalContent extends Component {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('EnableInteractiveSearch')}
|
||||
</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="enableInteractiveSearch"
|
||||
{...enableInteractiveSearch}
|
||||
helpText={translate('EnableInteractiveSearchHelpText')}
|
||||
onChange={onInputChange}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('MinimumSeeders')}
|
||||
|
||||
@@ -6,6 +6,8 @@ import getSectionState from 'Utilities/State/getSectionState';
|
||||
import { set, updateServerSideCollection } from '../baseActions';
|
||||
|
||||
function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter) {
|
||||
const [baseSection] = section.split('.');
|
||||
|
||||
return function(getState, payload, dispatch) {
|
||||
dispatch(set({ section, isFetching: true }));
|
||||
|
||||
@@ -25,10 +27,13 @@ function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter
|
||||
|
||||
const {
|
||||
selectedFilterKey,
|
||||
filters,
|
||||
customFilters
|
||||
filters
|
||||
} = sectionState;
|
||||
|
||||
const customFilters = getState().customFilters.items.filter((customFilter) => {
|
||||
return customFilter.type === section || customFilter.type === baseSection;
|
||||
});
|
||||
|
||||
const selectedFilters = findSelectedFilters(selectedFilterKey, filters, customFilters);
|
||||
|
||||
selectedFilters.forEach((filter) => {
|
||||
@@ -37,7 +42,8 @@ function createFetchServerSideCollectionHandler(section, url, fetchDataAugmenter
|
||||
|
||||
const promise = createAjaxRequest({
|
||||
url,
|
||||
data
|
||||
data,
|
||||
traditional: true
|
||||
}).request;
|
||||
|
||||
promise.done((response) => {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { createAction } from 'redux-actions';
|
||||
import { sortDirections } from 'Helpers/Props';
|
||||
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
|
||||
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
|
||||
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
|
||||
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
|
||||
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
|
||||
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
|
||||
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
|
||||
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
|
||||
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
|
||||
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
|
||||
import { createThunk } from 'Store/thunks';
|
||||
@@ -30,9 +32,10 @@ export const CANCEL_SAVE_APPLICATION = 'settings/applications/cancelSaveApplicat
|
||||
export const DELETE_APPLICATION = 'settings/applications/deleteApplication';
|
||||
export const TEST_APPLICATION = 'settings/applications/testApplication';
|
||||
export const CANCEL_TEST_APPLICATION = 'settings/applications/cancelTestApplication';
|
||||
export const TEST_ALL_APPLICATIONS = 'indexers/testAllApplications';
|
||||
export const TEST_ALL_APPLICATIONS = 'settings/applications/testAllApplications';
|
||||
export const BULK_EDIT_APPLICATIONS = 'settings/applications/bulkEditApplications';
|
||||
export const BULK_DELETE_APPLICATIONS = 'settings/applications/bulkDeleteApplications';
|
||||
export const SET_MANAGE_APPLICATIONS_SORT = 'settings/applications/setManageApplicationsSort';
|
||||
|
||||
//
|
||||
// Action Creators
|
||||
@@ -49,6 +52,7 @@ export const cancelTestApplication = createThunk(CANCEL_TEST_APPLICATION);
|
||||
export const testAllApplications = createThunk(TEST_ALL_APPLICATIONS);
|
||||
export const bulkEditApplications = createThunk(BULK_EDIT_APPLICATIONS);
|
||||
export const bulkDeleteApplications = createThunk(BULK_DELETE_APPLICATIONS);
|
||||
export const setManageApplicationsSort = createAction(SET_MANAGE_APPLICATIONS_SORT);
|
||||
|
||||
export const setApplicationValue = createAction(SET_APPLICATION_VALUE, (payload) => {
|
||||
return {
|
||||
@@ -88,7 +92,14 @@ export default {
|
||||
isTesting: false,
|
||||
isTestingAll: false,
|
||||
items: [],
|
||||
pendingChanges: {}
|
||||
pendingChanges: {},
|
||||
sortKey: 'name',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
sortPredicates: {
|
||||
name: function(item) {
|
||||
return item.name.toLowerCase();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//
|
||||
@@ -121,7 +132,10 @@ export default {
|
||||
|
||||
return selectedSchema;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
[SET_MANAGE_APPLICATIONS_SORT]: createSetClientSideCollectionSortReducer(section)
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { createAction } from 'redux-actions';
|
||||
import { sortDirections } from 'Helpers/Props';
|
||||
import createBulkEditItemHandler from 'Store/Actions/Creators/createBulkEditItemHandler';
|
||||
import createBulkRemoveItemHandler from 'Store/Actions/Creators/createBulkRemoveItemHandler';
|
||||
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
|
||||
@@ -7,6 +8,7 @@ import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHand
|
||||
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
|
||||
import createTestAllProvidersHandler from 'Store/Actions/Creators/createTestAllProvidersHandler';
|
||||
import createTestProviderHandler, { createCancelTestProviderHandler } from 'Store/Actions/Creators/createTestProviderHandler';
|
||||
import createSetClientSideCollectionSortReducer from 'Store/Actions/Creators/Reducers/createSetClientSideCollectionSortReducer';
|
||||
import createSetProviderFieldValueReducer from 'Store/Actions/Creators/Reducers/createSetProviderFieldValueReducer';
|
||||
import createSetSettingValueReducer from 'Store/Actions/Creators/Reducers/createSetSettingValueReducer';
|
||||
import { createThunk } from 'Store/thunks';
|
||||
@@ -34,6 +36,7 @@ export const CANCEL_TEST_DOWNLOAD_CLIENT = 'settings/downloadClients/cancelTestD
|
||||
export const TEST_ALL_DOWNLOAD_CLIENTS = 'settings/downloadClients/testAllDownloadClients';
|
||||
export const BULK_EDIT_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkEditDownloadClients';
|
||||
export const BULK_DELETE_DOWNLOAD_CLIENTS = 'settings/downloadClients/bulkDeleteDownloadClients';
|
||||
export const SET_MANAGE_DOWNLOAD_CLIENTS_SORT = 'settings/downloadClients/setManageDownloadClientsSort';
|
||||
|
||||
//
|
||||
// Action Creators
|
||||
@@ -50,6 +53,7 @@ export const cancelTestDownloadClient = createThunk(CANCEL_TEST_DOWNLOAD_CLIENT)
|
||||
export const testAllDownloadClients = createThunk(TEST_ALL_DOWNLOAD_CLIENTS);
|
||||
export const bulkEditDownloadClients = createThunk(BULK_EDIT_DOWNLOAD_CLIENTS);
|
||||
export const bulkDeleteDownloadClients = createThunk(BULK_DELETE_DOWNLOAD_CLIENTS);
|
||||
export const setManageDownloadClientsSort = createAction(SET_MANAGE_DOWNLOAD_CLIENTS_SORT);
|
||||
|
||||
export const setDownloadClientValue = createAction(SET_DOWNLOAD_CLIENT_VALUE, (payload) => {
|
||||
return {
|
||||
@@ -89,7 +93,14 @@ export default {
|
||||
isTesting: false,
|
||||
isTestingAll: false,
|
||||
items: [],
|
||||
pendingChanges: {}
|
||||
pendingChanges: {},
|
||||
sortKey: 'name',
|
||||
sortDirection: sortDirections.ASCENDING,
|
||||
sortPredicates: {
|
||||
name: function(item) {
|
||||
return item.name.toLowerCase();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//
|
||||
@@ -147,7 +158,10 @@ export default {
|
||||
|
||||
return selectedSchema;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
[SET_MANAGE_DOWNLOAD_CLIENTS_SORT]: createSetClientSideCollectionSortReducer(section)
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { createAction } from 'redux-actions';
|
||||
import { filterTypes, sortDirections } from 'Helpers/Props';
|
||||
import { filterBuilderTypes, filterBuilderValueTypes, filterTypes, sortDirections } from 'Helpers/Props';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import serverSideCollectionHandlers from 'Utilities/serverSideCollectionHandlers';
|
||||
@@ -159,6 +159,27 @@ export const defaultState = {
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
filterBuilderProps: [
|
||||
{
|
||||
name: 'eventType',
|
||||
label: () => translate('EventType'),
|
||||
type: filterBuilderTypes.EQUAL,
|
||||
valueType: filterBuilderValueTypes.HISTORY_EVENT_TYPE
|
||||
},
|
||||
{
|
||||
name: 'indexerIds',
|
||||
label: () => translate('Indexer'),
|
||||
type: filterBuilderTypes.EQUAL,
|
||||
valueType: filterBuilderValueTypes.INDEXER
|
||||
},
|
||||
{
|
||||
name: 'successful',
|
||||
label: () => translate('Successful'),
|
||||
type: filterBuilderTypes.EQUAL,
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
}
|
||||
]
|
||||
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import _ from 'lodash';
|
||||
import { createAction } from 'redux-actions';
|
||||
import { sortDirections } from 'Helpers/Props';
|
||||
import { filterTypePredicates, sortDirections } from 'Helpers/Props';
|
||||
import createFetchHandler from 'Store/Actions/Creators/createFetchHandler';
|
||||
import createRemoveItemHandler from 'Store/Actions/Creators/createRemoveItemHandler';
|
||||
import createSaveProviderHandler, { createCancelSaveProviderHandler } from 'Store/Actions/Creators/createSaveProviderHandler';
|
||||
@@ -69,6 +69,28 @@ export const filterPredicates = {
|
||||
item.fields.find((field) => field.name === 'vipExpiration')?.value ?? null;
|
||||
|
||||
return dateFilterPredicate(vipExpiration, filterValue, type);
|
||||
},
|
||||
|
||||
categories: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
|
||||
const { categories = [] } = item.capabilities || {};
|
||||
|
||||
const categoryList = categories
|
||||
.filter((category) => category.id < 100000)
|
||||
.reduce((acc, element) => {
|
||||
acc.push(element.id);
|
||||
|
||||
if (element.subCategories && element.subCategories.length > 0) {
|
||||
element.subCategories.forEach((subCat) => {
|
||||
acc.push(subCat.id);
|
||||
});
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, []);
|
||||
|
||||
return predicate(categoryList, filterValue);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -37,12 +37,18 @@ export const defaultState = {
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
},
|
||||
{
|
||||
name: 'id',
|
||||
columnLabel: () => translate('IndexerId'),
|
||||
label: () => translate('Id'),
|
||||
isSortable: true,
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'sortName',
|
||||
label: () => translate('IndexerName'),
|
||||
isSortable: true,
|
||||
isVisible: true,
|
||||
isModifiable: false
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'protocol',
|
||||
@@ -180,6 +186,12 @@ export const defaultState = {
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.APP_PROFILE
|
||||
},
|
||||
{
|
||||
name: 'categories',
|
||||
label: () => translate('Categories'),
|
||||
type: filterBuilderTypes.ARRAY,
|
||||
valueType: filterBuilderValueTypes.CATEGORY
|
||||
},
|
||||
{
|
||||
name: 'tags',
|
||||
label: () => translate('Tags'),
|
||||
|
||||
@@ -74,8 +74,9 @@ export const defaultState = {
|
||||
valueType: filterBuilderValueTypes.TAG
|
||||
}
|
||||
],
|
||||
selectedFilterKey: 'all',
|
||||
customFilters: []
|
||||
|
||||
selectedFilterKey: 'all'
|
||||
|
||||
};
|
||||
|
||||
export const persistState = [
|
||||
|
||||
@@ -22,9 +22,9 @@ class About extends Component {
|
||||
isNetCore,
|
||||
isDocker,
|
||||
runtimeVersion,
|
||||
migrationVersion,
|
||||
databaseVersion,
|
||||
databaseType,
|
||||
migrationVersion,
|
||||
appData,
|
||||
startupPath,
|
||||
mode,
|
||||
@@ -66,13 +66,13 @@ class About extends Component {
|
||||
}
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('DBMigration')}
|
||||
data={migrationVersion}
|
||||
title={translate('Database')}
|
||||
data={`${titleCase(databaseType)} ${databaseVersion}`}
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('Database')}
|
||||
data={`${titleCase(databaseType)} ${databaseVersion}`}
|
||||
title={translate('DatabaseMigration')}
|
||||
data={migrationVersion}
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
|
||||
@@ -92,6 +92,10 @@ namespace NzbDrone.Common.Http
|
||||
{
|
||||
data = new XElement("base64", Convert.ToBase64String(bytes));
|
||||
}
|
||||
else if (value is Dictionary<string, string> d)
|
||||
{
|
||||
data = new XElement("struct", d.Select(p => new XElement("member", new XElement("name", p.Key), new XElement("value", p.Value))));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException($"Unhandled argument type {value.GetType().Name}");
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Datastore.Migration;
|
||||
using NzbDrone.Core.Notifications.Email;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore.Migration
|
||||
{
|
||||
[TestFixture]
|
||||
public class email_encryptionFixture : MigrationTest<email_encryption>
|
||||
{
|
||||
[Test]
|
||||
public void should_convert_do_not_require_encryption_to_auto()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Notifications").Row(new
|
||||
{
|
||||
OnGrab = true,
|
||||
OnHealthIssue = true,
|
||||
IncludeHealthWarnings = true,
|
||||
Name = "Mail Prowlarr",
|
||||
Implementation = "Email",
|
||||
Tags = "[]",
|
||||
Settings = new EmailSettings38
|
||||
{
|
||||
Server = "smtp.gmail.com",
|
||||
Port = 563,
|
||||
To = new List<string> { "dont@email.me" },
|
||||
RequireEncryption = false
|
||||
}.ToJson(),
|
||||
ConfigContract = "EmailSettings"
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("Email");
|
||||
items.First().ConfigContract.Should().Be("EmailSettings");
|
||||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_require_encryption_to_always()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Notifications").Row(new
|
||||
{
|
||||
OnGrab = true,
|
||||
OnHealthIssue = true,
|
||||
IncludeHealthWarnings = true,
|
||||
Name = "Mail Prowlarr",
|
||||
Implementation = "Email",
|
||||
Tags = "[]",
|
||||
Settings = new EmailSettings38
|
||||
{
|
||||
Server = "smtp.gmail.com",
|
||||
Port = 563,
|
||||
To = new List<string> { "dont@email.me" },
|
||||
RequireEncryption = true
|
||||
}.ToJson(),
|
||||
ConfigContract = "EmailSettings"
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("Email");
|
||||
items.First().ConfigContract.Should().Be("EmailSettings");
|
||||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Always);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_use_defaults_when_settings_are_empty()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
c.Insert.IntoTable("Notifications").Row(new
|
||||
{
|
||||
OnGrab = true,
|
||||
OnHealthIssue = true,
|
||||
IncludeHealthWarnings = true,
|
||||
Name = "Mail Prowlarr",
|
||||
Implementation = "Email",
|
||||
Tags = "[]",
|
||||
Settings = new { }.ToJson(),
|
||||
ConfigContract = "EmailSettings"
|
||||
});
|
||||
});
|
||||
|
||||
var items = db.Query<NotificationDefinition39>("SELECT * FROM \"Notifications\"");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Implementation.Should().Be("Email");
|
||||
items.First().ConfigContract.Should().Be("EmailSettings");
|
||||
items.First().Settings.UseEncryption.Should().Be((int)EmailEncryptionType.Preferred);
|
||||
}
|
||||
}
|
||||
|
||||
public class NotificationDefinition39
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Implementation { get; set; }
|
||||
public string ConfigContract { get; set; }
|
||||
public EmailSettings39 Settings { get; set; }
|
||||
public string Name { get; set; }
|
||||
public bool OnGrab { get; set; }
|
||||
public bool OnHealthIssue { get; set; }
|
||||
public bool OnHealthRestored { get; set; }
|
||||
public bool OnApplicationUpdate { get; set; }
|
||||
public bool SupportsOnGrab { get; set; }
|
||||
public bool IncludeManualGrabs { get; set; }
|
||||
public bool SupportsOnHealthIssue { get; set; }
|
||||
public bool SupportsOnHealthRestored { get; set; }
|
||||
public bool IncludeHealthWarnings { get; set; }
|
||||
public bool SupportsOnApplicationUpdate { get; set; }
|
||||
public List<int> Tags { get; set; }
|
||||
}
|
||||
|
||||
public class EmailSettings38
|
||||
{
|
||||
public string Server { get; set; }
|
||||
public int Port { get; set; }
|
||||
public bool RequireEncryption { get; set; }
|
||||
public string Username { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string From { get; set; }
|
||||
public IEnumerable<string> To { get; set; }
|
||||
public IEnumerable<string> Cc { get; set; }
|
||||
public IEnumerable<string> Bcc { get; set; }
|
||||
}
|
||||
|
||||
public class EmailSettings39
|
||||
{
|
||||
public string Server { get; set; }
|
||||
public int Port { get; set; }
|
||||
public int UseEncryption { get; set; }
|
||||
public string Username { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string From { get; set; }
|
||||
public IEnumerable<string> To { get; set; }
|
||||
public IEnumerable<string> Cc { get; set; }
|
||||
public IEnumerable<string> Bcc { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
@@ -21,10 +22,10 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
Subject.Definition = new IndexerDefinition()
|
||||
Subject.Definition = new IndexerDefinition
|
||||
{
|
||||
Name = "GazelleGames",
|
||||
Settings = new GazelleGamesSettings() { Apikey = "somekey" }
|
||||
Settings = new GazelleGamesSettings { Apikey = "somekey" }
|
||||
};
|
||||
}
|
||||
|
||||
@@ -37,20 +38,20 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
|
||||
.Setup(o => o.ExecuteProxiedAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get), Subject.Definition))
|
||||
.Returns<HttpRequest, IndexerDefinition>((r, d) => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, new CookieCollection(), recentFeed)));
|
||||
|
||||
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new int[] { 2000 } })).Releases;
|
||||
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new[] { 2000 } })).Releases;
|
||||
|
||||
releases.Should().HaveCount(1464);
|
||||
releases.Should().HaveCount(1462);
|
||||
releases.First().Should().BeOfType<TorrentInfo>();
|
||||
|
||||
var torrentInfo = releases.First() as TorrentInfo;
|
||||
|
||||
torrentInfo.Title.Should().Be("Microsoft_Flight_Simulator-HOODLUM");
|
||||
torrentInfo.Title.Should().Be("Microsoft_Flight_Simulator-HOODLUM (2020) [Windows / Multi-Language / Full ISO]");
|
||||
torrentInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
||||
torrentInfo.DownloadUrl.Should().Be("https://gazellegames.net/torrents.php?action=download&id=303216&authkey=prowlarr&torrent_pass=");
|
||||
torrentInfo.InfoUrl.Should().Be("https://gazellegames.net/torrents.php?id=84781&torrentid=303216");
|
||||
torrentInfo.CommentUrl.Should().BeNullOrEmpty();
|
||||
torrentInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-07-25 6:39:11").ToUniversalTime());
|
||||
torrentInfo.PublishDate.Should().Be(DateTime.Parse("2022-07-25 06:39:11", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal));
|
||||
torrentInfo.Size.Should().Be(80077617780);
|
||||
torrentInfo.InfoHash.Should().Be(null);
|
||||
torrentInfo.MagnetUrl.Should().Be(null);
|
||||
@@ -74,7 +75,7 @@ namespace NzbDrone.Core.Test.IndexerTests.GazelleGamesTests
|
||||
.Setup(o => o.ExecuteProxiedAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get), Subject.Definition))
|
||||
.Returns<HttpRequest, IndexerDefinition>((r, d) => Task.FromResult(new HttpResponse(r, new HttpHeader { { "Content-Type", "application/json" } }, new CookieCollection(), recentFeed)));
|
||||
|
||||
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new int[] { 2000 } })).Releases;
|
||||
var releases = (await Subject.Fetch(new BasicSearchCriteria { Categories = new[] { 2000 } })).Releases;
|
||||
|
||||
releases.Should().HaveCount(0);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
using System;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Notifications.Email;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
namespace NzbDrone.Core.Test.NotificationTests.EmailTests
|
||||
{
|
||||
[TestFixture]
|
||||
public class EmailSettingsValidatorFixture : CoreTest<EmailSettingsValidator>
|
||||
{
|
||||
private EmailSettings _emailSettings;
|
||||
private TestValidator<EmailSettings> _validator;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_validator = new TestValidator<EmailSettings>
|
||||
{
|
||||
v => v.RuleFor(s => s).SetValidator(Subject)
|
||||
};
|
||||
|
||||
_emailSettings = Builder<EmailSettings>.CreateNew()
|
||||
.With(s => s.Server = "someserver")
|
||||
.With(s => s.Port = 567)
|
||||
.With(s => s.UseEncryption = (int)EmailEncryptionType.Always)
|
||||
.With(s => s.From = "dont@email.me")
|
||||
.With(s => s.To = new string[] { "dont@email.me" })
|
||||
.Build();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_be_valid_if_all_settings_valid()
|
||||
{
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_valid_if_port_is_out_of_range()
|
||||
{
|
||||
_emailSettings.Port = 900000;
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_valid_if_server_is_empty()
|
||||
{
|
||||
_emailSettings.Server = "";
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_valid_if_from_is_empty()
|
||||
{
|
||||
_emailSettings.From = "";
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("prowlarr")]
|
||||
[TestCase("email.me")]
|
||||
[Ignore("Allowed coz some email servers allow arbitrary source, we probably need to support 'Name <email>' syntax")]
|
||||
public void should_not_be_valid_if_from_is_invalid(string email)
|
||||
{
|
||||
_emailSettings.From = email;
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("prowlarr")]
|
||||
[TestCase("email.me")]
|
||||
public void should_not_be_valid_if_to_is_invalid(string email)
|
||||
{
|
||||
_emailSettings.To = new string[] { email };
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("prowlarr")]
|
||||
[TestCase("email.me")]
|
||||
public void should_not_be_valid_if_cc_is_invalid(string email)
|
||||
{
|
||||
_emailSettings.Cc = new string[] { email };
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[TestCase("prowlarr")]
|
||||
[TestCase("email.me")]
|
||||
public void should_not_be_valid_if_bcc_is_invalid(string email)
|
||||
{
|
||||
_emailSettings.Bcc = new string[] { email };
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_be_valid_if_to_bcc_cc_are_all_empty()
|
||||
{
|
||||
_emailSettings.To = Array.Empty<string>();
|
||||
_emailSettings.Cc = Array.Empty<string>();
|
||||
_emailSettings.Bcc = Array.Empty<string>();
|
||||
|
||||
_validator.Validate(_emailSettings).IsValid.Should().BeFalse();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,23 @@ namespace NzbDrone.Core.Annotations
|
||||
public string Hint { get; set; }
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
|
||||
public class FieldTokenAttribute : Attribute
|
||||
{
|
||||
public FieldTokenAttribute(TokenField field, string label = "", string token = "", object value = null)
|
||||
{
|
||||
Label = label;
|
||||
Field = field;
|
||||
Token = token;
|
||||
Value = value?.ToString();
|
||||
}
|
||||
|
||||
public string Label { get; set; }
|
||||
public TokenField Field { get; set; }
|
||||
public string Token { get; set; }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class FieldSelectOption
|
||||
{
|
||||
public int Value { get; set; }
|
||||
@@ -82,4 +99,11 @@ namespace NzbDrone.Core.Annotations
|
||||
ApiKey,
|
||||
UserName
|
||||
}
|
||||
|
||||
public enum TokenField
|
||||
{
|
||||
Label,
|
||||
HelpText,
|
||||
HelpTextWarning
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,11 +252,11 @@ namespace NzbDrone.Core.Applications
|
||||
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
|
||||
webException.Message.Contains("timed out"))
|
||||
{
|
||||
_logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message);
|
||||
_logger.Warn(webException, "{0} server is currently unavailable. {1}", this, webException.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{0} {1}", this, webException.Message);
|
||||
_logger.Warn(webException, "{0} {1}", this, webException.Message);
|
||||
}
|
||||
}
|
||||
catch (TooManyRequestsException ex)
|
||||
@@ -264,12 +264,12 @@ namespace NzbDrone.Core.Applications
|
||||
var minimumBackOff = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : TimeSpan.FromHours(1);
|
||||
_applicationStatusService.RecordFailure(application.Definition.Id, minimumBackOff);
|
||||
|
||||
_logger.Warn("API Request Limit reached for {0}", this);
|
||||
_logger.Warn(ex, "API Request Limit reached for {0}", this);
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
_applicationStatusService.RecordFailure(application.Definition.Id);
|
||||
_logger.Warn("{0} {1}", this, ex.Message);
|
||||
_logger.Warn(ex, "{0} {1}", this, ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -301,11 +301,11 @@ namespace NzbDrone.Core.Applications
|
||||
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
|
||||
webException.Message.Contains("timed out"))
|
||||
{
|
||||
_logger.Warn("{0} server is currently unavailable. {1}", this, webException.Message);
|
||||
_logger.Warn(webException, "{0} server is currently unavailable. {1}", this, webException.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{0} {1}", this, webException.Message);
|
||||
_logger.Warn(webException, "{0} {1}", this, webException.Message);
|
||||
}
|
||||
}
|
||||
catch (TooManyRequestsException ex)
|
||||
@@ -313,12 +313,12 @@ namespace NzbDrone.Core.Applications
|
||||
var minimumBackOff = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : TimeSpan.FromHours(1);
|
||||
_applicationStatusService.RecordFailure(application.Definition.Id, minimumBackOff);
|
||||
|
||||
_logger.Warn("API Request Limit reached for {0}", this);
|
||||
_logger.Warn(ex, "API Request Limit reached for {0}", this);
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
_applicationStatusService.RecordFailure(application.Definition.Id);
|
||||
_logger.Warn("{0} {1}", this, ex.Message);
|
||||
_logger.Warn(ex, "{0} {1}", this, ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -227,7 +227,7 @@ namespace NzbDrone.Core.Configuration
|
||||
return urlBase;
|
||||
}
|
||||
|
||||
return "/" + urlBase.Trim('/').ToLower();
|
||||
return "/" + urlBase;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,8 +332,8 @@ namespace NzbDrone.Core.Configuration
|
||||
return;
|
||||
}
|
||||
|
||||
// If SSL is enabled and a cert hash is still in the config file disable SSL
|
||||
if (EnableSsl && GetValue("SslCertHash", null).IsNotNullOrWhiteSpace())
|
||||
// If SSL is enabled and a cert hash is still in the config file or cert path is empty disable SSL
|
||||
if (EnableSsl && (GetValue("SslCertHash", null).IsNotNullOrWhiteSpace() || SslCertPath.IsNullOrWhiteSpace()))
|
||||
{
|
||||
SetValue("EnableSsl", false);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using Dapper;
|
||||
using FluentMigrator;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(039)]
|
||||
public class email_encryption : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Execute.WithConnection(ChangeEncryption);
|
||||
}
|
||||
|
||||
private void ChangeEncryption(IDbConnection conn, IDbTransaction tran)
|
||||
{
|
||||
var updated = new List<object>();
|
||||
using (var getEmailCmd = conn.CreateCommand())
|
||||
{
|
||||
getEmailCmd.Transaction = tran;
|
||||
getEmailCmd.CommandText = "SELECT \"Id\", \"Settings\" FROM \"Notifications\" WHERE \"Implementation\" = 'Email'";
|
||||
|
||||
using (var reader = getEmailCmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var id = reader.GetInt32(0);
|
||||
var settings = Json.Deserialize<JObject>(reader.GetString(1));
|
||||
|
||||
settings["useEncryption"] = settings.Value<bool?>("requireEncryption") ?? false ? 1 : 0;
|
||||
settings["requireEncryption"] = null;
|
||||
|
||||
updated.Add(new
|
||||
{
|
||||
Settings = settings.ToJson(),
|
||||
Id = id
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var updateSql = "UPDATE \"Notifications\" SET \"Settings\" = @Settings WHERE \"Id\" = @Id";
|
||||
conn.Execute(updateSql, updated, transaction: tran);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using System.Xml.XPath;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Download.Extensions;
|
||||
|
||||
@@ -95,8 +96,14 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
|
||||
public string AddUri(Aria2Settings settings, string magnet)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet });
|
||||
var options = new Dictionary<string, string>();
|
||||
|
||||
if (settings.Directory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
options.Add("dir", settings.Directory);
|
||||
}
|
||||
|
||||
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet }, options);
|
||||
var gid = response.GetStringResponse();
|
||||
|
||||
return gid;
|
||||
@@ -104,8 +111,16 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
|
||||
public string AddTorrent(Aria2Settings settings, byte[] torrent)
|
||||
{
|
||||
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent);
|
||||
// Aria2's second parameter is an array of URIs and needs to be sent if options are provided, this satisfies that requirement.
|
||||
var emptyListOfUris = new List<string>();
|
||||
var options = new Dictionary<string, string>();
|
||||
|
||||
if (settings.Directory.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
options.Add("dir", settings.Directory);
|
||||
}
|
||||
|
||||
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent, emptyListOfUris, options);
|
||||
var gid = response.GetStringResponse();
|
||||
|
||||
return gid;
|
||||
|
||||
@@ -41,6 +41,9 @@ namespace NzbDrone.Core.Download.Clients.Aria2
|
||||
[FieldDefinition(4, Label = "Secret token", Type = FieldType.Password, Privacy = PrivacyLevel.Password)]
|
||||
public string SecretToken { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Directory", Type = FieldType.Textbox, HelpText = "DownloadClientAriaSettingsDirectoryHelpText")]
|
||||
public string Directory { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
{
|
||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Linq;
|
||||
using FluentValidation.Results;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Download.Clients.Flood.Models;
|
||||
using NzbDrone.Core.Indexers;
|
||||
@@ -56,7 +57,7 @@ namespace NzbDrone.Core.Download.Clients.Flood
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return result.Where(t => t.IsNotNullOrWhiteSpace());
|
||||
}
|
||||
|
||||
public override string Name => "Flood";
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
public enum QBittorrentContentLayout
|
||||
{
|
||||
Default = 0,
|
||||
Original = 1,
|
||||
Subfolder = 2
|
||||
}
|
||||
}
|
||||
@@ -265,6 +265,15 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
{
|
||||
request.AddFormParameter("firstLastPiecePrio", true);
|
||||
}
|
||||
|
||||
if ((QBittorrentContentLayout)settings.ContentLayout == QBittorrentContentLayout.Original)
|
||||
{
|
||||
request.AddFormParameter("contentLayout", "Original");
|
||||
}
|
||||
else if ((QBittorrentContentLayout)settings.ContentLayout == QBittorrentContentLayout.Subfolder)
|
||||
{
|
||||
request.AddFormParameter("contentLayout", "Subfolder");
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTorrentSeedingConfiguration(string hash, TorrentSeedConfiguration seedConfiguration, QBittorrentSettings settings)
|
||||
|
||||
@@ -62,6 +62,9 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||
[FieldDefinition(10, Label = "First and Last First", Type = FieldType.Checkbox, HelpText = "Download first and last pieces first (qBittorrent 4.1.0+)")]
|
||||
public bool FirstAndLast { get; set; }
|
||||
|
||||
[FieldDefinition(13, Label = "DownloadClientQbittorrentSettingsContentLayout", Type = FieldType.Select, SelectOptions = typeof(QBittorrentContentLayout), HelpText = "DownloadClientQbittorrentSettingsContentLayoutHelpText")]
|
||||
public int ContentLayout { get; set; }
|
||||
|
||||
public NzbDroneValidationResult Validate()
|
||||
{
|
||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||
|
||||
@@ -171,9 +171,7 @@ namespace NzbDrone.Core.Download
|
||||
}
|
||||
catch (FormatException ex)
|
||||
{
|
||||
_logger.Error(ex, "Failed to parse magnetlink for release '{0}': '{1}'", release.Title, magnetUrl);
|
||||
|
||||
return null;
|
||||
throw new ReleaseDownloadException("Failed to parse magnetlink for release '{0}': '{1}'", ex, release.Title, magnetUrl);
|
||||
}
|
||||
|
||||
if (hash != null)
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
|
||||
var parameters = new BroadcastheNetTorrentQuery();
|
||||
|
||||
var searchString = searchCriteria.SearchTerm ?? string.Empty;
|
||||
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
|
||||
|
||||
var btnResults = searchCriteria.Limit.GetValueOrDefault();
|
||||
if (btnResults == 0)
|
||||
@@ -50,9 +50,10 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
{
|
||||
parameters.Tvrage = $"{searchCriteria.RId}";
|
||||
}
|
||||
else if (searchString.IsNotNullOrWhiteSpace())
|
||||
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
parameters.Search = searchString.Replace(" ", "%");
|
||||
parameters.Search = searchTerm.Replace(" ", "%");
|
||||
}
|
||||
|
||||
// If only the season/episode is searched for then change format to match expected format
|
||||
@@ -84,6 +85,11 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
parameters.Category = "Episode";
|
||||
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
|
||||
}
|
||||
else if (searchTerm.IsNotNullOrWhiteSpace() && int.TryParse(searchTerm, out _) && (searchCriteria.TvdbId > 0 || searchCriteria.RId > 0))
|
||||
{
|
||||
// Disable ID-based searches for episodes with absolute episode number
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Neither a season only search nor daily nor standard, fall back to query
|
||||
@@ -104,7 +110,7 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
|
||||
var parameters = new BroadcastheNetTorrentQuery();
|
||||
|
||||
var searchString = searchCriteria.SearchTerm ?? "";
|
||||
var searchTerm = searchCriteria.SearchTerm ?? string.Empty;
|
||||
|
||||
var btnResults = searchCriteria.Limit.GetValueOrDefault();
|
||||
if (btnResults == 0)
|
||||
@@ -114,9 +120,9 @@ namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||
|
||||
var btnOffset = searchCriteria.Offset.GetValueOrDefault(0);
|
||||
|
||||
if (searchString.IsNotNullOrWhiteSpace())
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
parameters.Search = searchString.Replace(" ", "%");
|
||||
parameters.Search = searchTerm.Replace(" ", "%");
|
||||
}
|
||||
|
||||
pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset));
|
||||
|
||||
@@ -38,3 +38,8 @@ public class FileListTorrent
|
||||
[JsonPropertyName("small_description")]
|
||||
public string SmallDescription { get; set; }
|
||||
}
|
||||
|
||||
public class FileListErrorResponse
|
||||
{
|
||||
public string Error { get; set; }
|
||||
}
|
||||
|
||||
@@ -28,9 +28,14 @@ public class FileListParser : IParseIndexerResponse
|
||||
throw new IndexerException(indexerResponse, "Unexpected response status {0} code from indexer request", indexerResponse.HttpResponse.StatusCode);
|
||||
}
|
||||
|
||||
if (indexerResponse.Content.StartsWith("{\"error\"") && STJson.TryDeserialize<FileListErrorResponse>(indexerResponse.Content, out var errorResponse))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, "Unexpected response from indexer request: {0}", errorResponse.Error);
|
||||
}
|
||||
|
||||
if (!indexerResponse.HttpResponse.Headers.ContentType.Contains(HttpAccept.Json.Value))
|
||||
{
|
||||
throw new IndexerException(indexerResponse, $"Unexpected response header {indexerResponse.HttpResponse.Headers.ContentType} from indexer request, expected {HttpAccept.Json.Value}");
|
||||
throw new IndexerException(indexerResponse, "Unexpected response header {0} from indexer request, expected {1}", indexerResponse.HttpResponse.Headers.ContentType, HttpAccept.Json.Value);
|
||||
}
|
||||
|
||||
var releaseInfos = new List<ReleaseInfo>();
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation;
|
||||
using FluentValidation.Results;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Common.Serializer;
|
||||
using NzbDrone.Core.Annotations;
|
||||
@@ -16,6 +19,7 @@ using NzbDrone.Core.Indexers.Exceptions;
|
||||
using NzbDrone.Core.Indexers.Settings;
|
||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
using NzbDrone.Core.Parser;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
@@ -24,7 +28,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
public class GazelleGames : TorrentIndexerBase<GazelleGamesSettings>
|
||||
{
|
||||
public override string Name => "GazelleGames";
|
||||
public override string[] IndexerUrls => new string[] { "https://gazellegames.net/" };
|
||||
public override string[] IndexerUrls => new[] { "https://gazellegames.net/" };
|
||||
public override string Description => "GazelleGames (GGn) is a Private Torrent Tracker for GAMES";
|
||||
public override string Language => "en-US";
|
||||
public override Encoding Encoding => Encoding.UTF8;
|
||||
@@ -38,7 +42,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||
{
|
||||
return new GazelleGamesRequestGenerator() { Settings = Settings, Capabilities = Capabilities, HttpClient = _httpClient };
|
||||
return new GazelleGamesRequestGenerator(Settings, Capabilities);
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
@@ -48,14 +52,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new IndexerCapabilities
|
||||
{
|
||||
};
|
||||
var caps = new IndexerCapabilities();
|
||||
|
||||
// Apple
|
||||
caps.Categories.AddCategoryMapping("Mac", NewznabStandardCategory.ConsoleOther, "Mac");
|
||||
caps.Categories.AddCategoryMapping("iOS", NewznabStandardCategory.PCMobileiOS, "iOS");
|
||||
caps.Categories.AddCategoryMapping("Apple Bandai Pippin", NewznabStandardCategory.ConsoleOther, "Apple Bandai Pippin");
|
||||
caps.Categories.AddCategoryMapping("Apple II", NewznabStandardCategory.ConsoleOther, "Apple II");
|
||||
|
||||
// Google
|
||||
caps.Categories.AddCategoryMapping("Android", NewznabStandardCategory.PCMobileAndroid, "Android");
|
||||
@@ -78,6 +81,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping("Nintendo GameCube", NewznabStandardCategory.ConsoleOther, "Nintendo GameCube");
|
||||
caps.Categories.AddCategoryMapping("Pokemon Mini", NewznabStandardCategory.ConsoleOther, "Pokemon Mini");
|
||||
caps.Categories.AddCategoryMapping("SNES", NewznabStandardCategory.ConsoleOther, "SNES");
|
||||
caps.Categories.AddCategoryMapping("Switch", NewznabStandardCategory.ConsoleOther, "Switch");
|
||||
caps.Categories.AddCategoryMapping("Virtual Boy", NewznabStandardCategory.ConsoleOther, "Virtual Boy");
|
||||
caps.Categories.AddCategoryMapping("Wii", NewznabStandardCategory.ConsoleWii, "Wii");
|
||||
caps.Categories.AddCategoryMapping("Wii U", NewznabStandardCategory.ConsoleWiiU, "Wii U");
|
||||
@@ -178,31 +182,62 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
caps.Categories.AddCategoryMapping("Retro - Other", NewznabStandardCategory.ConsoleOther, "Retro - Other");
|
||||
|
||||
// special categories (real categories/not platforms)
|
||||
caps.Categories.AddCategoryMapping("OST", NewznabStandardCategory.AudioOther, "OST");
|
||||
caps.Categories.AddCategoryMapping("Applications", NewznabStandardCategory.PC0day, "Applications");
|
||||
caps.Categories.AddCategoryMapping("E-Books", NewznabStandardCategory.BooksEBook, "E-Books");
|
||||
caps.Categories.AddCategoryMapping(1, NewznabStandardCategory.PCGames, "Games");
|
||||
caps.Categories.AddCategoryMapping(2, NewznabStandardCategory.PC0day, "Applications");
|
||||
caps.Categories.AddCategoryMapping(3, NewznabStandardCategory.BooksEBook, "E-Books");
|
||||
caps.Categories.AddCategoryMapping(4, NewznabStandardCategory.AudioOther, "OST");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
protected override async Task Test(List<ValidationFailure> failures)
|
||||
{
|
||||
((GazelleGamesRequestGenerator)GetRequestGenerator()).FetchPasskey();
|
||||
await base.Test(failures);
|
||||
await FetchPasskey().ConfigureAwait(false);
|
||||
|
||||
await base.Test(failures).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private async Task FetchPasskey()
|
||||
{
|
||||
var request = new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}/api.php")
|
||||
.Accept(HttpAccept.Json)
|
||||
.SetHeader("X-API-Key", Settings.Apikey)
|
||||
.AddQueryParam("request", "quick_user")
|
||||
.Build();
|
||||
|
||||
var indexResponse = await _httpClient.ExecuteAsync(request).ConfigureAwait(false);
|
||||
|
||||
var index = Json.Deserialize<GazelleGamesUserResponse>(indexResponse.Content);
|
||||
|
||||
if (index == null ||
|
||||
string.IsNullOrWhiteSpace(index.Status) ||
|
||||
index.Status != "success" ||
|
||||
string.IsNullOrWhiteSpace(index.Response.PassKey))
|
||||
{
|
||||
throw new IndexerAuthException("Failed to authenticate with GazelleGames.");
|
||||
}
|
||||
|
||||
// Set passkey on settings so it can be used to generate the download URL
|
||||
Settings.Passkey = index.Response.PassKey;
|
||||
}
|
||||
}
|
||||
|
||||
public class GazelleGamesRequestGenerator : IIndexerRequestGenerator
|
||||
{
|
||||
public GazelleGamesSettings Settings { get; set; }
|
||||
public IndexerCapabilities Capabilities { get; set; }
|
||||
public IIndexerHttpClient HttpClient { get; set; }
|
||||
private readonly GazelleGamesSettings _settings;
|
||||
private readonly IndexerCapabilities _capabilities;
|
||||
|
||||
public GazelleGamesRequestGenerator(GazelleGamesSettings settings, IndexerCapabilities capabilities)
|
||||
{
|
||||
_settings = settings;
|
||||
_capabilities = capabilities;
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -211,7 +246,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -220,7 +255,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -229,7 +264,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
@@ -238,61 +273,72 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria.Categories)));
|
||||
pageableRequests.Add(GetRequest(GetBasicSearchParameters(searchCriteria.SanitizedSearchTerm, searchCriteria)));
|
||||
|
||||
return pageableRequests;
|
||||
}
|
||||
|
||||
public void FetchPasskey()
|
||||
private IEnumerable<IndexerRequest> GetRequest(List<KeyValuePair<string, string>> parameters)
|
||||
{
|
||||
// GET on index for the passkey
|
||||
var request = RequestBuilder().Resource("api.php?request=quick_user").Build();
|
||||
var indexResponse = HttpClient.Execute(request);
|
||||
var index = Json.Deserialize<GazelleGamesUserResponse>(indexResponse.Content);
|
||||
if (index == null ||
|
||||
string.IsNullOrWhiteSpace(index.Status) ||
|
||||
index.Status != "success" ||
|
||||
string.IsNullOrWhiteSpace(index.Response.PassKey))
|
||||
{
|
||||
throw new Exception("Failed to authenticate with GazelleGames.");
|
||||
}
|
||||
|
||||
// Set passkey on settings so it can be used to generate the download URL
|
||||
Settings.Passkey = index.Response.PassKey;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetRequest(string parameters)
|
||||
{
|
||||
var req = RequestBuilder()
|
||||
.Resource($"api.php?{parameters}")
|
||||
var request = RequestBuilder()
|
||||
.Resource($"/api.php?{parameters.GetQueryString()}")
|
||||
.Build();
|
||||
|
||||
yield return new IndexerRequest(req);
|
||||
yield return new IndexerRequest(request);
|
||||
}
|
||||
|
||||
private HttpRequestBuilder RequestBuilder()
|
||||
{
|
||||
return new HttpRequestBuilder($"{Settings.BaseUrl.Trim().TrimEnd('/')}")
|
||||
return new HttpRequestBuilder($"{_settings.BaseUrl.Trim().TrimEnd('/')}")
|
||||
.Resource("/api.php")
|
||||
.Accept(HttpAccept.Json)
|
||||
.SetHeader("X-API-Key", Settings.Apikey);
|
||||
.SetHeader("X-API-Key", _settings.Apikey);
|
||||
}
|
||||
|
||||
private string GetBasicSearchParameters(string searchTerm, int[] categories)
|
||||
private List<KeyValuePair<string, string>> GetBasicSearchParameters(string searchTerm, SearchCriteriaBase searchCriteria)
|
||||
{
|
||||
var parameters = "request=search&search_type=torrents&empty_groups=filled&order_by=time&order_way=desc";
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchTerm))
|
||||
var parameters = new List<KeyValuePair<string, string>>
|
||||
{
|
||||
var searchType = Settings.SearchGroupNames ? "groupname" : "searchstr";
|
||||
{ "request", "search" },
|
||||
{ "search_type", "torrents" },
|
||||
{ "empty_groups", "filled" },
|
||||
{ "order_by", "time" },
|
||||
{ "order_way", "desc" }
|
||||
};
|
||||
|
||||
parameters += string.Format("&{1}={0}", searchTerm.Replace(".", " "), searchType);
|
||||
if (searchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
parameters.Add(
|
||||
_settings.SearchGroupNames ? "groupname" : "searchstr",
|
||||
searchTerm.Replace(".", " "));
|
||||
}
|
||||
|
||||
if (categories != null)
|
||||
if (searchCriteria.Categories != null)
|
||||
{
|
||||
foreach (var cat in Capabilities.Categories.MapTorznabCapsToTrackers(categories))
|
||||
var categoryMappings = _capabilities.Categories
|
||||
.MapTorznabCapsToTrackers(searchCriteria.Categories)
|
||||
.Distinct()
|
||||
.Where(x => !x.IsAllDigits())
|
||||
.ToList();
|
||||
|
||||
categoryMappings.ForEach(category => parameters.Add("artistcheck[]", category));
|
||||
}
|
||||
|
||||
if (searchCriteria.MinSize is > 0)
|
||||
{
|
||||
var minSize = searchCriteria.MinSize.Value / 1024L / 1024L;
|
||||
if (minSize > 0)
|
||||
{
|
||||
parameters += string.Format("&artistcheck[]={0}", cat);
|
||||
parameters.Add("sizesmall", minSize.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
if (searchCriteria.MaxSize is > 0)
|
||||
{
|
||||
var maxSize = searchCriteria.MaxSize.Value / 1024L / 1024L;
|
||||
if (maxSize > 0)
|
||||
{
|
||||
parameters.Add("sizeslarge", maxSize.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,66 +375,63 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
|
||||
var jsonResponse = new HttpResponse<GazelleGamesResponse>(indexerResponse.HttpResponse);
|
||||
|
||||
if (jsonResponse.Resource.Status != "success" ||
|
||||
string.IsNullOrWhiteSpace(jsonResponse.Resource.Status) ||
|
||||
jsonResponse.Resource.Response == null)
|
||||
jsonResponse.Resource.Response is not JObject response)
|
||||
{
|
||||
return torrentInfos;
|
||||
}
|
||||
|
||||
Dictionary<string, GazelleGamesGroup> response;
|
||||
var groups = response.ToObject<Dictionary<int, GazelleGamesGroup>>(JsonSerializer.Create(Json.GetSerializerSettings()));
|
||||
|
||||
try
|
||||
foreach (var group in groups)
|
||||
{
|
||||
response = ((JObject)jsonResponse.Resource.Response).ToObject<Dictionary<string, GazelleGamesGroup>>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
return torrentInfos;
|
||||
}
|
||||
|
||||
foreach (var result in response)
|
||||
{
|
||||
Dictionary<string, GazelleGamesTorrent> torrents;
|
||||
|
||||
try
|
||||
{
|
||||
torrents = ((JObject)result.Value.Torrents).ToObject<Dictionary<string, GazelleGamesTorrent>>();
|
||||
}
|
||||
catch
|
||||
if (group.Value.Torrents is not JObject groupTorrents)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (result.Value.Torrents != null)
|
||||
var torrents = groupTorrents
|
||||
.ToObject<Dictionary<int, GazelleGamesTorrent>>(JsonSerializer.Create(Json.GetSerializerSettings()))
|
||||
.Where(t => t.Value.TorrentType.ToUpperInvariant() == "TORRENT")
|
||||
.ToList();
|
||||
|
||||
var categories = group.Value.Artists
|
||||
.SelectMany(a => _categories.MapTrackerCatDescToNewznab(a.Name))
|
||||
.Distinct()
|
||||
.ToArray();
|
||||
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
var categories = result.Value.Artists.Select(a => a.Name);
|
||||
var torrentId = torrent.Key;
|
||||
var infoUrl = GetInfoUrl(group.Key, torrentId);
|
||||
|
||||
foreach (var torrent in torrents)
|
||||
if (categories.Length == 0)
|
||||
{
|
||||
var id = int.Parse(torrent.Key);
|
||||
|
||||
var infoUrl = GetInfoUrl(result.Key, id);
|
||||
|
||||
var release = new TorrentInfo()
|
||||
{
|
||||
Guid = infoUrl,
|
||||
Title = torrent.Value.ReleaseTitle,
|
||||
Files = torrent.Value.FileCount,
|
||||
Grabs = torrent.Value.Snatched,
|
||||
Size = long.Parse(torrent.Value.Size),
|
||||
DownloadUrl = GetDownloadUrl(id),
|
||||
InfoUrl = infoUrl,
|
||||
Seeders = torrent.Value.Seeders,
|
||||
Categories = _categories.MapTrackerCatDescToNewznab(categories.FirstOrDefault()),
|
||||
Peers = torrent.Value.Leechers + torrent.Value.Seeders,
|
||||
PublishDate = torrent.Value.Time.ToUniversalTime(),
|
||||
DownloadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.FreeLeech || torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral || torrent.Value.LowSeedFL ? 0 : 1,
|
||||
UploadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral ? 0 : 1
|
||||
};
|
||||
|
||||
torrentInfos.Add(release);
|
||||
categories = _categories.MapTrackerCatToNewznab(torrent.Value.CategoryId.ToString()).ToArray();
|
||||
}
|
||||
|
||||
var release = new TorrentInfo
|
||||
{
|
||||
Guid = infoUrl,
|
||||
InfoUrl = infoUrl,
|
||||
DownloadUrl = GetDownloadUrl(torrentId),
|
||||
Title = GetTitle(group.Value, torrent.Value),
|
||||
Categories = categories,
|
||||
Files = torrent.Value.FileCount,
|
||||
Size = long.Parse(torrent.Value.Size),
|
||||
Grabs = torrent.Value.Snatched,
|
||||
Seeders = torrent.Value.Seeders,
|
||||
Peers = torrent.Value.Leechers + torrent.Value.Seeders,
|
||||
PublishDate = torrent.Value.Time.ToUniversalTime(),
|
||||
Scene = torrent.Value.Scene == 1,
|
||||
DownloadVolumeFactor = torrent.Value.FreeTorrent is GazelleGamesFreeTorrent.FreeLeech or GazelleGamesFreeTorrent.Neutral || torrent.Value.LowSeedFL ? 0 : 1,
|
||||
UploadVolumeFactor = torrent.Value.FreeTorrent == GazelleGamesFreeTorrent.Neutral ? 0 : 1,
|
||||
MinimumSeedTime = 288000 // Minimum of 3 days and 8 hours (80 hours in total)
|
||||
};
|
||||
|
||||
torrentInfos.Add(release);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,6 +442,54 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private static string GetTitle(GazelleGamesGroup group, GazelleGamesTorrent torrent)
|
||||
{
|
||||
var title = WebUtility.HtmlDecode(torrent.ReleaseTitle);
|
||||
|
||||
if (group.Year is > 0 && !title.Contains(group.Year.ToString()))
|
||||
{
|
||||
title += $" ({group.Year})";
|
||||
}
|
||||
|
||||
if (torrent.RemasterTitle.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
title += $" [{$"{torrent.RemasterTitle} {torrent.RemasterYear}".Trim()}]";
|
||||
}
|
||||
|
||||
var flags = new List<string>
|
||||
{
|
||||
$"{torrent.Format} {torrent.Encoding}".Trim()
|
||||
};
|
||||
|
||||
if (group.Artists is { Count: > 0 })
|
||||
{
|
||||
flags.AddIfNotNull(group.Artists.Select(a => a.Name).Join(", "));
|
||||
}
|
||||
|
||||
flags.AddIfNotNull(torrent.Language);
|
||||
flags.AddIfNotNull(torrent.Region);
|
||||
flags.AddIfNotNull(torrent.Miscellaneous);
|
||||
|
||||
if (torrent.Dupable == 1)
|
||||
{
|
||||
flags.Add("Trumpable");
|
||||
}
|
||||
|
||||
flags = flags.Where(x => x.IsNotNullOrWhiteSpace()).ToList();
|
||||
|
||||
if (flags.Any())
|
||||
{
|
||||
title += $" [{string.Join(" / ", flags)}]";
|
||||
}
|
||||
|
||||
if (torrent.GameDoxType.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
title += $" [{torrent.GameDoxType.Trim()}]";
|
||||
}
|
||||
|
||||
return title;
|
||||
}
|
||||
|
||||
private string GetDownloadUrl(int torrentId)
|
||||
{
|
||||
// AuthKey is required but not checked, just pass in a dummy variable
|
||||
@@ -413,7 +504,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return url.FullUri;
|
||||
}
|
||||
|
||||
private string GetInfoUrl(string groupId, int torrentId)
|
||||
private string GetInfoUrl(int groupId, int torrentId)
|
||||
{
|
||||
var url = new HttpUri(_settings.BaseUrl)
|
||||
.CombinePath("/torrents.php")
|
||||
@@ -444,7 +535,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
Passkey = "";
|
||||
}
|
||||
|
||||
[FieldDefinition(2, Label = "API Key", HelpText = "API Key from the Site (Found in Settings => Access Settings), Must have User Permissions", Privacy = PrivacyLevel.ApiKey)]
|
||||
[FieldDefinition(2, Label = "API Key", HelpText = "API Key from the Site (Found in Settings => Access Settings)", HelpTextWarning = "Must have User and Torrents permissions", Privacy = PrivacyLevel.ApiKey)]
|
||||
public string Apikey { get; set; }
|
||||
|
||||
[FieldDefinition(3, Label = "Search Group Names", Type = FieldType.Checkbox, HelpText = "Search Group Names Only")]
|
||||
@@ -466,8 +557,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class GazelleGamesGroup
|
||||
{
|
||||
public List<GazelleGamesArtist> Artists { get; set; }
|
||||
public ReadOnlyCollection<GazelleGamesArtist> Artists { get; set; }
|
||||
public object Torrents { get; set; }
|
||||
public int? Year { get; set; }
|
||||
}
|
||||
|
||||
public class GazelleGamesArtist
|
||||
@@ -478,16 +570,30 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class GazelleGamesTorrent
|
||||
{
|
||||
public int CategoryId { get; set; }
|
||||
public string Format { get; set; }
|
||||
public string Encoding { get; set; }
|
||||
public string Language { get; set; }
|
||||
public string Region { get; set; }
|
||||
public string RemasterYear { get; set; }
|
||||
public string RemasterTitle { get; set; }
|
||||
public string ReleaseTitle { get; set; }
|
||||
public string Miscellaneous { get; set; }
|
||||
public int Scene { get; set; }
|
||||
public int Dupable { get; set; }
|
||||
public DateTime Time { get; set; }
|
||||
public string TorrentType { get; set; }
|
||||
public int FileCount { get; set; }
|
||||
public string Size { get; set; }
|
||||
public int? Snatched { get; set; }
|
||||
public int Seeders { get; set; }
|
||||
public int Leechers { get; set; }
|
||||
public string ReleaseTitle { get; set; }
|
||||
public DateTime Time { get; set; }
|
||||
public int FileCount { get; set; }
|
||||
public GazelleGamesFreeTorrent FreeTorrent { get; set; }
|
||||
public bool PersonalFL { get; set; }
|
||||
public bool LowSeedFL { get; set; }
|
||||
|
||||
[JsonProperty("GameDOXType")]
|
||||
public string GameDoxType { get; set; }
|
||||
}
|
||||
|
||||
public class GazelleGamesUserResponse
|
||||
@@ -503,9 +609,9 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public enum GazelleGamesFreeTorrent
|
||||
{
|
||||
Normal,
|
||||
FreeLeech,
|
||||
Neutral,
|
||||
Either
|
||||
Normal = 0,
|
||||
FreeLeech = 1,
|
||||
Neutral = 2,
|
||||
Either = 3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
public IEnumerable<int> Category { get; set; }
|
||||
public IEnumerable<int> Codec { get; set; }
|
||||
public IEnumerable<int> Medium { get; set; }
|
||||
public int? Origin { get; set; }
|
||||
public IEnumerable<int> Origin { get; set; }
|
||||
|
||||
[JsonProperty(PropertyName = "imdb")]
|
||||
public ImdbInfo ImdbInfo { get; set; }
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text.RegularExpressions;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
@@ -26,7 +27,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
|
||||
if (imdbId == 0 && searchCriteria.SearchTerm.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
query.Search = searchCriteria.SanitizedSearchTerm;
|
||||
query.Search = Regex.Replace(searchCriteria.SanitizedSearchTerm, "[\\W]+", " ").Trim();
|
||||
}
|
||||
|
||||
if (imdbId != 0)
|
||||
@@ -122,8 +123,20 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
query.Username = Settings.Username;
|
||||
query.Passkey = Settings.ApiKey;
|
||||
|
||||
query.Codec = Settings.Codecs.ToArray();
|
||||
query.Medium = Settings.Mediums.ToArray();
|
||||
if (Settings.Codecs.Any())
|
||||
{
|
||||
query.Codec = Settings.Codecs.ToArray();
|
||||
}
|
||||
|
||||
if (Settings.Mediums.Any())
|
||||
{
|
||||
query.Medium = Settings.Mediums.ToArray();
|
||||
}
|
||||
|
||||
if (Settings.Origins.Any())
|
||||
{
|
||||
query.Origin = Settings.Origins.ToArray();
|
||||
}
|
||||
|
||||
if (searchCriteria.Categories?.Length > 0)
|
||||
{
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
{
|
||||
Codecs = Array.Empty<int>();
|
||||
Mediums = Array.Empty<int>();
|
||||
Origins = Array.Empty<int>();
|
||||
FreeleechOnly = false;
|
||||
UseFilenames = true;
|
||||
}
|
||||
@@ -34,16 +35,19 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
[FieldDefinition(3, Label = "API Key", HelpText = "Site API Key", Privacy = PrivacyLevel.ApiKey)]
|
||||
public string ApiKey { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Codecs", Type = FieldType.Select, SelectOptions = typeof(HdBitsCodec), Advanced = true, HelpText = "If unspecified, all options are used.")]
|
||||
[FieldDefinition(4, Label = "Codecs", Type = FieldType.Select, SelectOptions = typeof(HdBitsCodec), HelpText = "If unspecified, all options are used.", Advanced = true)]
|
||||
public IEnumerable<int> Codecs { get; set; }
|
||||
|
||||
[FieldDefinition(5, Label = "Mediums", Type = FieldType.Select, SelectOptions = typeof(HdBitsMedium), Advanced = true, HelpText = "If unspecified, all options are used.")]
|
||||
[FieldDefinition(5, Label = "Mediums", Type = FieldType.Select, SelectOptions = typeof(HdBitsMedium), HelpText = "If unspecified, all options are used.", Advanced = true)]
|
||||
public IEnumerable<int> Mediums { get; set; }
|
||||
|
||||
[FieldDefinition(6, Label = "Freeleech Only", Type = FieldType.Checkbox, Advanced = true, HelpText = "Show freeleech releases only")]
|
||||
[FieldDefinition(6, Label = "Origins", Type = FieldType.Select, SelectOptions = typeof(HdBitsOrigin), HelpText = "If unspecified, all options are used.", Advanced = true)]
|
||||
public IEnumerable<int> Origins { get; set; }
|
||||
|
||||
[FieldDefinition(7, Label = "Freeleech Only", Type = FieldType.Checkbox, HelpText = "Show freeleech releases only", Advanced = true)]
|
||||
public bool FreeleechOnly { get; set; }
|
||||
|
||||
[FieldDefinition(7, Label = "Use Filenames", Type = FieldType.Checkbox, HelpText = "Check this option if you want to use torrent filenames as release titles")]
|
||||
[FieldDefinition(8, Label = "Use Filenames", Type = FieldType.Checkbox, HelpText = "Check this option if you want to use torrent filenames as release titles")]
|
||||
public bool UseFilenames { get; set; }
|
||||
|
||||
public override NzbDroneValidationResult Validate()
|
||||
@@ -79,4 +83,12 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
|
||||
[FieldOption("WEB-DL")]
|
||||
WebDl = 6
|
||||
}
|
||||
|
||||
public enum HdBitsOrigin
|
||||
{
|
||||
[FieldOption("Undefined")]
|
||||
Undefined = 0,
|
||||
[FieldOption("Internal")]
|
||||
Internal = 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,17 +244,17 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
if (Settings.SearchInDescription)
|
||||
{
|
||||
parameters.Add("tor[srchIn][description]", "true");
|
||||
parameters.Set("tor[srchIn][description]", "true");
|
||||
}
|
||||
|
||||
if (Settings.SearchInSeries)
|
||||
{
|
||||
parameters.Add("tor[srchIn][series]", "true");
|
||||
parameters.Set("tor[srchIn][series]", "true");
|
||||
}
|
||||
|
||||
if (Settings.SearchInFilenames)
|
||||
{
|
||||
parameters.Add("tor[srchIn][filenames]", "true");
|
||||
parameters.Set("tor[srchIn][filenames]", "true");
|
||||
}
|
||||
|
||||
var catList = Capabilities.Categories.MapTorznabCapsToTrackers(searchCriteria.Categories);
|
||||
@@ -263,13 +263,28 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
var index = 0;
|
||||
foreach (var cat in catList)
|
||||
{
|
||||
parameters.Add("tor[cat][" + index + "]", cat);
|
||||
parameters.Set("tor[cat][" + index + "]", cat);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
parameters.Add("tor[cat][]", "0");
|
||||
parameters.Set("tor[cat][]", "0");
|
||||
}
|
||||
|
||||
if (searchCriteria.MinSize is > 0)
|
||||
{
|
||||
parameters.Set("tor[minSize]", searchCriteria.MinSize.Value.ToString());
|
||||
}
|
||||
|
||||
if (searchCriteria.MaxSize is > 0)
|
||||
{
|
||||
parameters.Set("tor[maxSize]", searchCriteria.MaxSize.Value.ToString());
|
||||
}
|
||||
|
||||
if (searchCriteria.MinSize is > 0 || searchCriteria.MaxSize is > 0)
|
||||
{
|
||||
parameters.Set("tor[unit]", "1");
|
||||
}
|
||||
|
||||
var searchUrl = Settings.BaseUrl + "tor/js/loadSearchJSONbasic.php";
|
||||
@@ -394,6 +409,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
release.Title = item.Title;
|
||||
release.Description = item.Description;
|
||||
|
||||
release.BookTitle = item.Title;
|
||||
|
||||
if (item.AuthorInfo != null)
|
||||
{
|
||||
var authorInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(item.AuthorInfo);
|
||||
@@ -402,6 +419,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
if (author.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
release.Title += " by " + author;
|
||||
release.Author = author;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -426,7 +426,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
[FieldDefinition(3, Label = "Use Freeleech Tokens", Type = FieldType.Checkbox, HelpText = "Use freeleech tokens when available")]
|
||||
public bool UseFreeleechToken { get; set; }
|
||||
|
||||
[FieldDefinition(4, Label = "Freeload Only", Type = FieldType.Checkbox, Advanced = true, HelpTextWarning = "Search freeload torrents only. End date: 6 January 2024, 23:59 UTC.")]
|
||||
[FieldDefinition(4, Label = "Freeload Only", Type = FieldType.Checkbox, Advanced = true, HelpTextWarning = "Search freeload torrents only. End date: 31 January 2024, 23:59 UTC.")]
|
||||
public bool FreeloadOnly { get; set; }
|
||||
|
||||
public override NzbDroneValidationResult Validate()
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Newtonsoft.Json;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Indexers.Exceptions;
|
||||
@@ -43,12 +44,12 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||
{
|
||||
return new SubsPleaseRequestGenerator { Settings = Settings, Capabilities = Capabilities };
|
||||
return new SubsPleaseRequestGenerator(Settings);
|
||||
}
|
||||
|
||||
public override IParseIndexerResponse GetParser()
|
||||
{
|
||||
return new SubsPleaseParser(Settings, Capabilities.Categories);
|
||||
return new SubsPleaseParser(Settings);
|
||||
}
|
||||
|
||||
private IndexerCapabilities SetCapabilities()
|
||||
@@ -74,12 +75,16 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class SubsPleaseRequestGenerator : IIndexerRequestGenerator
|
||||
{
|
||||
public NoAuthTorrentBaseSettings Settings { get; set; }
|
||||
public IndexerCapabilities Capabilities { get; set; }
|
||||
private readonly NoAuthTorrentBaseSettings _settings;
|
||||
|
||||
public SubsPleaseRequestGenerator(NoAuthTorrentBaseSettings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
private IEnumerable<IndexerRequest> GetSearchRequests(string term)
|
||||
{
|
||||
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
|
||||
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
|
||||
|
||||
var searchTerm = Regex.Replace(term, "\\[?SubsPlease\\]?\\s*", string.Empty, RegexOptions.IgnoreCase).Trim();
|
||||
|
||||
@@ -104,7 +109,7 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
private IEnumerable<IndexerRequest> GetRssRequest()
|
||||
{
|
||||
var searchUrl = $"{Settings.BaseUrl.TrimEnd('/')}/api/?";
|
||||
var searchUrl = $"{_settings.BaseUrl.TrimEnd('/')}/api/?";
|
||||
|
||||
var queryParameters = new NameValueCollection
|
||||
{
|
||||
@@ -119,16 +124,12 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(MovieSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
return pageableRequests;
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(MusicSearchCriteria searchCriteria)
|
||||
{
|
||||
var pageableRequests = new IndexerPageableRequestChain();
|
||||
|
||||
return pageableRequests;
|
||||
return new IndexerPageableRequestChain();
|
||||
}
|
||||
|
||||
public IndexerPageableRequestChain GetSearchRequests(TvSearchCriteria searchCriteria)
|
||||
@@ -166,13 +167,13 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class SubsPleaseParser : IParseIndexerResponse
|
||||
{
|
||||
private readonly NoAuthTorrentBaseSettings _settings;
|
||||
private readonly IndexerCapabilitiesCategories _categories;
|
||||
private static readonly Regex RegexSize = new (@"\&xl=(?<size>\d+)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
public SubsPleaseParser(NoAuthTorrentBaseSettings settings, IndexerCapabilitiesCategories categories)
|
||||
private readonly NoAuthTorrentBaseSettings _settings;
|
||||
|
||||
public SubsPleaseParser(NoAuthTorrentBaseSettings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
_categories = categories;
|
||||
}
|
||||
|
||||
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
|
||||
@@ -216,28 +217,11 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
}
|
||||
|
||||
// Ex: [SubsPlease] Shingeki no Kyojin (The Final Season) - 64 (1080p)
|
||||
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Res}p)";
|
||||
release.Title += $"[SubsPlease] {value.Show} - {value.Episode} ({d.Resolution}p)";
|
||||
release.MagnetUrl = d.Magnet;
|
||||
release.DownloadUrl = null;
|
||||
release.Guid = d.Magnet;
|
||||
|
||||
// The API doesn't tell us file size, so give an estimate based on resolution
|
||||
if (string.Equals(d.Res, "1080"))
|
||||
{
|
||||
release.Size = 1395864371; // 1.3GB
|
||||
}
|
||||
else if (string.Equals(d.Res, "720"))
|
||||
{
|
||||
release.Size = 734003200; // 700MB
|
||||
}
|
||||
else if (string.Equals(d.Res, "480"))
|
||||
{
|
||||
release.Size = 367001600; // 350MB
|
||||
}
|
||||
else
|
||||
{
|
||||
release.Size = 1073741824; // 1GB
|
||||
}
|
||||
release.Size = GetReleaseSize(d);
|
||||
|
||||
torrentInfos.Add(release);
|
||||
}
|
||||
@@ -246,6 +230,30 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
return torrentInfos.ToArray();
|
||||
}
|
||||
|
||||
private static long GetReleaseSize(SubPleaseDownloadInfo info)
|
||||
{
|
||||
if (info.Magnet.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
var sizeMatch = RegexSize.Match(info.Magnet);
|
||||
|
||||
if (sizeMatch.Success &&
|
||||
long.TryParse(sizeMatch.Groups["size"].Value, out var releaseSize)
|
||||
&& releaseSize > 0)
|
||||
{
|
||||
return releaseSize;
|
||||
}
|
||||
}
|
||||
|
||||
// The API doesn't tell us file size, so give an estimate based on resolution
|
||||
return info.Resolution switch
|
||||
{
|
||||
"1080" => 1.3.Gigabytes(),
|
||||
"720" => 700.Megabytes(),
|
||||
"480" => 350.Megabytes(),
|
||||
_ => 1.Gigabytes()
|
||||
};
|
||||
}
|
||||
|
||||
public Action<IDictionary<string, string>, DateTime?> CookiesUpdater { get; set; }
|
||||
}
|
||||
|
||||
@@ -265,7 +273,8 @@ namespace NzbDrone.Core.Indexers.Definitions
|
||||
|
||||
public class SubPleaseDownloadInfo
|
||||
{
|
||||
public string Res { get; set; }
|
||||
[JsonProperty("res")]
|
||||
public string Resolution { get; set; }
|
||||
public string Magnet { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,6 +277,18 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
flags.Add(IndexerFlag.FreeLeech);
|
||||
}
|
||||
|
||||
var tags = TryGetMultipleTorznabAttributes(item, "tag");
|
||||
|
||||
if (tags.Any(t => t.EqualsIgnoreCase("internal")))
|
||||
{
|
||||
flags.Add(IndexerFlag.Internal);
|
||||
}
|
||||
|
||||
if (tags.Any(t => t.EqualsIgnoreCase("scene")))
|
||||
{
|
||||
flags.Add(IndexerFlag.Scene);
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using FluentValidation;
|
||||
@@ -10,10 +11,7 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
{
|
||||
public class TorznabSettingsValidator : AbstractValidator<TorznabSettings>
|
||||
{
|
||||
private static readonly string[] ApiKeyWhiteList =
|
||||
{
|
||||
"hd4free.xyz",
|
||||
};
|
||||
private static readonly string[] ApiKeyWhiteList = Array.Empty<string>();
|
||||
|
||||
private static bool ShouldHaveApiKey(TorznabSettings settings)
|
||||
{
|
||||
|
||||
@@ -388,11 +388,11 @@ namespace NzbDrone.Core.Indexers
|
||||
if (webException.Message.Contains("502") || webException.Message.Contains("503") ||
|
||||
webException.Message.Contains("504") || webException.Message.Contains("timed out"))
|
||||
{
|
||||
_logger.Warn("{0} server is currently unavailable. {1} {2}", this, url, webException.Message);
|
||||
_logger.Warn(webException, "{0} server is currently unavailable. {1} {2}", this, url, webException.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{0} {1} {2}", this, url, webException.Message);
|
||||
_logger.Warn(webException, "{0} {1} {2}", this, url, webException.Message);
|
||||
}
|
||||
}
|
||||
catch (TooManyRequestsException ex)
|
||||
@@ -402,7 +402,7 @@ namespace NzbDrone.Core.Indexers
|
||||
var retryTime = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : minimumBackoff;
|
||||
|
||||
_indexerStatusService.RecordFailure(Definition.Id, retryTime);
|
||||
_logger.Warn("Request Limit reached for {0}. Disabled for {1}", this, retryTime);
|
||||
_logger.Warn(ex, "Request Limit reached for {0}. Disabled for {1}", this, retryTime);
|
||||
}
|
||||
catch (HttpException ex)
|
||||
{
|
||||
@@ -411,18 +411,18 @@ namespace NzbDrone.Core.Indexers
|
||||
|
||||
if (ex.Response.HasHttpServerError)
|
||||
{
|
||||
_logger.Warn("Unable to connect to {0} at [{1}]. Indexer's server is unavailable. Try again later. {2}", this, url, ex.Message);
|
||||
_logger.Warn(ex, "Unable to connect to {0} at [{1}]. Indexer's server is unavailable. Try again later. {2}", this, url, ex.Message);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Warn("{0} {1}", this, ex.Message);
|
||||
_logger.Warn(ex, "{0} {1}", this, ex.Message);
|
||||
}
|
||||
}
|
||||
catch (RequestLimitReachedException ex)
|
||||
{
|
||||
result.Queries.Add(new IndexerQueryResult { Response = ex.Response.HttpResponse });
|
||||
_indexerStatusService.RecordFailure(Definition.Id, minimumBackoff);
|
||||
_logger.Warn("Request Limit reached for {0}. Disabled for {1}", this, minimumBackoff);
|
||||
_logger.Warn(ex, "Request Limit reached for {0}. Disabled for {1}", this, minimumBackoff);
|
||||
}
|
||||
catch (IndexerAuthException ex)
|
||||
{
|
||||
@@ -733,7 +733,7 @@ namespace NzbDrone.Core.Indexers
|
||||
}
|
||||
catch (WebException webException)
|
||||
{
|
||||
_logger.Warn("Unable to connect to indexer.");
|
||||
_logger.Warn(webException, "Unable to connect to indexer.");
|
||||
|
||||
if (webException.Status is WebExceptionStatus.NameResolutionFailure or WebExceptionStatus.ConnectFailure)
|
||||
{
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
"ConnectSettings": "ربط الإعدادات",
|
||||
"CouldNotConnectSignalR": "تعذر الاتصال بـ SignalR ، لن يتم تحديث واجهة المستخدم",
|
||||
"Dates": "تواريخ",
|
||||
"DBMigration": "ترحيل DB",
|
||||
"DatabaseMigration": "ترحيل DB",
|
||||
"Delete": "حذف",
|
||||
"Details": "تفاصيل",
|
||||
"Donations": "التبرعات",
|
||||
@@ -257,7 +257,7 @@
|
||||
"Tags": "العلامات",
|
||||
"TagsHelpText": "ينطبق على الأفلام التي تحتوي على علامة مطابقة واحدة على الأقل",
|
||||
"UISettings": "إعدادات واجهة المستخدم",
|
||||
"UnableToLoadDownloadClients": "تعذر تحميل عملاء التنزيل",
|
||||
"DownloadClientsLoadError": "تعذر تحميل عملاء التنزيل",
|
||||
"UnableToLoadTags": "تعذر تحميل العلامات",
|
||||
"UnableToLoadUISettings": "تعذر تحميل إعدادات واجهة المستخدم",
|
||||
"UpdateCheckStartupTranslocationMessage": "لا يمكن تثبيت التحديث لأن مجلد بدء التشغيل \"{0}\" موجود في مجلد App Translocation.",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"CustomFilters": "Персонализирани филтри",
|
||||
"Date": "Дата",
|
||||
"Dates": "Дати",
|
||||
"DBMigration": "DB миграция",
|
||||
"DatabaseMigration": "DB миграция",
|
||||
"Delete": "Изтрий",
|
||||
"DeleteDownloadClient": "Изтриване на клиент за изтегляне",
|
||||
"DeleteDownloadClientMessageText": "Наистина ли искате да изтриете клиента за изтегляне '{0}'?",
|
||||
@@ -188,7 +188,7 @@
|
||||
"Priority": "Приоритет",
|
||||
"SettingsLongDateFormat": "Формат с дълга дата",
|
||||
"SettingsShowRelativeDates": "Показване на относителни дати",
|
||||
"UnableToLoadDownloadClients": "Клиентите за изтегляне не могат да се заредят",
|
||||
"DownloadClientsLoadError": "Клиентите за изтегляне не могат да се заредят",
|
||||
"Logging": "Регистрация",
|
||||
"Exception": "Изключение",
|
||||
"MovieIndexScrollBottom": "Индекс на филма: Превъртане отдолу",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"Add": "Afegiu",
|
||||
"Add": "Afegeix",
|
||||
"Actions": "Accions",
|
||||
"AcceptConfirmationModal": "Accepta el modal de confirmació",
|
||||
"About": "Quant a",
|
||||
@@ -19,7 +19,7 @@
|
||||
"ScriptPath": "Camí de l'script",
|
||||
"Search": "Cerca",
|
||||
"Files": "Fitxers",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Estil alternat per permetre als usuaris amb problemes de color distingir millor la informació codificada per colors",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Estil alternat per a permetre als usuaris amb problemes de color distingir millor la informació codificada per colors",
|
||||
"TagIsNotUsedAndCanBeDeleted": "L'etiqueta no està en ús i es pot suprimir",
|
||||
"TagsSettingsSummary": "Consulta totes les etiquetes i com s'utilitzen. Les etiquetes no utilitzades es poden eliminar",
|
||||
"Tasks": "Tasques",
|
||||
@@ -33,18 +33,18 @@
|
||||
"AddDownloadClient": "Afegeix un client de descàrrega",
|
||||
"Added": "Afegit",
|
||||
"Age": "Edat",
|
||||
"All": "Tots",
|
||||
"All": "Tot",
|
||||
"Analytics": "Anàlisi",
|
||||
"ApiKey": "Clau API",
|
||||
"AppDataDirectory": "Directori AppData",
|
||||
"AppDataLocationHealthCheckMessage": "No es podrà actualitzar per evitar que s'eliminin AppData a l'actualització",
|
||||
"AppDataLocationHealthCheckMessage": "No es podrà actualitzar per a evitar que s'eliminin AppData a l'actualització",
|
||||
"Authentication": "Autenticació",
|
||||
"Torrents": "Torrents",
|
||||
"Type": "Tipus",
|
||||
"UILanguageHelpTextWarning": "Es requereix una recàrrega del navegador",
|
||||
"UISettings": "Configuració de la interfície",
|
||||
"UnableToLoadBackups": "No es poden carregar còpies de seguretat",
|
||||
"UnableToLoadDownloadClients": "No es poden carregar els clients de baixada",
|
||||
"DownloadClientsLoadError": "No es poden carregar els clients de baixada",
|
||||
"UnableToLoadTags": "No es poden carregar les etiquetes",
|
||||
"UnableToLoadUISettings": "No es pot carregar la configuració de la IU",
|
||||
"UnselectAll": "Desseleccioneu-ho tot",
|
||||
@@ -78,11 +78,11 @@
|
||||
"Reddit": "Reddit",
|
||||
"System": "Sistema",
|
||||
"Username": "Nom d'usuari",
|
||||
"Duration": "durada",
|
||||
"Duration": "Durada",
|
||||
"EditIndexer": "Edita l'indexador",
|
||||
"EnableAutomaticSearch": "Activa la cerca automàtica",
|
||||
"Enabled": "Habilitat",
|
||||
"Error": "error",
|
||||
"Error": "Error",
|
||||
"ErrorLoadingContents": "S'ha produït un error en carregar el contingut",
|
||||
"Events": "Esdeveniments",
|
||||
"ExistingTag": "Etiqueta existent",
|
||||
@@ -143,7 +143,7 @@
|
||||
"SettingsShortDateFormat": "Format de data curta",
|
||||
"BindAddress": "Adreça d'enllaç",
|
||||
"Database": "Base de dades",
|
||||
"Ended": "S'ha acabat",
|
||||
"Ended": "Acabat",
|
||||
"SettingsTimeFormat": "Format horari",
|
||||
"YesCancel": "Si, cancel·la",
|
||||
"Automatic": "Automàtic",
|
||||
@@ -168,11 +168,11 @@
|
||||
"CustomFilters": "Filtres personalitzats",
|
||||
"Date": "Data",
|
||||
"Dates": "Dates",
|
||||
"DBMigration": "Migració de BD",
|
||||
"DatabaseMigration": "Migració de BD",
|
||||
"Delete": "Suprimeix",
|
||||
"DeleteNotificationMessageText": "Esteu segur que voleu suprimir la notificació '{0}'?",
|
||||
"DeleteNotificationMessageText": "Esteu segur que voleu suprimir la notificació '{name}'?",
|
||||
"DeleteTag": "Suprimeix l'etiqueta",
|
||||
"DeleteTagMessageText": "Esteu segur que voleu suprimir l'etiqueta '{0}'?",
|
||||
"DeleteTagMessageText": "Esteu segur que voleu suprimir l'etiqueta '{label}'?",
|
||||
"Details": "Detalls",
|
||||
"Disabled": "Desactivat",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Tots els clients de descàrrega no estan disponibles a causa d'errors",
|
||||
@@ -251,7 +251,7 @@
|
||||
"Level": "Nivell",
|
||||
"LogFiles": "Fitxers de registre",
|
||||
"Logging": "Registre",
|
||||
"MappedDrivesRunningAsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per obtenir més informació",
|
||||
"MappedDrivesRunningAsService": "Les unitats de xarxa assignades no estan disponibles quan s'executen com a servei de Windows. Si us plau, consulteu les PMF per a obtenir més informació",
|
||||
"Mechanism": "Mecanisme",
|
||||
"MIA": "MIA",
|
||||
"Wiki": "Wiki",
|
||||
@@ -260,9 +260,9 @@
|
||||
"Branch": "Branca",
|
||||
"Connections": "Connexions",
|
||||
"ConnectSettings": "Configuració de connexió",
|
||||
"DeleteBackupMessageText": "Esteu segur que voleu suprimir la còpia de seguretat '{0}'?",
|
||||
"DeleteBackupMessageText": "Esteu segur que voleu suprimir la còpia de seguretat '{name}'?",
|
||||
"DeleteDownloadClient": "Suprimeix el client de descàrrega",
|
||||
"DeleteDownloadClientMessageText": "Esteu segur que voleu suprimir el client de baixada '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Esteu segur que voleu suprimir el client de baixada '{name}'?",
|
||||
"Discord": "Discord",
|
||||
"Docker": "Docker",
|
||||
"Donations": "Donacions",
|
||||
@@ -300,10 +300,10 @@
|
||||
"View": "Visualitza",
|
||||
"Yesterday": "Ahir",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Llistes no disponibles a causa d'errors: {0}",
|
||||
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de {appName}. Això inclou informació sobre el vostre navegador, quines pàgines {appName} WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió del temps d'execució. Utilitzarem aquesta informació per prioritzar les funcions i les correccions d'errors.",
|
||||
"AnalyticsEnabledHelpText": "Envieu informació anònima d'ús i errors als servidors de {appName}. Això inclou informació sobre el vostre navegador, quines pàgines {appName} WebUI feu servir, informes d'errors, així com el sistema operatiu i la versió de l'entorn d'execució. Utilitzarem aquesta informació per a prioritzar les funcions i les correccions d'errors.",
|
||||
"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 {appName}",
|
||||
"BackupFolderHelpText": "Els camins relatius estaran sota el directori AppData de {appName}",
|
||||
"AllIndexersHiddenDueToFilter": "Totes les pel·lícules estan ocultes a causa del filtre aplicat.",
|
||||
"EnableRss": "Activa RSS",
|
||||
"Grabs": "Captura",
|
||||
@@ -312,11 +312,11 @@
|
||||
"Application": "Aplicacions",
|
||||
"Applications": "Aplicacions",
|
||||
"ApplicationStatusCheckAllClientMessage": "Totes les llistes no estan disponibles a causa d'errors",
|
||||
"AuthenticationMethodHelpText": "Requereix nom d'usuari i contrasenya per accedir al radar",
|
||||
"AuthenticationMethodHelpText": "Es requereix nom d'usuari i contrasenya per a accedir a {appName}",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Tots els indexadors no estan disponibles a causa d'errors durant més de 6 hores",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Els indexadors no estan disponibles a causa d'errors durant més de 6 hores: {0}",
|
||||
"BindAddressHelpText": "Adreça IP vàlida, localhost o '*' per a totes les interfícies",
|
||||
"BranchUpdate": "Branca que s'utilitza per actualitzar {appName}",
|
||||
"BranchUpdate": "Branca que s'utilitza per a actualitzar {appName}",
|
||||
"Connect": "Notificacions",
|
||||
"DeleteApplicationMessageText": "Esteu segur que voleu suprimir la notificació '{0}'?",
|
||||
"DeleteIndexerProxyMessageText": "Esteu segur que voleu suprimir la llista '{0}'?",
|
||||
@@ -347,35 +347,85 @@
|
||||
"ApplicationUrlHelpText": "URL extern d'aquesta aplicació, inclòs http(s)://, port i URL base",
|
||||
"ApplyTagsHelpTextAdd": "Afegeix: afegeix les etiquetes a la llista d'etiquetes existent",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Com aplicar etiquetes a les pel·lícules seleccionades",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Com aplicar etiquetes a les pel·lícules seleccionades",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Com aplicar etiquetes als indexadors seleccionats",
|
||||
"ApplyTagsHelpTextRemove": "Eliminar: elimina les etiquetes introduïdes",
|
||||
"DeleteSelectedApplicationsMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
|
||||
"Label": "Etiqueta",
|
||||
"ApplyTagsHelpTextReplace": "Substituïu: substituïu les etiquetes per les etiquetes introduïdes (no introduïu cap etiqueta per esborrar totes les etiquetes)",
|
||||
"DeleteSelectedDownloadClients": "Suprimeix el client de descàrrega",
|
||||
"ApplyTagsHelpTextReplace": "Substitució: substituïu les etiquetes per les etiquetes introduïdes (no introduïu cap etiqueta per a esborrar totes les etiquetes)",
|
||||
"DeleteSelectedDownloadClients": "Suprimeix el(s) client(s) de baixada",
|
||||
"Genre": "Gèneres",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
|
||||
"DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir l'indexador '{0}'?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Esteu segur que voleu suprimir {count} client(s) de baixada seleccionat(s)?",
|
||||
"DeleteSelectedIndexersMessageText": "Esteu segur que voleu suprimir {count} indexador(s) seleccionat(s)?",
|
||||
"DownloadClientPriorityHelpText": "Prioritzeu diversos clients de baixada. S'utilitza round-robin per a clients amb la mateixa prioritat.",
|
||||
"More": "Més",
|
||||
"Season": "temporada",
|
||||
"Season": "Temporada",
|
||||
"Theme": "Tema",
|
||||
"Track": "Traça",
|
||||
"Year": "Any",
|
||||
"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.",
|
||||
"ConnectionLostReconnect": "{appName} intentarà connectar-se automàticament, o podeu fer clic a recarregar.",
|
||||
"ConnectionLostToBackend": "{appName} ha perdut la connexió amb el backend i s'haurà de tornar a carregar per a 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}",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Llistes no disponibles a causa d'errors: {0}",
|
||||
"AddConnection": "Edita la col·lecció",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Totes les llistes no estan disponibles a causa d'errors",
|
||||
"AddConnection": "Afegeix una connexió",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Totes les notificacions no estan disponibles a causa d'errors",
|
||||
"AuthBasic": "Basic (finestra emergent del navegador)",
|
||||
"AuthForm": "Formularis (pàgina d'inici de sessió)",
|
||||
"DisabledForLocalAddresses": "Desactivat per a adreces locals",
|
||||
"None": "Cap",
|
||||
"ResetAPIKeyMessageText": "Esteu segur que voleu restablir la clau de l'API?",
|
||||
"RestartProwlarr": "Reinicia {appName}"
|
||||
"RestartProwlarr": "Reinicia {appName}",
|
||||
"AuthenticationRequired": "Autenticació necessària",
|
||||
"CountDownloadClientsSelected": "{count} client(s) de baixada seleccionat(s)",
|
||||
"NoDownloadClientsFound": "No s'han trobat clients de baixada",
|
||||
"AuthenticationRequiredWarning": "Per a evitar l'accés remot sense autenticació, ara {appName} requereix que l'autenticació estigui activada. Opcionalment, podeu desactivar l'autenticació des d'adreces locals.",
|
||||
"AppUpdatedVersion": "{appName} s'ha actualitzat a la versió `{version}`, per tal d'obtenir els darrers canvis, haureu de tornar a carregar {appName}",
|
||||
"AppUpdated": "{appName} Actualitzada",
|
||||
"ApplyChanges": "Aplica els canvis",
|
||||
"Implementation": "Implementació",
|
||||
"OnHealthRestored": "Al resoldre les incidències",
|
||||
"ManageDownloadClients": "Gestiona els clients de descàrrega",
|
||||
"AuthenticationRequiredHelpText": "Canvia per a quines sol·licituds cal autenticar. No canvieu tret que entengueu els riscos.",
|
||||
"CountIndexersSelected": "S'han seleccionat {count} indexador(s)",
|
||||
"EditDownloadClientImplementation": "Edita el client de baixada - {implementationName}",
|
||||
"EditIndexerImplementation": "Edita l'indexador - {implementationName}",
|
||||
"EditSelectedDownloadClients": "Editeu els clients de descàrrega seleccionats",
|
||||
"EditSelectedIndexers": "Edita els indexadors seleccionats",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Indexadors amb clients de baixada no vàlids: {0}.",
|
||||
"AddCustomFilter": "Afegeix un filtre personalitzat",
|
||||
"AddDownloadClientImplementation": "Afegeix un client de descàrrega - {implementationName}",
|
||||
"AddIndexerImplementation": "Afegeix un indexador - {implementationName}",
|
||||
"AddConnectionImplementation": "Afegeix una connexió - {implementationName}",
|
||||
"InvalidUILanguage": "La vostra IU està configurada en un idioma no vàlid, corregiu-lo i deseu la configuració",
|
||||
"NoHistoryFound": "No s'ha trobat cap historial",
|
||||
"NoIndexersFound": "No s'han trobat indexadors",
|
||||
"OnHealthRestoredHelpText": "Al resoldre les incidències",
|
||||
"AuthenticationMethod": "Mètode d'autenticació",
|
||||
"AuthenticationMethodHelpTextWarning": "Seleccioneu un mètode d'autenticació vàlid",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Introduïu una contrasenya nova",
|
||||
"DefaultNameCopiedProfile": "{name} - Còpia",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Disseny de contingut",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si s'utilitza el disseny de contingut de qBittorrent s'utilitza el disseny original del torrent o es crea una subcarpeta (qBittorrent 4.3.2+)",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmeu la nova contrasenya",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Introduïu un nom d'usuari nou",
|
||||
"Categories": "Categories",
|
||||
"ApiKeyValidationHealthCheckMessage": "Actualitzeu la vostra clau de l'API perquè tingui almenys {length} caràcters. Podeu fer-ho mitjançant la configuració o el fitxer de configuració",
|
||||
"Episode": "Episodi",
|
||||
"EditApplicationImplementation": "Edita la notificació - {implementationName}",
|
||||
"EditConnectionImplementation": "Afegeix una connexió - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Edita l'indexador - {implementationName}",
|
||||
"days": "dies",
|
||||
"Album": "àlbum",
|
||||
"Artist": "artista",
|
||||
"AddApplicationImplementation": "Afegeix una condició - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Afegeix un indexador - {implementationName}",
|
||||
"Category": "Categoria",
|
||||
"Clone": "Clona",
|
||||
"Yes": "Si",
|
||||
"No": "No",
|
||||
"StopSelecting": "Deixa de seleccionar",
|
||||
"External": "Extern"
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"SSLCertPath": "Cesta certifikátu SSL",
|
||||
"SSLCertPathHelpText": "Cesta k souboru pfx",
|
||||
"UnableToLoadBackups": "Nelze načíst zálohy",
|
||||
"UnableToLoadDownloadClients": "Nelze načíst klienty pro stahování",
|
||||
"DownloadClientsLoadError": "Nelze načíst klienty pro stahování",
|
||||
"UnableToLoadGeneralSettings": "Nelze načíst obecná nastavení",
|
||||
"DeleteNotification": "Smazat oznámení",
|
||||
"EnableAutomaticSearch": "Povolit automatické vyhledávání",
|
||||
@@ -244,7 +244,7 @@
|
||||
"CustomFilters": "Vlastní filtry",
|
||||
"Date": "datum",
|
||||
"Dates": "Termíny",
|
||||
"DBMigration": "Migrace databáze",
|
||||
"DatabaseMigration": "Migrace databáze",
|
||||
"Delete": "Vymazat",
|
||||
"DeleteApplicationMessageText": "Opravdu chcete smazat oznámení „{0}“?",
|
||||
"DeleteBackup": "Odstranit zálohu",
|
||||
@@ -405,5 +405,6 @@
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Vložte nové heslo",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Vložte nové uživatelské jméno",
|
||||
"AuthenticationMethodHelpTextWarning": "Prosím vyberte platnou metodu ověřování",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo"
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Potvrďte nové heslo",
|
||||
"days": "dnů"
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
"Disabled": "deaktiveret",
|
||||
"Add": "Tilføj",
|
||||
"AddDownloadClient": "Tilføj downloadklient",
|
||||
"DBMigration": "DB Migration",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"MIA": "MIA",
|
||||
"ResetAPIKey": "Nulstil API-nøgle",
|
||||
"SettingsTimeFormat": "Tidsformat",
|
||||
@@ -264,7 +264,7 @@
|
||||
"SSLPort": "SSL-port",
|
||||
"StartupDirectory": "Startmappe",
|
||||
"Status": "Status",
|
||||
"UnableToLoadDownloadClients": "Kunne ikke indlæse downloadklienter",
|
||||
"DownloadClientsLoadError": "Kunne ikke indlæse downloadklienter",
|
||||
"UpdateCheckStartupTranslocationMessage": "Kan ikke installere opdatering, fordi startmappen '{0}' er i en App Translocation-mappe.",
|
||||
"UpdateMechanismHelpText": "Brug den indbyggede opdateringsfunktion eller et script",
|
||||
"View": "Udsigt",
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
"Age": "Alter",
|
||||
"All": "Alle",
|
||||
"AllIndexersHiddenDueToFilter": "Alle Indexer sind durch den ausgewählten Filter ausgeblendet.",
|
||||
"Analytics": "Analytik",
|
||||
"AnalyticsEnabledHelpText": "Sende anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen über Browser, welche Seiten der {appName}-Weboberfläche aufgerufen wurden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
|
||||
"Analytics": "Analysen",
|
||||
"AnalyticsEnabledHelpText": "Senden Sie anonyme Nutzungs- und Fehlerinformationen an die Server von {appName}. Dazu gehören Informationen zu Ihrem Browser, welche {appName}-WebUI-Seiten Sie verwenden, Fehlerberichte sowie Betriebssystem- und Laufzeitversion. Wir werden diese Informationen verwenden, um Funktionen und Fehlerbehebungen zu priorisieren.",
|
||||
"ApiKey": "API-Schlüssel",
|
||||
"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",
|
||||
"AppDataDirectory": "AppData-Verzeichnis",
|
||||
"AppDataLocationHealthCheckMessage": "Ein Update ist nicht möglich, um das Löschen von AppData beim Update zu verhindern",
|
||||
"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",
|
||||
@@ -33,54 +33,54 @@
|
||||
"ApplicationStatusCheckSingleClientMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
|
||||
"Applications": "Anwendungen",
|
||||
"Apply": "Anwenden",
|
||||
"ApplyTags": "Tags setzen",
|
||||
"ApplyTags": "Schlagworte anwenden",
|
||||
"Apps": "Anwendungen",
|
||||
"AudioSearch": "Audio Suche",
|
||||
"Auth": "Authentifizierung",
|
||||
"Authentication": "Authentifizierung",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich",
|
||||
"AuthenticationMethodHelpText": "Für den Zugriff auf {appName} sind Benutzername und Passwort erforderlich.",
|
||||
"Automatic": "Automatisch",
|
||||
"AutomaticSearch": "Automatische Suche",
|
||||
"Backup": "Backups",
|
||||
"BackupFolderHelpText": "Relative Pfade befinden sich unter {appName}s AppData Ordner",
|
||||
"BackupIntervalHelpText": "Intervall zum sichern der Datenbank und Einstellungen",
|
||||
"Backup": "Sicherung",
|
||||
"BackupFolderHelpText": "Relative Pfade befinden sich im AppData-Verzeichnis von {appName}",
|
||||
"BackupIntervalHelpText": "Intervall zwischen automatischen Sicherungen",
|
||||
"BackupNow": "Jetzt sichern",
|
||||
"BackupRetentionHelpText": "Automatische Backups, die älter als die Aufbewahrungsfrist sind, werden automatisch gelöscht",
|
||||
"BackupRetentionHelpText": "Automatische Backups, die älter als der Aufbewahrungszeitraum sind, werden automatisch bereinigt",
|
||||
"Backups": "Sicherungen",
|
||||
"BeforeUpdate": "Vor dem Update",
|
||||
"BindAddress": "Adresse binden",
|
||||
"BindAddressHelpText": "Gültige IP Adresse oder \"*\" für alle Netzwerke",
|
||||
"BindAddressHelpText": "Gültige IP-Adresse, localhost oder „*“ für alle Schnittstellen",
|
||||
"BookSearch": "Buch Suche",
|
||||
"BookSearchTypes": "Buch-Suchtypen",
|
||||
"Branch": "Git-Branch",
|
||||
"Branch": "Branch",
|
||||
"BranchUpdate": "Verwendeter Branch zur Aktualisierung von {appName}",
|
||||
"BranchUpdateMechanism": "Git-Branch für den externen Updateablauf",
|
||||
"BypassProxyForLocalAddresses": "Proxy für lokale Adressen umgehen",
|
||||
"Cancel": "Abbrechen",
|
||||
"CancelPendingTask": "Diese laufende Aufgabe wirklich abbrechen?",
|
||||
"CancelPendingTask": "Möchten Sie diese ausstehende Aufgabe wirklich abbrechen?",
|
||||
"Categories": "Kategorien",
|
||||
"Category": "Kategorie",
|
||||
"CertificateValidation": "Zertifikat Validierung",
|
||||
"CertificateValidation": "Zertifikatsvalidierung",
|
||||
"CertificateValidationHelpText": "Ändere wie streng die Validierung der HTTPS-Zertifizierung ist",
|
||||
"ChangeHasNotBeenSavedYet": "Änderung wurde noch nicht gespeichert",
|
||||
"Clear": "Leeren",
|
||||
"ClearHistory": "Verlauf leeren",
|
||||
"ClearHistoryMessageText": "Wirklich den ganzen {appName} Verlauf löschen?",
|
||||
"ClientPriority": "Priorität",
|
||||
"CloneProfile": "Profil kopieren",
|
||||
"CloneProfile": "Profil klonen",
|
||||
"Close": "Schließen",
|
||||
"CloseCurrentModal": "Momentanes Modal schließen",
|
||||
"Columns": "Spalten",
|
||||
"Component": "Komponente",
|
||||
"Connect": "Benachrichtigungen",
|
||||
"ConnectSettings": "Eintellungen für Verbindungen",
|
||||
"ConnectSettings": "Verbindungseinstellungen",
|
||||
"ConnectSettingsSummary": "Benachrichtigungen und eigene Scripte",
|
||||
"ConnectionLost": "Verbindung unterbrochen",
|
||||
"Connections": "Verbindungen",
|
||||
"CouldNotConnectSignalR": "Es konnte keine Verbindung zu SignalR hergestellt werden, die Benutzeroberfläche wird nicht aktualisiert",
|
||||
"Custom": "Benutzerdefiniert",
|
||||
"CustomFilters": "Eigene Filter",
|
||||
"DBMigration": "DB Migration",
|
||||
"CustomFilters": "Benutzerdefinierte Filter",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"Database": "Datenbank",
|
||||
"Date": "Datum",
|
||||
"Dates": "Termine",
|
||||
@@ -88,24 +88,24 @@
|
||||
"DeleteAppProfile": "App-Profil löschen",
|
||||
"DeleteApplication": "Applikation löschen",
|
||||
"DeleteApplicationMessageText": "Wirklich die Applikation '{0}' löschen?",
|
||||
"DeleteBackup": "Backup löschen",
|
||||
"DeleteBackupMessageText": "Backup '{0}' wirkich löschen?",
|
||||
"DeleteDownloadClient": "Downloader löschen",
|
||||
"DeleteDownloadClientMessageText": "Downloader '{0}' wirklich löschen?",
|
||||
"DeleteBackup": "Sicherung löschen",
|
||||
"DeleteBackupMessageText": "Sind Sie sicher, dass Sie die Sicherung „{name}“ löschen möchten?",
|
||||
"DeleteDownloadClient": "Download-Client löschen",
|
||||
"DeleteDownloadClientMessageText": "Sind Sie sicher, dass Sie den Download-Client „{name}“ löschen möchten?",
|
||||
"DeleteIndexerProxy": "Indexer Proxy löschen",
|
||||
"DeleteIndexerProxyMessageText": "Tag '{0}' wirklich löschen?",
|
||||
"DeleteNotification": "Benachrichtigung löschen",
|
||||
"DeleteNotificationMessageText": "Benachrichtigung '{0}' wirklich löschen?",
|
||||
"DeleteNotificationMessageText": "Sind Sie sicher, dass Sie die Benachrichtigung „{name}“ löschen möchten?",
|
||||
"DeleteTag": "Tag löschen",
|
||||
"DeleteTagMessageText": "Tag '{0}' wirklich löschen?",
|
||||
"DeleteTagMessageText": "Sind Sie sicher, dass Sie das Tag „{label}“ löschen möchten?",
|
||||
"Description": "Beschreibung",
|
||||
"Details": "Details",
|
||||
"Details": "Einzelheiten",
|
||||
"DevelopmentSettings": "Entwicklungseinstellungen",
|
||||
"Disabled": "Deaktiviert",
|
||||
"Discord": "Discord",
|
||||
"Docker": "Docker",
|
||||
"Donations": "Spenden",
|
||||
"DownloadClient": "Downloader",
|
||||
"DownloadClient": "Download Client",
|
||||
"DownloadClientSettings": "Downloader Einstellungen",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Alle Download Clients sind aufgrund von Fehlern nicht verfügbar",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download Clients aufgrund von Fehlern nicht verfügbar: {0}",
|
||||
@@ -307,17 +307,17 @@
|
||||
"Reload": "Neuladen",
|
||||
"Remove": "Entfernen",
|
||||
"RemoveFilter": "Filter entfernen",
|
||||
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlage entfernt",
|
||||
"RemovedFromTaskQueue": "Aus der Aufgabenwarteschlange entfernt",
|
||||
"RemovingTag": "Tag entfernen",
|
||||
"Replace": "Ersetzen",
|
||||
"Reset": "Zurücksetzen",
|
||||
"ResetAPIKey": "API-Schlüssel zurücksetzen",
|
||||
"Restart": "Neustarten",
|
||||
"Restart": "Neu starten",
|
||||
"RestartNow": "Jetzt neustarten",
|
||||
"RestartProwlarr": "{appName} Neustarten",
|
||||
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart",
|
||||
"RestartRequiredHelpTextWarning": "Erfordert einen Neustart, damit die Aktion wirksam wird",
|
||||
"Restore": "Wiederherstellen",
|
||||
"RestoreBackup": "Backup einspielen",
|
||||
"RestoreBackup": "Sicherung wiederherstellen",
|
||||
"Result": "Ergebnis",
|
||||
"Retention": "Aufbewahrung ( Retention )",
|
||||
"SSLCertPassword": "SSL Zertifikat Passwort",
|
||||
@@ -339,8 +339,8 @@
|
||||
"Seeders": "Seeders",
|
||||
"SelectAll": "Alle wählen",
|
||||
"SemiPrivate": "Halbprivat",
|
||||
"SendAnonymousUsageData": "Anonyme Nutzungsdaten übertragen",
|
||||
"SetTags": "Tags setzen",
|
||||
"SendAnonymousUsageData": "Sende anonyme Nutzungsdaten",
|
||||
"SetTags": "Tags festlegen",
|
||||
"Settings": "Einstellungen",
|
||||
"SettingsConsoleLogLevel": "Konsolen Log Level",
|
||||
"SettingsEnableColorImpairedMode": "Farbbeeinträchtigter Modus aktivieren",
|
||||
@@ -358,7 +358,7 @@
|
||||
"SettingsShowRelativeDatesHelpText": "Relatives (z.B.: Heute, gestern, etc) oder absolutes Datum anzeigen",
|
||||
"SettingsSqlLoggingHelpText": "Log alle SQL Abfragen von {appName}",
|
||||
"SettingsTimeFormat": "Zeitformat",
|
||||
"ShowAdvanced": "Einfache Ansicht",
|
||||
"ShowAdvanced": "Erweitert anzeigen",
|
||||
"ShowSearch": "Suche anzeigen",
|
||||
"ShowSearchHelpText": "Suchbutton anzeigen beim draufzeigen",
|
||||
"Shutdown": "Herunterfahren",
|
||||
@@ -366,7 +366,7 @@
|
||||
"Sort": "Sortieren",
|
||||
"Source": "Quelle",
|
||||
"StartTypingOrSelectAPathBelow": "Eingeben oder unten auswählen",
|
||||
"Started": "gestartet",
|
||||
"Started": "Gestartet",
|
||||
"StartupDirectory": "Start-Verzeichnis",
|
||||
"Stats": "Statistiken",
|
||||
"Status": "Status",
|
||||
@@ -387,13 +387,13 @@
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tag wird nicht benutzt und kann gelöscht werden",
|
||||
"Tags": "Tags",
|
||||
"TagsHelpText": "Wird auf Filme mit mindestens einem passenden Tag angewandt",
|
||||
"TagsSettingsSummary": "Alle Tags und deren Benutzung anzeigen. Unbenutzte Tags können entfernt werden",
|
||||
"TagsSettingsSummary": "Sehen Sie sich alle Tags und deren Verwendung an. Nicht verwendete Tags können entfernt werden",
|
||||
"Tasks": "Aufgaben",
|
||||
"Test": "Testen",
|
||||
"TestAll": "Alle testen",
|
||||
"Test": "Prüfen",
|
||||
"TestAll": "Alle prüfen",
|
||||
"TestAllApps": "Alle Apps testen",
|
||||
"TestAllClients": "Alle testen",
|
||||
"TestAllIndexers": "Alle testen",
|
||||
"TestAllClients": "Prüfe alle Clients",
|
||||
"TestAllIndexers": "Prüfe alle Indexer",
|
||||
"TheLatestVersionIsAlreadyInstalled": "Die aktuellste Version ist bereits installiert",
|
||||
"ThemeHelpText": "Ändere das UI-Theme der Anwendung. Das 'Auto'-Theme verwendet dein Betriebssystem-Theme, um den hellen oder dunklen Modus einzustellen. Inspiriert von {0}",
|
||||
"Time": "Zeit",
|
||||
@@ -418,10 +418,10 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Der neue Indexer konnte nicht hinzugefügt werden, bitte erneut probieren.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Die neue Benachrichtigung konnte nicht hinzugefügt werden, bitte erneut probieren.",
|
||||
"UnableToLoadAppProfiles": "App-Profile können nicht geladen werden",
|
||||
"UnableToLoadApplicationList": "Anwendungsliste kann nicht geladen werden",
|
||||
"UnableToLoadBackups": "Backups konnten nicht geladen werden",
|
||||
"ApplicationsLoadError": "Anwendungsliste kann nicht geladen werden",
|
||||
"UnableToLoadBackups": "Sicherungen können nicht geladen werden",
|
||||
"UnableToLoadDevelopmentSettings": "Entwicklereinstellungen konnten nicht geladen werden",
|
||||
"UnableToLoadDownloadClients": "Downloader konnten nicht geladen werden",
|
||||
"DownloadClientsLoadError": "Downloader konnten nicht geladen werden",
|
||||
"UnableToLoadGeneralSettings": "Allgemeine Einstellungen konnten nicht geladen werden",
|
||||
"UnableToLoadHistory": "Verlauf konnte nicht geladen werden",
|
||||
"UnableToLoadIndexerProxies": "Indexer-Proxies können nicht geladen werden",
|
||||
@@ -429,41 +429,41 @@
|
||||
"UnableToLoadNotifications": "Benachrichtigungen konnten nicht geladen werden",
|
||||
"UnableToLoadTags": "Tags konnten nicht geladen werden",
|
||||
"UnableToLoadUISettings": "Oberflächen Einstellungen konnten nicht geladen werden",
|
||||
"UnsavedChanges": "Ungespeicherte Änderungen",
|
||||
"UnselectAll": "Keine wählen",
|
||||
"UpdateAutomaticallyHelpText": "Updates automatisch herunteraden und installieren. Es kann weiterhin unter \"System -> Updates\" ein manuelles Update angestoßen werden",
|
||||
"UnsavedChanges": "Nicht gespeicherte Änderungen",
|
||||
"UnselectAll": "Alle abwählen",
|
||||
"UpdateAutomaticallyHelpText": "Updates automatisch herunterladen und installieren. Sie können weiterhin über System: Updates installieren",
|
||||
"UpdateCheckStartupNotWritableMessage": "Update kann nicht installiert werden, da der Startordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Update kann nicht installiert werden, da sich der Startordner '{0}' in einem App Translocation-Ordner befindet.",
|
||||
"UpdateCheckUINotWritableMessage": "Update kann nicht installiert werden, da der Benutzeroberflächenordner '{0}' vom Benutzer '{1}' nicht beschreibbar ist.",
|
||||
"UpdateMechanismHelpText": "Benutze {appName}'s Built-In Updater oder ein Script",
|
||||
"UpdateMechanismHelpText": "Verwenden Sie den integrierten Updater von {appName} oder ein Skript",
|
||||
"UpdateScriptPathHelpText": "Pfad zu einem benutzerdefinierten Skript, das ein extrahiertes Update-Paket übernimmt und den Rest des Update-Prozesses abwickelt",
|
||||
"Updates": "Updates",
|
||||
"Uptime": "Laufzeit",
|
||||
"Updates": "Aktualisierung",
|
||||
"Uptime": "Betriebszeit",
|
||||
"Url": "Url",
|
||||
"UrlBaseHelpText": "Für Reverse-Proxy-Unterstützung. Die Standardeinstellung leer",
|
||||
"UseProxy": "Proxy benutzen",
|
||||
"UrlBaseHelpText": "Für die Reverse-Proxy-Unterstützung ist der Standardwert leer",
|
||||
"UseProxy": "Verwende Proxy",
|
||||
"Usenet": "Usenet",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "UserAgent von der App welcher die API aufgerufen hat",
|
||||
"Username": "Benutzername",
|
||||
"Username": "Nutzername",
|
||||
"Version": "Version",
|
||||
"View": "Ansicht",
|
||||
"Warn": "Warnung",
|
||||
"Warn": "Achtung",
|
||||
"Website": "Webseite",
|
||||
"Wiki": "Wiki",
|
||||
"Yes": "Ja",
|
||||
"YesCancel": "Ja, abbrechen",
|
||||
"YesCancel": "Ja Abbrechen",
|
||||
"Yesterday": "Gestern",
|
||||
"OnHealthRestoredHelpText": "Bei Wiederherstellung des Zustands",
|
||||
"OnHealthRestored": "Bei Wiederherstellung des Zustands",
|
||||
"StopSelecting": "Auswahl stoppen",
|
||||
"ApplicationURL": "Anwendungs-URL",
|
||||
"ApplicationUrlHelpText": "Die externe URL der Anwendung inklusive http(s)://, Port und URL-Basis",
|
||||
"ApplicationUrlHelpText": "Die externe URL dieser Anwendung, einschließlich http(s)://, Port und URL-Basis",
|
||||
"ApplyChanges": "Änderungen anwenden",
|
||||
"CountIndexersSelected": "{0} Indexer ausgewählt",
|
||||
"CountIndexersSelected": "{count} Indexer ausgewählt",
|
||||
"DeleteSelectedDownloadClients": "Lösche Download Client(s)",
|
||||
"DeleteSelectedApplicationsMessageText": "Indexer '{0}' wirklich löschen?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Indexer '{0}' wirklich löschen?",
|
||||
"DeleteSelectedIndexersMessageText": "Indexer '{0}' wirklich löschen?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte Download-Clients löschen möchten?",
|
||||
"DeleteSelectedIndexersMessageText": "Sind Sie sicher, dass Sie {count} ausgewählte(n) Indexer löschen möchten?",
|
||||
"EditSelectedDownloadClients": "Ausgewählte Download Clienten bearbeiten",
|
||||
"Implementation": "Integration",
|
||||
"ManageDownloadClients": "Verwalte Download Clienten",
|
||||
@@ -471,11 +471,11 @@
|
||||
"NoIndexersFound": "Keine Indexer gefunden",
|
||||
"Theme": "Design",
|
||||
"Season": "Staffel",
|
||||
"ApplyTagsHelpTextAdd": "Hinzufügen: Füge neu Tags zu den existierenden Tags hinzu",
|
||||
"ApplyTagsHelpTextAdd": "Hinzufügen: Fügen Sie die Tags der vorhandenen Tag-Liste hinzu",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Wie werden Tags zu ausgewählten Autoren zugeteilt",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Wie werden Tags zu ausgewählten Indexern zugeteilt",
|
||||
"ApplyTagsHelpTextRemove": "Entfernen: Eingegebene Tags entfernen",
|
||||
"ApplyTagsHelpTextReplace": "Ersetzen: Nur eingegebene Tags übernehmen und vorhandene entfernen( keine Tags eingeben um alle zu entfernen )",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "So wenden Sie Tags auf die ausgewählten Indexer an",
|
||||
"ApplyTagsHelpTextRemove": "Entfernen: Die eingegebenen Tags entfernen",
|
||||
"ApplyTagsHelpTextReplace": "Ersetzen: Ersetzen Sie die Tags durch die eingegebenen Tags (geben Sie keine Tags ein, um alle Tags zu löschen).",
|
||||
"DownloadClientPriorityHelpText": "Priorisiere mehrere Downloader. Rundlauf-Verfahren wird für Downloader mit der gleichen Priorität verwendet.",
|
||||
"EditSelectedIndexers": "Ausgewähle Indexer bearbeiten",
|
||||
"SelectIndexers": "Indexer suchen",
|
||||
@@ -491,20 +491,20 @@
|
||||
"Artist": "Künstler",
|
||||
"Author": "Autor",
|
||||
"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.",
|
||||
"ConnectionLostReconnect": "{appName} wird versuchen, automatisch eine Verbindung herzustellen, oder Sie können unten auf „Neu laden“ klicken.",
|
||||
"ConnectionLostToBackend": "{appName} hat die Verbindung zum Backend verloren und muss neu geladen werden, um die Funktionalität wiederherzustellen.",
|
||||
"RecentChanges": "Kürzliche Änderungen",
|
||||
"WhatsNew": "Was gibt's Neues?",
|
||||
"WhatsNew": "Was ist neu?",
|
||||
"minutes": "Minuten",
|
||||
"DeleteAppProfileMessageText": "Qualitätsprofil '{0}' wirklich löschen?",
|
||||
"AddConnection": "Verbindung hinzufügen",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Wegen Fehlern sind keine Applikationen verfügbar",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applikationen wegen folgender Fehler nicht verfügbar: {0}",
|
||||
"AuthBasic": "Einfach (Browser Popup)",
|
||||
"AuthForm": "Formular (Login Seite)",
|
||||
"DisabledForLocalAddresses": "Für Lokale Adressen deaktivieren",
|
||||
"AuthBasic": "Basis (Browser-Popup)",
|
||||
"AuthForm": "Formulare (Anmeldeseite)",
|
||||
"DisabledForLocalAddresses": "Für lokale Adressen deaktiviert",
|
||||
"None": "Keine",
|
||||
"ResetAPIKeyMessageText": "Bist du sicher, dass du den API-Schlüssel zurücksetzen willst?",
|
||||
"ResetAPIKeyMessageText": "Sind Sie sicher, dass Sie Ihren API-Schlüssel zurücksetzen möchten?",
|
||||
"AddCustomFilter": "Eigenen Filter hinzufügen",
|
||||
"AddApplication": "Application hinzufügen",
|
||||
"AddCategory": "Kategorie hinzufügen",
|
||||
@@ -532,5 +532,15 @@
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Gib einen neuen Benutzernamen ein",
|
||||
"AuthenticationMethodHelpTextWarning": "Bitte wähle eine gültige Authentifizierungsmethode aus",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Gib ein neues Passwort ein",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen"
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Neues Passwort bestätigen",
|
||||
"DefaultNameCopiedProfile": "{Name} – Kopieren",
|
||||
"AuthenticationMethod": "Authentifizierungsmethode",
|
||||
"Clone": "Klonen",
|
||||
"CountDownloadClientsSelected": "{count} Download-Client(s) ausgewählt",
|
||||
"EditConnectionImplementation": "Verbindung hinzufügen - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Download-Client hinzufügen - {implementationName}",
|
||||
"IndexerTagsHelpTextWarning": "Tags sollten mit Vorsicht verwendet werden, da sie ungewollte Effekte haben können. Eine Anwendung mit einem Tag synchronisiert nur Indexer die den Gleichen Tag haben.",
|
||||
"EditIndexerImplementation": "Indexer hinzufügen - {implementationName}",
|
||||
"EditApplicationImplementation": "Anwendung hinzufügen - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Indexer Proxy hinzufügen - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"ChangeHasNotBeenSavedYet": "Η αλλαγή δεν έχει αποθηκευτεί ακόμα",
|
||||
"CloneProfile": "Προφίλ κλώνου",
|
||||
"CloseCurrentModal": "Κλείσιμο τρέχοντος modal",
|
||||
"DBMigration": "Μετεγκατάσταση DB",
|
||||
"DatabaseMigration": "Μετεγκατάσταση DB",
|
||||
"DeleteApplicationMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε την ειδοποίηση \"{0}\";",
|
||||
"DeleteBackupMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το αντίγραφο ασφαλείας \"{0}\";",
|
||||
"DeleteIndexerProxyMessageText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε τη λίστα \"{0}\";",
|
||||
@@ -235,7 +235,7 @@
|
||||
"Security": "Ασφάλεια",
|
||||
"Tasks": "Καθήκοντα",
|
||||
"UnableToLoadBackups": "Δεν είναι δυνατή η φόρτωση αντιγράφων ασφαλείας",
|
||||
"UnableToLoadDownloadClients": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
|
||||
"DownloadClientsLoadError": "Δεν είναι δυνατή η φόρτωση πελατών λήψης",
|
||||
"UpdateMechanismHelpText": "Χρησιμοποιήστε το ενσωματωμένο πρόγραμμα ενημέρωσης του {appName} ή ένα script",
|
||||
"AnalyticsEnabledHelpText": "Στείλτε ανώνυμες πληροφορίες χρήσης και σφάλματος στους διακομιστές του {appName}. Αυτό περιλαμβάνει πληροφορίες στο πρόγραμμα περιήγησής σας, ποιες σελίδες {appName} WebUI χρησιμοποιείτε, αναφορά σφαλμάτων καθώς και έκδοση λειτουργικού συστήματος και χρόνου εκτέλεσης. Θα χρησιμοποιήσουμε αυτές τις πληροφορίες για να δώσουμε προτεραιότητα σε λειτουργίες και διορθώσεις σφαλμάτων.",
|
||||
"AppDataDirectory": "Κατάλογος AppData",
|
||||
@@ -363,7 +363,7 @@
|
||||
"QueryOptions": "Επιλογές ερωτήματος",
|
||||
"SearchIndexers": "Αναζήτηση ευρετηρίων",
|
||||
"SearchType": "Τύπος αναζήτησης",
|
||||
"UnableToLoadApplicationList": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
|
||||
"ApplicationsLoadError": "Δεν είναι δυνατή η φόρτωση της λίστας εφαρμογών",
|
||||
"AddRemoveOnly": "Μόνο προσθήκη και αφαίρεση",
|
||||
"ProwlarrSupportsAnyDownloadClient": "Το {appName} υποστηρίζει οποιοδήποτε από τα προγράμματα-πελάτες λήψης που αναφέρονται παρακάτω.",
|
||||
"Query": "Ερώτηση",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"AnalyticsEnabledHelpText": "Send anonymous usage and error information to {appName}'s servers. This includes information on your browser, which {appName} WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes.",
|
||||
"ApiKey": "API Key",
|
||||
"ApiKeyValidationHealthCheckMessage": "Please update your API key to be at least {0} characters long. You can do this via settings or the config file",
|
||||
"AppDataDirectory": "AppData directory",
|
||||
"AppDataDirectory": "AppData Directory",
|
||||
"AppDataLocationHealthCheckMessage": "Updating will not be possible to prevent deleting AppData on Update",
|
||||
"AppProfileInUse": "App Profile in Use",
|
||||
"AppProfileSelectHelpText": "App profiles are used to control RSS, Automatic Search and Interactive Search settings on application sync",
|
||||
@@ -47,11 +47,12 @@
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Applications unavailable due to failures for more than 6 hours: {0}",
|
||||
"ApplicationStatusCheckAllClientMessage": "All applications are unavailable due to failures",
|
||||
"ApplicationStatusCheckSingleClientMessage": "Applications unavailable due to failures: {0}",
|
||||
"ApplicationTagsHelpText": "Sync Indexers to this application that have no tags or that have 1 or more matching tags",
|
||||
"ApplicationTagsHelpText": "Sync Indexers to this application that have one or more matching tags. If no tags are listed here, then no indexers will be prevented from syncing due to their tags.",
|
||||
"ApplicationTagsHelpTextWarning": "Tags should be used with caution, they can have unintended effects. An app with a tag will only sync with indexers having the same tag.",
|
||||
"ApplicationURL": "Application URL",
|
||||
"ApplicationUrlHelpText": "This application's external URL including http(s)://, port and URL base",
|
||||
"Applications": "Applications",
|
||||
"ApplicationsLoadError": "Unable to load application list",
|
||||
"Apply": "Apply",
|
||||
"ApplyChanges": "Apply Changes",
|
||||
"ApplyTags": "Apply Tags",
|
||||
@@ -133,8 +134,8 @@
|
||||
"CountIndexersSelected": "{count} indexer(s) selected",
|
||||
"Custom": "Custom",
|
||||
"CustomFilters": "Custom Filters",
|
||||
"DBMigration": "DB Migration",
|
||||
"Database": "Database",
|
||||
"DatabaseMigration": "Database Migration",
|
||||
"Date": "Date",
|
||||
"Dates": "Dates",
|
||||
"DefaultNameCopiedProfile": "{name} - Copy",
|
||||
@@ -171,12 +172,16 @@
|
||||
"Docker": "Docker",
|
||||
"Donations": "Donations",
|
||||
"DownloadClient": "Download Client",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Aria2 location",
|
||||
"DownloadClientCategory": "Download Client Category",
|
||||
"DownloadClientPriorityHelpText": "Prioritize multiple Download Clients. Round-Robin is used for clients with the same priority.",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Content Layout",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
|
||||
"DownloadClientSettings": "Download Client Settings",
|
||||
"DownloadClientStatusCheckAllClientMessage": "All download clients are unavailable due to failures",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Download clients unavailable due to failures: {0}",
|
||||
"DownloadClients": "Download Clients",
|
||||
"DownloadClientsLoadError": "Unable to load download clients",
|
||||
"DownloadClientsSettingsSummary": "Download clients configuration for integration into {appName} UI search",
|
||||
"Duration": "Duration",
|
||||
"Edit": "Edit",
|
||||
@@ -198,7 +203,7 @@
|
||||
"EnableInteractiveSearch": "Enable Interactive Search",
|
||||
"EnableInteractiveSearchHelpText": "Will be used when interactive search is used",
|
||||
"EnableRss": "Enable RSS",
|
||||
"EnableRssHelpText": "Enable Rss feed for Indexer",
|
||||
"EnableRssHelpText": "Enable RSS feed for Indexer",
|
||||
"EnableSSL": "Enable SSL",
|
||||
"EnableSslHelpText": " Requires restart running as administrator to take effect",
|
||||
"Enabled": "Enabled",
|
||||
@@ -246,7 +251,7 @@
|
||||
"HomePage": "Home Page",
|
||||
"Host": "Host",
|
||||
"Hostname": "Hostname",
|
||||
"Id": "Id",
|
||||
"Id": "ID",
|
||||
"IgnoredAddresses": "Ignored Addresses",
|
||||
"IllRestartLater": "I'll restart later",
|
||||
"Implementation": "Implementation",
|
||||
@@ -264,6 +269,7 @@
|
||||
"IndexerFlags": "Indexer Flags",
|
||||
"IndexerHealthCheckNoIndexers": "No indexers enabled, {appName} will not return search results",
|
||||
"IndexerHistoryLoadError": "Error loading indexer history",
|
||||
"IndexerId": "Indexer ID",
|
||||
"IndexerInfo": "Indexer Info",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "All indexers are unavailable due to failures for more than 6 hours",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Indexers unavailable due to failures for more than 6 hours: {0}",
|
||||
@@ -277,7 +283,7 @@
|
||||
"IndexerProxyStatusCheckAllClientMessage": "All proxies are unavailable due to failures",
|
||||
"IndexerProxyStatusCheckSingleClientMessage": "Proxies unavailable due to failures: {0}",
|
||||
"IndexerQuery": "Indexer Query",
|
||||
"IndexerRss": "Indexer Rss",
|
||||
"IndexerRss": "Indexer RSS",
|
||||
"IndexerSettingsSummary": "Configure various global Indexer settings including Proxies.",
|
||||
"IndexerSite": "Indexer Site",
|
||||
"IndexerStatus": "Indexer Status",
|
||||
@@ -313,6 +319,7 @@
|
||||
"MIA": "MIA",
|
||||
"MaintenanceRelease": "Maintenance Release: bug fixes and other improvements. See Github Commit History for more details",
|
||||
"ManageApplications": "Manage Applications",
|
||||
"ManageClients": "Manage Clients",
|
||||
"ManageDownloadClients": "Manage Download Clients",
|
||||
"Manual": "Manual",
|
||||
"MappedCategories": "Mapped Categories",
|
||||
@@ -336,6 +343,7 @@
|
||||
"NewznabUrl": "Newznab Url",
|
||||
"NextExecution": "Next Execution",
|
||||
"No": "No",
|
||||
"NoApplicationsFound": "No applications found",
|
||||
"NoBackupsAreAvailable": "No backups are available",
|
||||
"NoChange": "No Change",
|
||||
"NoChanges": "No Changes",
|
||||
@@ -358,6 +366,8 @@
|
||||
"NotificationTriggers": "Notification Triggers",
|
||||
"NotificationTriggersHelpText": "Select which events should trigger this notification",
|
||||
"Notifications": "Notifications",
|
||||
"NotificationsEmailSettingsUseEncryption": "Use Encryption",
|
||||
"NotificationsEmailSettingsUseEncryptionHelpText": "Whether to prefer using encryption if configured on the server, to always use encryption via SSL (Port 465 only) or StartTLS (any other port) or to never use encryption",
|
||||
"OAuthPopupMessage": "Pop-ups are being blocked by your browser",
|
||||
"Ok": "Ok",
|
||||
"OnApplicationUpdate": "On Application Update",
|
||||
@@ -498,7 +508,7 @@
|
||||
"Source": "Source",
|
||||
"StartTypingOrSelectAPathBelow": "Start typing or select a path below",
|
||||
"Started": "Started",
|
||||
"StartupDirectory": "Startup directory",
|
||||
"StartupDirectory": "Startup Directory",
|
||||
"Stats": "Stats",
|
||||
"Status": "Status",
|
||||
"StopSelecting": "Stop Selecting",
|
||||
@@ -561,10 +571,8 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Unable to add a new indexer proxy, please try again.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Unable to add a new notification, please try again.",
|
||||
"UnableToLoadAppProfiles": "Unable to load app profiles",
|
||||
"UnableToLoadApplicationList": "Unable to load application list",
|
||||
"UnableToLoadBackups": "Unable to load backups",
|
||||
"UnableToLoadDevelopmentSettings": "Unable to load Development settings",
|
||||
"UnableToLoadDownloadClients": "Unable to load download clients",
|
||||
"UnableToLoadGeneralSettings": "Unable to load General settings",
|
||||
"UnableToLoadHistory": "Unable to load history",
|
||||
"UnableToLoadIndexerProxies": "Unable to load Indexer Proxies",
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
"Edit": "Editar",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Gestores de descargas no disponibles debido a errores: {0}",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Los gestores de descargas no están disponibles debido a errores",
|
||||
"DownloadClients": "Gestores de Descargas",
|
||||
"Delete": "Borrar",
|
||||
"DownloadClients": "Clientes de descarga",
|
||||
"Delete": "Eliminar",
|
||||
"Dates": "Fechas",
|
||||
"Date": "Fecha",
|
||||
"CustomFilters": "Filtros Personalizados",
|
||||
@@ -79,7 +79,7 @@
|
||||
"Failed": "Fallido",
|
||||
"EventType": "Tipo de Evento",
|
||||
"DownloadClientsSettingsSummary": "Configuración del cliente de descargas para la integración en {appName} UI search",
|
||||
"DownloadClient": "Gestor de Descargas",
|
||||
"DownloadClient": "Cliente de descarga",
|
||||
"Details": "Detalles",
|
||||
"ConnectSettingsSummary": "Notificaciones y scripts personalizados",
|
||||
"Warn": "Advertencia",
|
||||
@@ -132,13 +132,13 @@
|
||||
"Fixed": "Arreglado",
|
||||
"EnableSslHelpText": " Requiere reiniciar la aplicación como administrador para que surta efecto",
|
||||
"Enable": "Habilitar",
|
||||
"DownloadClientSettings": "Ajustes de Gestor de Descargas",
|
||||
"DownloadClientSettings": "Opciones del cliente de descarga",
|
||||
"Docker": "Docker",
|
||||
"DeleteTag": "Borrar Etiqueta",
|
||||
"DeleteNotification": "Borrar Notificación",
|
||||
"DeleteDownloadClient": "Borrar Gestor de Descargas",
|
||||
"DeleteBackup": "Borrar Backup",
|
||||
"DBMigration": "Migración de DB",
|
||||
"DeleteTag": "Eliminar Etiqueta",
|
||||
"DeleteNotification": "Borrar Notificacion",
|
||||
"DeleteDownloadClient": "Borrar cliente de descarga",
|
||||
"DeleteBackup": "Eliminar copia de seguridad",
|
||||
"DatabaseMigration": "Migración de DB",
|
||||
"CloneProfile": "Clonar Perfil",
|
||||
"ClientPriority": "Prioridad del Cliente",
|
||||
"ChangeHasNotBeenSavedYet": "El cambio aún no se ha guardado",
|
||||
@@ -171,7 +171,7 @@
|
||||
"UpdateAutomaticallyHelpText": "Descargar e instalar actualizaciones automáticamente. Se podrán instalar desde Sistema: Actualizaciones también",
|
||||
"UnableToLoadTags": "No se pueden cargar las Etiquetas",
|
||||
"UnableToLoadNotifications": "No se pueden cargar las Notificaciones",
|
||||
"UnableToLoadDownloadClients": "No se puden cargar los gestores de descargas",
|
||||
"DownloadClientsLoadError": "No se puden cargar los gestores de descargas",
|
||||
"UISettings": "Ajustes del UI",
|
||||
"Torrents": "Torrents",
|
||||
"TestAllClients": "Comprobar Todos los Gestores",
|
||||
@@ -320,7 +320,7 @@
|
||||
"Filters": "Filtros",
|
||||
"HistoryCleanupDaysHelpText": "Ajustar a 0 para desactivar la limpieza automática",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Los archivos en la papelera de reciclaje más antiguos que el número de días seleccionado serán limpiados automáticamente",
|
||||
"OnGrab": "Al Capturar",
|
||||
"OnGrab": "Al Capturar lanzamiento",
|
||||
"OnHealthIssue": "En Problema de Salud",
|
||||
"TestAllIndexers": "Comprobar Todos los Indexers",
|
||||
"NotificationTriggersHelpText": "Seleccione qué eventos deben activar esta notificación",
|
||||
@@ -351,7 +351,7 @@
|
||||
"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",
|
||||
"Database": "Base de Datos",
|
||||
"Database": "Base de datos",
|
||||
"Duration": "Duración",
|
||||
"LastDuration": "Duración",
|
||||
"LastExecution": "Última ejecución",
|
||||
@@ -373,8 +373,8 @@
|
||||
"Label": "Etiqueta",
|
||||
"Theme": "Tema",
|
||||
"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",
|
||||
"DeleteSelectedApplicationsMessageText": "¿Estás seguro que quieres eliminar {count} aplicación(es) seleccionada(s)?",
|
||||
"DeleteSelectedDownloadClients": "Borrar gestor de descarga(s)",
|
||||
"DeleteSelectedIndexersMessageText": "¿Está seguro de querer eliminar {count} indexador(es) seleccionado(s)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "¿Está seguro de querer eliminar {count} cliente(s) de descarga seleccionado(s)?",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Cómo añadir etiquetas a las películas seleccionadas",
|
||||
@@ -426,12 +426,12 @@
|
||||
"EditIndexerProxyImplementation": "Agregar Condición - { implementationName}",
|
||||
"AppUpdated": "{appName} Actualizada",
|
||||
"AppUpdatedVersion": "{appName} ha sido actualizado a la versión `{version}`, para obtener los cambios más recientes, necesitaras recargar {appName}",
|
||||
"AddApplicationImplementation": "Agregar Condición - { implementationName}",
|
||||
"AddApplicationImplementation": "Agregar aplicación - { implementationName}",
|
||||
"AddConnectionImplementation": "Añadir Conexión - {implementationName}",
|
||||
"AddIndexerImplementation": "Agregar Condición - { implementationName}",
|
||||
"AddIndexerProxyImplementation": "Agregar Condición - { implementationName}",
|
||||
"EditApplicationImplementation": "Agregar Condición - { implementationName}",
|
||||
"EditConnectionImplementation": "Agregar Condición - { implementationName}",
|
||||
"EditConnectionImplementation": "Editar conexión - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Añadir Cliente de Descarga - {implementationName}",
|
||||
"AuthenticationMethod": "Método de autenticación",
|
||||
"AuthenticationMethodHelpTextWarning": "Por favor selecciona un método válido de autenticación",
|
||||
@@ -460,10 +460,10 @@
|
||||
"DeleteAppProfile": "Eliminar Perfil de Aplicación",
|
||||
"AddSyncProfile": "Agregar Perfil de Sincronización",
|
||||
"AppSettingsSummary": "Aplicaciones y configuraciones para determinar como {appName} interactúa con sus programas de PVR",
|
||||
"AddCategory": "Agregar Categoría",
|
||||
"AddCategory": "Agregar categoría",
|
||||
"AppProfileSelectHelpText": "Los perfiles de la aplicación se usan para controlar la configuración por aplicación de RSS, Búsqueda Automática y Búsqueda Interactiva",
|
||||
"ActiveApps": "Aplicaciones Activas",
|
||||
"ActiveIndexers": "Indexadores Activos",
|
||||
"ActiveApps": "Aplicaciones activas",
|
||||
"ActiveIndexers": "Indexadores activos",
|
||||
"AudioSearch": "Búsqueda de Música",
|
||||
"Auth": "Autenticación",
|
||||
"BasicSearch": "Búsqueda Básica",
|
||||
@@ -492,5 +492,29 @@
|
||||
"Id": "Id",
|
||||
"EditCategory": "Editar categoría",
|
||||
"EditSyncProfile": "Editar perfil de sincronización",
|
||||
"EnableIndexer": "Habilitar indexador"
|
||||
"EnableIndexer": "Habilitar indexador",
|
||||
"InvalidUILanguage": "Su interfaz de usuario está configurada en un idioma no válido, corríjalo y guarde la configuración",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Diseño del contenido",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Si usar el diseño de contenido configurado de qBittorrent, el diseño original del torrent o siempre crear una subcarpeta (qBittorrent 4.3.2+)",
|
||||
"EnableRssHelpText": "Habilitar feed RSS para el indexador",
|
||||
"days": "días",
|
||||
"ElapsedTime": "Tiempo transcurrido",
|
||||
"GrabTitle": "Capturar título",
|
||||
"SearchAllIndexers": "Buscar en todos los Indexadores",
|
||||
"Website": "Sitio web",
|
||||
"Redirect": "Redirección",
|
||||
"RssQueries": "Consultas RSS",
|
||||
"SeedRatio": "Ratio de siembra",
|
||||
"RssFeed": "Feed RSS",
|
||||
"SearchType": "Tipo de búsqueda",
|
||||
"RepeatSearch": "Repetir búsqueda",
|
||||
"SeedRatioHelpText": "El ratio que un torrent debe alcanzar antes de detenerse, si está vacío se usará el valor por defecto",
|
||||
"SeedTime": "Tiempo de siembra",
|
||||
"SearchTypes": "Tipos de búsquedas",
|
||||
"DeleteIndexerProxy": "Eliminar proxy indexador",
|
||||
"OnGrabHelpText": "Al Capturar lanzamiento",
|
||||
"SeedTimeHelpText": "El ratio que un torrent debe alcanzar antes de detenerse, si está vacío se usará el valor por defecto",
|
||||
"IndexerTagsHelpTextWarning": "Las etiquetas deben utilizarse con cuidado, pueden tener efectos involuntarios. Una aplicación con una etiqueta solo sincronizara con Indexadores que tengan la misma etiqueta.",
|
||||
"TVSearchTypes": "Tipos de búsquedas",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Ubicación opcional en la que poner las descargas, dejar en blanco para usar la ubicación de Aria2 predeterminada"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"IndexerProxyStatusCheckSingleClientMessage": "Välityspalvelimet eivät ole käytettävissä virheiden vuoksi: {0}",
|
||||
"Logging": "Kirjaus",
|
||||
"LogLevel": "Kirjauksen taso",
|
||||
"Logging": "Lokikirjaus",
|
||||
"LogLevel": "Lokikirjauksen laajuus",
|
||||
"MovieIndexScrollTop": "Elokuvakirjasto: vieritä ylös",
|
||||
"Apply": "Käytä",
|
||||
"ClientPriority": "Lataustyökalun painotus",
|
||||
"IndexerPriorityHelpText": "Tietolähteen painotus: 1 (korkein) - 50 (matalin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen sieppauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
|
||||
"IndexerPriorityHelpText": "Tietolähteen painotus, 1– 50 (korkein-alin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen kaappauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
|
||||
"Manual": "Manuaalinen",
|
||||
"Add": "Lisää",
|
||||
"Reload": "Lataa uudelleen",
|
||||
@@ -25,67 +25,67 @@
|
||||
"SettingsTimeFormat": "Kellonajan esitys",
|
||||
"Message": "Viesti",
|
||||
"Seeders": "Jakajat",
|
||||
"TestAll": "Testaa kaikki",
|
||||
"TestAll": "Kaikkien testaus",
|
||||
"AddDownloadClient": "Lisää lataustyökalu",
|
||||
"CustomFilters": "Mukautetut suodattimet",
|
||||
"CustomFilters": "Omat suodattimet",
|
||||
"DeleteTag": "Poista tunniste",
|
||||
"EnableRss": "RSS-syöte",
|
||||
"Filter": "Suodata",
|
||||
"EnableRss": "Käytä RSS-syötettä",
|
||||
"Filter": "Suodatus",
|
||||
"Fixed": "Korjattu",
|
||||
"FocusSearchBox": "Kohdista hakukenttä",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Lue lisää lataustyökalusta painamalla 'Lisätietoja'.",
|
||||
"HideAdvanced": "Piilota edistyneet",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Saat yksittäisestä lataustyökalusta lisätietoja painamalla sen ohessa olevaa \"Lisätietoja\"-painiketta.",
|
||||
"HideAdvanced": "Piilota lisäasetukset",
|
||||
"History": "Historia",
|
||||
"MIA": "Puuttuu",
|
||||
"New": "Uusi",
|
||||
"PageSizeHelpText": "Sivulla näytettävien kohteiden määrä",
|
||||
"New": "Uutta",
|
||||
"PageSizeHelpText": "Sivukohtainen kohdemäärä.",
|
||||
"Proxy": "Välityspalvelin",
|
||||
"ProxyBypassFilterHelpText": "Käytä erottimena ',' ja '*.' jokerimerkkinä aliverkkotunnuksille (esim. www.esimerkki.fi,*.esimerkki.fi)",
|
||||
"ProxyBypassFilterHelpText": "Käytä aliverkkotunnusten erottimena pilkkua (,) ja jokerimerkkinä tähteä ja pistettä (*.). Esimerkkejä: www.esimerkki.fi,*.esimerkki.fi.",
|
||||
"Reddit": "Reddit",
|
||||
"Refresh": "Päivitä",
|
||||
"RefreshMovie": "Päivitä elokuva",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "'{0}' ei ole kelvollinen {appName}-julkaisuhaara, etkä saa päivityksiä sen kautta",
|
||||
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "\"{0}\" ei ole kelvollinen {appName}-julkaisuhaara ja tämän vuoksi et saa päivityksiä.",
|
||||
"RestartRequiredHelpTextWarning": "Käyttöönotto vaatii {appName}in uudelleenkäynnistyksen.",
|
||||
"Result": "Tulos",
|
||||
"Settings": "Asetukset",
|
||||
"SettingsLongDateFormat": "Pitkän päiväyksen esitys",
|
||||
"SettingsShortDateFormat": "Lyhyen päiväyksen esitys",
|
||||
"UnselectAll": "Poista kaikkien valinta",
|
||||
"UnselectAll": "Tyhjennä valinnat",
|
||||
"UpdateCheckStartupTranslocationMessage": "Päivitystä ei voi asentaa, koska käynnistyskansio '{0}' sijaitsee 'App Translocation' -kansiossa.",
|
||||
"UpdateCheckUINotWritableMessage": "Päivitystä ei voi asentaa, koska käyttäjällä '{1}' ei ole kirjoitusoikeutta käyttöliittymäkansioon '{0}'.",
|
||||
"UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai omaa komentosarjaasi.",
|
||||
"UpdateCheckUINotWritableMessage": "Päivityksen asennus ei onnistu, koska käyttäjällä \"{1}\" ei ole kirjoitusoikeutta käyttöliittymäkansioon \"{0}\".",
|
||||
"UpdateMechanismHelpText": "Käytä {appName}in sisäänrakennettua päivitystoimintoa tai komentosarjaa.",
|
||||
"Enable": "Käytä",
|
||||
"UI": "Käyttöliittymä",
|
||||
"UrlBaseHelpText": "Käänteisen välityspalvelimen tuki (esim. \"http://[host]:[port]/[urlBase]\"). Käytä oletusta jättämällä tyhjäksi.",
|
||||
"UrlBaseHelpText": "Lisää {appName}in URL-osoitteeseen jälkiliitteen, esim. \"http://[osoite]:[portti]/[URL-perusta]\". Oletusarvo on tyhjä.",
|
||||
"Usenet": "Usenet",
|
||||
"BackupNow": "Varmuuskopioi nyt",
|
||||
"NoBackupsAreAvailable": "Varmuuskopioita ei ole saatavilla",
|
||||
"UpdateCheckStartupNotWritableMessage": "Päivitystä ei voi asentaa, koska käyttäjällä '{1}' ei ole kirjoitusoikeutta käynnistyskansioon '{0}'.",
|
||||
"NoBackupsAreAvailable": "Varmuuskopioita ei ole käytettävissä",
|
||||
"UpdateCheckStartupNotWritableMessage": "Päivitystä ei voida asentaa, koska käyttäjällä \"{1}\" ei ole kirjoitusoikeutta käynnistyskansioon \"{0}\".",
|
||||
"Updates": "Päivitykset",
|
||||
"UpdateScriptPathHelpText": "Polku komentosarjaan, joka käsittelee puretun päivitystiedoston ja hoitaa asennuksen loppuosuuden.",
|
||||
"Uptime": "Käyttöaika",
|
||||
"URLBase": "URL-perusta",
|
||||
"UseProxy": "Käytä välityspalvelinta",
|
||||
"Username": "Käyttäjätunnus",
|
||||
"YesCancel": "Kyllä, peruuta",
|
||||
"YesCancel": "Kyllä, peru",
|
||||
"NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty.",
|
||||
"ApplyTags": "Tunnistetoimenpide",
|
||||
"Authentication": "Todennus",
|
||||
"AuthenticationMethodHelpText": "Vaadi käyttäjätunnus ja salasana {appName}in käyttöön.",
|
||||
"BindAddressHelpText": "Toimiva IP-osoite, \"localhost\" tai \"*\" (tähti) kaikille verkkoliitännöille.",
|
||||
"Authentication": "Tunnistautuminen",
|
||||
"AuthenticationMethodHelpText": "Vaadi {appName}in käyttöön käyttäjätunnus ja salasana.",
|
||||
"BindAddressHelpText": "Toimiva IP-osoite, localhost tai * (tähti) kaikille verkkoliitännöille.",
|
||||
"Close": "Sulje",
|
||||
"DeleteNotification": "Poista kytkentä",
|
||||
"DeleteNotification": "Poista ilmoitus",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "Lataustyökalu",
|
||||
"Language": "Kieli",
|
||||
"Search": "Haku",
|
||||
"Details": "Tiedot",
|
||||
"InteractiveSearch": "Vuorovaikutteinen haku",
|
||||
"Interval": "Aikaväli",
|
||||
"InteractiveSearch": "Manuaalihaku",
|
||||
"Interval": "Ajoitus",
|
||||
"KeyboardShortcuts": "Pikanäppäimet",
|
||||
"LastWriteTime": "Viimeisin kirjoitusaika",
|
||||
"LastWriteTime": "Viimeksi tallennettu",
|
||||
"LogFiles": "Lokitiedostot",
|
||||
"LogLevelTraceHelpTextWarning": "Jäljityskirjausta tulisi käyttää vain väliaikaisesti",
|
||||
"LogLevelTraceHelpTextWarning": "Jäljityskirjausta tulee käyttää vain tilapäisesti.",
|
||||
"Logs": "Lokitiedot",
|
||||
"Mechanism": "Mekanismi",
|
||||
"Name": "Nimi",
|
||||
@@ -94,14 +94,14 @@
|
||||
"Presets": "Esiasetukset",
|
||||
"Priority": "Painotus",
|
||||
"Protocol": "Protokolla",
|
||||
"ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}",
|
||||
"ProxyCheckBadRequestMessage": "Välityspalvelintesti epäonnistui. Tilakoodi: {0}.",
|
||||
"ProxyCheckFailedToTestMessage": "Välityspalvelintesti epäonnistui: {0}",
|
||||
"ProxyCheckResolveIpMessage": "Määritetyn välityspalvelimen \"{0}\" IP-osoitteen selvitys epäonnistui.",
|
||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
|
||||
"ProxyType": "Välityspalvelimen tyyppi",
|
||||
"ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
||||
"ProxyUsernameHelpText": "Käyttäjätunnus ja salasana tulee täyttää vain tarvittaessa. Mikäli näitä ei ole, tulee kentät jättää tyhjiksi.",
|
||||
"Queue": "Jono",
|
||||
"ReadTheWikiForMoreInformation": "Lue lisätietoja Wikistä",
|
||||
"ReadTheWikiForMoreInformation": "Wikistä löydät lisää tietoja",
|
||||
"ReleaseStatus": "Julkaisutila",
|
||||
"RemovedFromTaskQueue": "Poistettu tehtäväjonosta",
|
||||
"RemoveFilter": "Poista suodatin",
|
||||
@@ -117,15 +117,15 @@
|
||||
"Security": "Suojaus",
|
||||
"SuggestTranslationChange": "Ehdota käännösmuutosta",
|
||||
"System": "Järjestelmä",
|
||||
"SystemTimeCheckMessage": "Järjestelmän aika on pielessä yli vuorokauden. Ajoitetut tehtävät eivät luultavasti toimi oikein ennen sen korjausta.",
|
||||
"SystemTimeCheckMessage": "Järjestelmän ajassa on ainakin vuorokauden heitto eivätkä ajoitetut tehtävät tämän vuoksi toimi oikein ennen kuin se on korjattu.",
|
||||
"TagCannotBeDeletedWhileInUse": "Tunnistetta ei voi poistaa, koska se on käytössä",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Tunnistetta ei ole määritetty millekään kohteelle, joten sen voi poistaa.",
|
||||
"TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa sellaiset tunnisteet, joita ei ole määritetty millekään kohteelle.",
|
||||
"TagsSettingsSummary": "Täältä näet kaikki tunnisteet käyttökohteineen ja voit poistaa käyttämättömät tunnisteet.",
|
||||
"Tasks": "Tehtävät",
|
||||
"Test": "Kokeile",
|
||||
"TestAllClients": "Testaa kaikki lataustyökalut",
|
||||
"Test": "Testaa",
|
||||
"TestAllClients": "Lataustyökalujen testaus",
|
||||
"Time": "Aika",
|
||||
"Title": "Nimi",
|
||||
"Title": "Nimike",
|
||||
"Tomorrow": "Huomenna",
|
||||
"Torrent": "Torrent",
|
||||
"Torrents": "Torrentit",
|
||||
@@ -133,29 +133,29 @@
|
||||
"UILanguage": "Käyttöliittymän kieli",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Uuden sovelluksen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Uuden tietolähteen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tietolähdevälityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui.",
|
||||
"UnableToLoadDownloadClients": "Lataustyökalujen lataus epäonnistui.",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Uuden tiedonhaun välityspalvelimen lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToLoadBackups": "Varmuuskopioiden lataus epäonnistui",
|
||||
"DownloadClientsLoadError": "Lataustyökalujen lataus ei onistu",
|
||||
"UnableToLoadGeneralSettings": "Yleisten asetusten lataus epäonnistui.",
|
||||
"UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit edelleen asentaa ne myös lähteestä System:Updates.",
|
||||
"Added": "Lisätty",
|
||||
"UpdateAutomaticallyHelpText": "Lataa ja asenna päivitykset automaattisesti. Voit myös edelleen suorittaa asennuksen järjestelmäasetusten päivitykset-osiosta.",
|
||||
"Added": "Lisäysaika",
|
||||
"AddIndexer": "Lisää tietolähde",
|
||||
"AddingTag": "Tunniste lisätään",
|
||||
"Age": "Ikä",
|
||||
"All": "Kaikki",
|
||||
"AllIndexersHiddenDueToFilter": "Aktiivinen suodatin on piilottanut kaikki tietolähteet.",
|
||||
"Analytics": "Analytiikka",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja palvelimillemme. Tämä sisältää tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.",
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja {appName}in palvelimille. Tämä sisältää tietoja selaimestasi, käyttöliittymän sivujen käytöstä, virheraportoinnista, käyttöjärjestelmästä ja suoritusalustasta. Käytämme näitä tietoja ominaisuuksien ja vikakorjausten painotukseen.",
|
||||
"ApiKey": "API-avain",
|
||||
"AppDataDirectory": "AppData-kansio",
|
||||
"DBMigration": "Tietokannan siirto",
|
||||
"DatabaseMigration": "Tietokannan siirto",
|
||||
"Delete": "Poista",
|
||||
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa välityspalvelimen '{0}'?",
|
||||
"DeleteNotificationMessageText": "Haluatko varmasti poistaa kytkennän '{0}'?",
|
||||
"DeleteIndexerProxyMessageText": "Haluatko varmasti poistaa tietolähdevälityspalvelimen \"{name}\"?",
|
||||
"DeleteNotificationMessageText": "Haluatko varmasti poistaa ilmoituspalvelun \"{name}\"?",
|
||||
"Disabled": "Ei käytössä",
|
||||
"DownloadClients": "Lataustyökalut",
|
||||
"DownloadClientSettings": "Lataustyökalujen asetukset",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Yhtään lataustyökalua ei ole virheiden vuoksi käytettävissä",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä",
|
||||
"Mode": "Tila",
|
||||
"MoreInfo": "Lisätietoja",
|
||||
"SelectAll": "Valitse kaikki",
|
||||
@@ -166,68 +166,68 @@
|
||||
"ShowSearchHelpText": "Näytä hakupainike osoitettaessa.",
|
||||
"Shutdown": "Sammuta",
|
||||
"Size": "Koko",
|
||||
"Sort": "Järjestä",
|
||||
"Sort": "Järjestys",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Uuden lataustyökalun lisäys epäonnistui. Yitä uudelleen.",
|
||||
"AppDataLocationHealthCheckMessage": "Päivitystä ei sallita, jotta AppData-kansion poisto päivityksen yhteydessä voidaan estää.",
|
||||
"AppDataLocationHealthCheckMessage": "Päivityksiä ei sallita, jotta AppData-kansion poistaminen päivityksen yhteydessä voidaan estää.",
|
||||
"UnableToLoadHistory": "Historian lataus epäonnistui.",
|
||||
"UnableToLoadNotifications": "Kytkentöjen lataus epäonnistui.",
|
||||
"UnableToLoadTags": "Tunnisteiden lataus epäonnistui.",
|
||||
"UnableToLoadTags": "Tunnisteiden lataus ei onnistu",
|
||||
"UnableToLoadUISettings": "Käyttöliittymän asetuksien lataus epäonnistui.",
|
||||
"UnsavedChanges": "Tallentamattomia muutoksia",
|
||||
"UnsavedChanges": "Muutoksia ei ole tallennettu",
|
||||
"Yesterday": "Eilen",
|
||||
"ConnectionLost": "Yhteys on katkennut",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun '{0}'?",
|
||||
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen '{0}'?",
|
||||
"ConnectionLost": "Ei yhteyttä",
|
||||
"DeleteDownloadClientMessageText": "Haluatko varmasti poistaa lataustyökalun \"{name}\"?",
|
||||
"DeleteTagMessageText": "Haluatko varmasti poistaa tunnisteen \"{label}\"?",
|
||||
"Discord": "Discord",
|
||||
"Donations": "Lahjoitukset",
|
||||
"Edit": "Muokkaa",
|
||||
"EnableAutomaticSearchHelpText": "Profiilia käytetään automaattihauille, jotka suoritetaan käyttöliittymästä tai {appName}in toimesta.",
|
||||
"Enabled": "Käytössä",
|
||||
"EventType": "Tapahtumatyyppi",
|
||||
"EventType": "Tapahtuman tyyppi",
|
||||
"Exception": "Poikkeus",
|
||||
"FeatureRequests": "Kehitysehdotukset",
|
||||
"Grabbed": "Siepattu",
|
||||
"Grabbed": "Kaapattu",
|
||||
"IgnoredAddresses": "Ohitetut osoitteet",
|
||||
"IllRestartLater": "Käynnistän uudelleen myöhemmin",
|
||||
"Info": "Tiedot",
|
||||
"Info": "Informatiivinen",
|
||||
"LaunchBrowserHelpText": " Avaa {appName}in verkkokäyttöliittymä verkkoselaimeen sovelluksen käynnistyksen yhteydessä.",
|
||||
"NoChanges": "Ei muutoksia",
|
||||
"NoChanges": "Muutoksia ei ole",
|
||||
"NoLeaveIt": "Ei, anna olla",
|
||||
"PendingChangesMessage": "On tallentamattomia muutoksia. Haluatko varmasti poistua sivulta?",
|
||||
"PendingChangesMessage": "Olet tehnyt muutoksia, joita ei ole vielä tallennettu. Haluatko varmasti poistua sivulta?",
|
||||
"PendingChangesStayReview": "Älä poistu ja tarkista muutokset",
|
||||
"Save": "Tallenna",
|
||||
"SaveChanges": "Tallenna muutokset",
|
||||
"SaveSettings": "Tallenna asetukset",
|
||||
"Scheduled": "Ajoitettu",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin",
|
||||
"Scheduled": "Ajoitukset",
|
||||
"SettingsEnableColorImpairedModeHelpText": "Vaihtoehtoinen tyyli, joka auttaa erottamaan värikoodatut tiedot paremmin.",
|
||||
"SettingsShowRelativeDates": "Suhteellisten päiväysten esitys",
|
||||
"SettingsShowRelativeDatesHelpText": "Näytä suhteutetut (tänään/eilen/yms.) absoluuttisten sijaan",
|
||||
"ShowSearch": "Näytä haku",
|
||||
"Source": "Lähde",
|
||||
"Source": "Lähdekoodi",
|
||||
"SSLPort": "SSL-portti",
|
||||
"StartTypingOrSelectAPathBelow": "Aloita kirjoitus tai valitse sijainti alta",
|
||||
"StartupDirectory": "Käynnistyskansio",
|
||||
"TableOptions": "Taulukkoasetukset",
|
||||
"TableOptions": "Taulukkonäkymän asetukset",
|
||||
"TableOptionsColumnsMessage": "Valitse näytettävät sarakkeet ja niiden järjestys",
|
||||
"TagsHelpText": "Käytetään vähintään yhdellä täsmäävällä tunnisteella merkityille tietolähteille. Käytä kaikille jättämällä tyhjäksi.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Uuden sovellusprofiilin lisäys epäonnistui. Yritä uudelleen.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Kytkennän lisäys epäonnistui. Yritä uudelleen.",
|
||||
"Version": "Versio",
|
||||
"View": "Näytä",
|
||||
"Warn": "Varoita",
|
||||
"View": "Näkymä",
|
||||
"Warn": "Varoitus",
|
||||
"Wiki": "Wiki",
|
||||
"Port": "Portti",
|
||||
"Automatic": "Automaattinen",
|
||||
"AutomaticSearch": "Automaattihaku",
|
||||
"Backup": "Varmuuskopio",
|
||||
"BackupFolderHelpText": "Suhteelliset polut kohdistuvat sovelluksen AppData-kansioon.",
|
||||
"BackupIntervalHelpText": "Automaattisen varmuuskopioinnin aikaväli",
|
||||
"BackupRetentionHelpText": "Säilytysjaksoa vanhemmat automaattiset varmuuskopiot poistetaan automaattisesti.",
|
||||
"Backup": "Varmuuskopiointi",
|
||||
"BackupFolderHelpText": "Suhteelliset tiedostosijainnit ovat {appName}in AppData-kansiossa.",
|
||||
"BackupIntervalHelpText": "Tietokannan ja asetusten automaattisen varmuuskopioinnin ajoitus.",
|
||||
"BackupRetentionHelpText": "Säilytysjaksoa vanhemmat varmuuskopiot siivotaan automaattisesti.",
|
||||
"Backups": "Varmuuskopiot",
|
||||
"BeforeUpdate": "Ennen päivitystä",
|
||||
"BindAddress": "Sidososoite",
|
||||
"Branch": "Kehityshaara",
|
||||
"BranchUpdate": "Sovelluksen versiopäivityksiin käytettävä kehityshaara.",
|
||||
"Branch": "Haara",
|
||||
"BranchUpdate": "{appName}in versiopäivityksiin käytettävä kehityshaara.",
|
||||
"BranchUpdateMechanism": "Ulkoisen päivitysratkaisun käyttämä kehityshaara.",
|
||||
"BypassProxyForLocalAddresses": "Ohjaa paikalliset osoitteet välityspalvelimen ohi",
|
||||
"Cancel": "Peruuta",
|
||||
@@ -236,29 +236,29 @@
|
||||
"CertificateValidationHelpText": "Muuta HTTPS-varmennevahvistuksen tarkkuutta. Älä muuta, jollet ymmärrä tähän liittyviä riskejä.",
|
||||
"ChangeHasNotBeenSavedYet": "Muutosta ei ole vielä tallennettu",
|
||||
"Clear": "Tyhjennä",
|
||||
"CloneProfile": "Kloonaa profiili",
|
||||
"CloneProfile": "Monista profiili",
|
||||
"CloseCurrentModal": "Sulje nykyinen ikkuna",
|
||||
"Columns": "Sarakkeet",
|
||||
"Component": "Komponentti",
|
||||
"Connections": "Kytkennät",
|
||||
"ConnectSettings": "Kytkentöjen asetukset",
|
||||
"Connections": "Yhteydet",
|
||||
"ConnectSettings": "Kytkösasetukset",
|
||||
"CouldNotConnectSignalR": "SignalR-kirjastoa ei tavoitettu, eikä käyttöliittymää päivitetä",
|
||||
"Custom": "Mukautettu",
|
||||
"DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{0}\"?",
|
||||
"DeleteApplicationMessageText": "Haluatko varmasti poistaa sovelluksen \"{name}\"?",
|
||||
"DeleteBackup": "Poista varmuuskopio",
|
||||
"DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion '{0}'?",
|
||||
"DeleteBackupMessageText": "Haluatko varmasti poistaa varmuuskopion \"{name}\"?",
|
||||
"DeleteDownloadClient": "Poista lataustyökalu",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Lataustyökalut eivät ole virheiden vuoksi käytettävissä: {0}",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Lataustyökaluja ei ole ongelmien vuoksi käytettävissä: {0}",
|
||||
"EditIndexer": "Muokkaa tietolähdettä",
|
||||
"EnableAutomaticSearch": "Automaattihaku",
|
||||
"EnableInteractiveSearch": "Vuorovaikutteinen haku",
|
||||
"EnableInteractiveSearchHelpText": "Profiilia käytetään vuorovaikutteisen haun yhteydessä.",
|
||||
"EnableAutomaticSearch": "Käytä automaattihakua",
|
||||
"EnableInteractiveSearch": "Käytä manuaalihakua",
|
||||
"EnableInteractiveSearchHelpText": "Profiilia käytetään manuaalihakuun.",
|
||||
"EnableSSL": "SSL-salaus",
|
||||
"EnableSslHelpText": " Käyttöönotto edellyttää uudelleenkäynnistystä järjestelmänvalvojan oikeuksilla.",
|
||||
"EnableSslHelpText": " Käyttöönotto vaatii uudelleenkäynnistyksen järjestelmänvavojan oikeuksilla.",
|
||||
"Error": "Virhe",
|
||||
"ErrorLoadingContents": "Sisällönlatauksen virhe",
|
||||
"ErrorLoadingContents": "Virhe ladattaessa sisältöjä",
|
||||
"Events": "Tapahtumat",
|
||||
"ExistingTag": "Olemassa oleva tunniste",
|
||||
"ExistingTag": "Tunniste on jo olemassa",
|
||||
"Failed": "Epäonnistui",
|
||||
"Filename": "Tiedostonimi",
|
||||
"Files": "Tiedostot",
|
||||
@@ -266,10 +266,10 @@
|
||||
"General": "Yleiset",
|
||||
"GeneralSettings": "Yleiset asetukset",
|
||||
"GeneralSettingsSummary": "Portti, SSL-salaus, käyttäjänimi ja salasana, välityspalvelin, analytiikka ja päivitykset.",
|
||||
"Grabs": "Sieppaukset",
|
||||
"Health": "Kunto",
|
||||
"Grabs": "Kaappaukset",
|
||||
"Health": "Terveys",
|
||||
"Level": "Taso",
|
||||
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia.",
|
||||
"HealthNoIssues": "Kokoonpanossasi ei ole ongelmia",
|
||||
"HomePage": "Verkkosivusto",
|
||||
"Host": "Osoite",
|
||||
"Hostname": "Osoite",
|
||||
@@ -283,7 +283,7 @@
|
||||
"IndexerStatusCheckAllClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi",
|
||||
"IndexerStatusCheckSingleClientMessage": "Tietolähteet eivät ole käytettävissä virheiden vuoksi: {0}",
|
||||
"NoChange": "Ei muutosta",
|
||||
"NoLogFiles": "Ei lokitiedostoja",
|
||||
"NoLogFiles": "Lokitiedostoja ei ole",
|
||||
"SSLCertPasswordHelpText": "PFX-tiedoston salasana",
|
||||
"SSLCertPath": "SSL-varmenteen sijainti",
|
||||
"SSLCertPathHelpText": "PFX-tiedoston sijainti",
|
||||
@@ -292,31 +292,31 @@
|
||||
"NoUpdatesAreAvailable": "Päivityksiä ei ole saatavilla",
|
||||
"OAuthPopupMessage": "Selaimesi estää ponnahdukset",
|
||||
"Ok": "Ok",
|
||||
"OnHealthIssueHelpText": "Kuntoon liittyvä ongelma",
|
||||
"OnHealthIssueHelpText": "Vakausongelmat",
|
||||
"OpenBrowserOnStart": "Avaa selain käynnistettäessä",
|
||||
"OpenThisModal": "Avaa tämä ikkuna",
|
||||
"Options": "Valinnat",
|
||||
"PackageVersion": "Pakettiversio",
|
||||
"Options": "Asetukset",
|
||||
"PackageVersion": "Paketin versio",
|
||||
"PageSize": "Sivun koko",
|
||||
"Password": "Salasana",
|
||||
"PendingChangesDiscardChanges": "Hylkää muutokset ja poistu",
|
||||
"PortNumber": "Portti",
|
||||
"PortNumber": "Portin numero",
|
||||
"RestoreBackup": "Palauta varmuuskopio",
|
||||
"Retention": "Säilytys",
|
||||
"UILanguageHelpText": "Käyttöliittymä näytetään tällä kielellä.",
|
||||
"UILanguageHelpTextWarning": "Käyttöönotto vaatii selaimen sivupäivityksen.",
|
||||
"UILanguageHelpText": "{appName}in käyttöliittymän kieli.",
|
||||
"UILanguageHelpTextWarning": "Selaimen sivupäivitys vaaditaan",
|
||||
"UISettings": "Käyttöliittymän asetukset",
|
||||
"DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävien lataustyökalujen määritykset.",
|
||||
"DownloadClientsSettingsSummary": "{appName}in käyttöliittymästä suoritettavien hakujen yhteydessä käytettävät lataustyökalumääritykset.",
|
||||
"ProwlarrSupportsAnyDownloadClient": "{appName} tukee alla listatuja lataustyökaluja.",
|
||||
"AddDownloadClientToProwlarr": "Lisäämällä lataustyökalun {appName} voi käynnistää lataukset suoraan käyttöliittymästä manuaalisen haun yhteydessä.",
|
||||
"RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja ohjaa sieppaus suoraan sen sijaan, että se välitettäisiin Prowlarin kautta.",
|
||||
"RedirectHelpText": "Uudelleenohjaa tietolähteeltä saapuvat latauspyynnöt ja välitä kaappaus suoraan välittämättä sitä {appName}in välityksellä.",
|
||||
"FullSync": "Täysi synkronointi",
|
||||
"SyncLevelFull": "Täysi synkronointi: Pitää sovelluksen tietolähteet täysin synkronoituna. Tietolähteisiin {appName}issa tehdyt muutokset synkronoidaan etäsovelluksen kanssa ja kaikki etäsovelluksessa tehdyt muutokset korvataan seuraavan synkronoinnin yhteydessä.",
|
||||
"EnableIndexer": "Tietolähteen tila",
|
||||
"FilterPlaceHolder": "Suodata tietolähteitä",
|
||||
"IndexerHealthCheckNoIndexers": "Yhtään tietolähdettä ei ole käytössä, eikä {appName} tämän vuoksi löydä tuloksia.",
|
||||
"IndexerObsoleteCheckMessage": "Tietolähteet ovat vanhentuneita tai niitä on päivitetty: {0}. Poista ja/tai lisää ne Prowlariin uudelleen.",
|
||||
"IndexerProxy": "Tietolähteen välityspalvelin",
|
||||
"IndexerObsoleteCheckMessage": "Tietolähteet ovat poistuneet tai ne ovat muuttuneet: {0}. Poista ja/tai lisää ne {appName}iin uudelleen.",
|
||||
"IndexerProxy": "Tiedonhaun välityspalvelin",
|
||||
"IndexerSettingsSummary": "Määritä useita globaaleita tietolähdeasetuksia, kuten välityspalvelimia.",
|
||||
"IndexerVipCheckExpiringClientMessage": "Tietolähteen VIP-edut erääntyvät pian: {0}",
|
||||
"ProwlarrSupportsAnyIndexer": "{appName} tukee Newznab- ja Torznab-yhteensopivien tietolähteiden ohella myös useita muita lähteitä vaihtoehdoilla \"Yleinen Newznab\" (Usenetille) ja 'Yleinen Torznab' (torrenteille).",
|
||||
@@ -324,15 +324,15 @@
|
||||
"AddIndexerProxy": "Lisää tiedonhaun välityspalvelin",
|
||||
"UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
||||
"SettingsIndexerLoggingHelpText": "Kirjaa tarkempia tietoja tietolähteiden toiminnasta, mukaanlukien vastaukset",
|
||||
"IndexerTagsHelpText": "Tunnisteiden avulla voit määrittää tiedonhaun välityspalvelimet, mihin sovelluksiin tietolähteet synkronoidaan tai yksikertaisesti järjestellä tietolähteitäsi.",
|
||||
"IndexerTagsHelpText": "Tunnisteilla voit kohdistaa tiedonhaun välityspalvelimia ja määrittää mihin sovelluksiin ne synkronoidaan.",
|
||||
"UnableToLoadAppProfiles": "Sovellusprofiilien lataus epäonnistui",
|
||||
"AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/vuorovaikutteinen).",
|
||||
"AppProfileSelectHelpText": "Sovellusprofiilieilla määritetään tietolähteelle sovellussynkronoinnin yhteydessä aktivoitavat hakutavat (RSS/automaatti/manuaali).",
|
||||
"IndexerQuery": "Tietolähteen kysely",
|
||||
"IndexerRss": "Tietolähteen RSS-syöte",
|
||||
"IndexerRss": "Tietolähteen RSS",
|
||||
"SearchIndexers": "Etsi tietolähteistä",
|
||||
"AddRemoveOnly": "Ainoastaan lisää/poista",
|
||||
"IndexerVipCheckExpiredClientMessage": "Tietolähteen VIP-edut ovat erääntyneet: {0}",
|
||||
"MaintenanceRelease": "Huoltojulkaisu: Korjauksia ja muita parannuksia. Lue lisää Githubin historiasta muutoshistoriasta.",
|
||||
"MaintenanceRelease": "Huoltojulkaisu: korjauksia ja muita parannuksia. Lue lisää Githubin muutoshistoriasta.",
|
||||
"Query": "Kysely",
|
||||
"Redirect": "Uudelleenohjaus",
|
||||
"RestartProwlarr": "Käynnistä {appName} uudelleen",
|
||||
@@ -340,7 +340,7 @@
|
||||
"SyncLevelAddRemove": "Vain lisäys/poisto: Kun {appName}in tietolähteitä lisätään tai poistetaan, päivittyy myös etäsovellus.",
|
||||
"SyncAppIndexers": "Synkronoi tietolähteet",
|
||||
"TestAllApps": "Testaa kaikki sovellukset",
|
||||
"UnableToLoadIndexerProxies": "Tietolähdevälityspalvelimien lataus epäonnistui",
|
||||
"UnableToLoadIndexerProxies": "Tiedonhaun välityspalvelimia ei voitu ladata",
|
||||
"AddedToDownloadClient": "Julkaisu lisättiin lataustyökaluun",
|
||||
"AddNewIndexer": "Lisää uusi tietolähde",
|
||||
"AddToDownloadClient": "Lisää julkaisu lataustyökaluun",
|
||||
@@ -352,28 +352,28 @@
|
||||
"SettingsLogRotate": "Lokitiedostojen kierrätys",
|
||||
"SettingsLogSql": "Kirjaa SQL",
|
||||
"SettingsSqlLoggingHelpText": "Kirjaa kaikki {appName}in SQL-kyselyt",
|
||||
"ConnectSettingsSummary": "Ilmoitukset ja omat komentosarjat.",
|
||||
"ConnectSettingsSummary": "Ilmoitukset, kuten viestintä mediapalvelimille ja soittimille, sekä omat komentosarjat.",
|
||||
"DevelopmentSettings": "Kehittäjäasetukset",
|
||||
"Description": "Kuvaus",
|
||||
"Id": "Tunniste",
|
||||
"SettingsConsoleLogLevel": "Valvontalokin taso",
|
||||
"Id": "ID",
|
||||
"SettingsConsoleLogLevel": "Valvontalokin laajuus",
|
||||
"SettingsFilterSentryEvents": "Suodata analytiikan tapahtumia",
|
||||
"SettingsFilterSentryEventsHelpText": "Suodata tunnetut käyttäjävirheet pois analytiikkalähetyksistä",
|
||||
"Applications": "Sovellukset",
|
||||
"AppProfileInUse": "Sovellusprofiili on käytössä",
|
||||
"Apps": "Sovellukset",
|
||||
"Auth": "Todennus",
|
||||
"Category": "Luokitus",
|
||||
"Category": "Kategoria",
|
||||
"ClearHistory": "Tyhjennä historia",
|
||||
"ClearHistoryMessageText": "Haluatko varmasti tyhjentää kaiken {appName}-historian?",
|
||||
"Connect": "Kytkennät",
|
||||
"EnableRssHelpText": "Tietolähde sisällytetään RSS-syötteeseen.",
|
||||
"EnableRssHelpText": "Käytä tietolähteelle RSS-syötettä.",
|
||||
"DeleteApplication": "Poista sovellus",
|
||||
"DeleteAppProfile": "Poista sovellusprofiili",
|
||||
"IndexerProxies": "Tietolähteiden välityspalvelimet",
|
||||
"IndexerProxies": "Tiedonhaun välityspalvelimet",
|
||||
"IndexerAuth": "Tietolähteen todennus",
|
||||
"Notifications": "Kytkennät",
|
||||
"NotificationTriggersHelpText": "Valitse tapahtumat, jotka aiheuttavat ilmoituksen.",
|
||||
"NotificationTriggersHelpText": "Valitse tämän ilmoituksen laukaisevat tapahtumat.",
|
||||
"Stats": "Tilastot",
|
||||
"UnableToLoadDevelopmentSettings": "Kehittäjäasetusten lataus epäonnistui",
|
||||
"AppSettingsSummary": "Sovellukset ja asetukset, joilla määritetään miten {appName} viestii PVR-sovellustesi kanssa.",
|
||||
@@ -386,11 +386,11 @@
|
||||
"QueryOptions": "Kyselyasetukset",
|
||||
"TvSearch": "Etsi televisiosarjoja",
|
||||
"Filters": "Suodattimet",
|
||||
"OnGrab": "Kun elokuva siepataan",
|
||||
"OnHealthIssue": "Kun havaitaan kuntoon liittyvä ongelma",
|
||||
"HistoryCleanupDaysHelpText": "Poista automaattinen tyhjennys käytöstä asettamalla arvoksi '0'.",
|
||||
"OnGrab": "Kun julkaisu kaapataan",
|
||||
"OnHealthIssue": "Vakausongelmat",
|
||||
"HistoryCleanupDaysHelpText": "Arvo \"0\" (nolla) poistaa automaattityhjennyksen käytöstä.",
|
||||
"HistoryCleanupDaysHelpTextWarning": "Tässä määritettyä aikaa vanhemmat tiedostot poistetaan automaattisesti roskakorista pysyvästi.",
|
||||
"TestAllIndexers": "Testaa tietolähteet",
|
||||
"TestAllIndexers": "Tietolähteiden testaus",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa",
|
||||
"Categories": "Kategoriat",
|
||||
"Database": "Tietokanta",
|
||||
@@ -403,14 +403,14 @@
|
||||
"Proxies": "Välityspalvelimet",
|
||||
"Public": "Julkinen",
|
||||
"SemiPrivate": "Osittain yksityinen",
|
||||
"UnableToLoadApplicationList": "Sovelluslistausta ei voitu ladata",
|
||||
"ApplicationsLoadError": "Sovelluslistausta ei voitu ladata",
|
||||
"Url": "URL",
|
||||
"Website": "Verkkosivusto",
|
||||
"IndexerNoDefCheckMessage": "Tietolähteillä ei ole määritystä, eivätkä ne toimi: {0}. Poista ja/tai lisää {appName}iin uudelleen",
|
||||
"Private": "Yksityinen",
|
||||
"QueryResults": "Kyselyn tulokset",
|
||||
"Application": "Sovellus",
|
||||
"GrabReleases": "Sieppaa julkaisu(t)",
|
||||
"GrabReleases": "Kaappaa julkaisu(t)",
|
||||
"Link": "Linkki",
|
||||
"SearchTypes": "Mitä etsitään",
|
||||
"UnableToLoadIndexers": "Tietolähteiden lataus epäonnistui",
|
||||
@@ -434,18 +434,18 @@
|
||||
"AddSyncProfile": "Lisää synkronointiprofiili",
|
||||
"EditSyncProfile": "Muokkaa synkronointiprofiilia",
|
||||
"InstanceName": "Instanssin nimi",
|
||||
"InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa",
|
||||
"ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasu. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä järjestelmän teeman mukaan. Innoittanut Theme.Park.",
|
||||
"InstanceNameHelpText": "Instanssin nimi välilehdellä ja järjestelmälokissa.",
|
||||
"ThemeHelpText": "Vaihda sovelluksen käyttöliittymän ulkoasua. \"Automaattinen\" vaihtaa vaalean ja tumman tilan välillä järjestelmän teeman mukaan. Innoittanut Theme.Park.",
|
||||
"Duration": "Kesto",
|
||||
"ElapsedTime": "Kulunut aika",
|
||||
"EnabledRedirected": "Kulunut, uudelleenohjattu",
|
||||
"Ended": "Päättynyt",
|
||||
"GrabTitle": "Sieppaa nimike",
|
||||
"GrabTitle": "Kaappaa nimike",
|
||||
"LastExecution": "Edellinen suoritus",
|
||||
"LastDuration": "Edellinen kesto",
|
||||
"NextExecution": "Seuraava suoritus",
|
||||
"Parameters": "Parametrit",
|
||||
"Queued": "Jonossa",
|
||||
"Queued": "Lisätty jonoon",
|
||||
"Started": "Alkoi",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi.",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Sovellukset eivät ole käytettävissä yli 6 tuntia kestäneiden virheiden vuoksi: {0}",
|
||||
@@ -453,30 +453,30 @@
|
||||
"DeleteClientCategory": "Poista lataustyökalukategoria",
|
||||
"DownloadClientCategory": "Lataustyökalukategoria",
|
||||
"MappedCategories": "Kartoitetut kategoriat",
|
||||
"AuthenticationRequired": "Todennus vaaditaan",
|
||||
"AuthenticationRequired": "Vaadi tunnistautuminen",
|
||||
"Remove": "Poista",
|
||||
"Replace": "Korvaa",
|
||||
"TheLatestVersionIsAlreadyInstalled": "{appName}in uusin versio on jo asennettu",
|
||||
"ApplicationURL": "Sovelluksen URL-osoite",
|
||||
"ApplicationUrlHelpText": "Sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.",
|
||||
"Track": "Jäljitys",
|
||||
"CountIndexersSelected": "{0} valittua tietolähdettä",
|
||||
"DeleteSelectedDownloadClients": "Poista lataustyökalu",
|
||||
"DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
|
||||
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa tietolähteen '{0}'?",
|
||||
"ApplicationURL": "Sovelluksen URL",
|
||||
"ApplicationUrlHelpText": "Tämän sovelluksen ulkoinen URL-osoite, johon sisältyy http(s)://, portti ja URL-perusta.",
|
||||
"Track": "Valvo",
|
||||
"CountIndexersSelected": "{count} tietolähde(ttä) on valittu",
|
||||
"DeleteSelectedDownloadClients": "Poista lataustyökalu(t)",
|
||||
"DeleteSelectedApplicationsMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) sovellu(sta/ksen)?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "Haluatko varmasti poistaa {count} valit(n/tua) lataustyökalu(n/a)?",
|
||||
"DeleteSelectedIndexersMessageText": "Haluatko varmasti poistaa {count} valit(un/tua) tietoläh(teen/dettä)?",
|
||||
"Publisher": "Julkasija",
|
||||
"SelectIndexers": "Etsi tietolähteistä",
|
||||
"SelectIndexers": "Valitse tietolähteet",
|
||||
"Year": "Vuosi",
|
||||
"Genre": "Tyylilajit",
|
||||
"Genre": "Lajityyppi",
|
||||
"More": "Lisää",
|
||||
"Season": "Kausi",
|
||||
"ApplyTagsHelpTextAdd": "– 'Lisää' syötetyt tunnisteet aiempiin tunnisteisiin",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Tunnistetoimenpiteiden selitykset:",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteisiin kohdistettavat toimenpiteet:",
|
||||
"ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet.",
|
||||
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi.",
|
||||
"DownloadClientPriorityHelpText": "Tietolähteen painotus: 1 (korkein) - 50 (matalin). Oletusarvo on 25. Käytetään muutoin tasaveroisten julkaisujen sieppauspäätökseen. Kaikkia käytössä olevia tietolähteitä käytetään edelleen RSS-synkronointiin ja hakuun.",
|
||||
"ApplyTagsHelpTextAdd": "– \"Lisää\" syötetyt tunnisteet aiempiin tunnisteisiin",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Tunnisteiden käyttäminen valituille sovelluksille",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Tunnisteiden käyttö valituissa tietolähteissä",
|
||||
"ApplyTagsHelpTextRemove": "- \"Poista\" tyhjentää syötetyt tunnisteet",
|
||||
"ApplyTagsHelpTextReplace": "- \"Korvaa\" nykyiset tunnisteet syötetyillä tai tyhjennä kaikki tunnisteet jättämällä tyhjäksi",
|
||||
"DownloadClientPriorityHelpText": "Määritä useiden lataustyökalujen painotus. Tasaveroiset lataajat erotetaan Round-Robin-tekniikalla.",
|
||||
"Album": "Albumi",
|
||||
"Artist": "Esittäjä",
|
||||
"Author": "Kirjailija",
|
||||
@@ -485,24 +485,124 @@
|
||||
"Episode": "Jakso",
|
||||
"Label": "Tunniste",
|
||||
"Theme": "Teema",
|
||||
"ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai sitä voidaan yrittää manuaalisesti painamalla alta \"Lataa uudelleen\".",
|
||||
"DeleteAppProfileMessageText": "Haluatko varmasti poistaa laatuprofiilin '{0}'?",
|
||||
"RecentChanges": "Viimeaikaiset muutokset",
|
||||
"WhatsNew": "Mikä on uutta?",
|
||||
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja käytettävyyden palauttamiseksi se on ladattava uudelleen.",
|
||||
"minutes": "Minuuttia",
|
||||
"ConnectionLostReconnect": "{appName} pyrkii ajoittain muodostamaan yhteyden automaattisesti tai voit painaa alta \"Lataa uudelleen\".",
|
||||
"DeleteAppProfileMessageText": "Haluatko varmasti poistaa sovellusprofiilin \"{name}\"?",
|
||||
"RecentChanges": "Viimeisimmät muutokset",
|
||||
"WhatsNew": "Mitä uutta?",
|
||||
"ConnectionLostToBackend": "{appName} kadotti yhteyden taustajärjestelmään ja se on käynnistettävä uudelleen.",
|
||||
"minutes": "minuuttia",
|
||||
"AddConnection": "Lisää yhteys",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Sovellukset eivät ole käytettävissä virheiden vuoksi",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Sovellukset eivät ole käytettävissä virheiden vuoksi: {0}",
|
||||
"AuthBasic": "Perus (selaimen ponnahdus)",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Kaikki ilmoitukset eivät ole ongelmien vuoksi käytettävissä",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Ilmoitukset eivät ole ongelmien vuoksi käytettävissä: {0}",
|
||||
"AuthBasic": "Perus (ponnahdusikkuna)",
|
||||
"AuthForm": "Lomake (kirjautumissivu)",
|
||||
"DisabledForLocalAddresses": "Ei käytetä paikallisille osoittelle",
|
||||
"DisabledForLocalAddresses": "Ei käytössä paikallisille osoitteille",
|
||||
"None": "Ei mitään",
|
||||
"ResetAPIKeyMessageText": "Haluatko varmasti uudistaa API-avaimesi?",
|
||||
"TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdesieppausten kokonaismäärä",
|
||||
"TotalIndexerSuccessfulGrabs": "Onnistuneiden tietolähdekaappausten kokonaismäärä",
|
||||
"AppUpdated": "{appName} on päivitetty",
|
||||
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on ladattava uudelleen.",
|
||||
"IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu",
|
||||
"AppUpdatedVersion": "{appName} on päivitetty versioon {version} ja muutosten käyttöönottamiseksi se on käynnistettävä uudelleen.",
|
||||
"IndexerDownloadClientHelpText": "Määritä tämän tietolähteen kanssa käytettävä lataustyökalu.",
|
||||
"AuthenticationRequiredWarning": "Etäkäytön estämiseksi ilman tunnistautumista {appName} vaatii nyt todennuksen käyttöönoton. Todennus voidaan poistaa käytöstä paikallisille osoitteille.",
|
||||
"TotalGrabs": "Sieppausten kokonaismäärä"
|
||||
"TotalGrabs": "Kaappausten kokonaismäärä",
|
||||
"AddDownloadClientImplementation": "Lisäätään lataustyökalua - {implementationName}",
|
||||
"AddIndexerImplementation": "Lisätään tietolähdettä - {implementationName}",
|
||||
"OnGrabHelpText": "Kun julkaisu kaapataan",
|
||||
"ManageDownloadClients": "Hallitse lataustyökaluja",
|
||||
"NoDownloadClientsFound": "Lataustyökaluja ei löytynyt",
|
||||
"CountDownloadClientsSelected": "{count} lataustyökalu(a) on valittu",
|
||||
"EditSelectedDownloadClients": "Muokkaa valittuja lataustyökaluja",
|
||||
"IndexerDownloadClientHealthCheckMessage": "Tietolähteet virheellisillä lataustyökaluilla: {0}.",
|
||||
"AddIndexerProxyImplementation": "Lisää tiedonhaun välityspalvelin - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Muokkaa tiedonhaun välityspalvelinta - {implementationName}",
|
||||
"EditDownloadClientImplementation": "Muokataan lataustyökalua - {implementationName}",
|
||||
"AddCustomFilter": "Lisää oma suodatin",
|
||||
"ApplyChanges": "Toteuta muutokset",
|
||||
"EditSelectedIndexers": "Muokkaa valittuja sisältölähteitä",
|
||||
"NoHistoryFound": "Historiaa ei löytynyt",
|
||||
"NoIndexersFound": "Tietolähteitä ei löytynyt",
|
||||
"StopSelecting": "Lopeta valitseminen",
|
||||
"EditConnectionImplementation": "Muokataan kytköstä - {implementationName}",
|
||||
"AddConnectionImplementation": "Lisätään kytköstä - {implementationName}",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Sisällön rakenne",
|
||||
"EditIndexerImplementation": "Muokataan tietolähdettä - {implementationName}",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Syötä uusi käyttäjätunnus",
|
||||
"DefaultNameCopiedProfile": "{name} - Kopioi",
|
||||
"AppsMinimumSeedersHelpText": "Sovellusten edellyttämä tietolähteestä kaapattavien kohteiden jakajien (seed) vähimmäismäärä. Jos tyhjä, käytetään synkronointiprofiilin oletusta.",
|
||||
"TotalHostGrabs": "Isännän kaappausten kokonaismäärä",
|
||||
"IncludeManualGrabsHelpText": "Sisällytä {appName}in käyttöliittymästä tehdyt manuaalikaappaukset.",
|
||||
"AuthenticationRequiredHelpText": "Valitse mitkä pyynnöt vaativat tunnistautumisen. Älä muuta, jos et ymmärrä riskejä.",
|
||||
"TotalUserAgentGrabs": "Käyttäjäagentin kaappausten kokonaismäärä",
|
||||
"AuthenticationMethodHelpTextWarning": "Valitse sopiva tunnistautumistapa",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Syötä uusi salasana",
|
||||
"AuthenticationMethod": "Tunnistautumistapa",
|
||||
"Clone": "Monista",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Vahvista uusi salasana",
|
||||
"EditApplicationImplementation": "Muokataan sovellusta - {implementationName}",
|
||||
"AddApplicationImplementation": "Lisätään sovellusta - {implementationName}",
|
||||
"InvalidUILanguage": "Käytöliittymän kielivalinta on virheellinen. Korjaa se ja tallenna asetukset.",
|
||||
"SeedRatio": "Jakosuhde",
|
||||
"SeedTime": "Jakoaika",
|
||||
"days": "päivää",
|
||||
"HistoryDetails": "Historiatiedot",
|
||||
"IndexerDisabled": "Tietolähde ei ole käytössä",
|
||||
"AdvancedSettingsShownClickToHide": "Lisäasetukset näytetään, piilota painamalla tästä",
|
||||
"AdvancedSettingsHiddenClickToShow": "Lisäasetukset on piilotettu, näytä painamalla tästä",
|
||||
"AppsMinimumSeeders": "Sovellusten vähimmäisjakajat",
|
||||
"BasicSearch": "Perushaku",
|
||||
"CountApplicationsSelected": "{count} sovellus(ta) on valittu",
|
||||
"DeleteSelectedApplications": "Poista valitut sovellukset",
|
||||
"DeleteSelectedIndexer": "Poista valittu tietolähde",
|
||||
"DeleteSelectedIndexers": "Poista valitut tietolähteet",
|
||||
"Implementation": "Toteutus",
|
||||
"IndexerCategories": "Tietolähdekategoriat",
|
||||
"IndexerStatus": "Tietolähteen tila",
|
||||
"ManageApplications": "Hallitse sovelluksia",
|
||||
"NewznabUrl": "Newznab URL",
|
||||
"PackSeedTime": "Koosteen jakoaika",
|
||||
"PackSeedTimeHelpText": "Aika, joka koostepaketin (kuten sarjan tuotantokauden tai esittäjän diskografian) sisältävää torrentia tulee jakaa. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"QueryType": "Kyselyn tyyppi",
|
||||
"SearchAllIndexers": "Etsi kaikista tietolähteistä",
|
||||
"SeedRatioHelpText": "Jakosuhde, joka torrentin tulee saavuttaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"TorznabUrl": "Torznab URL",
|
||||
"ApiKeyValidationHealthCheckMessage": "Muuta API-avaimesi ainakin {0} merkin pituiseksi. Voit tehdä tämän asetuksista tai muokkaamalla asetustiedostoa.",
|
||||
"OnHealthRestored": "Terveystilan vakautuessa",
|
||||
"OnHealthRestoredHelpText": "Terveystilan vakautuessa",
|
||||
"TotalHostQueries": "Isännän kyselyiden kokonaismäärä",
|
||||
"TotalIndexerQueries": "Tietolähteen kyselyiden kokonaismäärä",
|
||||
"GoToApplication": "Siirry sovellukseen",
|
||||
"AreYouSureYouWantToDeleteIndexer": "Haluatko varmasti poistaa tietolähteen \"{name}\" sovelluksesta {appName}?",
|
||||
"AuthQueries": "Todennuskyselyt",
|
||||
"ApplicationTagsHelpText": "Sovellukseen synkronoidaan joko tunnisteettomat tietolähteet tai vastaavilla tunnisteilla merkityt tietolähteet.",
|
||||
"ApplicationTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkittyyn sovellukseen synkronoidaan vain samalla tunnisteella merkityt tietolähteet.",
|
||||
"AverageResponseTimesMs": "Tietolähteiden keskimääräiset vasteajat (ms)",
|
||||
"CountIndexersAvailable": "{count} tietolähde(ttä) on käytettävissä",
|
||||
"FoundCountReleases": "Löytyi {itemCount} julkaisua",
|
||||
"IndexerTagsHelpTextWarning": "Tunnisteita tulee käyttää harkiten, koska niillä voi olla odottamattomia vaikutuksia. Tunnisteella merkitty tietolähde synkronoidaan vain samalla tunnisteella merkittyyn sovellukseen.",
|
||||
"LastFailure": "Edellinen virhe",
|
||||
"SelectedCountOfCountReleases": "Valittu {selectedCount}/{itemCount} julkaisua",
|
||||
"TotalQueries": "Kyselyiden kokonaismäärä",
|
||||
"RssFeed": "RSS-syöte",
|
||||
"VipExpiration": "VIP-erääntyy",
|
||||
"DisabledUntil": "Poistettu käytöstä kunnes",
|
||||
"AddApplication": "Lisää sovellus",
|
||||
"AddCategory": "Lisää kategoria",
|
||||
"EditCategory": "Muokkaa kategoriaa",
|
||||
"IndexerId": "Tietolähteen ID",
|
||||
"ActiveIndexers": "Aktiiviset tietolähteet",
|
||||
"NoIndexerCategories": "Tietolähteelle ei löytynyt kategorioita",
|
||||
"ActiveApps": "Aktiiviset sovellukset",
|
||||
"NoIndexerHistory": "Tietolähteelle ei löytynyt historiaa",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Määrittää käytetäänkö qBittorrentista määritettyä rakennetta, torrentin alkuperäistä rakennetta vai luodaanko uusi alikansio (qBittorrent 4.3.2+).",
|
||||
"External": "Ulkoinen",
|
||||
"IndexerFailureRate": "Tietolähteen virhetaajuus",
|
||||
"IndexerHistoryLoadError": "Virhe ladattaessa tietolähteen historiaa",
|
||||
"InitialFailure": "Alkuperäinen virhe",
|
||||
"PasswordConfirmation": "Salasanan vahvistus",
|
||||
"RepeatSearch": "Toista haku",
|
||||
"SearchCountIndexers": "Etsi {count} tietolähteestä",
|
||||
"SearchQueries": "Hakukyselyt",
|
||||
"SeedTimeHelpText": "Aika, joka torrentia tulee jakaa ennen sen pysäytystä. Käytä sovelluksen oletusta jättämällä tyhjäksi.",
|
||||
"RssQueries": "RSS-kyselyt",
|
||||
"TotalUserAgentQueries": "Käyttäjäagentin kyselyiden kokonaismäärä"
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"Events": "Événements",
|
||||
"Edit": "Modifier",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Aucun client de téléchargement n'est disponible en raison d'échecs",
|
||||
"DownloadClients": "Clients de téléchargement",
|
||||
"DownloadClients": "Clients de télécharg.",
|
||||
"Dates": "Dates",
|
||||
"Date": "Date",
|
||||
"Delete": "Supprimer",
|
||||
@@ -28,14 +28,14 @@
|
||||
"About": "À propos",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexeurs indisponibles en raison d'échecs : {0}",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Clients de Téléchargement indisponibles en raison d'échecs : {0}",
|
||||
"SetTags": "Définir des balises",
|
||||
"SetTags": "Définir des étiquettes",
|
||||
"ReleaseStatus": "Statut de la version",
|
||||
"UpdateCheckUINotWritableMessage": "Impossible d'installer la mise à jour car le dossier d'interface utilisateur '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' se trouve dans un dossier App Translocation.",
|
||||
"UpdateCheckStartupNotWritableMessage": "Impossible d'installer la mise à jour car le dossier de démarrage '{0}' n'est pas accessible en écriture par l'utilisateur '{1}'.",
|
||||
"UnselectAll": "Tout désélectionner",
|
||||
"UISettingsSummary": "Date, langue, et perceptions des couleurs",
|
||||
"TagsSettingsSummary": "Voir toutes les balises et comment elles sont utilisées. Les balises inutilisées peuvent être supprimées",
|
||||
"TagsSettingsSummary": "Voir toutes les étiquettes et comment elles sont utilisées. Les étiquettes inutilisées peuvent être supprimées",
|
||||
"Style": "Style",
|
||||
"Status": "État",
|
||||
"Sort": "Trier",
|
||||
@@ -107,7 +107,7 @@
|
||||
"Reload": "Recharger",
|
||||
"Peers": "Peers",
|
||||
"PageSize": "Pagination",
|
||||
"Ok": "Ok",
|
||||
"Ok": "OK",
|
||||
"OAuthPopupMessage": "Les pop-ups sont bloquées par votre navigateur",
|
||||
"Name": "Nom",
|
||||
"Message": "Message",
|
||||
@@ -158,11 +158,11 @@
|
||||
"Enable": "Activer",
|
||||
"DownloadClientSettings": "Télécharger les paramètres client",
|
||||
"Docker": "Docker",
|
||||
"DeleteTag": "Supprimer le tag",
|
||||
"DeleteTag": "Supprimer l'étiquette",
|
||||
"DeleteNotification": "Supprimer la notification",
|
||||
"DeleteDownloadClient": "Supprimer le client de téléchargement",
|
||||
"DeleteBackup": "Supprimer la sauvegarde",
|
||||
"DBMigration": "Migration de la base de données",
|
||||
"DatabaseMigration": "Migration de la base de données",
|
||||
"ConnectSettings": "Paramètres de connexion",
|
||||
"BackupFolderHelpText": "Les chemins correspondants seront sous le répertoire AppData de {appName}",
|
||||
"IllRestartLater": "Je redémarrerai plus tard",
|
||||
@@ -213,7 +213,7 @@
|
||||
"UnableToLoadTags": "Impossible de charger les étiquettes",
|
||||
"UnableToLoadHistory": "Impossible de charger l'historique",
|
||||
"UnableToLoadGeneralSettings": "Impossible de charger les paramètres généraux",
|
||||
"UnableToLoadDownloadClients": "Impossible de charger les clients de téléchargement",
|
||||
"DownloadClientsLoadError": "Impossible de charger les clients de téléchargement",
|
||||
"UnableToLoadBackups": "Impossible de charger les sauvegardes",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Impossible d'ajouter une nouvelle notification, veuillez réessayer.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Impossible d'ajouter un nouvel indexeur, veuillez réessayer.",
|
||||
@@ -282,7 +282,7 @@
|
||||
"CloseCurrentModal": "Fermer cette fenêtre modale",
|
||||
"AddingTag": "Ajout d'une étiquette",
|
||||
"OnHealthIssueHelpText": "Sur un problème de santé",
|
||||
"AcceptConfirmationModal": "Accepter les modalités d'utilisations",
|
||||
"AcceptConfirmationModal": "Accepter les modalités d'utilisation",
|
||||
"OpenThisModal": "Ouvrir cette fenêtre modale",
|
||||
"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",
|
||||
@@ -400,7 +400,7 @@
|
||||
"SearchType": "Type de recherche",
|
||||
"Categories": "Catégories",
|
||||
"MassEditor": "Éditer en masse",
|
||||
"UnableToLoadApplicationList": "Impossible de charger la liste des applications",
|
||||
"ApplicationsLoadError": "Impossible de charger la liste des applications",
|
||||
"Website": "Site internet",
|
||||
"AudioSearch": "Recherche de musique",
|
||||
"BookSearch": "Recherche de livres",
|
||||
@@ -482,7 +482,7 @@
|
||||
"Author": "Auteur",
|
||||
"AverageResponseTimesMs": "Temps de réponse moyen des indexeurs (ms)",
|
||||
"IndexerFailureRate": "Taux d'échec de l'indexeur",
|
||||
"Label": "Label",
|
||||
"Label": "Libellé",
|
||||
"More": "Plus",
|
||||
"Publisher": "Éditeur",
|
||||
"Season": "Saison",
|
||||
@@ -595,11 +595,13 @@
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Saisir un nouveau nom d'utilisateur",
|
||||
"Clone": "Cloner",
|
||||
"PackSeedTime": "Temps de Seed",
|
||||
"ApplicationTagsHelpText": "Synchroniser les indexeurs avec cette application qui n'ont aucune balise ou qui ont une ou plusieurs balises correspondantes",
|
||||
"ApplicationTagsHelpText": "Synchroniser les indexeurs avec cette application qui n'ont aucune étiquette ou qui ont une ou plusieurs étiquettes correspondantes",
|
||||
"OnHealthRestored": "Sur la santé restaurée",
|
||||
"OnHealthRestoredHelpText": "Sur la santé restaurée",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmer le nouveau mot de passe",
|
||||
"PasswordConfirmation": "Confirmation du mot de passe",
|
||||
"NoIndexerCategories": "Aucune catégorie disponible pour cet indexeur",
|
||||
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres"
|
||||
"InvalidUILanguage": "Votre interface utilisateur est définie sur une langue non valide, corrigez-la et enregistrez vos paramètres",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Disposition du contenu",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Utiliser la disposition du contenu configurée par qBittorrent, la disposition originale du torrent ou toujours créer un sous-dossier (qBittorrent 4.3.2+)"
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
"SettingsEnableColorImpairedModeHelpText": "סגנון שונה כדי לאפשר למשתמשים לקויי צבע להבחין טוב יותר במידע המקודד בצבע",
|
||||
"SettingsLongDateFormat": "פורמט תאריך ארוך",
|
||||
"SettingsShortDateFormat": "פורמט תאריך קצר",
|
||||
"UnableToLoadDownloadClients": "לא ניתן לטעון לקוחות הורדות",
|
||||
"DownloadClientsLoadError": "לא ניתן לטעון לקוחות הורדות",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "לא ניתן להוסיף התראה חדשה, נסה שוב.",
|
||||
"UnableToLoadGeneralSettings": "לא ניתן לטעון את ההגדרות הכלליות",
|
||||
"About": "אודות",
|
||||
@@ -272,7 +272,7 @@
|
||||
"CloneProfile": "פרופיל שיבוט",
|
||||
"Close": "סגור",
|
||||
"CloseCurrentModal": "סגור את המודול הנוכחי",
|
||||
"DBMigration": "הגירת DB",
|
||||
"DatabaseMigration": "הגירת DB",
|
||||
"Delete": "לִמְחוֹק",
|
||||
"DeleteNotification": "מחק הודעה",
|
||||
"DeleteNotificationMessageText": "האם אתה בטוח שברצונך למחוק את ההודעה '{0}'?",
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
"New": "नया",
|
||||
"CustomFilters": "कस्टम फ़िल्टर",
|
||||
"Dates": "खजूर",
|
||||
"DBMigration": "DB प्रवासन",
|
||||
"DatabaseMigration": "DB प्रवासन",
|
||||
"DeleteApplicationMessageText": "क्या आप वाकई '{0}' की सूचना हटाना चाहते हैं?",
|
||||
"DeleteBackup": "बैकअप हटाएं",
|
||||
"DeleteBackupMessageText": "क्या आप वाकई '{0}' बैकअप हटाना चाहते हैं?",
|
||||
@@ -294,7 +294,7 @@
|
||||
"RestartNow": "अब पुनःचालू करें",
|
||||
"SettingsEnableColorImpairedMode": "रंग-बिगड़ा मोड सक्षम करें",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "नई अधिसूचना जोड़ने में असमर्थ, कृपया पुनः प्रयास करें।",
|
||||
"UnableToLoadDownloadClients": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
|
||||
"DownloadClientsLoadError": "डाउनलोड क्लाइंट लोड करने में असमर्थ",
|
||||
"UnableToLoadGeneralSettings": "सामान्य सेटिंग्स लोड करने में असमर्थ",
|
||||
"UnableToLoadNotifications": "सूचनाएं लोड करने में असमर्थ",
|
||||
"UpdateCheckStartupNotWritableMessage": "अपडेट स्थापित नहीं किया जा सकता क्योंकि स्टार्टअप फ़ोल्डर '{0}' उपयोगकर्ता '{1}' द्वारा लिखने योग्य नहीं है।",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"About": "Névjegy",
|
||||
"Analytics": "Analitika",
|
||||
"AddIndexer": "Indexer hozzáadása",
|
||||
"AddIndexer": "Indexelő hozzáadása",
|
||||
"AddingTag": "Címke hozzáadása",
|
||||
"Error": "Hiba",
|
||||
"DeleteTag": "Címke Törlése",
|
||||
@@ -9,88 +9,88 @@
|
||||
"EnableAutomaticSearch": "Engedélyezd az Automatikus Keresést",
|
||||
"Enable": "Aktiválás",
|
||||
"EditIndexer": "Indexer Szerkesztése",
|
||||
"Edit": "Szerkesztés",
|
||||
"Edit": "Szerkeszt",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Letöltőkliens hiba miatt nem elérhető: {0}",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Az összes letöltőkliens elérhetetlen, hiba miatt",
|
||||
"DownloadClientsSettingsSummary": "Letöltőkliens konfigurációja a {appName} felhasználói felület keresésbe történő integráláshoz",
|
||||
"DownloadClientSettings": "Letöltőkliens Beállítások",
|
||||
"DownloadClients": "Letöltőkliensek",
|
||||
"DownloadClient": "Letöltési Kliens",
|
||||
"DownloadClients": "Letöltő kliensek",
|
||||
"DownloadClient": "Letöltési kliens",
|
||||
"Docker": "Docker",
|
||||
"Disabled": "Letiltott",
|
||||
"Details": "Részletek",
|
||||
"Disabled": "Tiltva",
|
||||
"Details": "részletek",
|
||||
"DeleteTagMessageText": "Biztosan törlöd a(z) „{0}” címkét?",
|
||||
"DeleteNotificationMessageText": "Biztosan törlöd a(z) „{0}” értesítést?",
|
||||
"DeleteNotification": "Értesítés Törlése",
|
||||
"DeleteDownloadClientMessageText": "Biztosan törlöd a(z) „{0}” letöltő klienst?",
|
||||
"DeleteDownloadClient": "Letöltőkliens Törlése",
|
||||
"DeleteBackupMessageText": "Biztosan törlöd a(z) „{0}” biztonsági mentést?",
|
||||
"DeleteBackup": "Biztonsági Mentés Törlése",
|
||||
"DeleteDownloadClient": "Letöltőkliens törlése",
|
||||
"DeleteBackupMessageText": "Biztosan törli a '{name}' biztonsági mentést?",
|
||||
"DeleteBackup": "Biztonsági Mentés törlése",
|
||||
"Delete": "Törlés",
|
||||
"DBMigration": "DB Migráció",
|
||||
"DatabaseMigration": "DB Migráció",
|
||||
"Dates": "Dátumok",
|
||||
"Date": "Dátum",
|
||||
"CustomFilters": "Egyéni Szűrők",
|
||||
"ConnectSettingsSummary": "Értesítések és egyéni szkriptek",
|
||||
"ConnectSettings": "Kapcsolódási Beállítások",
|
||||
"ConnectSettings": "Csatlakozási beállítások",
|
||||
"Connections": "Kapcsolatok",
|
||||
"ConnectionLost": "Kapcsolódás Elveszett",
|
||||
"ConnectionLost": "A kapcsolat megszakadt",
|
||||
"Connect": "Értesítések",
|
||||
"Component": "Komponens",
|
||||
"Component": "Összetevő",
|
||||
"Columns": "Oszlopok",
|
||||
"CloseCurrentModal": "Aktuális Mód Bezárása",
|
||||
"Close": "Bezárás",
|
||||
"CloneProfile": "Profil Klónozása",
|
||||
"ClientPriority": "Kliens Prioritás",
|
||||
"CloneProfile": "Profil klónozása",
|
||||
"ClientPriority": "Kliens prioritás",
|
||||
"Clear": "Törölni",
|
||||
"ChangeHasNotBeenSavedYet": "A változások még nem lettek elmentve",
|
||||
"CertificateValidationHelpText": "Módosítsa a HTTPS tanúsítás szigorúságát",
|
||||
"CertificateValidation": "Tanúsítvány érvényesítése",
|
||||
"CancelPendingTask": "Biztosan törlöd ezt a függőben lévő feladatot?",
|
||||
"CancelPendingTask": "Biztosan törölni szeretné ezt a függőben lévő feladatot?",
|
||||
"Cancel": "Mégse",
|
||||
"BypassProxyForLocalAddresses": "Proxy megkerülése a helyi hálózatos címekhez",
|
||||
"BranchUpdateMechanism": "A külső frissítési mechanizmus által használt ágazat",
|
||||
"BranchUpdateMechanism": "Külső frissítési mechanizmus által használt ág",
|
||||
"BranchUpdate": "Ágazattípus a {appName} frissítéseihez",
|
||||
"Branch": "Ágazat",
|
||||
"BindAddressHelpText": "Érvényes IP-cím, localhost vagy '*' minden interfészhez",
|
||||
"BindAddress": "Kapcsolási Cím",
|
||||
"BeforeUpdate": "Alkalmazásfrissítés előtt",
|
||||
"BindAddress": "Kötési cím",
|
||||
"BeforeUpdate": "Frissítés előtt",
|
||||
"Backups": "Biztonsági mentések",
|
||||
"BackupRetentionHelpText": "A megőrzési időnél régebbi automatikus biztonsági másolatok automatikusan törlésre kerülnek",
|
||||
"BackupNow": "Biztonsági Mentés Most",
|
||||
"BackupIntervalHelpText": "Időeltérés a biztonsági mentések között",
|
||||
"BackupRetentionHelpText": "A megőrzési időszaknál régebbi automatikus biztonsági másolatok automatikusan törlődnek",
|
||||
"BackupNow": "Biztonsági Mentés",
|
||||
"BackupIntervalHelpText": "Az automatikus biztonsági mentések közötti időköz",
|
||||
"BackupFolderHelpText": "Az elérési útvonalak a {appName} AppData könyvtárában lesznek",
|
||||
"Backup": "Biztonsági Mentés",
|
||||
"Backup": "Biztonsági mentés",
|
||||
"AutomaticSearch": "Automatikus keresés",
|
||||
"Automatic": "Automatikus",
|
||||
"AnalyticsEnabledHelpText": "Küldjön névtelen használati és hibainformációkat a {appName} szervereire. Ez magában foglalja a böngészőjéről szóló információkat, mely {appName} WebUI oldalakat használja, a hibajelentést, valamint az operációs rendszer adatait. Ezeket az információkat a funkciók és a hibajavítások rangsorolására használjuk fel.",
|
||||
"AuthenticationMethodHelpText": "Felhasználónév és Jelszó szükséges a {appName}-hoz való hozzáféréshez",
|
||||
"AnalyticsEnabledHelpText": "Névtelen használati és hibainformáció küldése {appName} szervereinek. Ez magában foglalja a böngészővel kapcsolatos információkat, a használt {appName} WebUI oldalakat, a hibajelentéseket, valamint az operációs rendszert és a futásidejű verziót. Ezeket az információkat a funkciók és a hibajavítások fontossági sorrendjének meghatározására fogjuk használni.",
|
||||
"AuthenticationMethodHelpText": "Felhasználónév és jelszó szükséges a(z) {appName} eléréséhez",
|
||||
"Authentication": "Hitelesítés",
|
||||
"ApplyTags": "Címkék alkalmazása",
|
||||
"Age": "Kor",
|
||||
"ApiKey": "API Kulcs",
|
||||
"All": "Összes",
|
||||
"AcceptConfirmationModal": "Változás Megerősítése",
|
||||
"Apply": "Alkalmazás",
|
||||
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges anélkül hogy az AppData ne törlődjön",
|
||||
"AppDataDirectory": "AppData Mappa",
|
||||
"Apply": "Alkamaz",
|
||||
"AppDataLocationHealthCheckMessage": "A frissítés nem lehetséges az alkalmazás adatok törlése nélkül",
|
||||
"AppDataDirectory": "AppData Könyvtár",
|
||||
"Added": "Hozzáadva",
|
||||
"Actions": "Teendők",
|
||||
"History": "Történet",
|
||||
"History": "Előzmény",
|
||||
"HideAdvanced": "Haladó Elrejtése",
|
||||
"HealthNoIssues": "Nincs hiba a konfigurációval",
|
||||
"Health": "Állapot",
|
||||
"Health": "Egészség",
|
||||
"GeneralSettingsSummary": "Port, SSL, felhasználónév / jelszó, proxy, elemzések, és frissítések",
|
||||
"ForMoreInformationOnTheIndividualDownloadClients": "Ha többet szeretnél megtudni a különböző letöltési kliensekről, kattints az információs gombokra.",
|
||||
"Folder": "Mappa",
|
||||
"FocusSearchBox": "Fókusz Keresőmező",
|
||||
"Fixed": "Kijavítva",
|
||||
"Fixed": "Rögzített",
|
||||
"FilterPlaceHolder": "Filmek Keresése",
|
||||
"Filter": "Szűrő",
|
||||
"Files": "Fájl",
|
||||
"Filename": "Fájlnév",
|
||||
"Failed": "Sikertelen",
|
||||
"ExistingTag": "Meglévő Címke",
|
||||
"Files": "Fájlok",
|
||||
"Filename": "Fájl név",
|
||||
"Failed": "Nem sikerült",
|
||||
"ExistingTag": "Létező címke",
|
||||
"Exception": "Kivétel",
|
||||
"EventType": "Események Típusa",
|
||||
"Events": "Események",
|
||||
@@ -136,13 +136,13 @@
|
||||
"Save": "Mentés",
|
||||
"RSSIsNotSupportedWithThisIndexer": "Az RSS nem támogatott ezzel az indexerrel",
|
||||
"Retention": "Visszatartás",
|
||||
"Result": "Eredmények",
|
||||
"Result": "Eredmény",
|
||||
"RestoreBackup": "Biztonsági mentés visszaállítása",
|
||||
"Restore": "Visszaállítás",
|
||||
"Restore": "Visszaállít",
|
||||
"RestartRequiredHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"RestartProwlarr": "{appName} Újraindítása",
|
||||
"RestartNow": "Újraindítás Most",
|
||||
"Restart": "Újraindítás",
|
||||
"Restart": "Újrakezd",
|
||||
"ResetAPIKey": "API Kulcs visszaállítása",
|
||||
"Reset": "Visszaállítás",
|
||||
"RemovingTag": "Címke eltávolítása",
|
||||
@@ -177,53 +177,53 @@
|
||||
"PageSizeHelpText": "Az egyes oldalakon megjelenítendő elemek száma",
|
||||
"PageSize": "Oldal mérete",
|
||||
"PackageVersion": "Csomagverzió",
|
||||
"Options": "Opciók",
|
||||
"Options": "Lehetőségek",
|
||||
"OpenThisModal": "Nyissa meg ezt a modált",
|
||||
"OpenBrowserOnStart": "Indításkor nyissa meg a böngészőt",
|
||||
"OnHealthIssueHelpText": "Állapotprobléma",
|
||||
"Ok": "Ok",
|
||||
"OAuthPopupMessage": "A böngésződ blokkolja az előugró ablakokat",
|
||||
"NoUpdatesAreAvailable": "Nincsenek elérhető frissítések",
|
||||
"NoTagsHaveBeenAddedYet": "Még nem adtál hozzá címkéket",
|
||||
"NoLogFiles": "Nincsen log fájl",
|
||||
"NoLeaveIt": "Nem, hagyd így",
|
||||
"NoChanges": "Nincsenek változások",
|
||||
"NoChange": "Nincs változtatás",
|
||||
"NoBackupsAreAvailable": "Nincs elérhető biztonsági mentés",
|
||||
"NoUpdatesAreAvailable": "Nem érhetők el frissítések",
|
||||
"NoTagsHaveBeenAddedYet": "Még nem adtak hozzá címkéket",
|
||||
"NoLogFiles": "Nincsenek naplófájlok",
|
||||
"NoLeaveIt": "Nem, Hagyd",
|
||||
"NoChanges": "Nincs változás",
|
||||
"NoChange": "Nincs változás",
|
||||
"NoBackupsAreAvailable": "Nincsenek biztonsági mentések",
|
||||
"New": "Új",
|
||||
"NetCore": ".NET",
|
||||
"Name": "Név",
|
||||
"MovieIndexScrollTop": "Film Index: Görgess fel",
|
||||
"MovieIndexScrollBottom": "Film Index: Görgess le",
|
||||
"MoreInfo": "Több Információ",
|
||||
"MoreInfo": "Több információ",
|
||||
"Mode": "Mód",
|
||||
"MIA": "MIA",
|
||||
"Message": "Üzenet",
|
||||
"Mechanism": "Mechanizmus",
|
||||
"Manual": "Manuális",
|
||||
"MaintenanceRelease": "Karbantartási frissítés: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
|
||||
"Logs": "Logok",
|
||||
"LogLevelTraceHelpTextWarning": "A nyomkövetést csak ideiglenesen szabad engedélyezni",
|
||||
"LogLevel": "Log Szint",
|
||||
"Mechanism": "Gépezet",
|
||||
"Manual": "Kézi",
|
||||
"MaintenanceRelease": "Karbantartási kiadás: hibajavítások és egyéb fejlesztések. További részletekért lásd: Github Commit History",
|
||||
"Logs": "Naplók",
|
||||
"LogLevelTraceHelpTextWarning": "A nyomkövetési naplózást csak ideiglenesen szabad engedélyezni",
|
||||
"LogLevel": "Napló szint",
|
||||
"Logging": "Loggolás",
|
||||
"LogFiles": "Log Fájlok",
|
||||
"LogFiles": "Naplófájlok",
|
||||
"Level": "Szint",
|
||||
"LaunchBrowserHelpText": " Nyisson meg egy böngészőt, és az alkalmazás indításakor lépjen a {appName} kezdőlapjára.",
|
||||
"LastWriteTime": "Utolsó írási idő",
|
||||
"Language": "Nyelv",
|
||||
"KeyboardShortcuts": "Gyorsbillentyűk",
|
||||
"KeyboardShortcuts": "Gyorsbillentyűket",
|
||||
"Interval": "Intervallum",
|
||||
"InteractiveSearch": "Interaktív Keresés",
|
||||
"Info": "Infó",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexerek elérhetetlenek a következő hiba miatt: {0}",
|
||||
"Hostname": "Hosztnév",
|
||||
"Host": "Hoszt",
|
||||
"Grabbed": "Megfogva",
|
||||
"Grabbed": "Megragadta",
|
||||
"GeneralSettings": "Általános Beállítások",
|
||||
"General": "Általános",
|
||||
"UnableToLoadHistory": "Nem sikerült betölteni az előzményeket",
|
||||
"UnableToLoadGeneralSettings": "Nem sikerült betölteni az általános beállításokat",
|
||||
"UnableToLoadDownloadClients": "Nem sikerült betölteni a letöltőkliens(eke)t",
|
||||
"DownloadClientsLoadError": "Nem sikerült betölteni a letöltőkliens(eke)t",
|
||||
"UnableToLoadBackups": "Biztonsági mentés(ek) betöltése sikertelen",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Nem lehet új értesítést hozzáadni, próbálkozz újra.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Nem lehet új indexert hozzáadni, próbálkozz újra.",
|
||||
@@ -239,13 +239,13 @@
|
||||
"Title": "Cím",
|
||||
"Time": "Idő",
|
||||
"TestAllClients": "Összes kliens tesztelése",
|
||||
"TestAll": "Összes tesztelése",
|
||||
"TestAll": "Összes Tesztelése",
|
||||
"Test": "Teszt",
|
||||
"Tasks": "Feladatok",
|
||||
"TagsSettingsSummary": "Tekintse meg az összes címkét és azok használatát. A használatlan címkék eltávolíthatók",
|
||||
"TagsHelpText": "Legalább egy megfelelő címkével rendelkező filmekre vonatkozik",
|
||||
"Tags": "Címkék",
|
||||
"TagIsNotUsedAndCanBeDeleted": "A címkét nincs használatban, és törölhető",
|
||||
"TagIsNotUsedAndCanBeDeleted": "A címke nincs használatban, törölhető",
|
||||
"TagCannotBeDeletedWhileInUse": "Használat közben nem törölhető",
|
||||
"TableOptionsColumnsMessage": "Válasszd ki, mely oszlopok legyenek láthatóak, és milyen sorrendben jelenjenek meg",
|
||||
"SystemTimeCheckMessage": "A rendszeridő több mint 1 napja nem frissült. Előfordulhat, hogy az ütemezett feladatok az idő kijavításáig nem futnak megfelelően",
|
||||
@@ -257,9 +257,9 @@
|
||||
"Indexer": "Indexelő",
|
||||
"IncludeHealthWarningsHelpText": "Tartalmazza a Állapot Figyelmeztetéseket",
|
||||
"IllRestartLater": "Később Újraindítom",
|
||||
"IgnoredAddresses": "Ignorált Címek",
|
||||
"YesCancel": "Igen, Mégsem",
|
||||
"Warn": "Figyelmeztet",
|
||||
"IgnoredAddresses": "Ignorált címek",
|
||||
"YesCancel": "Igen, elvet",
|
||||
"Warn": "Figyelmeztetés",
|
||||
"View": "Nézet",
|
||||
"Version": "Verzió",
|
||||
"Username": "Felhasználónév",
|
||||
@@ -270,7 +270,7 @@
|
||||
"Uptime": "Üzemidő",
|
||||
"UpdateScriptPathHelpText": "Keresse meg az egyéni parancsfájl elérési útját, amely kibontott frissítési csomagot vesz fel, és kezeli a frissítési folyamat fennmaradó részét",
|
||||
"Updates": "Frissítések",
|
||||
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy egy szkriptet",
|
||||
"UpdateMechanismHelpText": "Használja a {appName} beépített frissítőjét vagy szkriptjét",
|
||||
"UpdateCheckUINotWritableMessage": "Nem lehet telepíteni a frissítést, mert a(z) „{0}” felhasználói felület mappát nem írhatja a „{1}” felhasználó.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Nem lehet telepíteni a frissítést, mert a (z) „{0}” indítási mappa az Alkalmazások Transzlokációs mappájában található.",
|
||||
"UpdateCheckStartupNotWritableMessage": "A frissítés nem telepíthető, mert a (z) „{0}” indítási mappát a „{1}” felhasználó nem írhatja.",
|
||||
@@ -280,10 +280,10 @@
|
||||
"UnableToLoadUISettings": "Nem sikerült betölteni a felhasználói felület beállításait",
|
||||
"UnableToLoadTags": "Nem sikerült betölteni a címkéket",
|
||||
"UnableToLoadNotifications": "Nem sikerült betölteni az Értesítéseket",
|
||||
"TableOptions": "Táblázat beállításai",
|
||||
"TableOptions": "Táblázat Beállítások",
|
||||
"ShowSearch": "Keresés(ek) megjelenítése",
|
||||
"SetTags": "Címkék beállítása",
|
||||
"NotificationTriggers": "Értesítés(ek) kiváltója",
|
||||
"NotificationTriggers": "Értesítési triggerek",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Az összes indexer elérhetetlen több mint 6 órája, meghibásodás miatt",
|
||||
"SettingsLogSql": "SQL naplózás",
|
||||
@@ -327,12 +327,12 @@
|
||||
"Redirect": "Átirányítás",
|
||||
"Reddit": "Reddit",
|
||||
"HomePage": "Kezdőlap",
|
||||
"FeatureRequests": "Funkció kérése",
|
||||
"FeatureRequests": "Funkciókérés",
|
||||
"Discord": "Discord",
|
||||
"AppProfileSelectHelpText": "Az alkalmazásprofilok az RSS vezérlésére szolgálnak, Automatikus keresés és Interaktív keresés beállításai az alkalmazás szinkronizálásakor",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Nem lehet új alkalmazást hozzáadni, próbálkozzon újra.",
|
||||
"UnableToAddANewAppProfilePleaseTryAgain": "Nem lehet új alkalmazásprofilt hozzáadni, próbálkozzon újra.",
|
||||
"AddDownloadClient": "Letöltőkliens hozzáadása",
|
||||
"AddDownloadClient": "Letöltési kliens hozzáadása",
|
||||
"Applications": "Alkalmazások",
|
||||
"AppProfileInUse": "Használatban lévő alkalmazásprofil",
|
||||
"Apps": "Appok",
|
||||
@@ -347,7 +347,7 @@
|
||||
"Encoding": "Kódolás",
|
||||
"Grabs": "Megfogások",
|
||||
"Id": "Azonosító",
|
||||
"NotificationTriggersHelpText": "Válaszd ki, hogy mely események indítsák el ezt az értesítést",
|
||||
"NotificationTriggersHelpText": "Válassza ki, hogy mely események váltsák ki ezt az értesítést",
|
||||
"Presets": "Előbeállítások",
|
||||
"Privacy": "Titkosítás",
|
||||
"Query": "Lekérdezés",
|
||||
@@ -405,7 +405,7 @@
|
||||
"QueryResults": "Lekérdezési eredmények",
|
||||
"SemiPrivate": "Fél-Privát",
|
||||
"TestAllIndexers": "Indexerek tesztelése",
|
||||
"UnableToLoadApplicationList": "Nem sikerült betölteni az alkalmazáslistát",
|
||||
"ApplicationsLoadError": "Nem sikerült betölteni az alkalmazáslistát",
|
||||
"Url": "URL",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "Az API-t hívó alkalmazás biztosítja a User-Agent szolgáltatást",
|
||||
"Website": "Weboldal",
|
||||
@@ -444,8 +444,8 @@
|
||||
"LastDuration": "Utolsó időtartam",
|
||||
"LastExecution": "Utolsó végrehajtás",
|
||||
"Parameters": "Paraméterek",
|
||||
"Queued": "Sorba helyezve",
|
||||
"Started": "Elkezdődött",
|
||||
"Queued": "Sorban",
|
||||
"Started": "Elindult",
|
||||
"NextExecution": "Következő végrehajtás",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Az alkamazások elérhetetlenek több mint 6 órája az alábbi hiba miatt: {0}",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Az összes alkalmazás elérhetetlen több mint 6 órája meghibásodás miatt",
|
||||
@@ -454,21 +454,21 @@
|
||||
"MappedCategories": "Térképezett kategóriák",
|
||||
"DownloadClientCategory": "Letöltési kliens kategória",
|
||||
"AuthenticationRequired": "Azonosítás szükséges",
|
||||
"AuthenticationRequiredHelpText": "Módosítsd, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
|
||||
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a {appName}nak mostantól engedélyezni kell a hitelesítést. Konfigurálja a hitelesítési módszert és a hitelesítési adatokat. Opcionálisan letilthatja a helyi címekről történő hitelesítést. További információkért tekintsd meg a GYIK-et.",
|
||||
"AuthenticationRequiredHelpText": "Módosítsa, hogy mely kérésekhez van szükség hitelesítésre. Ne változtasson, hacsak nem érti a kockázatokat.",
|
||||
"AuthenticationRequiredWarning": "A hitelesítés nélküli távoli hozzáférés megakadályozása érdekében a(z) {appName} alkalmazásnak engedélyeznie kell a hitelesítést. Opcionálisan letilthatja a helyi címekről történő hitelesítést.",
|
||||
"TheLatestVersionIsAlreadyInstalled": "A {appName} legújabb verziója már telepítva van",
|
||||
"Remove": "Eltávolítás",
|
||||
"Replace": "Kicserél",
|
||||
"ApplicationURL": "Alkalmazás URL",
|
||||
"ApplicationUrlHelpText": "Az alkalmazás külső URL-címe, beleértve a http(s)://-t, a portot és az URL-alapot",
|
||||
"ApplicationUrlHelpText": "Ennek az alkalmazásnak a külső URL-címe, beleértve a http-eket",
|
||||
"More": "Több",
|
||||
"Publisher": "Kiadó",
|
||||
"ApplyChanges": "Változások alkalmazása",
|
||||
"ApplyTagsHelpTextReplace": "Csere: Cserélje ki a címkéket a beírt címkékre (az összes címke törléséhez ne adjon meg címkéket)",
|
||||
"EditSelectedIndexers": "Kiválasztott indexelők szerkesztése",
|
||||
"ApplyTagsHelpTextAdd": "Hozzáadás: Új címkék hozzáadása a meglévő címkékhez",
|
||||
"ApplyTagsHelpTextAdd": "Hozzáadás: Adja hozzá a címkéket a meglévő címkék listájához",
|
||||
"ApplyTagsHelpTextHowToApplyApplications": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Hogyan adjunk hozzá címkéket a kiválasztott filmhez",
|
||||
"ApplyTagsHelpTextHowToApplyIndexers": "Címkék alkalmazása a kiválasztott indexelőkre",
|
||||
"ApplyTagsHelpTextRemove": "Eltávolítás: Távolítsa el a beírt címkéket",
|
||||
"CountIndexersSelected": "{0} Indexelő(k) kiválasztva",
|
||||
"DeleteSelectedDownloadClients": "Letöltőkliens Törlése",
|
||||
@@ -494,14 +494,45 @@
|
||||
"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",
|
||||
"AddConnection": "Gyűjtemény módosítása",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Összes alkalmazás elérhetetlen hiba miatt",
|
||||
"AddConnection": "Csatlakozás hozzáadása",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Az összes értesítés nem érhető el hibák miatt",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Az alkalmazás nem áll rendelkezésre az alábbi hibák miatt: {0}",
|
||||
"AuthBasic": "Alap (Böngésző felugró ablak)",
|
||||
"AuthForm": "Felhasználó (Bejelentkezési oldal)",
|
||||
"AuthBasic": "Alap (böngésző előugró ablak)",
|
||||
"AuthForm": "Űrlapok (bejelentkezési oldal)",
|
||||
"DisabledForLocalAddresses": "Letiltva a helyi címeknél",
|
||||
"None": "Nincs",
|
||||
"None": "Egyik sem",
|
||||
"ResetAPIKeyMessageText": "Biztos hogy vissza szeretnéd állítani az API-Kulcsod?",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Adjon meg új jelszót",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet"
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Adjon meg új felhasználónevet",
|
||||
"AppUpdated": "{appName} frissítve",
|
||||
"AddApplication": "Alkalmazás hozzáadása",
|
||||
"AddCustomFilter": "Egyéni szűrő hozzáadása",
|
||||
"Clone": "Klón",
|
||||
"Implementation": "Végrehajtás",
|
||||
"AddConnectionImplementation": "Csatlakozás hozzáadása - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Letöltési kliens hozzáadása – {implementationName}",
|
||||
"AddIndexerImplementation": "Indexelő hozzáadása - {implementationName}",
|
||||
"ActiveApps": "Aktív alkalmazások",
|
||||
"ActiveIndexers": "Indexerek",
|
||||
"AuthenticationMethod": "Hitelesítési Módszer",
|
||||
"AuthenticationMethodHelpTextWarning": "Kérjük, válasszon érvényes hitelesítési módot",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Erősítsd meg az új jelszót",
|
||||
"DefaultNameCopiedProfile": "{name} - Másolat",
|
||||
"EditConnectionImplementation": "Kapcsolat szerkesztése - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Indexelő hozzáadása - {megvalósítás neve}",
|
||||
"AddApplicationImplementation": "Csatlakozás hozzáadása - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Indexelő hozzáadása - {implementationName}",
|
||||
"EditIndexerImplementation": "Indexelő szerkesztése – {implementationName}",
|
||||
"EditApplicationImplementation": "Csatlakozás hozzáadása - {megvalósítás neve}",
|
||||
"EditDownloadClientImplementation": "Letöltési kliens szerkesztése – {implementationName}",
|
||||
"NoIndexersFound": "Nem található indexelő",
|
||||
"NoDownloadClientsFound": "Nem találhatók letöltő kliensek",
|
||||
"AdvancedSettingsShownClickToHide": "Haladó beállítások megjelenítve, kattints az elrejtéshez",
|
||||
"AdvancedSettingsHiddenClickToShow": "Haladó beállítások rejtve, kattints a megjelenítéshez",
|
||||
"AppUpdatedVersion": "{appName} frissítve lett `{version}` verzióra, ahhoz hogy a legutóbbi változtatások életbelépjenek, töltsd újra a {appName}-t",
|
||||
"AddCategory": "Kategória hozzáadása",
|
||||
"External": "Külső",
|
||||
"NoHistoryFound": "Nem található előzmény",
|
||||
"InvalidUILanguage": "A felhasználói felület érvénytelen nyelvre van állítva, javítsa ki, és mentse el a beállításait",
|
||||
"ManageDownloadClients": "Letöltési kliensek kezelése"
|
||||
}
|
||||
|
||||
@@ -78,5 +78,8 @@
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Masukkan sandi baru",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Masukkan nama pengguna baru",
|
||||
"AuthenticationRequiredWarning": "Untuk mencegah akses jarak jauh tanpa autentikasi, {appName} kini mewajibkan pengaktifkan autentikasi. Kamu dapat menonaktifkan autentikasi dari jaringan lokal.",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Konfirmasi sandi baru"
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Konfirmasi sandi baru",
|
||||
"days": "hari",
|
||||
"minutes": "menit",
|
||||
"Link": "Tautan"
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"Type": "Tegund",
|
||||
"UnableToAddANewApplicationPleaseTryAgain": "Ekki er hægt að bæta við nýrri tilkynningu. Reyndu aftur.",
|
||||
"UnableToLoadBackups": "Ekki er hægt að hlaða afrit",
|
||||
"UnableToLoadDownloadClients": "Ekki er hægt að hlaða niður viðskiptavinum",
|
||||
"DownloadClientsLoadError": "Ekki er hægt að hlaða niður viðskiptavinum",
|
||||
"UnableToLoadGeneralSettings": "Ekki er hægt að hlaða almennar stillingar",
|
||||
"UnableToLoadHistory": "Ekki er hægt að hlaða sögu",
|
||||
"UnableToLoadNotifications": "Ekki er hægt að hlaða tilkynningar",
|
||||
@@ -199,7 +199,7 @@
|
||||
"CouldNotConnectSignalR": "Gat ekki tengst SignalR, HÍ mun ekki uppfæra",
|
||||
"CustomFilters": "Sérsniðin síur",
|
||||
"Dates": "Dagsetningar",
|
||||
"DBMigration": "DB fólksflutningar",
|
||||
"DatabaseMigration": "DB fólksflutningar",
|
||||
"Delete": "Eyða",
|
||||
"DeleteApplicationMessageText": "Ertu viss um að þú viljir eyða tilkynningunni „{0}“?",
|
||||
"DeleteBackup": "Eyða afritun",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"Grabbed": "Preso",
|
||||
"Clear": "Cancella",
|
||||
"AppDataLocationHealthCheckMessage": "L'aggiornamento non sarà possibile per evitare la cancellazione di AppData durante l'aggiornamento",
|
||||
"Analytics": "Analitica",
|
||||
"Analytics": "Statistiche",
|
||||
"Added": "Aggiunto",
|
||||
"About": "Info",
|
||||
"Updates": "Aggiornamenti",
|
||||
@@ -76,7 +76,7 @@
|
||||
"Date": "Data",
|
||||
"CustomFilters": "Filtri Personalizzati",
|
||||
"Connect": "Notifiche",
|
||||
"Connections": "Collegamenti",
|
||||
"Connections": "Connessioni",
|
||||
"ConnectSettingsSummary": "Notifiche e script personalizzati",
|
||||
"BackupNow": "Esegui backup ora",
|
||||
"Backup": "Backup",
|
||||
@@ -84,28 +84,28 @@
|
||||
"Actions": "Azioni",
|
||||
"Age": "Età",
|
||||
"Close": "Chiudi",
|
||||
"CloneProfile": "Clona il Profilo",
|
||||
"ClientPriority": "Priorità del Client",
|
||||
"CloneProfile": "Copia Profilo",
|
||||
"ClientPriority": "Priorità Client",
|
||||
"ChangeHasNotBeenSavedYet": "Il cambio non è stato ancora salvato",
|
||||
"CertificateValidationHelpText": "Cambia quanto è rigorosa la convalida del certificato HTTPS",
|
||||
"CertificateValidation": "Convalida del Certificato",
|
||||
"Cancel": "Annulla",
|
||||
"BypassProxyForLocalAddresses": "Evita il Proxy per gli Indirizzi Locali",
|
||||
"Branch": "Ramo",
|
||||
"BindAddressHelpText": "Indirizzo IP valido, localhost o '*' per tutte le interfacce di rete",
|
||||
"BindAddress": "Indirizzo di Bind",
|
||||
"BindAddressHelpText": "Indirizzi IP validi, localhost o '*' per tutte le interfacce",
|
||||
"BindAddress": "Indirizzo di Ascolto",
|
||||
"Backups": "Backups",
|
||||
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
|
||||
"BackupIntervalHelpText": "Intervallo tra i backup automatici",
|
||||
"BackupRetentionHelpText": "I backup più vecchi del periodo specificato saranno cancellati automaticamente",
|
||||
"BackupIntervalHelpText": "Intervallo fra i backup automatici",
|
||||
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di {appName}",
|
||||
"Automatic": "Automatico",
|
||||
"AuthenticationMethodHelpText": "Richiedi Nome Utente e Password per accedere a {appName}",
|
||||
"AuthenticationMethodHelpText": "Inserisci Username e Password per accedere a {appName}",
|
||||
"Authentication": "Autenticazione",
|
||||
"ApplyTags": "Applica Etichette",
|
||||
"Apply": "Applica",
|
||||
"AppDataDirectory": "Cartella AppData",
|
||||
"ApiKey": "Chiave API",
|
||||
"AnalyticsEnabledHelpText": "Invia informazioni anonime sull'uso e sugli errori ai server di {appName}. Questo include informazioni sul tuo browser, quali pagine della WebUI di {appName} utilizzi, la segnalazione di errori così come il sistema operativo e la versione di runtime. Useremo queste informazioni per dare priorità alle funzionalità e alle correzioni dei bug.",
|
||||
"AnalyticsEnabledHelpText": "Inviare informazioni anonime sull'utilizzo e sugli errori ai server di {appName}. Ciò include informazioni sul tuo browser, quali pagine dell'interfaccia di {appName} usi, la segnalazione di errori così come la versione del sistema operativo e del runtime. Utilizzeremo queste informazioni per dare priorità alle nuove funzioni e alle correzioni di bug.",
|
||||
"Warn": "Attenzione",
|
||||
"Type": "Tipo",
|
||||
"Title": "Titolo",
|
||||
@@ -136,11 +136,11 @@
|
||||
"DownloadClientSettings": "Impostazioni del Client di Download",
|
||||
"Docker": "Docker",
|
||||
"DeleteTag": "Elimina Etichetta",
|
||||
"DeleteNotification": "Cancella la Notifica",
|
||||
"DeleteDownloadClient": "Cancella il Client di Download",
|
||||
"DeleteNotification": "Cancella Notifica",
|
||||
"DeleteDownloadClient": "Cancella Client di Download",
|
||||
"DeleteBackup": "Cancella Backup",
|
||||
"DBMigration": "Migrazione DB",
|
||||
"ConnectSettings": "Impostazioni di Connessione",
|
||||
"DatabaseMigration": "Migrazione DB",
|
||||
"ConnectSettings": "Impostazioni Collegamento",
|
||||
"ConnectionLost": "Connessione Persa",
|
||||
"Component": "Componente",
|
||||
"Columns": "Colonne",
|
||||
@@ -222,7 +222,7 @@
|
||||
"DeleteTagMessageText": "Sei sicuro di voler eliminare l'etichetta '{0}'?",
|
||||
"DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{0}'?",
|
||||
"DeleteDownloadClientMessageText": "Sei sicuro di voler eliminare il client di download '{0}'?",
|
||||
"BeforeUpdate": "Prima di aggiornare",
|
||||
"BeforeUpdate": "Prima dell'aggiornamento",
|
||||
"Usenet": "Usenet",
|
||||
"Uptime": "Tempo di attività",
|
||||
"YesCancel": "Si, Cancella",
|
||||
@@ -232,7 +232,7 @@
|
||||
"UrlBaseHelpText": "Per il supporto al reverse proxy, di default è vuoto",
|
||||
"URLBase": "Base Url",
|
||||
"UpdateScriptPathHelpText": "Percorso verso uno script personalizzato che prende un pacchetto di aggiornamento estratto e gestisce il resto del processo di aggiornamento",
|
||||
"UpdateMechanismHelpText": "Usa l'aggiornamento integrato in {appName} o uno script",
|
||||
"UpdateMechanismHelpText": "Usa il sistema di aggiornamento interno di {appName} o uno script",
|
||||
"UpdateAutomaticallyHelpText": "Scarica e installa automaticamente gli aggiornamenti. Sarai comunque in grado in installarli da Sistema: Aggiornamenti",
|
||||
"UnsavedChanges": "Modifiche non salvate",
|
||||
"UnableToLoadUISettings": "Impossibile caricare le impostazioni interfaccia",
|
||||
@@ -240,7 +240,7 @@
|
||||
"UnableToLoadNotifications": "Impossibile caricare le Notifiche",
|
||||
"UnableToLoadHistory": "Impossibile caricare la storia",
|
||||
"UnableToLoadGeneralSettings": "Impossibile caricare le impostazioni Generali",
|
||||
"UnableToLoadDownloadClients": "Impossibile caricare i client di download",
|
||||
"DownloadClientsLoadError": "Impossibile caricare i client di download",
|
||||
"UnableToLoadBackups": "Impossibile caricare i backup",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Impossibile aggiungere una nuova notifica, riprova.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo Indicizzatore, riprova.",
|
||||
@@ -293,7 +293,7 @@
|
||||
"EnableIndexer": "Abilita Indicizzatore",
|
||||
"AddNewIndexer": "Aggiungi nuovo Indicizzatore",
|
||||
"IndexerAuth": "Autenticazione dell'Indicizzatore",
|
||||
"AddDownloadClient": "Aggiungi Downloader",
|
||||
"AddDownloadClient": "Aggiungi Client di Download",
|
||||
"Category": "Categoria",
|
||||
"ClearHistory": "Cancella cronologia",
|
||||
"ClearHistoryMessageText": "Sei sicuro di voler cancellare tutta la cronologia di {appName}?",
|
||||
@@ -374,7 +374,7 @@
|
||||
"SyncLevel": "Livello Sincronizzazione",
|
||||
"IndexerProxy": "Proxy dell'Indicizzatore",
|
||||
"Proxies": "Proxy",
|
||||
"UnableToLoadApplicationList": "Impossibile careicare la lista applicazioni",
|
||||
"ApplicationsLoadError": "Impossibile careicare la lista applicazioni",
|
||||
"Website": "Sito",
|
||||
"Privacy": "Privacy",
|
||||
"SettingsIndexerLogging": "Logging Migliorato dell'Indicizzatore",
|
||||
@@ -451,8 +451,8 @@
|
||||
"Started": "Iniziato",
|
||||
"AreYouSureYouWantToDeleteCategory": "Vuoi davvero cancellare la categoria mappata?",
|
||||
"AuthenticationRequired": "Autenticazione richiesta",
|
||||
"AuthenticationRequiredHelpText": "Cambia a quali richieste l'autenticazione verrà richiesta. Non cambiare se non comprendi i rischi.",
|
||||
"AuthenticationRequiredWarning": "Per impedire accessi remoti senza autenticazione, {appName} ora richiede che l'autenticazione venga attivata. Puoi disattivare l'autenticazione per indirizzi privati.",
|
||||
"AuthenticationRequiredHelpText": "Cambia a quali richieste l'autenticazione verrà chiesta. Non cambiare se non comprendi i rischi.",
|
||||
"AuthenticationRequiredWarning": "Per prevenire accessi remoti non autorizzati, {appName} da ora richiede che l'autenticazione sia abilitata. Opzionalmente puoi disabilitare l'autenticazione per gli indirizzi di rete locali.",
|
||||
"DeleteClientCategory": "Cancella categoria del client di download",
|
||||
"DownloadClientCategory": "Categoria client di download",
|
||||
"MappedCategories": "Categorie mappate",
|
||||
@@ -498,9 +498,22 @@
|
||||
"AddConnection": "Aggiungi Connessione",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Tutte le applicazioni non sono disponibili a causa di errori",
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applicazioni non disponibili a causa di errori: {0}",
|
||||
"AuthForm": "Moduli (Pagina di Accesso)",
|
||||
"AuthForm": "Form (Pagina di Login)",
|
||||
"DisabledForLocalAddresses": "Disabilitato per Indirizzi Locali",
|
||||
"None": "Nessuna",
|
||||
"ResetAPIKeyMessageText": "Sei sicuro di voler reimpostare la tua chiave API?",
|
||||
"AuthBasic": "Base (Popup del Browser)"
|
||||
"AuthBasic": "Base (Popup del Browser)",
|
||||
"EditSelectedDownloadClients": "Modifica i Client di Download Selezionati",
|
||||
"AppUpdated": "{appName} Aggiornato",
|
||||
"AddCustomFilter": "Aggiungi Filtro Personalizzato",
|
||||
"AddConnectionImplementation": "Aggiungi Connessione - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Aggiungi un Client di Download - {implementationName}",
|
||||
"AddIndexerImplementation": "Aggiungi indicizzatore - {implementationName}",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Inserisci username",
|
||||
"AuthenticationMethod": "Metodo di Autenticazione",
|
||||
"AuthenticationMethodHelpTextWarning": "Selezione un metodo di autenticazione valido",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Inserisci la nuova password",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Conferma la nuova password",
|
||||
"Clone": "Copia",
|
||||
"DefaultNameCopiedProfile": "{name} - Copia"
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
"TagCannotBeDeletedWhileInUse": "使用中は削除できません",
|
||||
"TagIsNotUsedAndCanBeDeleted": "タグは使用されておらず、削除できます",
|
||||
"TestAll": "すべてテスト",
|
||||
"UnableToLoadDownloadClients": "ダウンロードクライアントを読み込めません",
|
||||
"DownloadClientsLoadError": "ダウンロードクライアントを読み込めません",
|
||||
"UnableToLoadGeneralSettings": "一般設定を読み込めません",
|
||||
"UpdateAutomaticallyHelpText": "アップデートを自動的にダウンロードしてインストールします。 System:Updatesから引き続きインストールできます。",
|
||||
"Updates": "更新",
|
||||
@@ -141,7 +141,7 @@
|
||||
"UI": "UI",
|
||||
"CouldNotConnectSignalR": "SignalRに接続できませんでした。UIは更新されません",
|
||||
"Custom": "カスタム",
|
||||
"DBMigration": "DB移行",
|
||||
"DatabaseMigration": "DB移行",
|
||||
"Delete": "削除",
|
||||
"DeleteApplicationMessageText": "通知「{0}」を削除してもよろしいですか?",
|
||||
"DeleteBackup": "バックアップを削除する",
|
||||
@@ -352,5 +352,6 @@
|
||||
"AuthForm": "フォーム(ログインページ)",
|
||||
"DisabledForLocalAddresses": "ローカルアドレスでは無効",
|
||||
"None": "なし",
|
||||
"ResetAPIKeyMessageText": "APIキーをリセットしてもよろしいですか?"
|
||||
"ResetAPIKeyMessageText": "APIキーをリセットしてもよろしいですか?",
|
||||
"RestartProwlarr": "{appName}を再起動します"
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"Connections": "연결",
|
||||
"CouldNotConnectSignalR": "SignalR에 연결할 수 없습니다. UI가 업데이트되지 않습니다.",
|
||||
"Custom": "사용자 지정",
|
||||
"DBMigration": "DB 마이그레이션",
|
||||
"DatabaseMigration": "DB 마이그레이션",
|
||||
"DeleteBackupMessageText": "백업 '{0}'을(를) 삭제하시겠습니까?",
|
||||
"BackupNow": "지금 백업",
|
||||
"Authentication": "인증",
|
||||
@@ -160,7 +160,7 @@
|
||||
"Title": "표제",
|
||||
"Today": "오늘",
|
||||
"UILanguageHelpTextWarning": "브라우저 새로 고침 필요",
|
||||
"UnableToLoadDownloadClients": "다운로드 클라이언트를로드 할 수 없습니다.",
|
||||
"DownloadClientsLoadError": "다운로드 클라이언트를로드 할 수 없습니다.",
|
||||
"UnableToLoadHistory": "기록을로드 할 수 없습니다.",
|
||||
"UnableToLoadTags": "태그를로드 할 수 없습니다.",
|
||||
"UnableToLoadUISettings": "UI 설정을로드 할 수 없습니다.",
|
||||
@@ -352,5 +352,6 @@
|
||||
"DisabledForLocalAddresses": "로컬 주소에 대해 비활성화됨",
|
||||
"None": "없음",
|
||||
"ResetAPIKeyMessageText": "API 키를 재설정하시겠습니까?",
|
||||
"StopSelecting": "선택 취소"
|
||||
"StopSelecting": "선택 취소",
|
||||
"RestartProwlarr": "{appName} 다시 시작"
|
||||
}
|
||||
|
||||
@@ -5,5 +5,16 @@
|
||||
"Add": "Pievienot",
|
||||
"AddDownloadClient": "Pievienot Lejupielādes Klientu",
|
||||
"AddConnection": "Pievienot Savienojumu",
|
||||
"AddConnectionImplementation": "Pievienot Savienojumu - {implementationName}"
|
||||
"AddConnectionImplementation": "Pievienot Savienojumu - {implementationName}",
|
||||
"New": "Jauns",
|
||||
"Connect": "Paziņojumi",
|
||||
"Notification": "Paziņojumi",
|
||||
"Notifications": "Paziņojumi",
|
||||
"EditConnectionImplementation": "Pievienot Savienojumu - {implementationName}",
|
||||
"EditIndexerImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"EditApplicationImplementation": "Pievienot Savienojumu - {implementationName}",
|
||||
"AddIndexerImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}",
|
||||
"AddApplicationImplementation": "Pievienot Savienojumu - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Pievienot Nosacījumu - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"Add": "Legge til",
|
||||
"Add": "Legg til",
|
||||
"AddDownloadClient": "Legg til nedlastingsklient",
|
||||
"Added": "La til",
|
||||
"AddingTag": "Legger til tag",
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
"CouldNotConnectSignalR": "Kan geen verbinding maken met SignalR, gebruikersinterface wordt niet bijgewerkt",
|
||||
"Custom": "Aangepast",
|
||||
"CustomFilters": "Aangepaste Filters",
|
||||
"DBMigration": "DB Migratie",
|
||||
"DatabaseMigration": "DB Migratie",
|
||||
"Database": "Databasis",
|
||||
"Date": "Datum",
|
||||
"Dates": "Datum en tijd",
|
||||
@@ -388,7 +388,7 @@
|
||||
"UnableToLoadAppProfiles": "Kan app-profielen niet laden",
|
||||
"UnableToLoadBackups": "Kon geen veiligheidskopieën laden",
|
||||
"UnableToLoadDevelopmentSettings": "Kan ontwikkelingsinstellingen niet laden",
|
||||
"UnableToLoadDownloadClients": "Downloaders kunnen niet worden geladen",
|
||||
"DownloadClientsLoadError": "Downloaders kunnen niet worden geladen",
|
||||
"UnableToLoadGeneralSettings": "Kon Algemene instellingen niet inladen",
|
||||
"UnableToLoadHistory": "Kon geschiedenis niet laden",
|
||||
"UnableToLoadIndexerProxies": "Kan Indexeerder-proxy's niet laden",
|
||||
@@ -452,8 +452,8 @@
|
||||
"NotificationStatusSingleClientHealthCheckMessage": "Applicaties onbeschikbaar door fouten",
|
||||
"AddConnection": "Voeg connectie toe",
|
||||
"NotificationStatusAllClientHealthCheckMessage": "Alle applicaties onbeschikbaar door fouten",
|
||||
"AuthBasic": "Basis (Browser Pop-up)",
|
||||
"AuthForm": "Formulier (Login Pagina)",
|
||||
"AuthBasic": "Basic (Browser Pop-up)",
|
||||
"AuthForm": "Formulier (inlogpagina)",
|
||||
"DisabledForLocalAddresses": "Uitgeschakeld voor lokale adressen",
|
||||
"None": "Geen",
|
||||
"ResetAPIKeyMessageText": "Bent u zeker dat u uw API-sleutel wilt resetten?",
|
||||
@@ -476,5 +476,11 @@
|
||||
"EditIndexerProxyImplementation": "Indexeerder toevoegen - {implementationName}",
|
||||
"AuthenticationMethod": "Authenticatiemethode",
|
||||
"AuthenticationRequired": "Verificatie vereist",
|
||||
"AuthenticationMethodHelpTextWarning": "Selecteer een geldige verificatie methode"
|
||||
"AuthenticationMethodHelpTextWarning": "Selecteer een geldige verificatie methode",
|
||||
"AuthenticationRequiredHelpText": "Pas aan welke requests verificatie nodig hebben. Pas niets aan als je de risico's niet begrijpt.",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Voer een nieuw wachtwoord in",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Bevestig het nieuwe wachtwoord",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Voeg een nieuwe gebruikersnaam in",
|
||||
"AuthenticationRequiredWarning": "Om toegang zonder authenticatie te voorkomen vereist {appName} nu verificatie. Je kan dit optioneel uitschakelen voor lokale adressen.",
|
||||
"Episode": "aflevering"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"Analytics": "Analityka",
|
||||
"All": "Wszystkie",
|
||||
"Added": "Dodane",
|
||||
"Actions": "Aktywności",
|
||||
"Actions": "Akcje",
|
||||
"About": "O",
|
||||
"Logging": "Logowanie",
|
||||
"EnableSslHelpText": " Wymaga ponownego uruchomienia jako administrator, aby odniosło skutek",
|
||||
@@ -22,7 +22,7 @@
|
||||
"Automatic": "Automatyczny",
|
||||
"ApplyTags": "Zastosuj tagi",
|
||||
"BackupIntervalHelpText": "Odstęp czasu między automatycznymi kopiami zapasowymi",
|
||||
"Close": "Blisko",
|
||||
"Close": "Zamknij",
|
||||
"CloseCurrentModal": "Zamknij bieżący tryb",
|
||||
"Delete": "Usunąć",
|
||||
"Discord": "Niezgoda",
|
||||
@@ -54,7 +54,7 @@
|
||||
"ApiKey": "Klucz API",
|
||||
"UI": "UI",
|
||||
"AcceptConfirmationModal": "Zaakceptuj tryb potwierdzenia",
|
||||
"AddIndexer": "Dodaj indeksator",
|
||||
"AddIndexer": "Dodaj indekser",
|
||||
"AddingTag": "Dodawanie tagu",
|
||||
"Age": "Wiek",
|
||||
"CertificateValidationHelpText": "Zmień ścisłą walidację certyfikatu HTTPS",
|
||||
@@ -121,7 +121,7 @@
|
||||
"Custom": "Zwyczaj",
|
||||
"Date": "Data",
|
||||
"Dates": "Daktyle",
|
||||
"DBMigration": "Migracja bazy danych",
|
||||
"DatabaseMigration": "Migracja bazy danych",
|
||||
"DeleteApplicationMessageText": "Czy na pewno chcesz usunąć powiadomienie „{0}”?",
|
||||
"DeleteBackup": "Usuń kopię zapasową",
|
||||
"DeleteBackupMessageText": "Czy na pewno chcesz usunąć kopię zapasową „{0}”?",
|
||||
@@ -262,7 +262,7 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Nie można dodać nowego indeksatora, spróbuj ponownie.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Nie można dodać nowego powiadomienia, spróbuj ponownie.",
|
||||
"UnableToLoadBackups": "Nie można załadować kopii zapasowych",
|
||||
"UnableToLoadDownloadClients": "Nie można załadować klientów pobierania",
|
||||
"DownloadClientsLoadError": "Nie można załadować klientów pobierania",
|
||||
"UnableToLoadGeneralSettings": "Nie można załadować ustawień ogólnych",
|
||||
"UnableToLoadHistory": "Nie można załadować historii",
|
||||
"UnableToLoadTags": "Nie można załadować tagów",
|
||||
@@ -375,5 +375,7 @@
|
||||
"None": "Żaden",
|
||||
"AuthBasic": "Podstawowe (wyskakujące okienko przeglądarki)",
|
||||
"ResetAPIKeyMessageText": "Czy na pewno chcesz zresetować swój klucz API?",
|
||||
"RestartProwlarr": "Zrestartuj {appName}"
|
||||
"RestartProwlarr": "Zrestartuj {appName}",
|
||||
"AddConnectionImplementation": "Dodaj Connection - {implementationName}",
|
||||
"AddDownloadClientImplementation": "Dodaj klienta pobierania - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
"Clear": "Limpar",
|
||||
"Cancel": "Cancelar",
|
||||
"BackupNow": "Criar cópia de segurança",
|
||||
"Backup": "Cópia de segurança",
|
||||
"Backup": "Backup",
|
||||
"Apply": "Aplicar",
|
||||
"Analytics": "Análises",
|
||||
"All": "Todos",
|
||||
@@ -170,7 +170,7 @@
|
||||
"DeleteNotification": "Eliminar notificação",
|
||||
"DeleteDownloadClient": "Eliminar cliente de transferências",
|
||||
"DeleteBackup": "Eliminar cópia de segurança",
|
||||
"DBMigration": "Migração da base de dados",
|
||||
"DatabaseMigration": "Migração da base de dados",
|
||||
"ConnectSettings": "Definições de ligação",
|
||||
"CloneProfile": "Clonar perfil",
|
||||
"ChangeHasNotBeenSavedYet": "A mudança ainda não foi guardada",
|
||||
@@ -181,7 +181,7 @@
|
||||
"BindAddressHelpText": "Endereço de IP válido, localhost ou \"*\" para todas as interfaces",
|
||||
"BindAddress": "Endereço de vínculo",
|
||||
"Backups": "Cópias de segurança",
|
||||
"BackupFolderHelpText": "Caminhos relativos estarão na pasta AppData do {appName}",
|
||||
"BackupFolderHelpText": "Caminhos relativos estarão no diretório AppData do {appName}",
|
||||
"BackupIntervalHelpText": "Intervalo entre cópias de segurança automáticas",
|
||||
"BackupRetentionHelpText": "Cópias de segurança automáticas anteriores ao período de retenção serão eliminadas automaticamente",
|
||||
"ClientPriority": "Prioridade do cliente",
|
||||
@@ -268,7 +268,7 @@
|
||||
"UnableToLoadNotifications": "Não foi possível carregar as notificações",
|
||||
"UnableToLoadHistory": "Não foi possível carregar o histórico",
|
||||
"UnableToLoadGeneralSettings": "Não foi possível carregar as definições gerais",
|
||||
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de transferências",
|
||||
"DownloadClientsLoadError": "Não foi possível carregar os clientes de transferências",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Não foi possível adicionar um novo cliente de transferências, tenta novamente.",
|
||||
"UnableToLoadBackups": "Não foi possível carregar as cópias de segurança",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Não foi possível adicionar uma nova notificação, tenta novamente.",
|
||||
@@ -390,7 +390,7 @@
|
||||
"InstanceName": "Nome da Instancia",
|
||||
"InstanceNameHelpText": "Nome da instância na aba e nome da aplicação para Syslog",
|
||||
"UnableToLoadIndexerProxies": "Incapaz de ler o indexador de proxies",
|
||||
"UnableToLoadApplicationList": "Não foi possível carregar a lista de aplicações",
|
||||
"ApplicationsLoadError": "Não foi possível carregar a lista de aplicações",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Todos os indexadores estão indisponíveis devido a erros á mais de 6 horas",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexadores indisponíveis devido a erros à mais de 6 horas: {0}",
|
||||
"Duration": "Duração",
|
||||
@@ -472,5 +472,8 @@
|
||||
"EditSelectedDownloadClients": "Editar Clientes de Transferência Selecionados",
|
||||
"Album": "álbum",
|
||||
"Artist": "artista",
|
||||
"DefaultNameCopiedProfile": "{name} - Copiar"
|
||||
"DefaultNameCopiedProfile": "{name} - Copiar",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirmar nova senha",
|
||||
"AdvancedSettingsHiddenClickToShow": "Definições avançadas ocultas, clique para mostrar",
|
||||
"AddCategory": "Adicionar Categoria"
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
"CouldNotConnectSignalR": "Não é possível conectar ao SignalR, a interface não atualizará",
|
||||
"Custom": "Personalizado",
|
||||
"CustomFilters": "Filtros personalizados",
|
||||
"DBMigration": "Migração de banco de dados",
|
||||
"DatabaseMigration": "Migração de banco de dados",
|
||||
"Database": "Banco de dados",
|
||||
"Date": "Data",
|
||||
"Dates": "Datas",
|
||||
@@ -110,7 +110,7 @@
|
||||
"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 '{name}'?",
|
||||
"DeleteTag": "Excluir tag",
|
||||
"DeleteTag": "Excluir Etiqueta",
|
||||
"DeleteTagMessageText": "Tem certeza de que deseja excluir a tag '{label}'?",
|
||||
"Description": "Descrição",
|
||||
"Details": "Detalhes",
|
||||
@@ -139,7 +139,7 @@
|
||||
"EnableInteractiveSearch": "Ativar pesquisa interativa",
|
||||
"EnableInteractiveSearchHelpText": "Será usado com a pesquisa interativa",
|
||||
"EnableRss": "Habilitar RSS",
|
||||
"EnableRssHelpText": "Habilitar feed RSS para o indexador",
|
||||
"EnableRssHelpText": "Habilitar feed RSS para indexador",
|
||||
"EnableSSL": "Habilitar SSL",
|
||||
"EnableSslHelpText": " Requer a reinicialização com a execução como administrador para fazer efeito",
|
||||
"Enabled": "Habilitado",
|
||||
@@ -461,10 +461,10 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Não foi possível adicionar um novo proxy indexador, tente novamente.",
|
||||
"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",
|
||||
"ApplicationsLoadError": "Não é possível carregar a lista de aplicativos",
|
||||
"UnableToLoadBackups": "Não foi possível carregar os backups",
|
||||
"UnableToLoadDevelopmentSettings": "Não foi possível carregar as configurações de desenvolvimento",
|
||||
"UnableToLoadDownloadClients": "Não foi possível carregar os clientes de download",
|
||||
"DownloadClientsLoadError": "Não foi possível carregar os clientes de download",
|
||||
"UnableToLoadGeneralSettings": "Não foi possível carregar as configurações gerais",
|
||||
"UnableToLoadHistory": "Não foi possível carregar o histórico",
|
||||
"UnableToLoadIndexerProxies": "Não foi possível carregar proxies do indexador",
|
||||
@@ -601,5 +601,9 @@
|
||||
"NoIndexerCategories": "Nenhuma categoria encontrada para este indexador",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "Confirme a nova senha",
|
||||
"PasswordConfirmation": "Confirmação Da Senha",
|
||||
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações"
|
||||
"InvalidUILanguage": "Sua UI está definida com um idioma inválido, corrija-a e salve suas configurações",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "Seja para usar o layout de conteúdo configurado do qBittorrent, o layout original do torrent ou sempre criar uma subpasta (qBittorrent 4.3.2+)",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "Layout de Conteúdo",
|
||||
"IndexerId": "ID do Indexador",
|
||||
"DownloadClientAriaSettingsDirectoryHelpText": "Local opcional para colocar downloads, deixe em branco para usar o local padrão do Aria2"
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
"Today": "Astăzi",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Imposibil de adăugat o nouă notificare, încercați din nou.",
|
||||
"UnableToLoadBackups": "Imposibil de încărcat copiile de rezervă",
|
||||
"UnableToLoadDownloadClients": "Nu se pot încărca clienții de descărcare",
|
||||
"DownloadClientsLoadError": "Nu se pot încărca clienții de descărcare",
|
||||
"URLBase": "Baza URL",
|
||||
"UrlBaseHelpText": "Pentru suport proxy invers, implicit este gol",
|
||||
"Usenet": "Usenet",
|
||||
@@ -228,7 +228,7 @@
|
||||
"ChangeHasNotBeenSavedYet": "Modificarea nu a fost încă salvată",
|
||||
"CloneProfile": "Clonați profil",
|
||||
"NoLeaveIt": "Nu, lasă-l",
|
||||
"DBMigration": "Migrarea BD",
|
||||
"DatabaseMigration": "Migrarea BD",
|
||||
"DeleteBackupMessageText": "Sigur doriți să ștergeți copia de siguranță „{0}”?",
|
||||
"DeleteTagMessageText": "Sigur doriți să ștergeți eticheta '{label}'?",
|
||||
"EnableInteractiveSearch": "Activați căutarea interactivă",
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
"CustomFilters": "Настраиваемые фильтры",
|
||||
"Date": "Дата",
|
||||
"Dates": "Даты",
|
||||
"DBMigration": "Перенос БД",
|
||||
"DatabaseMigration": "Перенос БД",
|
||||
"DeleteNotification": "Удалить уведомление",
|
||||
"DeleteNotificationMessageText": "Вы уверены, что хотите удалить уведомление '{name}'?",
|
||||
"DeleteTag": "Удалить тэг",
|
||||
@@ -256,7 +256,7 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Не удалось добавить новый индексатор, повторите попытку.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Невозможно добавить новое уведомление, попробуйте еще раз.",
|
||||
"UnableToLoadBackups": "Невозможно загрузить резервные копии",
|
||||
"UnableToLoadDownloadClients": "Невозможно загрузить загрузчики",
|
||||
"DownloadClientsLoadError": "Невозможно загрузить загрузчики",
|
||||
"UnableToLoadGeneralSettings": "Невозможно загрузить общие настройки",
|
||||
"UnableToLoadNotifications": "Невозможно загрузить уведомления",
|
||||
"UnableToLoadUISettings": "Не удалось загрузить настройки пользовательского интерфейса",
|
||||
@@ -419,5 +419,6 @@
|
||||
"AuthenticationMethod": "Способ авторизации",
|
||||
"AuthenticationRequiredPasswordHelpTextWarning": "Введите новый пароль",
|
||||
"AuthenticationRequiredUsernameHelpTextWarning": "Введите новое имя пользователя",
|
||||
"RestartProwlarr": "Перезапустить {appName}"
|
||||
"RestartProwlarr": "Перезапустить {appName}",
|
||||
"AuthenticationRequiredWarning": "Чтобы предотвратить удаленный доступ без авторизации, {appName} теперь требует, чтобы авторизация была включена. При желании вы можете отключить авторизацию с локальных адресов."
|
||||
}
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
"Filter": "Filter",
|
||||
"Files": "Filer",
|
||||
"Events": "Händelser",
|
||||
"Edit": "Redigera",
|
||||
"Edit": "Ändra",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Otillgängliga nedladdningsklienter på grund av misslyckade anslutningsförsök: {0}",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Samtliga nedladdningsklienter är otillgängliga på grund av misslyckade anslutningsförsök",
|
||||
"DownloadClients": "Nedladdningsklienter",
|
||||
"DownloadClients": "Nerladdningsklienter",
|
||||
"Delete": "Radera",
|
||||
"Dates": "Datum",
|
||||
"Date": "Datum",
|
||||
@@ -169,7 +169,7 @@
|
||||
"BindAddress": "Bindningsadress",
|
||||
"Branch": "Gren",
|
||||
"CloseCurrentModal": "Stäng nuvarande modal",
|
||||
"DBMigration": "DB Migration",
|
||||
"DatabaseMigration": "DB Migration",
|
||||
"DeleteApplicationMessageText": "Är du säker på att du vill radera aviseringen '{0}'?",
|
||||
"Discord": "Discord",
|
||||
"Donations": "Donationer",
|
||||
@@ -196,7 +196,7 @@
|
||||
"IncludeHealthWarningsHelpText": "Inkludera hälsovarningar",
|
||||
"IndexerFlags": "Indexerflaggor",
|
||||
"AddDownloadClient": "Lägg till nedladdningsklient",
|
||||
"AddIndexer": "Lägg till indexerare",
|
||||
"AddIndexer": "Lägg till index",
|
||||
"AddingTag": "Lägg till tagg",
|
||||
"Enabled": "Aktiverad",
|
||||
"Exception": "Undantag",
|
||||
@@ -308,7 +308,7 @@
|
||||
"ApplicationStatusCheckAllClientMessage": "Samtliga listor otillgängliga på grund av fel",
|
||||
"LogLevel": "Loggnivå",
|
||||
"NoLogFiles": "Inga loggfiler",
|
||||
"UnableToLoadDownloadClients": "Det gick inte att ladda nedladdningsklienter",
|
||||
"DownloadClientsLoadError": "Det gick inte att ladda nedladdningsklienter",
|
||||
"UpdateMechanismHelpText": "Använd {appName}s inbyggda uppdaterare eller ett skript",
|
||||
"AddDownloadClientToProwlarr": "Lägg till en nedladdningsklient tillåter {appName} att sända nyutgåvor direkt från UI:t samtidigt som en manuell sökning genomförs.",
|
||||
"UnableToLoadIndexerProxies": "Kunde inte ladda Indexer Proxies",
|
||||
@@ -394,7 +394,7 @@
|
||||
"No": "Nej",
|
||||
"ApplicationLongTermStatusCheckAllClientMessage": "Alla indexerare är inte tillgängliga på grund av fel i mer än 6 timmar",
|
||||
"ApplicationLongTermStatusCheckSingleClientMessage": "Indexatorer är inte tillgängliga på grund av misslyckanden i mer än sex timmar: {0}",
|
||||
"Duration": "Tid",
|
||||
"Duration": "Längd",
|
||||
"Ended": "Avslutad",
|
||||
"LastDuration": "lastDuration",
|
||||
"LastExecution": "Senaste avrättningen",
|
||||
@@ -437,5 +437,6 @@
|
||||
"AuthForm": "Blanketter (inloggningssida)",
|
||||
"DisabledForLocalAddresses": "Inaktiverad för lokala adresser",
|
||||
"None": "Ingen",
|
||||
"ResetAPIKeyMessageText": "Är du säker på att du vill nollställa din API-nyckel?"
|
||||
"ResetAPIKeyMessageText": "Är du säker på att du vill nollställa din API-nyckel?",
|
||||
"AddCustomFilter": "Lägg till anpassat filter"
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
"UILanguageHelpTextWarning": "จำเป็นต้องโหลดเบราว์เซอร์ใหม่",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "ไม่สามารถเพิ่มตัวสร้างดัชนีใหม่ได้โปรดลองอีกครั้ง",
|
||||
"UnableToLoadDownloadClients": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
|
||||
"DownloadClientsLoadError": "ไม่สามารถโหลดไคลเอนต์ดาวน์โหลด",
|
||||
"UpdateCheckUINotWritableMessage": "ไม่สามารถติดตั้งการอัปเดตเนื่องจากโฟลเดอร์ UI \"{0}\" ไม่สามารถเขียนได้โดยผู้ใช้ \"{1}\"",
|
||||
"Updates": "อัปเดต",
|
||||
"UpdateScriptPathHelpText": "พา ธ ไปยังสคริปต์แบบกำหนดเองที่ใช้แพ็กเกจโปรแกรมปรับปรุงที่แยกออกมาและจัดการส่วนที่เหลือของกระบวนการอัพเดต",
|
||||
@@ -139,7 +139,7 @@
|
||||
"CustomFilters": "ตัวกรองที่กำหนดเอง",
|
||||
"Date": "วันที่",
|
||||
"Dates": "วันที่",
|
||||
"DBMigration": "การย้ายฐานข้อมูล",
|
||||
"DatabaseMigration": "การย้ายฐานข้อมูล",
|
||||
"Delete": "ลบ",
|
||||
"DeleteApplicationMessageText": "แน่ใจไหมว่าต้องการลบการแจ้งเตือน \"{0}\"",
|
||||
"DeleteBackup": "ลบข้อมูลสำรอง",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"Files": "Dosyalar",
|
||||
"Filename": "Dosya adı",
|
||||
"AppDataLocationHealthCheckMessage": "Güncellemede AppData'nın silinmesini önlemek için güncelleme mümkün olmayacak",
|
||||
"Actions": "Etkiler",
|
||||
"Actions": "Eylemler",
|
||||
"About": "Hakkında",
|
||||
"View": "Görünüm",
|
||||
"Updates": "Güncellemeler",
|
||||
@@ -106,7 +106,7 @@
|
||||
"DeleteTag": "Etiketi Sil",
|
||||
"BindAddressHelpText": "Tüm arayüzler için geçerli IP4 adresi veya '*'",
|
||||
"ConnectSettings": "Bağlantı Ayarları",
|
||||
"DBMigration": "DB Geçişi",
|
||||
"DatabaseMigration": "DB Geçişi",
|
||||
"DeleteApplicationMessageText": "'{0}' bildirimini silmek istediğinizden emin misiniz?",
|
||||
"DeleteBackup": "Yedeklemeyi Sil",
|
||||
"DeleteBackupMessageText": "'{0}' yedeğini silmek istediğinizden emin misiniz?",
|
||||
@@ -301,7 +301,7 @@
|
||||
"UpdateAutomaticallyHelpText": "Güncellemeleri otomatik olarak indirin ve yükleyin. Yine de Sistem'den yükleyebileceksiniz: Güncellemeler",
|
||||
"UpdateMechanismHelpText": "{appName}'ın yerleşik güncelleyicisini veya bir komut dosyasını kullanın",
|
||||
"ShowSearch": "Aramayı Göster",
|
||||
"UnableToLoadDownloadClients": "İndirme istemcileri yüklenemiyor",
|
||||
"DownloadClientsLoadError": "İndirme istemcileri yüklenemiyor",
|
||||
"UnableToLoadGeneralSettings": "Genel ayarlar yüklenemiyor",
|
||||
"Automatic": "Otomatik",
|
||||
"AutomaticSearch": "Otomatik Arama",
|
||||
@@ -360,5 +360,14 @@
|
||||
"Categories": "Kategoriler",
|
||||
"Application": "Uygulamalar",
|
||||
"Episode": "bölüm",
|
||||
"AddConnection": "Bağlantı Ekle"
|
||||
"AddConnection": "Bağlantı Ekle",
|
||||
"AddApplicationImplementation": "Koşul Ekle - {implementationName}",
|
||||
"AddIndexerImplementation": "Koşul Ekle - {implementationName}",
|
||||
"AddIndexerProxyImplementation": "Koşul Ekle - {implementationName}",
|
||||
"EditConnectionImplementation": "Koşul Ekle - {implementationName}",
|
||||
"AddConnectionImplementation": "Koşul Ekle - {implementationName}",
|
||||
"RestartProwlarr": "{appName}'ı yeniden başlatın",
|
||||
"EditApplicationImplementation": "Koşul Ekle - {implementationName}",
|
||||
"EditIndexerImplementation": "Koşul Ekle - {implementationName}",
|
||||
"EditIndexerProxyImplementation": "Koşul Ekle - {implementationName}"
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"Database": "База даних",
|
||||
"Date": "Дата",
|
||||
"Dates": "Дати",
|
||||
"DBMigration": "Міграція БД",
|
||||
"DatabaseMigration": "Міграція БД",
|
||||
"DeleteBackup": "Видалити резервну копію",
|
||||
"DeleteBackupMessageText": "Ви впевнені, що хочете видалити резервну копію '{0}'?",
|
||||
"DeleteDownloadClient": "Видалити клієнт завантаження",
|
||||
@@ -72,7 +72,7 @@
|
||||
"SSLCertPasswordHelpText": "Пароль для файлу pfx",
|
||||
"TestAll": "Перевірити все",
|
||||
"Type": "Тип",
|
||||
"UnableToLoadDownloadClients": "Не вдалося завантажити клієнти для завантаження",
|
||||
"DownloadClientsLoadError": "Не вдалося завантажити клієнти для завантаження",
|
||||
"UnableToLoadGeneralSettings": "Не вдалося завантажити загальні налаштування",
|
||||
"UnableToLoadHistory": "Не вдалося завантажити історію",
|
||||
"UnableToLoadIndexers": "Не вдалося завантажити індексатори",
|
||||
@@ -368,5 +368,13 @@
|
||||
"DisabledForLocalAddresses": "Відключено для локальних адрес",
|
||||
"None": "Жодного",
|
||||
"ResetAPIKeyMessageText": "Ви впевнені, що хочете скинути свій ключ API?",
|
||||
"AddConnection": "Редагувати колекцію"
|
||||
"AddConnection": "Редагувати колекцію",
|
||||
"RestartProwlarr": "Перезавантажити {appName}",
|
||||
"EditApplicationImplementation": "Додати умому",
|
||||
"EditConnectionImplementation": "Додати умому",
|
||||
"EditIndexerImplementation": "Додати умому",
|
||||
"AddConnectionImplementation": "Додати умому",
|
||||
"AddApplicationImplementation": "Додати умому",
|
||||
"AddIndexerImplementation": "Додати умому",
|
||||
"AddIndexerProxyImplementation": "Додати умому"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"CustomFilters": "Bộ lọc tùy chỉnh",
|
||||
"Date": "Ngày",
|
||||
"Dates": "ngày",
|
||||
"DBMigration": "Di chuyển DB",
|
||||
"DatabaseMigration": "Di chuyển DB",
|
||||
"NoBackupsAreAvailable": "Không có bản sao lưu nào",
|
||||
"NoChanges": "Không thay đổi",
|
||||
"NoLeaveIt": "Không để nó",
|
||||
@@ -215,7 +215,7 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "Không thể thêm trình chỉ mục mới, vui lòng thử lại.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Không thể thêm thông báo mới, vui lòng thử lại.",
|
||||
"UnableToLoadBackups": "Không thể tải các bản sao lưu",
|
||||
"UnableToLoadDownloadClients": "Không thể tải ứng dụng khách tải xuống",
|
||||
"DownloadClientsLoadError": "Không thể tải ứng dụng khách tải xuống",
|
||||
"UnableToLoadGeneralSettings": "Không thể tải Cài đặt chung",
|
||||
"UnableToLoadHistory": "Không thể tải lịch sử",
|
||||
"UnableToLoadNotifications": "Không thể tải thông báo",
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
"CouldNotConnectSignalR": "无法连接至SignalR,不会升级UI",
|
||||
"Custom": "自定义",
|
||||
"CustomFilters": "自定义过滤器",
|
||||
"DBMigration": "数据库迁移版本",
|
||||
"DatabaseMigration": "数据库迁移版本",
|
||||
"Database": "数据库",
|
||||
"Date": "日期",
|
||||
"Dates": "日期",
|
||||
@@ -451,10 +451,9 @@
|
||||
"UnableToAddANewIndexerProxyPleaseTryAgain": "无法添加搜刮器,请稍后重试。",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "无法添加新通知,请稍后重试。",
|
||||
"UnableToLoadAppProfiles": "无法加载应用配置",
|
||||
"UnableToLoadApplicationList": "123",
|
||||
"UnableToLoadBackups": "无法加载备份",
|
||||
"UnableToLoadDevelopmentSettings": "无法加载开发设置",
|
||||
"UnableToLoadDownloadClients": "无法加载下载客户端",
|
||||
"DownloadClientsLoadError": "无法加载下载客户端",
|
||||
"UnableToLoadGeneralSettings": "无法加载通用设置",
|
||||
"UnableToLoadHistory": "无法加载历史记录",
|
||||
"UnableToLoadIndexerProxies": "无法加载索引器代理",
|
||||
@@ -495,7 +494,7 @@
|
||||
"ApplyTagsHelpTextAdd": "添加: 添加标签至已有的标签列表中",
|
||||
"CountDownloadClientsSelected": "已选择 {count} 个下载客户端",
|
||||
"CountIndexersSelected": "已选择 {count} 个索引器",
|
||||
"DeleteSelectedDownloadClientsMessageText": "您确定要删除{count}选定的下载客户端吗?",
|
||||
"DeleteSelectedDownloadClientsMessageText": "您确定要删除 {count} 个选定的下载客户端吗?",
|
||||
"DeleteSelectedIndexersMessageText": "您确定要删除{count}选定的索引器吗?",
|
||||
"EditSelectedDownloadClients": "编辑选定的下载客户端",
|
||||
"Implementation": "执行",
|
||||
@@ -600,5 +599,8 @@
|
||||
"PackSeedTime": "做种时间",
|
||||
"PasswordConfirmation": "确认密码",
|
||||
"AuthenticationRequiredPasswordConfirmationHelpTextWarning": "确认新密码",
|
||||
"InvalidUILanguage": "语言"
|
||||
"InvalidUILanguage": "您的UI设置为无效语言,请纠正并保存设置",
|
||||
"NoIndexerCategories": "没有找到此索引器的分类",
|
||||
"DownloadClientQbittorrentSettingsContentLayout": "内容布局",
|
||||
"DownloadClientQbittorrentSettingsContentLayoutHelpText": "是否使用 qBittorrent 配置的内容布局,使用种子的原始布局或始终创建子文件夹(qBittorrent 4.3.2+)"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user