diff --git a/frontend/src/System/Backup/BackupRow.js b/frontend/src/System/Backup/BackupRow.js
index ca36b98dc..ad63544e3 100644
--- a/frontend/src/System/Backup/BackupRow.js
+++ b/frontend/src/System/Backup/BackupRow.js
@@ -9,6 +9,7 @@ import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import { icons, kinds } from 'Helpers/Props';
import formatBytes from 'Utilities/Number/formatBytes';
+import translate from 'Utilities/String/translate';
import RestoreBackupModalConnector from './RestoreBackupModalConnector';
import styles from './BackupRow.css';
@@ -75,14 +76,14 @@ class BackupRow extends Component {
} = this.state;
let iconClassName = icons.SCHEDULED;
- let iconTooltip = 'Scheduled';
+ let iconTooltip = translate('Scheduled');
if (type === 'manual') {
iconClassName = icons.INTERACTIVE;
- iconTooltip = 'Manual';
+ iconTooltip = translate('Manual');
} else if (type === 'update') {
iconClassName = icons.UPDATE;
- iconTooltip = 'Before update';
+ iconTooltip = translate('BeforeUpdate');
}
return (
@@ -115,12 +116,13 @@ class BackupRow extends Component {
@@ -136,9 +138,11 @@ class BackupRow extends Component {
diff --git a/frontend/src/System/Backup/Backups.js b/frontend/src/System/Backup/Backups.js
index c4adfbf50..fa78dd769 100644
--- a/frontend/src/System/Backup/Backups.js
+++ b/frontend/src/System/Backup/Backups.js
@@ -10,6 +10,7 @@ import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, kinds } from 'Helpers/Props';
+import translate from 'Utilities/String/translate';
import BackupRow from './BackupRow';
import RestoreBackupModalConnector from './RestoreBackupModalConnector';
@@ -20,17 +21,23 @@ const columns = [
},
{
name: 'name',
- label: 'Name',
+ get label() {
+ return translate('Name');
+ },
isVisible: true
},
{
name: 'size',
- label: 'Size',
+ get label() {
+ return translate('Size');
+ },
isVisible: true
},
{
name: 'time',
- label: 'Time',
+ get label() {
+ return translate('Time');
+ },
isVisible: true
},
{
@@ -81,18 +88,18 @@ class Backups extends Component {
const noBackups = isPopulated && !items.length;
return (
-
+
@@ -108,14 +115,14 @@ class Backups extends Component {
{
!isFetching && !!error &&
- Unable to load backups
+ {translate('UnableToLoadBackups')}
}
{
noBackups &&
- No backups are available
+ {translate('NoBackupsAreAvailable')}
}
diff --git a/frontend/src/System/Backup/RestoreBackupModalContent.js b/frontend/src/System/Backup/RestoreBackupModalContent.js
index 71bd5a3b9..9b5daa9f4 100644
--- a/frontend/src/System/Backup/RestoreBackupModalContent.js
+++ b/frontend/src/System/Backup/RestoreBackupModalContent.js
@@ -9,11 +9,12 @@ import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { icons, kinds } from 'Helpers/Props';
+import translate from 'Utilities/String/translate';
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;
@@ -145,7 +146,9 @@ class RestoreBackupModalContent extends Component {
{
- !!id && `Would you like to restore the backup '${name}'?`
+ !!id && translate('WouldYouLikeToRestoreBackup', {
+ name
+ })
}
{
@@ -167,7 +170,9 @@ class RestoreBackupModalContent extends Component {
/>
- Restore
+
+ {translate('Restore')}
+
@@ -178,7 +183,9 @@ class RestoreBackupModalContent extends Component {
/>
- Restart
+
+ {translate('Restart')}
+
@@ -189,18 +196,20 @@ class RestoreBackupModalContent extends Component {
/>
- Reload
+
+ {translate('Reload')}
+
- Note: Sonarr will automatically restart and reload the UI during the restore process.
+ {translate('RestartReloadNote')}
- Restore
+ {translate('Restore')}
diff --git a/frontend/src/System/Events/LogsTable.js b/frontend/src/System/Events/LogsTable.js
index 5d4bc8513..1c37a03ba 100644
--- a/frontend/src/System/Events/LogsTable.js
+++ b/frontend/src/System/Events/LogsTable.js
@@ -13,6 +13,7 @@ import TableBody from 'Components/Table/TableBody';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import TablePager from 'Components/Table/TablePager';
import { align, icons, kinds } from 'Helpers/Props';
+import translate from 'Utilities/String/translate';
import LogsTableRow from './LogsTableRow';
function LogsTable(props) {
@@ -33,11 +34,11 @@ function LogsTable(props) {
} = props;
return (
-
+
@@ -83,7 +84,7 @@ function LogsTable(props) {
{
isPopulated && !error && !items.length &&
- No events found
+ {translate('NoEventsFound')}
}
diff --git a/frontend/src/System/Events/LogsTableDetailsModal.js b/frontend/src/System/Events/LogsTableDetailsModal.js
index c3681220d..13329f17b 100644
--- a/frontend/src/System/Events/LogsTableDetailsModal.js
+++ b/frontend/src/System/Events/LogsTableDetailsModal.js
@@ -8,6 +8,7 @@ import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import Scroller from 'Components/Scroller/Scroller';
import { scrollDirections } from 'Helpers/Props';
+import translate from 'Utilities/String/translate';
import styles from './LogsTableDetailsModal.css';
function LogsTableDetailsModal(props) {
@@ -27,11 +28,13 @@ function LogsTableDetailsModal(props) {
onModalClose={onModalClose}
>
- Details
+ {translate('Details')}
- Message
+
+ {translate('Message')}
+
- Exception
+
+ {translate('Exception')}
+
diff --git a/frontend/src/System/Logs/Files/LogFiles.js b/frontend/src/System/Logs/Files/LogFiles.js
index 3d7f708aa..23b3bb40e 100644
--- a/frontend/src/System/Logs/Files/LogFiles.js
+++ b/frontend/src/System/Logs/Files/LogFiles.js
@@ -1,7 +1,6 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Alert from 'Components/Alert';
-import Link from 'Components/Link/Link';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
@@ -12,18 +11,24 @@ import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, kinds } from 'Helpers/Props';
+import translate from 'Utilities/String/translate';
+import InlineMarkdown from '../../../Components/Markdown/InlineMarkdown';
import LogsNavMenu from '../LogsNavMenu';
import LogFilesTableRow from './LogFilesTableRow';
const columns = [
{
name: 'filename',
- label: 'Filename',
+ get label() {
+ return translate('Filename');
+ },
isVisible: true
},
{
name: 'lastWriteTime',
- label: 'Last Write Time',
+ get label() {
+ return translate('LastWriteTime');
+ },
isVisible: true
},
{
@@ -50,7 +55,7 @@ class LogFiles extends Component {
} = this.props;
return (
-
+
@@ -58,7 +63,7 @@ class LogFiles extends Component {
- Log files are located in: {location}
+ {translate('LogFilesLocation', {
+ location
+ })}
{
currentLogView === 'Log Files' &&
- The log level defaults to 'Info' and can be changed in General Settings
+
}
@@ -118,7 +125,7 @@ class LogFiles extends Component {
{
!isFetching && !items.length &&
- No log files
+ {translate('NoLogFiles')}
}
diff --git a/frontend/src/System/Logs/Files/LogFilesConnector.js b/frontend/src/System/Logs/Files/LogFilesConnector.js
index 98a55f32f..75921f346 100644
--- a/frontend/src/System/Logs/Files/LogFilesConnector.js
+++ b/frontend/src/System/Logs/Files/LogFilesConnector.js
@@ -7,6 +7,7 @@ import { executeCommand } from 'Store/Actions/commandActions';
import { fetchLogFiles } from 'Store/Actions/systemActions';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import combinePath from 'Utilities/String/combinePath';
+import translate from 'Utilities/String/translate';
import LogFiles from './LogFiles';
function createMapStateToProps() {
@@ -29,7 +30,7 @@ function createMapStateToProps() {
isFetching,
items,
deleteFilesExecuting,
- currentLogView: 'Log Files',
+ currentLogView: translate('LogFiles'),
location: combinePath(isWindows, appData, ['logs'])
};
}
diff --git a/frontend/src/System/Logs/Files/LogFilesTableRow.js b/frontend/src/System/Logs/Files/LogFilesTableRow.js
index ef08ada4e..ba0339b84 100644
--- a/frontend/src/System/Logs/Files/LogFilesTableRow.js
+++ b/frontend/src/System/Logs/Files/LogFilesTableRow.js
@@ -4,6 +4,7 @@ import Link from 'Components/Link/Link';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
+import translate from 'Utilities/String/translate';
import styles from './LogFilesTableRow.css';
class LogFilesTableRow extends Component {
@@ -32,7 +33,7 @@ class LogFilesTableRow extends Component {
target="_blank"
noRouter={true}
>
- Download
+ {translate('Download')}
diff --git a/frontend/src/System/Logs/LogsNavMenu.js b/frontend/src/System/Logs/LogsNavMenu.js
index cc485f270..923e4f41c 100644
--- a/frontend/src/System/Logs/LogsNavMenu.js
+++ b/frontend/src/System/Logs/LogsNavMenu.js
@@ -4,6 +4,7 @@ import Menu from 'Components/Menu/Menu';
import MenuButton from 'Components/Menu/MenuButton';
import MenuContent from 'Components/Menu/MenuContent';
import MenuItem from 'Components/Menu/MenuItem';
+import translate from 'Utilities/String/translate';
class LogsNavMenu extends Component {
@@ -50,13 +51,13 @@ class LogsNavMenu extends Component {
diff --git a/frontend/src/System/Status/About/About.js b/frontend/src/System/Status/About/About.js
index f212ef947..b0b289135 100644
--- a/frontend/src/System/Status/About/About.js
+++ b/frontend/src/System/Status/About/About.js
@@ -5,6 +5,7 @@ import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem'
import FieldSet from 'Components/FieldSet';
import InlineMarkdown from 'Components/Markdown/InlineMarkdown';
import titleCase from 'Utilities/String/titleCase';
+import translate from 'Utilities/String/translate';
import StartTime from './StartTime';
import styles from './About.css';
@@ -30,25 +31,32 @@ class About extends Component {
} = this.props;
return (
-