diff --git a/frontend/src/Author/Index/Overview/Options/AuthorIndexOverviewOptionsModalContent.js b/frontend/src/Author/Index/Overview/Options/AuthorIndexOverviewOptionsModalContent.js index 7a210debf..9c68d32ff 100644 --- a/frontend/src/Author/Index/Overview/Options/AuthorIndexOverviewOptionsModalContent.js +++ b/frontend/src/Author/Index/Overview/Options/AuthorIndexOverviewOptionsModalContent.js @@ -14,14 +14,39 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const nameOptions = [ - { key: 'firstLast', value: translate('NameFirstLast') }, - { key: 'lastFirst', value: translate('NameLastFirst') } + { + key: 'firstLast', + get value() { + return translate('NameFirstLast'); + } + }, + { + key: 'lastFirst', + get value() { + return translate('NameLastFirst'); + } + } ]; const posterSizeOptions = [ - { key: 'small', value: 'Small' }, - { key: 'medium', value: 'Medium' }, - { key: 'large', value: 'Large' } + { + key: 'small', + get value() { + return translate('Small'); + } + }, + { + key: 'medium', + get value() { + return translate('Medium'); + } + }, + { + key: 'large', + get value() { + return translate('Large'); + } + } ]; class AuthorIndexOverviewOptionsModalContent extends Component { diff --git a/frontend/src/Author/Index/Posters/Options/AuthorIndexPosterOptionsModalContent.js b/frontend/src/Author/Index/Posters/Options/AuthorIndexPosterOptionsModalContent.js index 7d33b32d7..9bb02a840 100644 --- a/frontend/src/Author/Index/Posters/Options/AuthorIndexPosterOptionsModalContent.js +++ b/frontend/src/Author/Index/Posters/Options/AuthorIndexPosterOptionsModalContent.js @@ -14,15 +14,45 @@ 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', + get value() { + return translate('Small'); + } + }, + { + key: 'medium', + get value() { + return translate('Medium'); + } + }, + { + key: 'large', + get value() { + return translate('Large'); + } + } ]; const nameOptions = [ - { key: 'no', value: translate('NoName') }, - { key: 'firstLast', value: translate('NameFirstLast') }, - { key: 'lastFirst', value: translate('NameLastFirst') } + { + key: 'no', + get value() { + return translate('NoName'); + } + }, + { + key: 'firstLast', + get value() { + return translate('NameFirstLast'); + } + }, + { + key: 'lastFirst', + get value() { + return translate('NameLastFirst'); + } + } ]; class AuthorIndexPosterOptionsModalContent extends Component { diff --git a/frontend/src/Author/Index/Table/AuthorIndexTableOptions.js b/frontend/src/Author/Index/Table/AuthorIndexTableOptions.js index af4b34f2d..fca41d9a2 100644 --- a/frontend/src/Author/Index/Table/AuthorIndexTableOptions.js +++ b/frontend/src/Author/Index/Table/AuthorIndexTableOptions.js @@ -7,8 +7,18 @@ import { inputTypes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const nameOptions = [ - { key: 'firstLast', value: translate('NameFirstLast') }, - { key: 'lastFirst', value: translate('NameLastFirst') } + { + key: 'firstLast', + get value() { + return translate('NameFirstLast'); + } + }, + { + key: 'lastFirst', + get value() { + return translate('NameLastFirst'); + } + } ]; class AuthorIndexTableOptions extends Component { diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js index 56c2ceecf..5b03ad68b 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContent.js @@ -69,7 +69,7 @@ const columns = [ name: 'customFormats', label: React.createElement(Icon, { name: icons.INTERACTIVE, - title: translate('CustomFormat') + title: () => translate('CustomFormat') }), isSortable: true, isVisible: true @@ -91,9 +91,9 @@ const filterExistingFilesOptions = { }; const importModeOptions = [ - { key: 'chooseImportMode', value: translate('ChooseImportMethod'), disabled: true }, - { key: 'move', value: translate('MoveFiles') }, - { key: 'copy', value: translate('HardlinkCopyFiles') } + { key: 'chooseImportMode', value: () => translate('ChooseImportMethod'), disabled: true }, + { key: 'move', value: () => translate('MoveFiles') }, + { key: 'copy', value: () => translate('HardlinkCopyFiles') } ]; const SELECT = 'select'; diff --git a/frontend/src/InteractiveSearch/InteractiveSearch.js b/frontend/src/InteractiveSearch/InteractiveSearch.js index 297d23ab6..e324bc000 100644 --- a/frontend/src/InteractiveSearch/InteractiveSearch.js +++ b/frontend/src/InteractiveSearch/InteractiveSearch.js @@ -56,7 +56,7 @@ const columns = [ name: 'customFormatScore', label: React.createElement(Icon, { name: icons.SCORE, - title: translate('CustomFormatScore') + title: () => translate('CustomFormatScore') }), isSortable: true, isVisible: true diff --git a/frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.tsx b/frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.tsx index 1c004bb34..ee2887856 100644 --- a/frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.tsx +++ b/frontend/src/Settings/ImportLists/ImportLists/Manage/ManageImportListsModalContent.tsx @@ -54,7 +54,7 @@ const COLUMNS = [ }, { name: 'metadataProfileId', - label: translate('MetadataProfile'), + label: () => translate('MetadataProfile'), isSortable: true, isVisible: true, }, diff --git a/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js b/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js index 51fe28fcf..8ac3cbbee 100644 --- a/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js +++ b/frontend/src/Settings/Metadata/MetadataProvider/MetadataProvider.js @@ -11,16 +11,51 @@ import { inputTypes, kinds } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; const writeAudioTagOptions = [ - { key: 'no', value: translate('WriteTagsNo') }, - { key: 'sync', value: translate('WriteTagsSync') }, - { key: 'allFiles', value: translate('WriteTagsAll') }, - { key: 'newFiles', value: translate('WriteTagsNew') } + { + key: 'no', + get value() { + return translate('WriteTagsNo'); + } + }, + { + key: 'sync', + get value() { + return translate('WriteTagsSync'); + } + }, + { + key: 'allFiles', + get value() { + return translate('WriteTagsAll'); + } + }, + { + key: 'newFiles', + get value() { + return translate('WriteTagsNew'); + } + } ]; const writeBookTagOptions = [ - { key: 'sync', value: translate('WriteTagsSync') }, - { key: 'allFiles', value: translate('WriteTagsAll') }, - { key: 'newFiles', value: translate('WriteTagsNew') } + { + key: 'sync', + get value() { + return translate('WriteTagsSync'); + } + }, + { + key: 'allFiles', + get value() { + return translate('WriteTagsAll'); + } + }, + { + key: 'newFiles', + get value() { + return translate('WriteTagsNew'); + } + } ]; function MetadataProvider(props) { diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 90ca63d8f..cd1d773bf 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -63,6 +63,7 @@ "Automatic": "Automatic", "AutomaticAdd": "Automatic Add", "AutomaticallySwitchEdition": "Automatically Switch Edition", + "Backup": "Backup", "BackupFolderHelpText": "Relative paths will be under Readarr's AppData directory", "BackupIntervalHelpText": "Interval to backup the Readarr DB and settings", "BackupNow": "Backup Now", @@ -91,6 +92,7 @@ "BookTitle": "Book Title", "Books": "Books", "BooksTotal": "Books ({0})", + "Bookshelf": "Bookshelf", "Branch": "Branch", "BypassIfAboveCustomFormatScore": "Bypass if Above Custom Format Score", "BypassIfAboveCustomFormatScoreHelpText": "Enable bypass when release has a score higher than the configured minimum custom format score", @@ -298,6 +300,7 @@ "EntityName": "Entity Name", "ErrorLoadingContents": "Error loading contents", "ErrorLoadingPreviews": "Error loading previews", + "Events": "Events", "Exception": "Exception", "ExistingBooks": "Existing Books", "ExistingItems": "Existing Items", @@ -434,6 +437,9 @@ "ItsEasyToAddANewAuthorOrBookJustStartTypingTheNameOfTheItemYouWantToAdd": "It's easy to add a New Author or Book just start typing the name of the item you want to add", "Label": "Label", "Language": "Language", + "Large": "Large", + "LastDuration": "Last Duration", + "LastExecution": "Last Execution", "LastWriteTime": "Last Write Time", "LatestBook": "Latest Book", "LaunchBrowserHelpText": " Open a web browser and navigate to Readarr homepage on app start.", @@ -482,6 +488,7 @@ "MediaManagement": "Media Management", "MediaManagementSettings": "Media Management Settings", "MediaManagementSettingsSummary": "Naming, file management settings and root folders", + "Medium": "Medium", "Message": "Message", "Metadata": "Metadata", "MetadataConsumers": "Metadata Consumers", @@ -547,6 +554,7 @@ "Negated": "Negated", "New": "New", "NewBooks": "New Books", + "NextExecution": "Next Execution", "No": "No", "NoBackupsAreAvailable": "No backups are available", "NoChange": "No Change", @@ -834,6 +842,7 @@ "SkipRedownload": "Skip Redownload", "SkipRedownloadHelpText": "Prevents Readarr from trying download alternative releases for the removed items", "SkipSecondarySeriesBooks": "Skip secondary series books", + "Small": "Small", "SmartReplace": "Smart Replace", "SorryThatAuthorCannotBeFound": "Sorry, that author cannot be found.", "SorryThatBookCannotBeFound": "Sorry, that book cannot be found.",