diff --git a/frontend/src/Activity/Blacklist/Blacklist.js b/frontend/src/Activity/Blacklist/Blacklist.js index 587d1bb4a..5e1bfbc5b 100644 --- a/frontend/src/Activity/Blacklist/Blacklist.js +++ b/frontend/src/Activity/Blacklist/Blacklist.js @@ -14,6 +14,7 @@ import TablePager from 'Components/Table/TablePager'; import { align, icons, kinds } from 'Helpers/Props'; import getRemovedItems from 'Utilities/Object/getRemovedItems'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; +import translate from 'Utilities/String/translate'; import getSelectedIds from 'Utilities/Table/getSelectedIds'; import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState'; import selectAll from 'Utilities/Table/selectAll'; @@ -120,11 +121,11 @@ class Blacklist extends Component { const selectedIds = this.getSelectedIds(); return ( - + @@ -160,7 +161,9 @@ class Blacklist extends Component { { !isAnyFetching && !!error && -
Unable to load blacklist
+
+ {translate('UnableToLoadBlacklist')} +
} { @@ -210,9 +213,9 @@ class Blacklist extends Component { diff --git a/frontend/src/Activity/Blacklist/BlacklistDetailsModal.js b/frontend/src/Activity/Blacklist/BlacklistDetailsModal.js index 75b963955..6ef3a2dd3 100644 --- a/frontend/src/Activity/Blacklist/BlacklistDetailsModal.js +++ b/frontend/src/Activity/Blacklist/BlacklistDetailsModal.js @@ -8,6 +8,7 @@ import ModalBody from 'Components/Modal/ModalBody'; import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; +import translate from 'Utilities/String/translate'; class BlacklistDetailsModal extends Component { @@ -39,19 +40,19 @@ class BlacklistDetailsModal extends Component { { !!message && } @@ -59,7 +60,7 @@ class BlacklistDetailsModal extends Component { { !!message && } diff --git a/frontend/src/Activity/Blacklist/BlacklistRow.js b/frontend/src/Activity/Blacklist/BlacklistRow.js index 76b48e7f1..2ee3191c0 100644 --- a/frontend/src/Activity/Blacklist/BlacklistRow.js +++ b/frontend/src/Activity/Blacklist/BlacklistRow.js @@ -8,6 +8,7 @@ import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableSelectCell from 'Components/Table/Cells/TableSelectCell'; import TableRow from 'Components/Table/TableRow'; import { icons, kinds } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import BlacklistDetailsModal from './BlacklistDetailsModal'; import styles from './BlacklistRow.css'; @@ -141,7 +142,7 @@ class BlacklistRow extends Component { /> { !!indexer && } @@ -93,7 +94,7 @@ function HistoryDetails(props) { !!releaseGroup && } @@ -114,7 +115,7 @@ function HistoryDetails(props) { { !!downloadClient && } @@ -122,7 +123,7 @@ function HistoryDetails(props) { { !!downloadId && } @@ -130,7 +131,7 @@ function HistoryDetails(props) { { !!indexer && } @@ -138,7 +139,7 @@ function HistoryDetails(props) { { !!publishedDate && } @@ -155,14 +156,14 @@ function HistoryDetails(props) { { !!message && } @@ -180,7 +181,7 @@ function HistoryDetails(props) { @@ -188,7 +189,7 @@ function HistoryDetails(props) { !!droppedPath && } @@ -197,7 +198,7 @@ function HistoryDetails(props) { !!importedPath && } @@ -229,12 +230,12 @@ function HistoryDetails(props) { return ( @@ -250,12 +251,12 @@ function HistoryDetails(props) { return ( @@ -271,7 +272,7 @@ function HistoryDetails(props) { return ( { @@ -286,7 +287,7 @@ function HistoryDetails(props) { }) } : } /> @@ -301,14 +302,14 @@ function HistoryDetails(props) { return ( { !!statusMessages && } @@ -332,14 +333,14 @@ function HistoryDetails(props) { return ( { !!indexer && } @@ -347,7 +348,7 @@ function HistoryDetails(props) { { !!releaseGroup && } @@ -368,7 +369,7 @@ function HistoryDetails(props) { { !!downloadClient && } @@ -376,7 +377,7 @@ function HistoryDetails(props) { { !!downloadId && } @@ -384,7 +385,7 @@ function HistoryDetails(props) { { !!indexer && } @@ -392,7 +393,7 @@ function HistoryDetails(props) { { !!publishedDate && } @@ -409,14 +410,14 @@ function HistoryDetails(props) { { !!message && } @@ -428,7 +429,7 @@ function HistoryDetails(props) { diff --git a/frontend/src/Activity/History/History.js b/frontend/src/Activity/History/History.js index 624637ec2..baeab9cd1 100644 --- a/frontend/src/Activity/History/History.js +++ b/frontend/src/Activity/History/History.js @@ -13,6 +13,7 @@ import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptions import TablePager from 'Components/Table/TablePager'; import { align, icons } from 'Helpers/Props'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; +import translate from 'Utilities/String/translate'; import HistoryRowConnector from './HistoryRowConnector'; class History extends Component { @@ -66,11 +67,11 @@ class History extends Component { const hasError = error || booksError; return ( - + @@ -106,7 +107,9 @@ class History extends Component { { !isFetchingAny && hasError && -
Unable to load history
+
+ {translate('UnableToLoadHistory')} +
} { diff --git a/frontend/src/Activity/Queue/Queue.js b/frontend/src/Activity/Queue/Queue.js index 4e25b9ed1..a5106f642 100644 --- a/frontend/src/Activity/Queue/Queue.js +++ b/frontend/src/Activity/Queue/Queue.js @@ -15,6 +15,7 @@ import TablePager from 'Components/Table/TablePager'; import { align, icons } from 'Helpers/Props'; import getRemovedItems from 'Utilities/Object/getRemovedItems'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; +import translate from 'Utilities/String/translate'; import getSelectedIds from 'Utilities/Table/getSelectedIds'; import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState'; import selectAll from 'Utilities/Table/selectAll'; @@ -150,11 +151,11 @@ class Queue extends Component { const disableSelectedActions = selectedCount === 0; return ( - + diff --git a/frontend/src/Activity/Queue/QueueDetails.js b/frontend/src/Activity/Queue/QueueDetails.js index d13dee63f..540e602ce 100644 --- a/frontend/src/Activity/Queue/QueueDetails.js +++ b/frontend/src/Activity/Queue/QueueDetails.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import Icon from 'Components/Icon'; import { icons, kinds } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; function QueueDetails(props) { const { @@ -23,7 +24,7 @@ function QueueDetails(props) { return ( ); } @@ -34,7 +35,7 @@ function QueueDetails(props) { ); } @@ -47,7 +48,7 @@ function QueueDetails(props) { ); } @@ -57,7 +58,7 @@ function QueueDetails(props) { ); } @@ -67,7 +68,7 @@ function QueueDetails(props) { ); } @@ -76,7 +77,7 @@ function QueueDetails(props) { return ( ); } diff --git a/frontend/src/Activity/Queue/QueueOptions.js b/frontend/src/Activity/Queue/QueueOptions.js index 75ac5d226..b2486579e 100644 --- a/frontend/src/Activity/Queue/QueueOptions.js +++ b/frontend/src/Activity/Queue/QueueOptions.js @@ -4,6 +4,7 @@ import FormGroup from 'Components/Form/FormGroup'; import FormInputGroup from 'Components/Form/FormInputGroup'; import FormLabel from 'Components/Form/FormLabel'; import { inputTypes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; class QueueOptions extends Component { @@ -54,13 +55,15 @@ class QueueOptions extends Component { return ( - Show Unknown Author Items + + {translate('ShowUnknownAuthorItems')} + diff --git a/frontend/src/Activity/Queue/QueueRow.js b/frontend/src/Activity/Queue/QueueRow.js index 6b46ea9ab..3bd52f999 100644 --- a/frontend/src/Activity/Queue/QueueRow.js +++ b/frontend/src/Activity/Queue/QueueRow.js @@ -15,6 +15,7 @@ import TableRow from 'Components/Table/TableRow'; import Popover from 'Components/Tooltip/Popover'; import { icons, kinds, tooltipPositions } from 'Helpers/Props'; import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal'; +import translate from 'Utilities/String/translate'; import QueueStatusCell from './QueueStatusCell'; import RemoveQueueItemModal from './RemoveQueueItemModal'; import TimeleftCell from './TimeleftCell'; @@ -285,7 +286,7 @@ class QueueRow extends Component { kind={kinds.DANGER} /> } - title="Manual Download" + title={translate('ManualDownload')} body="This release failed parsing checks and was manually downloaded from an interactive search. Import is likely to fail." position={tooltipPositions.LEFT} /> @@ -310,7 +311,7 @@ class QueueRow extends Component { } - Remove From Download Client + + {translate('RemoveFromDownloadClient')} + - Blacklist Release + + {translate('BlacklistRelease')} + @@ -122,12 +127,14 @@ class RemoveQueueItemModal extends Component { { blacklist && - Skip Redownload + + {translate('SkipRedownload')} + diff --git a/frontend/src/Activity/Queue/RemoveQueueItemsModal.js b/frontend/src/Activity/Queue/RemoveQueueItemsModal.js index 91c7a2d13..a672de728 100644 --- a/frontend/src/Activity/Queue/RemoveQueueItemsModal.js +++ b/frontend/src/Activity/Queue/RemoveQueueItemsModal.js @@ -10,6 +10,7 @@ import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { inputTypes, kinds, sizes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import styles from './RemoveQueueItemsModal.css'; class RemoveQueueItemsModal extends Component { @@ -96,13 +97,15 @@ class RemoveQueueItemsModal extends Component { - Remove From Download Client + + {translate('RemoveFromDownloadClient')} + @@ -117,7 +120,7 @@ class RemoveQueueItemsModal extends Component { type={inputTypes.CHECK} name="blacklist" value={blacklist} - helpText="Prevents Readarr from automatically grabbing these files again" + helpText={translate('BlacklistHelpText')} onChange={this.onBlacklistChange} /> @@ -125,12 +128,14 @@ class RemoveQueueItemsModal extends Component { { blacklist && - Skip Redownload + + {translate('SkipRedownload')} + diff --git a/frontend/src/Activity/Queue/TimeleftCell.js b/frontend/src/Activity/Queue/TimeleftCell.js index a8d9d52e8..56132671c 100644 --- a/frontend/src/Activity/Queue/TimeleftCell.js +++ b/frontend/src/Activity/Queue/TimeleftCell.js @@ -5,6 +5,7 @@ import formatTime from 'Utilities/Date/formatTime'; import formatTimeSpan from 'Utilities/Date/formatTimeSpan'; import getRelativeDate from 'Utilities/Date/getRelativeDate'; import formatBytes from 'Utilities/Number/formatBytes'; +import translate from 'Utilities/String/translate'; import styles from './TimeleftCell.css'; function TimeleftCell(props) { @@ -26,7 +27,7 @@ function TimeleftCell(props) { return ( - @@ -40,7 +41,7 @@ function TimeleftCell(props) { return ( - diff --git a/frontend/src/AddAuthor/AuthorMonitoringOptionsPopoverContent.js b/frontend/src/AddAuthor/AuthorMonitoringOptionsPopoverContent.js index 7f40f30cd..4f27c7fc4 100644 --- a/frontend/src/AddAuthor/AuthorMonitoringOptionsPopoverContent.js +++ b/frontend/src/AddAuthor/AuthorMonitoringOptionsPopoverContent.js @@ -1,42 +1,43 @@ import React from 'react'; import DescriptionList from 'Components/DescriptionList/DescriptionList'; import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem'; +import translate from 'Utilities/String/translate'; function AuthorMonitoringOptionsPopoverContent() { return ( diff --git a/frontend/src/App/AppUpdatedModalContent.js b/frontend/src/App/AppUpdatedModalContent.js index a7c9b8903..7594aa7fa 100644 --- a/frontend/src/App/AppUpdatedModalContent.js +++ b/frontend/src/App/AppUpdatedModalContent.js @@ -8,6 +8,7 @@ import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { kinds } from 'Helpers/Props'; import UpdateChanges from 'System/Updates/UpdateChanges'; +import translate from 'Utilities/String/translate'; import styles from './AppUpdatedModalContent.css'; function AppUpdatedModalContent(props) { @@ -49,12 +50,12 @@ function AppUpdatedModalContent(props) { diff --git a/frontend/src/Author/Delete/DeleteAuthorModalContent.js b/frontend/src/Author/Delete/DeleteAuthorModalContent.js index 61b5c9a50..43018e67c 100644 --- a/frontend/src/Author/Delete/DeleteAuthorModalContent.js +++ b/frontend/src/Author/Delete/DeleteAuthorModalContent.js @@ -11,6 +11,7 @@ import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { icons, inputTypes, kinds } from 'Helpers/Props'; import formatBytes from 'Utilities/Number/formatBytes'; +import translate from 'Utilities/String/translate'; import styles from './DeleteAuthorModalContent.css'; class DeleteAuthorModalContent extends Component { @@ -67,7 +68,7 @@ class DeleteAuthorModalContent extends Component { const addImportListExclusion = this.state.addImportListExclusion; let deleteFilesLabel = `Delete ${bookFileCount} Book Files`; - let deleteFilesHelpText = 'Delete the book files and author folder'; + let deleteFilesHelpText = translate('DeleteFilesHelpText'); if (bookFileCount === 0) { deleteFilesLabel = 'Delete Author Folder'; @@ -106,13 +107,15 @@ class DeleteAuthorModalContent extends Component { - Add List Exclusion + + {translate('AddListExclusion')} + @@ -121,7 +124,9 @@ class DeleteAuthorModalContent extends Component { { deleteFiles &&
-
The author folder {path} and all of its content will be deleted.
+
+ {translate('TheAuthorFolderStrongpathstrongAndAllOfItsContentWillBeDeleted')} +
{ !!bookFileCount && diff --git a/frontend/src/Author/Details/AuthorDetails.js b/frontend/src/Author/Details/AuthorDetails.js index df665b41a..2a6e743fc 100644 --- a/frontend/src/Author/Details/AuthorDetails.js +++ b/frontend/src/Author/Details/AuthorDetails.js @@ -20,6 +20,7 @@ import InteractiveSearchFilterMenuConnector from 'InteractiveSearch/InteractiveS import InteractiveSearchTable from 'InteractiveSearch/InteractiveSearchTable'; import OrganizePreviewModalConnector from 'Organize/OrganizePreviewModalConnector'; import RetagPreviewModalConnector from 'Retag/RetagPreviewModalConnector'; +import translate from 'Utilities/String/translate'; import selectAll from 'Utilities/Table/selectAll'; import toggleSelected from 'Utilities/Table/toggleSelected'; import InteractiveImportModal from '../../InteractiveImport/InteractiveImportModal'; @@ -181,41 +182,41 @@ class AuthorDetails extends Component { @@ -223,13 +224,13 @@ class AuthorDetails extends Component { @@ -237,7 +238,7 @@ class AuthorDetails extends Component { @@ -258,7 +259,7 @@ class AuthorDetails extends Component { className={styles.authorNavigationButton} name={icons.ARROW_LEFT} size={30} - title={`Go to ${previousAuthor.authorName}`} + title={translate('GoToInterp', [previousAuthor.authorName])} to={`/author/${previousAuthor.titleSlug}`} /> @@ -266,7 +267,7 @@ class AuthorDetails extends Component { className={styles.authorUpButton} name={icons.ARROW_UP} size={30} - title={'Go to author listing'} + title={translate('GoToAuthorListing')} to={'/'} /> @@ -274,7 +275,7 @@ class AuthorDetails extends Component { className={styles.authorNavigationButton} name={icons.ARROW_RIGHT} size={30} - title={`Go to ${nextAuthor.authorName}`} + title={translate('GoToInterp', [nextAuthor.authorName])} to={`/author/${nextAuthor.titleSlug}`} />
@@ -288,12 +289,16 @@ class AuthorDetails extends Component { { !isFetching && booksError && -
Loading books failed
+
+ {translate('LoadingBooksFailed')} +
} { !isFetching && bookFilesError && -
Loading book files failed
+
+ {translate('LoadingBookFilesFailed')} +
} { diff --git a/frontend/src/Author/Details/AuthorDetailsHeader.js b/frontend/src/Author/Details/AuthorDetailsHeader.js index cc5d1d42e..afb554bac 100644 --- a/frontend/src/Author/Details/AuthorDetailsHeader.js +++ b/frontend/src/Author/Details/AuthorDetailsHeader.js @@ -15,6 +15,7 @@ import QualityProfileNameConnector from 'Settings/Profiles/Quality/QualityProfil import fonts from 'Styles/Variables/fonts'; import formatBytes from 'Utilities/Number/formatBytes'; import stripHtml from 'Utilities/String/stripHtml'; +import translate from 'Utilities/String/translate'; import AuthorAlternateTitles from './AuthorAlternateTitles'; import AuthorDetailsLinks from './AuthorDetailsLinks'; import AuthorTagsConnector from './AuthorTagsConnector'; @@ -95,7 +96,7 @@ class AuthorDetailsHeader extends Component { const continuing = status === 'continuing'; - let bookFilesCountMessage = 'No book files'; + let bookFilesCountMessage = translate('BookFilesCountMessage'); if (bookFileCount === 1) { bookFilesCountMessage = '1 book file'; @@ -152,7 +153,7 @@ class AuthorDetailsHeader extends Component { size={20} /> } - title="Alternate Titles" + title={translate('AlternateTitles')} body={} position={tooltipPositions.BOTTOM} /> @@ -204,7 +205,7 @@ class AuthorDetailsHeader extends Component {