mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-05 13:20:32 -05:00
Fixed: Added Various Missing Translations
cleanup en.json of unused translates Fixes #1397 Closes Sonarr PR # 4791 'Fixed: Better wording of MissingFromDisk'
This commit is contained in:
@@ -215,13 +215,13 @@ function HistoryDetails(props) {
|
||||
|
||||
switch (reason) {
|
||||
case 'Manual':
|
||||
reasonMessage = 'File was deleted by via UI';
|
||||
reasonMessage = translate('FileWasDeletedByViaUI');
|
||||
break;
|
||||
case 'MissingFromDisk':
|
||||
reasonMessage = 'Readarr was unable to find the file on disk so it was removed';
|
||||
reasonMessage = translate('MissingFromDisk');
|
||||
break;
|
||||
case 'Upgrade':
|
||||
reasonMessage = 'File was deleted to import an upgrade';
|
||||
reasonMessage = translate('FileWasDeletedByUpgrade');
|
||||
break;
|
||||
default:
|
||||
reasonMessage = '';
|
||||
|
||||
@@ -223,14 +223,14 @@ class Queue extends Component {
|
||||
{
|
||||
!isRefreshing && hasError &&
|
||||
<div>
|
||||
Failed to load Queue
|
||||
{translate('FailedToLoadQueue')}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
isAllPopulated && !hasError && !items.length &&
|
||||
<div>
|
||||
Queue is empty
|
||||
{translate('QueueIsEmpty')}
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,9 @@ function AppUpdatedModalContent(props) {
|
||||
<div>
|
||||
{
|
||||
!update.changes &&
|
||||
<div className={styles.maintenance}>Maintenance release</div>
|
||||
<div className={styles.maintenance}>
|
||||
{translate('MaintenanceRelease')}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -77,7 +77,7 @@ class DeleteBookModalContent extends Component {
|
||||
type={inputTypes.CHECK}
|
||||
name="deleteFiles"
|
||||
value={deleteFiles}
|
||||
helpText={'Delete book files'}
|
||||
helpText={translate('DeleteFilesHelpText')}
|
||||
kind={kinds.DANGER}
|
||||
isDisabled={files.length === 0}
|
||||
onChange={this.onDeleteFilesChange}
|
||||
|
||||
@@ -8,6 +8,7 @@ import ModalContent from 'Components/Modal/ModalContent';
|
||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||
import { inputTypes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRow from './FilterBuilderRow';
|
||||
import styles from './FilterBuilderModalContent.css';
|
||||
|
||||
@@ -165,7 +166,9 @@ class FilterBuilderModalContent extends Component {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.label}>Filters</div>
|
||||
<div className={styles.label}>
|
||||
{translate('Filters')}
|
||||
</div>
|
||||
|
||||
<div className={styles.rows}>
|
||||
{
|
||||
|
||||
@@ -167,7 +167,9 @@ class AddNewItem extends Component {
|
||||
{
|
||||
!isFetching && !error && !items.length && !!term &&
|
||||
<div className={styles.message}>
|
||||
<div className={styles.noResults}>Couldn't find any results for '{term}'</div>
|
||||
<div className={styles.noResults}>
|
||||
{translate('CouldntFindAnyResultsForTerm', [term])}
|
||||
</div>
|
||||
<div>
|
||||
You can also search using the
|
||||
<Link to="https://goodreads.com"> Goodreads ID </Link>
|
||||
@@ -179,7 +181,9 @@ class AddNewItem extends Component {
|
||||
{
|
||||
!term &&
|
||||
<div className={styles.message}>
|
||||
<div className={styles.helpText}>It's easy to add a new author or book, just start typing the name of the item you want to add.</div>
|
||||
<div className={styles.helpText}>
|
||||
{translate('ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd')}
|
||||
</div>
|
||||
<div>
|
||||
You can also search using the
|
||||
<Link to="https://goodreads.com"> Goodreads ID </Link>
|
||||
|
||||
@@ -51,9 +51,15 @@ class RemotePathMappings extends Component {
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.remotePathMappingsHeader}>
|
||||
<div className={styles.host}>Host</div>
|
||||
<div className={styles.path}>Remote Path</div>
|
||||
<div className={styles.path}>Local Path</div>
|
||||
<div className={styles.host}>
|
||||
{translate('Host')}
|
||||
</div>
|
||||
<div className={styles.path}>
|
||||
{translate('RemotePath')}
|
||||
</div>
|
||||
<div className={styles.path}>
|
||||
{translate('LocalPath')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -51,8 +51,12 @@ class ImportListExclusions extends Component {
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.importListExclusionsHeader}>
|
||||
<div className={styles.foreignId}>Foreign Id</div>
|
||||
<div className={styles.name}>Name</div>
|
||||
<div className={styles.foreignId}>
|
||||
{translate('ForeignId')}
|
||||
</div>
|
||||
<div className={styles.name}>
|
||||
{translate('Name')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -73,10 +73,18 @@ class DelayProfiles extends Component {
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.delayProfilesHeader}>
|
||||
<div className={styles.column}>Protocol</div>
|
||||
<div className={styles.column}>Usenet Delay</div>
|
||||
<div className={styles.column}>Torrent Delay</div>
|
||||
<div className={styles.tags}>Tags</div>
|
||||
<div className={styles.column}>
|
||||
{translate('Protocol')}
|
||||
</div>
|
||||
<div className={styles.column}>
|
||||
{translate('UsenetDelay')}
|
||||
</div>
|
||||
<div className={styles.column}>
|
||||
{translate('TorrentDelay')}
|
||||
</div>
|
||||
<div className={styles.tags}>
|
||||
{translate('Tags')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={styles.delayProfiles}>
|
||||
|
||||
@@ -25,9 +25,15 @@ class QualityDefinitions extends Component {
|
||||
{...otherProps}
|
||||
>
|
||||
<div className={styles.header}>
|
||||
<div className={styles.quality}>Quality</div>
|
||||
<div className={styles.title}>Title</div>
|
||||
<div className={styles.sizeLimit}>Size Limit</div>
|
||||
<div className={styles.quality}>
|
||||
{translate('Quality')}
|
||||
</div>
|
||||
<div className={styles.title}>
|
||||
{translate('Title')}
|
||||
</div>
|
||||
<div className={styles.sizeLimit}>
|
||||
{translate('SizeLimit')}
|
||||
</div>
|
||||
{
|
||||
advancedSettings ?
|
||||
<div className={styles.kilobitsPerSecond}>
|
||||
|
||||
@@ -18,121 +18,121 @@ function Settings() {
|
||||
className={styles.link}
|
||||
to="/settings/mediamanagement"
|
||||
>
|
||||
Media Management
|
||||
{translate('MediaManagement')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Naming, file management settings and root folders
|
||||
{translate('MediaManagementSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/profiles"
|
||||
>
|
||||
Profiles
|
||||
{translate('Profiles')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Quality, Metadata, Delay, and Release profiles
|
||||
{translate('ProfilesSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/quality"
|
||||
>
|
||||
Quality
|
||||
{translate('Quality')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Quality sizes and naming
|
||||
{translate('QualitySettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/indexers"
|
||||
>
|
||||
Indexers
|
||||
{translate('Indexers')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Indexers and indexer options
|
||||
{translate('IndexersSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/downloadclients"
|
||||
>
|
||||
Download Clients
|
||||
{translate('DownloadClients')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Download clients, download handling and remote path mappings
|
||||
{translate('DownloadClientsSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/importlists"
|
||||
>
|
||||
Import Lists
|
||||
{translate('Lists')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Import Lists
|
||||
{translate('ListsSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/connect"
|
||||
>
|
||||
Connect
|
||||
{translate('Connect')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Notifications, connections to media servers/players and custom scripts
|
||||
{translate('ConnectSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/metadata"
|
||||
>
|
||||
Metadata
|
||||
{translate('Metadata')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Create metadata files when books are imported or author are refreshed
|
||||
{translate('MetadataSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/tags"
|
||||
>
|
||||
Tags
|
||||
{translate('Tags')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Manage author, profile, restriction, and notification tags
|
||||
{translate('TagsSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/general"
|
||||
>
|
||||
General
|
||||
{translate('General')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Port, SSL, username/password, proxy, analytics and updates
|
||||
{translate('GeneralSettingsSummary')}
|
||||
</div>
|
||||
|
||||
<Link
|
||||
className={styles.link}
|
||||
to="/settings/ui"
|
||||
>
|
||||
UI
|
||||
{translate('UI')}
|
||||
</Link>
|
||||
|
||||
<div className={styles.summary}>
|
||||
Calendar, date and color impaired options
|
||||
{translate('UISettingsSummary')}
|
||||
</div>
|
||||
</PageContentBody>
|
||||
</PageContent>
|
||||
|
||||
@@ -113,9 +113,9 @@ export const defaultState = {
|
||||
},
|
||||
{
|
||||
name: 'size',
|
||||
label: 'Size',
|
||||
label: translate('Size'),
|
||||
isSortable: true,
|
||||
isVisibile: false
|
||||
isVisible: false
|
||||
},
|
||||
{
|
||||
name: 'outputPath',
|
||||
@@ -454,4 +454,3 @@ export const reducers = createHandleActions({
|
||||
})
|
||||
|
||||
}, defaultState, section);
|
||||
|
||||
|
||||
@@ -199,7 +199,7 @@ class QueuedTaskRow extends Component {
|
||||
</span>
|
||||
{
|
||||
clientUserAgent ?
|
||||
<span className={styles.userAgent} title="User-Agent provided by the app that called the API">
|
||||
<span className={styles.userAgent} title={translate('UserAgentProvidedByTheAppThatCalledTheAPI')}>
|
||||
from: {clientUserAgent}
|
||||
</span> :
|
||||
null
|
||||
|
||||
@@ -15,27 +15,27 @@ const columns = [
|
||||
},
|
||||
{
|
||||
name: 'commandName',
|
||||
label: 'Name',
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'queued',
|
||||
label: 'Queued',
|
||||
label: translate('Queued'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'started',
|
||||
label: 'Started',
|
||||
label: translate('Started'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'ended',
|
||||
label: 'Ended',
|
||||
label: translate('Ended'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'duration',
|
||||
label: 'Duration',
|
||||
label: translate('Duration'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import moment from 'moment';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import formatTime from './formatTime';
|
||||
import isToday from './isToday';
|
||||
import isTomorrow from './isTomorrow';
|
||||
@@ -10,15 +11,15 @@ function getRelativeDay(date, includeRelativeDate) {
|
||||
}
|
||||
|
||||
if (isYesterday(date)) {
|
||||
return 'Yesterday, ';
|
||||
return translate('Yesterday');
|
||||
}
|
||||
|
||||
if (isToday(date)) {
|
||||
return 'Today, ';
|
||||
return translate('Today');
|
||||
}
|
||||
|
||||
if (isTomorrow(date)) {
|
||||
return 'Tomorrow, ';
|
||||
return translate('Tomorrow');
|
||||
}
|
||||
|
||||
return '';
|
||||
|
||||
Reference in New Issue
Block a user