From 699d2be9386843ed7146f0050a0322c494281088 Mon Sep 17 00:00:00 2001 From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com> Date: Sun, 22 Nov 2020 21:34:51 -0600 Subject: [PATCH] New: Add Missing Translations --- frontend/src/Activity/Blacklist/Blacklist.js | 6 +- .../History/Details/HistoryDetails.js | 6 +- frontend/src/Activity/History/History.js | 2 +- frontend/src/Activity/Queue/Queue.js | 4 +- frontend/src/Activity/Queue/QueueDetails.js | 2 +- .../Activity/Queue/RemoveQueueItemModal.js | 4 +- .../Activity/Queue/RemoveQueueItemsModal.js | 2 +- .../ImportMovie/Import/ImportMovie.js | 2 +- frontend/src/App/AppUpdatedModalContent.js | 16 +- .../src/Calendar/Header/CalendarHeader.js | 6 +- frontend/src/Calendar/Legend/Legend.js | 21 +- .../Options/CalendarOptionsModalContent.js | 2 +- .../Calendar/iCal/CalendarLinkModalContent.js | 2 +- .../Builder/DateFilterBuilderRowValue.js | 13 +- .../Form/AvailabilitySelectInput.js | 9 +- frontend/src/DiscoverMovie/DiscoverMovie.js | 2 +- .../src/DiscoverMovie/DiscoverMovieFooter.js | 4 +- .../Exclusion/ExcludeMovieModalContent.js | 2 +- .../Menus/DiscoverMovieSortMenu.js | 19 +- .../Menus/DiscoverMovieViewMenu.js | 7 +- frontend/src/DiscoverMovie/NoDiscoverMovie.js | 2 +- .../Overview/DiscoverMovieOverviewInfo.js | 11 +- ...iscoverMovieOverviewOptionsModalContent.js | 6 +- .../DiscoverMoviePosterOptionsModalContent.js | 6 +- ...teractiveImportSelectFolderModalContent.js | 4 +- .../InteractiveImportModalContent.js | 28 +-- .../InteractiveImportModalContentConnector.js | 7 +- .../Language/SelectLanguageModalContent.js | 4 +- .../Movie/SelectMovieModalContent.js | 2 +- .../Quality/SelectQualityModalContent.js | 4 +- .../InteractiveSearchContent.js | 8 +- .../InteractiveSearch/InteractiveSearchRow.js | 4 +- .../Movie/Delete/DeleteMovieModalContent.js | 24 +- .../src/Movie/Details/MovieDetailsLinks.js | 11 +- .../Details/MovieDetailsPageConnector.js | 2 +- .../Details/Titles/MovieTitlesTableContent.js | 8 +- .../Editor/Delete/DeleteMovieModalContent.js | 2 +- .../src/Movie/Editor/MovieEditorFooter.js | 6 +- .../Organize/OrganizeMovieModalContent.js | 8 +- .../src/Movie/Editor/Tags/TagsModalContent.js | 6 +- .../Movie/History/MovieHistoryTableContent.js | 8 +- .../Movie/Index/Menus/MovieIndexSearchMenu.js | 5 +- .../Movie/Index/Menus/MovieIndexSortMenu.js | 2 +- frontend/src/Movie/Index/MovieIndex.js | 4 +- .../MovieIndexOverviewOptionsModalContent.js | 6 +- .../Movie/Index/Posters/MovieIndexPoster.js | 2 +- .../MovieIndexPosterOptionsModalContent.js | 6 +- .../src/Movie/MoveMovie/MoveMovieModal.js | 13 +- frontend/src/Movie/MovieLanguage.js | 2 +- frontend/src/Movie/MovieStatus.js | 17 +- frontend/src/Movie/NoMovie.js | 2 +- .../Editor/MovieFileEditorTableContent.js | 2 +- .../Quality/SelectQualityModalContent.js | 4 +- .../CustomFormats/CustomFormat.js | 2 +- .../EditCustomFormatModalContent.js | 4 +- .../Specifications/AddSpecificationItem.js | 4 +- .../EditSpecificationModalContent.js | 6 +- .../Specifications/Specification.js | 6 +- .../DownloadClients/AddDownloadClientItem.js | 4 +- .../AddDownloadClientModalContent.js | 2 +- .../DownloadClients/DownloadClient.js | 6 +- .../EditDownloadClientModalContent.js | 2 +- .../src/Settings/General/LoggingSettings.js | 6 +- .../src/Settings/General/ProxySettings.js | 6 +- .../src/Settings/General/SecuritySettings.js | 12 +- .../src/Settings/General/UpdateSettings.js | 4 +- .../EditImportExclusionModalContent.js | 2 +- .../ImportLists/AddImportListItem.js | 4 +- .../ImportLists/EditImportListModalContent.js | 2 +- .../ImportLists/ImportLists/ImportList.js | 6 +- .../ImportLists/Options/ImportListOptions.js | 10 +- .../Indexers/Indexers/AddIndexerItem.js | 4 +- .../Indexers/AddIndexerModalContent.js | 2 +- .../src/Settings/Indexers/Indexers/Indexer.js | 2 +- .../MediaManagement/MediaManagement.js | 18 +- .../Settings/MediaManagement/Naming/Naming.js | 12 +- .../MediaManagement/Naming/NamingModal.js | 8 +- .../RootFolder/AddRootFolder.js | 3 +- .../Settings/Metadata/Metadata/Metadata.js | 9 +- .../Metadata/Options/MetadataOptions.js | 2 + .../Notifications/AddNotificationItem.js | 4 +- .../AddNotificationModalContent.js | 2 +- .../EditNotificationModalContent.js | 2 +- .../Notifications/Notification.js | 14 +- .../Settings/Profiles/Delay/DelayProfile.js | 4 +- .../Delay/EditDelayProfileModalContent.js | 4 +- .../EditDelayProfileModalContentConnector.js | 9 +- frontend/src/Settings/Profiles/Profiles.js | 6 +- .../Quality/EditQualityProfileModalContent.js | 16 +- .../Quality/QualityProfileFormatItems.js | 10 +- .../Profiles/Quality/QualityProfileItems.js | 7 +- .../Quality/Definition/QualityDefinition.js | 10 +- .../Quality/Definition/QualityDefinitions.js | 4 +- .../Tags/Details/TagDetailsDelayProfile.js | 9 +- .../Tags/Details/TagDetailsModalContent.js | 2 +- frontend/src/Settings/Tags/Tag.js | 2 +- frontend/src/Settings/UI/UISettings.js | 4 +- .../Backup/RestoreBackupModalContent.js | 8 +- frontend/src/System/Events/LogsTable.js | 2 +- .../System/Events/LogsTableDetailsModal.js | 2 +- frontend/src/System/Logs/Files/LogFiles.js | 2 +- .../System/Logs/Files/LogFilesConnector.js | 3 +- .../src/System/Logs/Files/LogFilesTableRow.js | 3 +- .../src/System/Status/MoreInfo/MoreInfo.js | 24 +- .../src/System/Tasks/Queued/QueuedTasks.js | 12 +- .../System/Tasks/Scheduled/ScheduledTasks.js | 10 +- frontend/src/System/Updates/Updates.js | 14 +- src/NzbDrone.Core/Localization/Core/en.json | 228 ++++++++++++++++-- 108 files changed, 584 insertions(+), 338 deletions(-) diff --git a/frontend/src/Activity/Blacklist/Blacklist.js b/frontend/src/Activity/Blacklist/Blacklist.js index 34b274a29..371871581 100644 --- a/frontend/src/Activity/Blacklist/Blacklist.js +++ b/frontend/src/Activity/Blacklist/Blacklist.js @@ -208,9 +208,9 @@ class Blacklist extends Component { diff --git a/frontend/src/Activity/History/Details/HistoryDetails.js b/frontend/src/Activity/History/Details/HistoryDetails.js index 82d8dc799..2659f0d3e 100644 --- a/frontend/src/Activity/History/Details/HistoryDetails.js +++ b/frontend/src/Activity/History/Details/HistoryDetails.js @@ -173,13 +173,13 @@ function HistoryDetails(props) { switch (reason) { case 'Manual': - reasonMessage = 'File was deleted by via UI'; + reasonMessage = translate('FileWasDeletedByViaUI'); break; case 'MissingFromDisk': - reasonMessage = 'Radarr 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 = ''; diff --git a/frontend/src/Activity/History/History.js b/frontend/src/Activity/History/History.js index 82823a459..770f5569e 100644 --- a/frontend/src/Activity/History/History.js +++ b/frontend/src/Activity/History/History.js @@ -94,7 +94,7 @@ class History extends Component { isPopulated && !hasError && !items.length &&
- No history found + {translate('NoHistory')}
} diff --git a/frontend/src/Activity/Queue/Queue.js b/frontend/src/Activity/Queue/Queue.js index c60cd4114..9a42efd19 100644 --- a/frontend/src/Activity/Queue/Queue.js +++ b/frontend/src/Activity/Queue/Queue.js @@ -203,14 +203,14 @@ class Queue extends Component { { !isRefreshing && hasError &&
- Failed to load Queue + {translate('FailedToLoadQueue')}
} { isPopulated && !hasError && !items.length &&
- Queue is empty + {translate('QueueIsEmpty')}
} diff --git a/frontend/src/Activity/Queue/QueueDetails.js b/frontend/src/Activity/Queue/QueueDetails.js index 874b52217..9176a0b3b 100644 --- a/frontend/src/Activity/Queue/QueueDetails.js +++ b/frontend/src/Activity/Queue/QueueDetails.js @@ -45,7 +45,7 @@ function QueueDetails(props) { ); } diff --git a/frontend/src/Activity/Queue/RemoveQueueItemModal.js b/frontend/src/Activity/Queue/RemoveQueueItemModal.js index e6840ab7e..c77248c11 100644 --- a/frontend/src/Activity/Queue/RemoveQueueItemModal.js +++ b/frontend/src/Activity/Queue/RemoveQueueItemModal.js @@ -81,12 +81,12 @@ class RemoveQueueItemModal extends Component { onModalClose={this.onModalClose} > - Remove - {sourceTitle} + {translate('Remove')} - {sourceTitle}
- Are you sure you want to remove '{sourceTitle}' from the queue? + {translate('RemoveFromQueueText', [sourceTitle])}
diff --git a/frontend/src/Activity/Queue/RemoveQueueItemsModal.js b/frontend/src/Activity/Queue/RemoveQueueItemsModal.js index 9b52ef160..aeea42dfc 100644 --- a/frontend/src/Activity/Queue/RemoveQueueItemsModal.js +++ b/frontend/src/Activity/Queue/RemoveQueueItemsModal.js @@ -87,7 +87,7 @@ class RemoveQueueItemsModal extends Component {
- Are you sure you want to remove {selectedCount} item{selectedCount > 1 ? 's' : ''} from the queue? + {translate('AreYouSureYouWantToRemoveSelectedItemsFromQueue', [selectedCount, selectedCount > 1 ? 's' : ''])}
diff --git a/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js b/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js index ee5f42342..bebab969f 100644 --- a/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js +++ b/frontend/src/AddMovie/ImportMovie/Import/ImportMovie.js @@ -116,7 +116,7 @@ class ImportMovie extends Component { rootFoldersPopulated && !unmappedFolders.length ?
- All movies in {path} have been imported + {translate('AllMoviesInPathHaveBeenImported', [path])}
: null } diff --git a/frontend/src/App/AppUpdatedModalContent.js b/frontend/src/App/AppUpdatedModalContent.js index ab037b7c7..7b732a45a 100644 --- a/frontend/src/App/AppUpdatedModalContent.js +++ b/frontend/src/App/AppUpdatedModalContent.js @@ -26,27 +26,27 @@ function AppUpdatedModalContent(props) { return ( - Radarr Updated + {translate('RadarrUpdated')} -
- Version {version} of Radarr has been installed, in order to get the latest changes you'll need to reload Radarr. -
+
${version}`]) }} /> { isPopulated && !error && !!update &&
{ !update.changes && -
Maintenance release
+
+ {translate('MaintenanceRelease')} +
} { !!update.changes &&
- What's new? + {translate('WhatsNew')}
- Recent Changes + translate('RecentChanges') diff --git a/frontend/src/Calendar/Header/CalendarHeader.js b/frontend/src/Calendar/Header/CalendarHeader.js index 95497c7f0..7bd60250a 100644 --- a/frontend/src/Calendar/Header/CalendarHeader.js +++ b/frontend/src/Calendar/Header/CalendarHeader.js @@ -168,7 +168,7 @@ class CalendarHeader extends Component { selectedView={view} onPress={this.onViewChange} > - Month + {translate('Month')} } @@ -177,7 +177,7 @@ class CalendarHeader extends Component { selectedView={view} onPress={this.onViewChange} > - Week + {translate('Week')} - Forecast + {translate('Forecast')} ); } @@ -28,28 +29,28 @@ function Legend(props) {
diff --git a/frontend/src/Calendar/Options/CalendarOptionsModalContent.js b/frontend/src/Calendar/Options/CalendarOptionsModalContent.js index 32650184b..a481b46de 100644 --- a/frontend/src/Calendar/Options/CalendarOptionsModalContent.js +++ b/frontend/src/Calendar/Options/CalendarOptionsModalContent.js @@ -107,7 +107,7 @@ class CalendarOptionsModalContent extends Component { return ( - Calendar Options + {translate('CalendarOptions')} diff --git a/frontend/src/Calendar/iCal/CalendarLinkModalContent.js b/frontend/src/Calendar/iCal/CalendarLinkModalContent.js index f4fa69226..ef6a3dc96 100644 --- a/frontend/src/Calendar/iCal/CalendarLinkModalContent.js +++ b/frontend/src/Calendar/iCal/CalendarLinkModalContent.js @@ -109,7 +109,7 @@ class CalendarLinkModalContent extends Component { return ( - Radarr Calendar Feed + {translate('RadarrCalendarFeed')} diff --git a/frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js b/frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js index 26d879dff..516cb7aeb 100644 --- a/frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js +++ b/frontend/src/Components/Filter/Builder/DateFilterBuilderRowValue.js @@ -5,16 +5,17 @@ import SelectInput from 'Components/Form/SelectInput'; import TextInput from 'Components/Form/TextInput'; import { IN_LAST, IN_NEXT, NOT_IN_LAST, NOT_IN_NEXT } from 'Helpers/Props/filterTypes'; import isString from 'Utilities/String/isString'; +import translate from 'Utilities/String/translate'; import { NAME } from './FilterBuilderRowValue'; import styles from './DateFilterBuilderRowValue.css'; const timeOptions = [ - { key: 'seconds', value: 'seconds' }, - { key: 'minutes', value: 'minutes' }, - { key: 'hours', value: 'hours' }, - { key: 'days', value: 'days' }, - { key: 'weeks', value: 'weeks' }, - { key: 'months', value: 'months' } + { key: 'seconds', value: translate('Seconds') }, + { key: 'minutes', value: translate('Minutes') }, + { key: 'hours', value: translate('Hours') }, + { key: 'days', value: translate('Days') }, + { key: 'weeks', value: translate('Weeks') }, + { key: 'months', value: translate('Months') } ]; function isInFilter(filterType) { diff --git a/frontend/src/Components/Form/AvailabilitySelectInput.js b/frontend/src/Components/Form/AvailabilitySelectInput.js index af9bdb2d6..d51cf76d5 100644 --- a/frontend/src/Components/Form/AvailabilitySelectInput.js +++ b/frontend/src/Components/Form/AvailabilitySelectInput.js @@ -1,12 +1,13 @@ import PropTypes from 'prop-types'; import React from 'react'; +import translate from 'Utilities/String/translate'; import SelectInput from './SelectInput'; const availabilityOptions = [ - { key: 'announced', value: 'Announced' }, - { key: 'inCinemas', value: 'In Cinemas' }, - { key: 'released', value: 'Released' }, - { key: 'preDB', value: 'PreDB' } + { key: 'announced', value: translate('Announced') }, + { key: 'inCinemas', value: translate('InCinemas') }, + { key: 'released', value: translate('Released') }, + { key: 'preDB', value: translate('PreDB') } ]; function AvailabilitySelectInput(props) { diff --git a/frontend/src/DiscoverMovie/DiscoverMovie.js b/frontend/src/DiscoverMovie/DiscoverMovie.js index 9ec0ccc5d..49ca28d98 100644 --- a/frontend/src/DiscoverMovie/DiscoverMovie.js +++ b/frontend/src/DiscoverMovie/DiscoverMovie.js @@ -279,7 +279,7 @@ class DiscoverMovie extends Component {
- Exclude {title}? This will prevent Radarr from adding automatically via list sync. + {translate('ExcludeTitle', [title])}
diff --git a/frontend/src/DiscoverMovie/Menus/DiscoverMovieSortMenu.js b/frontend/src/DiscoverMovie/Menus/DiscoverMovieSortMenu.js index 691c645b7..95fe93030 100644 --- a/frontend/src/DiscoverMovie/Menus/DiscoverMovieSortMenu.js +++ b/frontend/src/DiscoverMovie/Menus/DiscoverMovieSortMenu.js @@ -4,6 +4,7 @@ import MenuContent from 'Components/Menu/MenuContent'; import SortMenu from 'Components/Menu/SortMenu'; import SortMenuItem from 'Components/Menu/SortMenuItem'; import { align, sortDirections } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; function DiscoverMovieSortMenu(props) { const { @@ -25,7 +26,7 @@ function DiscoverMovieSortMenu(props) { sortDirection={sortDirection} onPress={onSortSelect} > - Status + {translate('Status')} - Title + {translate('Title')} - Studio + {translate('Studio')} - In Cinemas + {translate('InCinemas')} - Physical Release + {translate('PhysicalRelease')} - Digital Release + {translate('DigitalRelease')} - Runtime + {translate('Runtime')} - Rating + {translate('Rating')} - Certification + {translate('Certification')} diff --git a/frontend/src/DiscoverMovie/Menus/DiscoverMovieViewMenu.js b/frontend/src/DiscoverMovie/Menus/DiscoverMovieViewMenu.js index 6ad076bdc..4e6078744 100644 --- a/frontend/src/DiscoverMovie/Menus/DiscoverMovieViewMenu.js +++ b/frontend/src/DiscoverMovie/Menus/DiscoverMovieViewMenu.js @@ -4,6 +4,7 @@ import MenuContent from 'Components/Menu/MenuContent'; import ViewMenu from 'Components/Menu/ViewMenu'; import ViewMenuItem from 'Components/Menu/ViewMenuItem'; import { align } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; function DiscoverMovieViewMenu(props) { const { @@ -23,7 +24,7 @@ function DiscoverMovieViewMenu(props) { selectedView={view} onPress={onViewSelect} > - Table + {translate('Table')} - Posters + {translate('Posters')} - Overview + {translate('Overview')} diff --git a/frontend/src/DiscoverMovie/NoDiscoverMovie.js b/frontend/src/DiscoverMovie/NoDiscoverMovie.js index a967b867e..0a14b4c1a 100644 --- a/frontend/src/DiscoverMovie/NoDiscoverMovie.js +++ b/frontend/src/DiscoverMovie/NoDiscoverMovie.js @@ -21,7 +21,7 @@ function NoDiscoverMovie(props) { return (
- No list items or recommendations found, to get started you'll want to add a new movie, import some existing ones, or add a list. + {translate('NoListRecommendations')}
diff --git a/frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.js b/frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.js index ca728f2e4..5352dd464 100644 --- a/frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.js +++ b/frontend/src/DiscoverMovie/Overview/DiscoverMovieOverviewInfo.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import { icons } from 'Helpers/Props'; import dimensions from 'Styles/Variables/dimensions'; +import translate from 'Utilities/String/translate'; import DiscoverMovieOverviewInfoRow from './DiscoverMovieOverviewInfoRow'; import styles from './DiscoverMovieOverviewInfo.css'; @@ -54,7 +55,7 @@ function getInfoRowProps(row, props) { if (name === 'year') { return { - title: 'Year', + title: translate('Year'), iconName: icons.CALENDAR, label: props.year }; @@ -62,7 +63,7 @@ function getInfoRowProps(row, props) { if (name === 'genres') { return { - title: 'Genres', + title: translate('Genres'), iconName: icons.GENRE, label: props.genres.slice(0, 2).join(', ') }; @@ -70,7 +71,7 @@ function getInfoRowProps(row, props) { if (name === 'ratings') { return { - title: 'Ratings', + title: translate('Ratings'), iconName: icons.HEART, label: `${props.ratings.value * 10}%` }; @@ -78,7 +79,7 @@ function getInfoRowProps(row, props) { if (name === 'certification') { return { - title: 'Certification', + title: translate('Certification'), iconName: icons.FILM, label: props.certification }; @@ -86,7 +87,7 @@ function getInfoRowProps(row, props) { if (name === 'studio') { return { - title: 'Studio', + title: translate('Studio'), iconName: icons.STUDIO, label: props.studio }; diff --git a/frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContent.js b/frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContent.js index 2bc383416..e6a2e6e29 100644 --- a/frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContent.js +++ b/frontend/src/DiscoverMovie/Overview/Options/DiscoverMovieOverviewOptionsModalContent.js @@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const posterSizeOptions = [ - { key: 'small', value: 'Small' }, - { key: 'medium', value: 'Medium' }, - { key: 'large', value: 'Large' } + { key: 'small', value: translate('Small') }, + { key: 'medium', value: translate('Medium') }, + { key: 'large', value: translate('Large') } ]; class DiscoverMovieOverviewOptionsModalContent extends Component { diff --git a/frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContent.js b/frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContent.js index c15b5ebb7..dbaf00100 100644 --- a/frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContent.js +++ b/frontend/src/DiscoverMovie/Posters/Options/DiscoverMoviePosterOptionsModalContent.js @@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const posterSizeOptions = [ - { key: 'small', value: 'Small' }, - { key: 'medium', value: 'Medium' }, - { key: 'large', value: 'Large' } + { key: 'small', value: translate('Small') }, + { key: 'medium', value: translate('Medium') }, + { key: 'large', value: translate('Large') } ]; class DiscoverMoviePosterOptionsModalContent extends Component { diff --git a/frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.js b/frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.js index c99f4e33a..5cc14ffbe 100644 --- a/frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.js +++ b/frontend/src/InteractiveImport/Folder/InteractiveImportSelectFolderModalContent.js @@ -17,11 +17,11 @@ import styles from './InteractiveImportSelectFolderModalContent.css'; const recentFoldersColumns = [ { name: 'folder', - label: 'Folder' + label: translate('Folder') }, { name: 'lastUsed', - label: 'Last Used' + label: translate('LastUsed') }, { name: 'actions', diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js index 1aab8f6dc..48d31e397 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js @@ -69,8 +69,8 @@ const columns = [ ]; const filterExistingFilesOptions = { - ALL: 'all', - NEW: 'new' + ALL: translate('All'), + NEW: translate('New') }; const importModeOptions = [ @@ -198,25 +198,25 @@ class InteractiveImportModalContent extends Component { } = this.state; const selectedIds = this.getSelectedIds(); - const errorMessage = getErrorMessage(error, 'Unable to load manual import items'); + const errorMessage = getErrorMessage(error, translate('UnableToLoadManualImportItems')); const bulkSelectOptions = [ - { key: SELECT, value: 'Select...', disabled: true }, - { key: LANGUAGE, value: 'Select Language' }, - { key: QUALITY, value: 'Select Quality' } - ]; + { + key: SELECT, value: translate('SelectDotDot'), disabled: true }, + { key: LANGUAGE, value: translate('SelectLanguage') }, + { key: QUALITY, value: translate('SelectQuality') }]; if (allowMovieChange) { bulkSelectOptions.splice(1, 0, { key: MOVIE, - value: 'Select Movie' + value: translate('SelectMovie') }); } return ( - Manual Import - {title || folder} + {translate('ManualImport')} - {title || folder} @@ -232,7 +232,7 @@ class InteractiveImportModalContent extends Component {
{ - filterExistingFiles ? 'Unmapped Files Only' : 'All Files' + filterExistingFiles ? translate('UnmappedFilesOnly') : translate('AllFiles') }
@@ -243,7 +243,7 @@ class InteractiveImportModalContent extends Component { isSelected={!filterExistingFiles} onPress={this.onFilterExistingFilesChange} > - All Files + {translate('AllFiles')} - Unmapped Files Only + {translate('UnmappedFilesOnly')} @@ -302,7 +302,7 @@ class InteractiveImportModalContent extends Component { { isPopulated && !items.length && !isFetching && - 'No video files were found in the selected folder' + translate('NoVideoFilesFoundSelectedFolder') }
@@ -345,7 +345,7 @@ class InteractiveImportModalContent extends Component { isDisabled={!selectedIds.length || !!invalidRowsSelected.length} onPress={this.onImportSelectedPress} > - Import + {translate('Import')}
diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js index d1544c79c..75bedbc0d 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js @@ -7,6 +7,7 @@ import * as commandNames from 'Commands/commandNames'; import { executeCommand } from 'Store/Actions/commandActions'; import { clearInteractiveImport, fetchInteractiveImportItems, setInteractiveImportMode, setInteractiveImportSort } from 'Store/Actions/interactiveImportActions'; import createClientSideCollectionSelector from 'Store/Selectors/createClientSideCollectionSelector'; +import translate from 'Utilities/String/translate'; import InteractiveImportModalContent from './InteractiveImportModalContent'; function createMapStateToProps() { @@ -113,17 +114,17 @@ class InteractiveImportModalContentConnector extends Component { } = item; if (!movie) { - this.setState({ interactiveImportErrorMessage: 'Movie must be chosen for each selected file' }); + this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrMovie') }); return false; } if (!quality) { - this.setState({ interactiveImportErrorMessage: 'Quality must be chosen for each selected file' }); + this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrQuality') }); return false; } if (!languages) { - this.setState({ interactiveImportErrorMessage: 'Language must be chosen for each selected file' }); + this.setState({ interactiveImportErrorMessage: translate('InteractiveImportErrLanguage') }); return false; } diff --git a/frontend/src/InteractiveImport/Language/SelectLanguageModalContent.js b/frontend/src/InteractiveImport/Language/SelectLanguageModalContent.js index 67f182ad7..3184c8607 100644 --- a/frontend/src/InteractiveImport/Language/SelectLanguageModalContent.js +++ b/frontend/src/InteractiveImport/Language/SelectLanguageModalContent.js @@ -77,7 +77,7 @@ class SelectLanguageModalContent extends Component { return ( - Manual Import - Select Language + {translate('ManualImportSelectLanguage')} @@ -128,7 +128,7 @@ class SelectLanguageModalContent extends Component { kind={kinds.SUCCESS} onPress={this.onLanguageSelect} > - Select Languges + {translate('SelectLanguges')} diff --git a/frontend/src/InteractiveImport/Movie/SelectMovieModalContent.js b/frontend/src/InteractiveImport/Movie/SelectMovieModalContent.js index a35c30ecd..5182c8a4f 100644 --- a/frontend/src/InteractiveImport/Movie/SelectMovieModalContent.js +++ b/frontend/src/InteractiveImport/Movie/SelectMovieModalContent.js @@ -173,7 +173,7 @@ class SelectMovieModalContent extends Component {
- Manual Import - Select Movie + {translate('ManualImportSelectMovie')}
diff --git a/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js b/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js index dd22b9889..cfa0337f2 100644 --- a/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js +++ b/frontend/src/InteractiveImport/Quality/SelectQualityModalContent.js @@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component { return ( - Manual Import - Select Quality + {translate('ManualImportSelectQuality')} @@ -146,7 +146,7 @@ class SelectQualityModalContent extends Component { kind={kinds.SUCCESS} onPress={this.onQualitySelect} > - Select Quality + {translate('SelectQuality')} diff --git a/frontend/src/InteractiveSearch/InteractiveSearchContent.js b/frontend/src/InteractiveSearch/InteractiveSearchContent.js index b9a836a10..914172221 100644 --- a/frontend/src/InteractiveSearch/InteractiveSearchContent.js +++ b/frontend/src/InteractiveSearch/InteractiveSearchContent.js @@ -128,21 +128,21 @@ function InteractiveSearchContent(props) { { !isFetching && !!error &&
- Unable to load results for this movie search. Try again later + {translate('UnableToLoadResultsIntSearch')}
} { !isFetching && isPopulated && !totalReleasesCount &&
- No results found + {translate('NoResultsFound')}
} { !!totalReleasesCount && isPopulated && !items.length &&
- All results are hidden by the applied filter + {translate('AllResultsHiddenFilter')}
} @@ -176,7 +176,7 @@ function InteractiveSearchContent(props) { { totalReleasesCount !== items.length && !!items.length &&
- Some results are hidden by the applied filter + {translate('SomeResultsHiddenFilter')}
}
diff --git a/frontend/src/InteractiveSearch/InteractiveSearchRow.js b/frontend/src/InteractiveSearch/InteractiveSearchRow.js index 5c7ce20de..8881f42c5 100644 --- a/frontend/src/InteractiveSearch/InteractiveSearchRow.js +++ b/frontend/src/InteractiveSearch/InteractiveSearchRow.js @@ -35,12 +35,12 @@ function getDownloadTooltip(isGrabbing, isGrabbed, grabError) { if (isGrabbing) { return ''; } else if (isGrabbed) { - return 'Added to downloaded queue'; + return translate('AddedToDownloadQueue'); } else if (grabError) { return grabError; } - return 'Add to downloaded queue'; + return translate('AddToDownloadQueue'); } class InteractiveSearchRow extends Component { diff --git a/frontend/src/Movie/Delete/DeleteMovieModalContent.js b/frontend/src/Movie/Delete/DeleteMovieModalContent.js index f4eec2b8a..7474f61ce 100644 --- a/frontend/src/Movie/Delete/DeleteMovieModalContent.js +++ b/frontend/src/Movie/Delete/DeleteMovieModalContent.js @@ -66,12 +66,12 @@ class DeleteMovieModalContent extends Component { const deleteFiles = this.state.deleteFiles; const addImportExclusion = this.state.addImportExclusion; - let deleteFilesLabel = `Delete ${movieFileCount} Movie Files`; - let deleteFilesHelpText = 'Delete the movie files and movie folder'; + let deleteFilesLabel = translate('DeleteFilesLabel', [movieFileCount]); + let deleteFilesHelpText = translate('DeleteFilesHelpText'); if (movieFileCount === 0) { - deleteFilesLabel = 'Delete Movie Folder'; - deleteFilesHelpText = 'Delete the movie folder and it\'s contents'; + deleteFilesLabel = translate('DeleteMovieFolderLabel'); + deleteFilesHelpText = translate('DeleteMovieFolderHelpText'); } return ( @@ -79,7 +79,7 @@ class DeleteMovieModalContent extends Component { onModalClose={onModalClose} > - Delete - {title} + {translate('DeleteHeader', [title])} @@ -108,23 +108,29 @@ class DeleteMovieModalContent extends Component { { deleteFiles &&
-
The movie folder {path} and all it's content will be deleted.
+
+ {translate('DeleteTheMovieFolder', [path])} +
{ !!movieFileCount && -
{movieFileCount} movie files totaling {formatBytes(sizeOnDisk)}
+
+ {movieFileCount} {translate('MovieFilesTotaling')} {formatBytes(sizeOnDisk)} +
}
} - Add List Exclusion + + {translate('AddListExclusion')} + diff --git a/frontend/src/Movie/Details/MovieDetailsLinks.js b/frontend/src/Movie/Details/MovieDetailsLinks.js index cdeab6eec..e9eef02ec 100644 --- a/frontend/src/Movie/Details/MovieDetailsLinks.js +++ b/frontend/src/Movie/Details/MovieDetailsLinks.js @@ -3,6 +3,7 @@ import React from 'react'; import Label from 'Components/Label'; import Link from 'Components/Link/Link'; import { kinds, sizes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import styles from './MovieDetailsLinks.css'; function MovieDetailsLinks(props) { @@ -23,7 +24,7 @@ function MovieDetailsLinks(props) { kind={kinds.INFO} size={sizes.LARGE} > - TMDb + {translate('TMDb')} @@ -36,7 +37,7 @@ function MovieDetailsLinks(props) { kind={kinds.INFO} size={sizes.LARGE} > - Trakt + {translate('Trakt')} @@ -51,7 +52,7 @@ function MovieDetailsLinks(props) { kind={kinds.INFO} size={sizes.LARGE} > - IMDb + {translate('IMDb')} } @@ -67,7 +68,7 @@ function MovieDetailsLinks(props) { kind={kinds.INFO} size={sizes.LARGE} > - Movie Chat + {translate('MovieChat')} } @@ -83,7 +84,7 @@ function MovieDetailsLinks(props) { kind={kinds.DANGER} size={sizes.LARGE} > - Trailer + {translate('Trailer')} } diff --git a/frontend/src/Movie/Details/MovieDetailsPageConnector.js b/frontend/src/Movie/Details/MovieDetailsPageConnector.js index 7a3ba0d29..9340d5073 100644 --- a/frontend/src/Movie/Details/MovieDetailsPageConnector.js +++ b/frontend/src/Movie/Details/MovieDetailsPageConnector.js @@ -85,7 +85,7 @@ class MovieDetailsPageConnector extends Component { if (!isFetching && !!error) { return (
- {getErrorMessage(error, 'Failed to load movie from API')} + {getErrorMessage(error, translate('FailedToLoadMovieFromAPI'))}
); } diff --git a/frontend/src/Movie/Details/Titles/MovieTitlesTableContent.js b/frontend/src/Movie/Details/Titles/MovieTitlesTableContent.js index f7c0c6ef1..ae0e8011b 100644 --- a/frontend/src/Movie/Details/Titles/MovieTitlesTableContent.js +++ b/frontend/src/Movie/Details/Titles/MovieTitlesTableContent.js @@ -48,12 +48,16 @@ class MovieTitlesTableContent extends Component { { !isFetching && !!error && -
Unable to load alternative titles.
+
+ {translate('UnableToLoadAltTitle')} +
} { isPopulated && !hasItems && !error && -
No alternative titles.
+
+ {translate('NoAltTitle')} +
} { diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js index eeb434789..69d202ded 100644 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js +++ b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js @@ -60,7 +60,7 @@ class DeleteMovieModalContent extends Component { return ( - Delete Selected Movie(s) + {translate('DeleteSelectedMovie')} diff --git a/frontend/src/Movie/Editor/MovieEditorFooter.js b/frontend/src/Movie/Editor/MovieEditorFooter.js index 8135fac35..084f41782 100644 --- a/frontend/src/Movie/Editor/MovieEditorFooter.js +++ b/frontend/src/Movie/Editor/MovieEditorFooter.js @@ -154,9 +154,9 @@ class MovieEditorFooter extends Component { } = this.state; const monitoredOptions = [ - { key: NO_CHANGE, value: 'No Change', disabled: true }, - { key: 'monitored', value: 'Monitored' }, - { key: 'unmonitored', value: 'Unmonitored' } + { key: NO_CHANGE, value: translate('NoChange'), disabled: true }, + { key: 'monitored', value: translate('Monitored') }, + { key: 'unmonitored', value: translate('Unmonitored') } ]; return ( diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js index 946005455..3c2f75c29 100644 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js +++ b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js @@ -21,12 +21,12 @@ function OrganizeMovieModalContent(props) { return ( - Organize Selected Movies + {translate('OrganizeSelectedMovies')} - Tip: To preview a rename... select "Cancel" then click any movie title and use the + {translate('PreviewRenameHelpText')}
- Are you sure you want to organize all files in the {movieTitles.length} selected movie(s)? + {translate('OrganizeConfirm', [movieTitles.length])}
    @@ -59,7 +59,7 @@ function OrganizeMovieModalContent(props) { kind={kinds.DANGER} onPress={onOrganizeMoviePress} > - Organize + {translate('Organize')} diff --git a/frontend/src/Movie/Editor/Tags/TagsModalContent.js b/frontend/src/Movie/Editor/Tags/TagsModalContent.js index 13bb255be..1b568f7df 100644 --- a/frontend/src/Movie/Editor/Tags/TagsModalContent.js +++ b/frontend/src/Movie/Editor/Tags/TagsModalContent.js @@ -61,9 +61,9 @@ class TagsModalContent extends Component { } = this.state; const applyTagsOptions = [ - { key: 'add', value: 'Add' }, - { key: 'remove', value: 'Remove' }, - { key: 'replace', value: 'Replace' } + { key: 'add', value: translate('Add') }, + { key: 'remove', value: translate('Remove') }, + { key: 'replace', value: translate('Replace') } ]; return ( diff --git a/frontend/src/Movie/History/MovieHistoryTableContent.js b/frontend/src/Movie/History/MovieHistoryTableContent.js index b43ae68a9..72fca4723 100644 --- a/frontend/src/Movie/History/MovieHistoryTableContent.js +++ b/frontend/src/Movie/History/MovieHistoryTableContent.js @@ -72,12 +72,16 @@ class MovieHistoryTableContent extends Component { { !isFetching && !!error && -
    Unable to load history
    +
    + {translate('UnableToLoadHistory')} +
    } { isPopulated && !hasItems && !error && -
    No history
    +
    + {translate('NoHistory')} +
    } { diff --git a/frontend/src/Movie/Index/Menus/MovieIndexSearchMenu.js b/frontend/src/Movie/Index/Menus/MovieIndexSearchMenu.js index 91c147a47..dc95f2c81 100644 --- a/frontend/src/Movie/Index/Menus/MovieIndexSearchMenu.js +++ b/frontend/src/Movie/Index/Menus/MovieIndexSearchMenu.js @@ -5,6 +5,7 @@ import MenuContent from 'Components/Menu/MenuContent'; import SearchMenuItem from 'Components/Menu/SearchMenuItem'; import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton'; import { align, icons } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; class MovieIndexSearchMenu extends Component { @@ -29,14 +30,14 @@ class MovieIndexSearchMenu extends Component { name="missingMoviesSearch" onPress={onSearchPress} > - Search Missing + {translate('SearchMissing')} - Search Cutoff Unmet + {translate('SearchCutoffUnmet')} diff --git a/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js b/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js index fe006f414..c2132fcee 100644 --- a/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js +++ b/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js @@ -26,7 +26,7 @@ function MovieIndexSortMenu(props) { sortDirection={sortDirection} onPress={onSortSelect} > - Monitored/Status + {translate('MonitoredStatus')} - {getErrorMessage(error, 'Failed to load movie from API')} + {getErrorMessage(error, translate('FailedToLoadMovieFromAPI'))}
} @@ -610,7 +610,7 @@ class MovieIndex extends Component { Are you sure you want to perform mass movie search for {isMovieEditorActive && selectedMovieIds.length > 0 ? selectedMovieIds.length : this.props.items.length} movies?
- This cannot be cancelled once started without restarting Radarr. + {translate('ThisCannotBeCancelled')}
} diff --git a/frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModalContent.js b/frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModalContent.js index 216d21cd5..641b9d1b0 100644 --- a/frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModalContent.js +++ b/frontend/src/Movie/Index/Overview/Options/MovieIndexOverviewOptionsModalContent.js @@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const posterSizeOptions = [ - { key: 'small', value: 'Small' }, - { key: 'medium', value: 'Medium' }, - { key: 'large', value: 'Large' } + { key: 'small', value: translate('Small') }, + { key: 'medium', value: translate('Medium') }, + { key: 'large', value: translate('Large') } ]; class MovieIndexOverviewOptionsModalContent extends Component { diff --git a/frontend/src/Movie/Index/Posters/MovieIndexPoster.js b/frontend/src/Movie/Index/Posters/MovieIndexPoster.js index d68e8c20a..4c4913887 100644 --- a/frontend/src/Movie/Index/Posters/MovieIndexPoster.js +++ b/frontend/src/Movie/Index/Posters/MovieIndexPoster.js @@ -242,7 +242,7 @@ class MovieIndexPoster extends Component { { showMonitored &&
- {monitored ? 'Monitored' : 'Unmonitored'} + {monitored ? translate('Monitored') : translate('Unmonitored')}
} diff --git a/frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModalContent.js b/frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModalContent.js index d673e493d..4ce341d27 100644 --- a/frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModalContent.js +++ b/frontend/src/Movie/Index/Posters/Options/MovieIndexPosterOptionsModalContent.js @@ -14,9 +14,9 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const posterSizeOptions = [ - { key: 'small', value: 'Small' }, - { key: 'medium', value: 'Medium' }, - { key: 'large', value: 'Large' } + { key: 'small', value: translate('Small') }, + { key: 'medium', value: translate('Medium') }, + { key: 'large', value: translate('Large') } ]; class MovieIndexPosterOptionsModalContent extends Component { diff --git a/frontend/src/Movie/MoveMovie/MoveMovieModal.js b/frontend/src/Movie/MoveMovie/MoveMovieModal.js index c1117fa10..17faccb9f 100644 --- a/frontend/src/Movie/MoveMovie/MoveMovieModal.js +++ b/frontend/src/Movie/MoveMovie/MoveMovieModal.js @@ -7,6 +7,7 @@ import ModalContent from 'Components/Modal/ModalContent'; import ModalFooter from 'Components/Modal/ModalFooter'; import ModalHeader from 'Components/Modal/ModalHeader'; import { kinds, sizes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import styles from './MoveMovieModal.css'; function MoveMovieModal(props) { @@ -40,19 +41,19 @@ function MoveMovieModal(props) { onModalClose={onSavePress} > - Move Files + {translate('MoveFiles')} { destinationRootFolder ? - `Would you like to move the movie folders to '${destinationRootFolder}'?` : - `Would you like to move the movie files from '${originalPath}' to '${destinationPath}'?` + translate('MovieFolders1', [destinationRootFolder]) : + translate('MovieFolders2', [originalPath, destinationPath]) } { destinationRootFolder ?
- This will also rename the movie folder per the movie folder format in settings. + {translate('FolderMoveRenameWarning')}
: null } @@ -63,14 +64,14 @@ function MoveMovieModal(props) { className={styles.doNotMoveButton} onPress={onSavePress} > - No, I'll Move the Files Myself + {translate('NoMoveFilesSelf')} diff --git a/frontend/src/Movie/MovieLanguage.js b/frontend/src/Movie/MovieLanguage.js index b11e6ebbd..1d819d514 100644 --- a/frontend/src/Movie/MovieLanguage.js +++ b/frontend/src/Movie/MovieLanguage.js @@ -35,7 +35,7 @@ function MovieLanguage(props) { className={className} kind={isCutoffNotMet ? kinds.INVERSE : kinds.DEFAULT} > - Multi-Language + {translate('MultiLanguage')} } title={translate('Languages')} diff --git a/frontend/src/Movie/MovieStatus.js b/frontend/src/Movie/MovieStatus.js index 3df5f695a..22e5b3322 100644 --- a/frontend/src/Movie/MovieStatus.js +++ b/frontend/src/Movie/MovieStatus.js @@ -1,30 +1,31 @@ import { icons } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; export function getMovieStatusDetails(status) { let statusDetails = { icon: icons.ANNOUNCED, - title: 'Announced', - message: 'Movie is announced' + title: translate('Announced'), + message: translate('AnnoucedMsg') }; if (status === 'deleted') { statusDetails = { icon: icons.MOVIE_DELETED, - title: 'Deleted', - message: 'Movie was deleted from TMDb' + title: translate('Deleted'), + message: translate('DeletedMsg') }; } else if (status === 'inCinemas') { statusDetails = { icon: icons.IN_CINEMAS, - title: 'In Cinemas', - message: 'Movie is in Cinemas' + title: translate('InCinemas'), + message: translate('InCinemasMsg') }; } else if (status === 'released') { statusDetails = { icon: icons.MOVIE_FILE, - title: 'Released', - message: 'Movie is released' + title: translate('Released'), + message: translate('ReleasedMsg') }; } diff --git a/frontend/src/Movie/NoMovie.js b/frontend/src/Movie/NoMovie.js index fc9108836..c886ba33b 100644 --- a/frontend/src/Movie/NoMovie.js +++ b/frontend/src/Movie/NoMovie.js @@ -21,7 +21,7 @@ function NoMovie(props) { return (
- No movies found, to get started you'll want to add a new movie or import some existing ones. + {translate('NoMoviesExist')}
diff --git a/frontend/src/MovieFile/Editor/MovieFileEditorTableContent.js b/frontend/src/MovieFile/Editor/MovieFileEditorTableContent.js index 98c29482e..7abb30c55 100644 --- a/frontend/src/MovieFile/Editor/MovieFileEditorTableContent.js +++ b/frontend/src/MovieFile/Editor/MovieFileEditorTableContent.js @@ -11,7 +11,7 @@ import styles from './MovieFileEditorTableContent.css'; const columns = [ { name: 'title', - label: 'Relative Path', + label: translate('RelativePath'), isVisible: true }, { diff --git a/frontend/src/MovieFile/Quality/SelectQualityModalContent.js b/frontend/src/MovieFile/Quality/SelectQualityModalContent.js index dd22b9889..cfa0337f2 100644 --- a/frontend/src/MovieFile/Quality/SelectQualityModalContent.js +++ b/frontend/src/MovieFile/Quality/SelectQualityModalContent.js @@ -81,7 +81,7 @@ class SelectQualityModalContent extends Component { return ( - Manual Import - Select Quality + {translate('ManualImportSelectQuality')} @@ -146,7 +146,7 @@ class SelectQualityModalContent extends Component { kind={kinds.SUCCESS} onPress={this.onQualitySelect} > - Select Quality + {translate('SelectQuality')} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.js b/frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.js index 4dad8f517..292e4963c 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.js +++ b/frontend/src/Settings/CustomFormats/CustomFormats/CustomFormat.js @@ -154,7 +154,7 @@ class CustomFormat extends Component { message={
- Are you sure you want to delete custom format '{name}'? + {translate('AreYouSureYouWantToDeleteFormat', [name])}
} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.js b/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.js index c2d4a4804..46707dd6e 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.js +++ b/frontend/src/Settings/CustomFormats/CustomFormats/EditCustomFormatModalContent.js @@ -100,7 +100,7 @@ class EditCustomFormatModalContent extends Component { - {id ? 'Edit Custom Format' : 'Add Custom Format'} + {id ? translate('EditCustomFormat') : translate('AddCustomFormat')} @@ -125,7 +125,7 @@ class EditCustomFormatModalContent extends Component { > - Name + {translate('Name')} - Custom + {translate('Custom')} @@ -66,7 +66,7 @@ class AddSpecificationItem extends Component { className={styles.presetsMenuButton} size={sizes.SMALL} > - Presets + {translate('Presets')} diff --git a/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js b/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js index 4ffc82386..5d55952fb 100644 --- a/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js +++ b/frontend/src/Settings/CustomFormats/CustomFormats/Specifications/EditSpecificationModalContent.js @@ -64,7 +64,7 @@ function EditSpecificationModalContent(props) { - Name + {translate('Name')} - Negate + {translate('Negate')} - Required + {translate('Required')} - {'Negated'} + {translate('Negated')} } { required && }
@@ -118,7 +118,7 @@ class Specification extends Component { message={
- Are you sure you want to delete format tag '{name}'? + {translate('AreYouSureYouWantToDeleteFormat', [name])}
} diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js index f85201a46..235356a5f 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js +++ b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientItem.js @@ -58,7 +58,7 @@ class AddDownloadClientItem extends Component { size={sizes.SMALL} onPress={this.onDownloadClientSelect} > - Custom + {translate('Custom')} @@ -66,7 +66,7 @@ class AddDownloadClientItem extends Component { className={styles.presetsMenuButton} size={sizes.SMALL} > - Presets + {translate('Presets')} diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js index 2fcff25bd..0321d9ad5 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js +++ b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js @@ -32,7 +32,7 @@ class AddDownloadClientModalContent extends Component { return ( - Add DownloadClient + {translate('AddDownloadClient')} diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js b/frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js index 25f1ae6cf..98fce6319 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js +++ b/frontend/src/Settings/DownloadClients/DownloadClients/DownloadClient.js @@ -73,13 +73,13 @@ class DownloadClient extends Component { { enable ? : } @@ -89,7 +89,7 @@ class DownloadClient extends Component { kind={kinds.DISABLED} outline={true} > - Priority: {priority} + {translate('PrioritySettings', [priority])} }
diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js b/frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js index d32301ee8..8aba1b678 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js +++ b/frontend/src/Settings/DownloadClients/DownloadClients/EditDownloadClientModalContent.js @@ -53,7 +53,7 @@ class EditDownloadClientModalContent extends Component { return ( - {`${id ? 'Edit' : 'Add'} Download Client - ${implementationName}`} + {`${id ? translate('Edit') : translate('Add')} ${translate('DownloadClient')} - ${implementationName}`} diff --git a/frontend/src/Settings/General/LoggingSettings.js b/frontend/src/Settings/General/LoggingSettings.js index 540e29b01..4d98374f3 100644 --- a/frontend/src/Settings/General/LoggingSettings.js +++ b/frontend/src/Settings/General/LoggingSettings.js @@ -8,9 +8,9 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const logLevelOptions = [ - { key: 'info', value: 'Info' }, - { key: 'debug', value: 'Debug' }, - { key: 'trace', value: 'Trace' } + { key: 'info', value: translate('Info') }, + { key: 'debug', value: translate('Debug') }, + { key: 'trace', value: translate('Trace') } ]; function LoggingSettings(props) { diff --git a/frontend/src/Settings/General/ProxySettings.js b/frontend/src/Settings/General/ProxySettings.js index cad763de3..ca9f95fd6 100644 --- a/frontend/src/Settings/General/ProxySettings.js +++ b/frontend/src/Settings/General/ProxySettings.js @@ -25,9 +25,9 @@ function ProxySettings(props) { } = settings; const proxyTypeOptions = [ - { key: 'http', value: 'HTTP(S)' }, - { key: 'socks4', value: 'Socks4' }, - { key: 'socks5', value: 'Socks5 (Support TOR)' } + { key: 'http', value: translate('HttpHttps') }, + { key: 'socks4', value: translate('Socks4') }, + { key: 'socks5', value: translate('Socks5') } ]; return ( diff --git a/frontend/src/Settings/General/SecuritySettings.js b/frontend/src/Settings/General/SecuritySettings.js index c10462da2..4469b2494 100644 --- a/frontend/src/Settings/General/SecuritySettings.js +++ b/frontend/src/Settings/General/SecuritySettings.js @@ -12,15 +12,15 @@ import { icons, inputTypes, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const authenticationMethodOptions = [ - { key: 'none', value: 'None' }, - { key: 'basic', value: 'Basic (Browser Popup)' }, - { key: 'forms', value: 'Forms (Login Page)' } + { key: 'none', value: translate('None') }, + { key: 'basic', value: translate('AuthBasic') }, + { key: 'forms', value: translate('AuthForm') } ]; const certificateValidationOptions = [ - { key: 'enabled', value: 'Enabled' }, - { key: 'disabledForLocalAddresses', value: 'Disabled for Local Addresses' }, - { key: 'disabled', value: 'Disabled' } + { key: 'enabled', value: translate('Enabled') }, + { key: 'disabledForLocalAddresses', value: translate('CertValidationNoLocal') }, + { key: 'disabled', value: translate('Disabled') } ]; class SecuritySettings extends Component { diff --git a/frontend/src/Settings/General/UpdateSettings.js b/frontend/src/Settings/General/UpdateSettings.js index 73ee78265..474e1f29a 100644 --- a/frontend/src/Settings/General/UpdateSettings.js +++ b/frontend/src/Settings/General/UpdateSettings.js @@ -38,10 +38,10 @@ function UpdateSettings(props) { value: titleCase(packageUpdateMechanism) }); } else { - updateOptions.push({ key: 'builtIn', value: 'Built-In' }); + updateOptions.push({ key: 'builtIn', value: translate('BuiltIn') }); } - updateOptions.push({ key: 'script', value: 'Script' }); + updateOptions.push({ key: 'script', value: translate('Script') }); return (
diff --git a/frontend/src/Settings/ImportLists/ImportExclusions/EditImportExclusionModalContent.js b/frontend/src/Settings/ImportLists/ImportExclusions/EditImportExclusionModalContent.js index 2840200a1..a9213bd97 100644 --- a/frontend/src/Settings/ImportLists/ImportExclusions/EditImportExclusionModalContent.js +++ b/frontend/src/Settings/ImportLists/ImportExclusions/EditImportExclusionModalContent.js @@ -39,7 +39,7 @@ function EditImportExclusionModalContent(props) { return ( - {id ? 'Edit List Exclusion' : 'Add List Exclusion'} + {id ? translate('EditListExclusion') : translate('AddListExclusion')} diff --git a/frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.js b/frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.js index bf3c418d2..08e6e87b2 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.js +++ b/frontend/src/Settings/ImportLists/ImportLists/AddImportListItem.js @@ -58,7 +58,7 @@ class AddImportListItem extends Component { size={sizes.SMALL} onPress={this.onImportListSelect} > - Custom + {translate('Custom')} @@ -66,7 +66,7 @@ class AddImportListItem extends Component { className={styles.presetsMenuButton} size={sizes.SMALL} > - Presets + {translate('Presets')} diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js index a1c74884b..04b7a2eba 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js +++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js @@ -52,7 +52,7 @@ function EditImportListModalContent(props) { return ( - {`${id ? 'Edit' : 'Add'} List - ${implementationName}`} + {`${id ? translate('Edit') : translate('Add')} ${translate('List')} - ${implementationName}`} diff --git a/frontend/src/Settings/ImportLists/ImportLists/ImportList.js b/frontend/src/Settings/ImportLists/ImportLists/ImportList.js index 3cee64e1e..5277bdde7 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/ImportList.js +++ b/frontend/src/Settings/ImportLists/ImportLists/ImportList.js @@ -74,14 +74,14 @@ class ImportList extends Component { { enabled && } { enableAuto && } @@ -91,7 +91,7 @@ class ImportList extends Component { kind={kinds.DISABLED} outline={true} > - Disabled + {translate('Disabled')} }
diff --git a/frontend/src/Settings/ImportLists/Options/ImportListOptions.js b/frontend/src/Settings/ImportLists/Options/ImportListOptions.js index 254ca6f18..f69e65a69 100644 --- a/frontend/src/Settings/ImportLists/Options/ImportListOptions.js +++ b/frontend/src/Settings/ImportLists/Options/ImportListOptions.js @@ -19,11 +19,11 @@ function ImportListOptions(props) { } = props; const cleanLibraryLevelOptions = [ - { key: 'disabled', value: 'Disabled' }, - { key: 'logOnly', value: 'Log Only' }, - { key: 'keepAndUnmonitor', value: 'Keep and Unmonitor Movie' }, - { key: 'removeAndKeep', value: 'Remove Movie and Keep Files' }, - { key: 'removeAndDelete', value: 'Remove Movie and Delete Files' } + { key: 'disabled', value: translate('Disabled') }, + { key: 'logOnly', value: translate('LogOnly') }, + { key: 'keepAndUnmonitor', value: translate('KeepAndUnmonitorMovie') }, + { key: 'removeAndKeep', value: translate('RemoveMovieAndKeepFiles') }, + { key: 'removeAndDelete', value: translate('RemoveMovieAndDeleteFiles') } ]; return ( diff --git a/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js b/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js index 6d8e9fadc..9ed0ac327 100644 --- a/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js +++ b/frontend/src/Settings/Indexers/Indexers/AddIndexerItem.js @@ -58,7 +58,7 @@ class AddIndexerItem extends Component { size={sizes.SMALL} onPress={this.onIndexerSelect} > - Custom + {translate('Custom')} @@ -66,7 +66,7 @@ class AddIndexerItem extends Component { className={styles.presetsMenuButton} size={sizes.SMALL} > - Presets + {translate('Presets')} diff --git a/frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.js b/frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.js index 74873bb49..f0c434092 100644 --- a/frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.js +++ b/frontend/src/Settings/Indexers/Indexers/AddIndexerModalContent.js @@ -32,7 +32,7 @@ class AddIndexerModalContent extends Component { return ( - Add Indexer + {translate('AddIndexer')} diff --git a/frontend/src/Settings/Indexers/Indexers/Indexer.js b/frontend/src/Settings/Indexers/Indexers/Indexer.js index 4ef739689..376c443a4 100644 --- a/frontend/src/Settings/Indexers/Indexers/Indexer.js +++ b/frontend/src/Settings/Indexers/Indexers/Indexer.js @@ -98,7 +98,7 @@ class Indexer extends Component { { supportsRss && enableRss && } diff --git a/frontend/src/Settings/MediaManagement/MediaManagement.js b/frontend/src/Settings/MediaManagement/MediaManagement.js index 00e1396a9..fa213bb9c 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagement.js +++ b/frontend/src/Settings/MediaManagement/MediaManagement.js @@ -16,21 +16,21 @@ import NamingConnector from './Naming/NamingConnector'; import AddRootFolderConnector from './RootFolder/AddRootFolderConnector'; const rescanAfterRefreshOptions = [ - { key: 'always', value: 'Always' }, - { key: 'afterManual', value: 'After Manual Refresh' }, - { key: 'never', value: 'Never' } + { key: 'always', value: translate('Always') }, + { key: 'afterManual', value: translate('AfterManualRefresh') }, + { key: 'never', value: translate('Never') } ]; const downloadPropersAndRepacksOptions = [ - { key: 'preferAndUpgrade', value: 'Prefer and Upgrade' }, - { key: 'doNotUpgrade', value: 'Do not Upgrade Automatically' }, - { key: 'doNotPrefer', value: 'Do not Prefer' } + { key: 'preferAndUpgrade', value: translate('PreferAndUpgrade') }, + { key: 'doNotUpgrade', value: translate('DoNotUpgradeAutomatically') }, + { key: 'doNotPrefer', value: translate('DoNotPrefer') } ]; const fileDateOptions = [ - { key: 'none', value: 'None' }, - { key: 'cinemas', value: 'In Cinemas Date' }, - { key: 'release', value: 'Physical Release Date' } + { key: 'none', value: translate('None') }, + { key: 'cinemas', value: translate('InCinemasDate') }, + { key: 'release', value: translate('PhysicalReleaseDate') } ]; class MediaManagement extends Component { diff --git a/frontend/src/Settings/MediaManagement/Naming/Naming.js b/frontend/src/Settings/MediaManagement/Naming/Naming.js index aaff0e0a1..dd3035f12 100644 --- a/frontend/src/Settings/MediaManagement/Naming/Naming.js +++ b/frontend/src/Settings/MediaManagement/Naming/Naming.js @@ -13,10 +13,10 @@ import NamingModal from './NamingModal'; import styles from './Naming.css'; const colonReplacementOptions = [ - { key: 'delete', value: 'Delete' }, - { key: 'dash', value: 'Replace with Dash' }, - { key: 'spaceDash', value: 'Replace with Space Dash' }, - { key: 'spaceDashSpace', value: 'Replace with Space Dash Space' } + { key: 'delete', value: translate('Delete') }, + { key: 'dash', value: translate('ReplaceWithDash') }, + { key: 'spaceDash', value: translate('ReplaceWithSpaceDash') }, + { key: 'spaceDashSpace', value: translate('ReplaceWithSpaceDashSpace') } ]; class Naming extends Component { @@ -91,13 +91,13 @@ class Naming extends Component { if (examples.movieExample) { standardMovieFormatHelpTexts.push(`Movie: ${examples.movieExample}`); } else { - standardMovieFormatErrors.push({ message: 'Movie: Invalid Format' }); + standardMovieFormatErrors.push({ message: translate('MovieInvalidFormat') }); } if (examples.movieFolderExample) { movieFolderFormatHelpTexts.push(`Example: ${examples.movieFolderExample}`); } else { - movieFolderFormatErrors.push({ message: 'Invalid Format' }); + movieFolderFormatErrors.push({ message: translate('InvalidFormat') }); } } diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js index a2a59469c..ee2058d19 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js @@ -102,9 +102,9 @@ class NamingModal extends Component { ]; const caseOptions = [ - { key: 'title', value: 'Default Case' }, - { key: 'lower', value: 'Lower Case' }, - { key: 'upper', value: 'Upper Case' } + { key: 'title', value: translate('DefaultCase') }, + { key: 'lower', value: translate('LowerCase') }, + { key: 'upper', value: translate('UpperCase') } ]; const fileNameTokens = [ @@ -174,7 +174,7 @@ class NamingModal extends Component { > - File Name Tokens + {translate('FileNameTokens')} diff --git a/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.js b/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.js index 91278b6f5..f1c75c32c 100644 --- a/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.js +++ b/frontend/src/Settings/MediaManagement/RootFolder/AddRootFolder.js @@ -4,6 +4,7 @@ import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import { icons, kinds, sizes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import styles from './AddRootFolder.css'; class AddRootFolder extends Component { @@ -49,7 +50,7 @@ class AddRootFolder extends Component { className={styles.importButtonIcon} name={icons.DRIVE} /> - Add Root Folder + {translate('AddRootFolder')} - Enabled + {translate('Enabled')} : } @@ -81,7 +82,7 @@ class Metadata extends Component { enable && !!metadataFields.length &&
- Metadata + {translate('Metadata')}
{ @@ -107,7 +108,7 @@ class Metadata extends Component { enable && !!imageFields.length &&
- Images + {translate('Images')}
{ diff --git a/frontend/src/Settings/Metadata/Options/MetadataOptions.js b/frontend/src/Settings/Metadata/Options/MetadataOptions.js index 185097c99..feed7a741 100644 --- a/frontend/src/Settings/Metadata/Options/MetadataOptions.js +++ b/frontend/src/Settings/Metadata/Options/MetadataOptions.js @@ -9,6 +9,8 @@ import LoadingIndicator from 'Components/Loading/LoadingIndicator'; import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; +// Note: Do Not Translate Certification Countries + export const certificationCountryOptions = [ { key: 'au', value: 'Australia' }, { key: 'br', value: 'Brazil' }, diff --git a/frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js b/frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js index 0ac3d6634..d71eea3d0 100644 --- a/frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js +++ b/frontend/src/Settings/Notifications/Notifications/AddNotificationItem.js @@ -58,7 +58,7 @@ class AddNotificationItem extends Component { size={sizes.SMALL} onPress={this.onNotificationSelect} > - Custom + {translate('Custom')} @@ -66,7 +66,7 @@ class AddNotificationItem extends Component { className={styles.presetsMenuButton} size={sizes.SMALL} > - Presets + {translate('Presets')} diff --git a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js index aaf784094..ca06445cc 100644 --- a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js +++ b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js @@ -28,7 +28,7 @@ class AddNotificationModalContent extends Component { return ( - Add Notification + {translate('AddNotification')} diff --git a/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js b/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js index ec20ccff1..db67c9f5f 100644 --- a/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js +++ b/frontend/src/Settings/Notifications/Notifications/EditNotificationModalContent.js @@ -48,7 +48,7 @@ function EditNotificationModalContent(props) { return ( - {`${id ? 'Edit' : 'Add'} Connection - ${implementationName}`} + {`${id ? translate('Edit') : translate('Add')} ${translate('Connection')} - ${implementationName}`} diff --git a/frontend/src/Settings/Notifications/Notifications/Notification.js b/frontend/src/Settings/Notifications/Notifications/Notification.js index eaca8b834..b30b19716 100644 --- a/frontend/src/Settings/Notifications/Notifications/Notification.js +++ b/frontend/src/Settings/Notifications/Notifications/Notification.js @@ -82,42 +82,42 @@ class Notification extends Component { { supportsOnGrab && onGrab && } { supportsOnDelete && onDelete && } { supportsOnDownload && onDownload && } { supportsOnUpgrade && onDownload && onUpgrade && } { supportsOnRename && onRename && } { supportsOnHealthIssue && onHealthIssue && } @@ -127,7 +127,7 @@ class Notification extends Component { kind={kinds.DISABLED} outline={true} > - Disabled + {translate('Disabled')} } diff --git a/frontend/src/Settings/Profiles/Delay/DelayProfile.js b/frontend/src/Settings/Profiles/Delay/DelayProfile.js index 65f160813..e50cb2456 100644 --- a/frontend/src/Settings/Profiles/Delay/DelayProfile.js +++ b/frontend/src/Settings/Profiles/Delay/DelayProfile.js @@ -88,9 +88,9 @@ class DelayProfile extends Component { let preferred = titleCase(preferredProtocol); if (!enableUsenet) { - preferred = 'Only Torrent'; + preferred = translate('OnlyTorrent'); } else if (!enableTorrent) { - preferred = 'Only Usenet'; + preferred = translate('OnlyUsenet'); } return ( diff --git a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js index 78d101144..bd975349c 100644 --- a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js +++ b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContent.js @@ -46,7 +46,7 @@ function EditDelayProfileModalContent(props) { return ( - {id ? 'Edit Delay Profile' : 'Add Delay Profile'} + {id ? translate('EditDelayProfile') : translate('AddDelayProfile')} @@ -113,7 +113,7 @@ function EditDelayProfileModalContent(props) { { id === 1 ? - This is the default profile. It applies to all movies that don't have an explicit profile. + {translate('DefaultDelayProfile')} : diff --git a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContentConnector.js b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContentConnector.js index 370966cb7..b08e8273a 100644 --- a/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContentConnector.js +++ b/frontend/src/Settings/Profiles/Delay/EditDelayProfileModalContentConnector.js @@ -5,6 +5,7 @@ import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { saveDelayProfile, setDelayProfileValue } from 'Store/Actions/settingsActions'; import selectSettings from 'Store/Selectors/selectSettings'; +import translate from 'Utilities/String/translate'; import EditDelayProfileModalContent from './EditDelayProfileModalContent'; const newDelayProfile = { @@ -17,10 +18,10 @@ const newDelayProfile = { }; const protocolOptions = [ - { key: 'preferUsenet', value: 'Prefer Usenet' }, - { key: 'preferTorrent', value: 'Prefer Torrent' }, - { key: 'onlyUsenet', value: 'Only Usenet' }, - { key: 'onlyTorrent', value: 'Only Torrent' } + { key: 'preferUsenet', value: translate('PreferUsenet') }, + { key: 'preferTorrent', value: translate('PreferTorrent') }, + { key: 'onlyUsenet', value: translate('OnlyUsenet') }, + { key: 'onlyTorrent', value: translate('OnlyTorrent') } ]; function createDelayProfileSelector() { diff --git a/frontend/src/Settings/Profiles/Profiles.js b/frontend/src/Settings/Profiles/Profiles.js index 2dcdbed0a..588c3300a 100644 --- a/frontend/src/Settings/Profiles/Profiles.js +++ b/frontend/src/Settings/Profiles/Profiles.js @@ -29,9 +29,9 @@ class Profiles extends Component {
- Looking for Release Profiles? Try - Custom Formats - instead. + {translate('LookingForReleaseProfiles1')} + {translate('CustomFormats')} + {translate('LookingForReleaseProfiles2')}
diff --git a/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.js b/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.js index 0b70552e4..5c62785a0 100644 --- a/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.js +++ b/frontend/src/Settings/Profiles/Quality/EditQualityProfileModalContent.js @@ -140,7 +140,7 @@ class EditQualityProfileModalContent extends Component { onMeasure={this.onHeaderMeasure} > - {id ? 'Edit Quality Profile' : 'Add Quality Profile'} + {id ? translate('EditQualityProfile') : translate('AddQualityProfile')} @@ -171,7 +171,7 @@ class EditQualityProfileModalContent extends Component {
- Name + {translate('Name')} - Upgrades Allowed + {translate('UpgradesAllowed')} - Upgrade Until Quality + {translate('UpgradeUntilQuality')} 0 && - Minimum Custom Format Score + {translate('MinimumCustomFormatScore')} 0 && - Upgrade Until Custom Format Score + {translate('UpgradeUntilCustomFormatScore')} - Language + {translate('Language')} diff --git a/frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.js b/frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.js index 960372346..56e607959 100644 --- a/frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.js +++ b/frontend/src/Settings/Profiles/Quality/QualityProfileFormatItems.js @@ -68,8 +68,8 @@ class QualityProfileFormatItems extends Component { if (profileFormatItems.length < 1) { return (
- Want more control over which downloads are preferred? Add a - Custom Format + {translate('MoreControlCFText')} + {translate('CustomFormat')}
); } @@ -82,7 +82,7 @@ class QualityProfileFormatItems extends Component {
{ @@ -114,10 +114,10 @@ class QualityProfileFormatItems extends Component {
- Custom Format + {translate('CustomFormat')}
- Score + {translate('Score')}
{ diff --git a/frontend/src/Settings/Profiles/Quality/QualityProfileItems.js b/frontend/src/Settings/Profiles/Quality/QualityProfileItems.js index 2dc40cf4b..91a04f906 100644 --- a/frontend/src/Settings/Profiles/Quality/QualityProfileItems.js +++ b/frontend/src/Settings/Profiles/Quality/QualityProfileItems.js @@ -7,6 +7,7 @@ import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import Measure from 'Components/Measure'; import { icons, kinds, sizes } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; import QualityProfileItemDragPreview from './QualityProfileItemDragPreview'; import QualityProfileItemDragSource from './QualityProfileItemDragSource'; import styles from './QualityProfileItems.css'; @@ -69,12 +70,12 @@ class QualityProfileItems extends Component { return ( - Qualities + {translate('Qualities')}
{ @@ -115,7 +116,7 @@ class QualityProfileItems extends Component { /> { - editGroups ? 'Done Editing Groups' : 'Edit Groups' + editGroups ? translate('DoneEditingGroups') : translate('EditGroups') }
diff --git a/frontend/src/Settings/Quality/Definition/QualityDefinition.js b/frontend/src/Settings/Quality/Definition/QualityDefinition.js index 0ee8b76e1..ed806d6ac 100644 --- a/frontend/src/Settings/Quality/Definition/QualityDefinition.js +++ b/frontend/src/Settings/Quality/Definition/QualityDefinition.js @@ -152,10 +152,10 @@ class QualityDefinition extends Component { const minSixty = `${formatBytes(minBytes * 60)}/h`; const preferredBytes = preferredSize * 1024 * 1024; - const preferredSixty = preferredBytes ? `${formatBytes(preferredBytes * 60)}/h` : 'Unlimited'; + const preferredSixty = preferredBytes ? `${formatBytes(preferredBytes * 60)}/h` : translate('Unlimited'); const maxBytes = maxSize && maxSize * 1024 * 1024; - const maxSixty = maxBytes ? `${formatBytes(maxBytes * 60)}/h` : 'Unlimited'; + const maxSixty = maxBytes ? `${formatBytes(maxBytes * 60)}/h` : translate('Unlimited'); return (
@@ -243,7 +243,7 @@ class QualityDefinition extends Component { advancedSettings &&
- Min + {translate('Min')}
- Preferred + {translate('Preferred')}
- Max + {translate('Max')} - Megabytes Per Minute + {translate('MegabytesPerMinute')}
: null } @@ -54,7 +54,7 @@ class QualityDefinitions extends Component {
- Limits are automatically adjusted for the movie runtime. + {translate('QualityLimitsHelpText')}
diff --git a/frontend/src/Settings/Tags/Details/TagDetailsDelayProfile.js b/frontend/src/Settings/Tags/Details/TagDetailsDelayProfile.js index ab670359b..b754e3b56 100644 --- a/frontend/src/Settings/Tags/Details/TagDetailsDelayProfile.js +++ b/frontend/src/Settings/Tags/Details/TagDetailsDelayProfile.js @@ -1,6 +1,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import titleCase from 'Utilities/String/titleCase'; +import translate from '../../../Utilities/String/translate'; function TagDetailsDelayProfile(props) { const { @@ -20,16 +21,16 @@ function TagDetailsDelayProfile(props) {
{ enableUsenet ? - `Usenet Delay: ${usenetDelay}` : - 'Usenet disabled' + translate('UsenetDelayTime', [usenetDelay]) : + translate('UsenetDisabled') }
{ enableTorrent ? - `Torrent Delay: ${torrentDelay}` : - 'Torrents disabled' + translate('TorrentDelayTime', [torrentDelay]) : + translate('TorrentsDisabled') }
diff --git a/frontend/src/Settings/Tags/Details/TagDetailsModalContent.js b/frontend/src/Settings/Tags/Details/TagDetailsModalContent.js index adbc42dd3..96b4f1ce2 100644 --- a/frontend/src/Settings/Tags/Details/TagDetailsModalContent.js +++ b/frontend/src/Settings/Tags/Details/TagDetailsModalContent.js @@ -29,7 +29,7 @@ function TagDetailsModalContent(props) { return ( - Tag Details - {label} + {translate('TagDetails', [label])} diff --git a/frontend/src/Settings/Tags/Tag.js b/frontend/src/Settings/Tags/Tag.js index 86219ccf6..5d4571ebd 100644 --- a/frontend/src/Settings/Tags/Tag.js +++ b/frontend/src/Settings/Tags/Tag.js @@ -126,7 +126,7 @@ class Tag extends Component { { !isTagUsed &&
- No links + {translate('NoLinks')}
} diff --git a/frontend/src/Settings/UI/UISettings.js b/frontend/src/Settings/UI/UISettings.js index 1b253b43c..6804233e5 100644 --- a/frontend/src/Settings/UI/UISettings.js +++ b/frontend/src/Settings/UI/UISettings.js @@ -13,8 +13,8 @@ import SettingsToolbarConnector from 'Settings/SettingsToolbarConnector'; import translate from 'Utilities/String/translate'; export const firstDayOfWeekOptions = [ - { key: 0, value: 'Sunday' }, - { key: 1, value: 'Monday' } + { key: 0, value: translate('Sunday') }, + { key: 1, value: translate('Monday') } ]; export const weekColumnOptions = [ diff --git a/frontend/src/System/Backup/RestoreBackupModalContent.js b/frontend/src/System/Backup/RestoreBackupModalContent.js index bd3f90598..044a27663 100644 --- a/frontend/src/System/Backup/RestoreBackupModalContent.js +++ b/frontend/src/System/Backup/RestoreBackupModalContent.js @@ -14,7 +14,7 @@ import styles from './RestoreBackupModalContent.css'; function getErrorMessage(error) { if (!error || !error.responseJSON || !error.responseJSON.message) { - return 'Error restoring backup'; + return translate('ErrorRestoringBackup'); } return error.responseJSON.message; @@ -146,7 +146,7 @@ class RestoreBackupModalContent extends Component { { - !!id && `Would you like to restore the backup '${name}'?` + !!id && translate('WouldYouLikeToRestoreBackup', [name]) } { @@ -203,7 +203,7 @@ class RestoreBackupModalContent extends Component {
- Note: Radarr will automatically restart and reload the UI during the restore process. + {translate('RestartReloadNote')}