mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
translate network
This commit is contained in:
@@ -95,7 +95,9 @@ const LayoutAuthMenu: FC = () => {
|
||||
</Avatar>
|
||||
<Box pl={2}>
|
||||
<ItemTypography variant="h6">{me.username}</ItemTypography>
|
||||
<ItemTypography variant="body1">{me.admin ? 'Admin User' : 'Guest User'}</ItemTypography>
|
||||
<ItemTypography variant="body1">
|
||||
{me.admin ? LL.ADMIN() + ' ' + LL.USER() : LL.GUEST() + ' ' + LL.USER()}
|
||||
</ItemTypography>
|
||||
</Box>
|
||||
</Box>
|
||||
<Divider />
|
||||
|
||||
@@ -31,7 +31,7 @@ const LayoutMenu: FC = () => {
|
||||
</List>
|
||||
)}
|
||||
<List disablePadding component="nav">
|
||||
<LayoutMenuItem icon={SettingsEthernetIcon} label={LL.NETWORK_CONNECTION()} to="/network" />
|
||||
<LayoutMenuItem icon={SettingsEthernetIcon} label={LL.NETWORK()} to="/network" />
|
||||
<LayoutMenuItem icon={SettingsInputAntennaIcon} label={LL.ACCESS_POINT()} to="/ap" />
|
||||
{features.ntp && <LayoutMenuItem icon={AccessTimeIcon} label="NTP" to="/ntp" />}
|
||||
{features.mqtt && <LayoutMenuItem icon={DeviceHubIcon} label="MQTT" to="/mqtt" />}
|
||||
|
||||
@@ -5,6 +5,8 @@ import RefreshIcon from '@mui/icons-material/Refresh';
|
||||
|
||||
import { MessageBox } from '..';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
interface FormLoaderProps {
|
||||
message?: string;
|
||||
errorMessage?: string;
|
||||
@@ -12,12 +14,14 @@ interface FormLoaderProps {
|
||||
}
|
||||
|
||||
const FormLoader: FC<FormLoaderProps> = ({ errorMessage, onRetry, message = 'Loading…' }) => {
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
if (errorMessage) {
|
||||
return (
|
||||
<MessageBox my={2} level="error" message={errorMessage}>
|
||||
{onRetry && (
|
||||
<Button startIcon={<RefreshIcon />} variant="contained" color="error" onClick={onRetry}>
|
||||
Retry
|
||||
{LL.RETRY()}
|
||||
</Button>
|
||||
)}
|
||||
</MessageBox>
|
||||
|
||||
@@ -2,23 +2,29 @@ import { FC } from 'react';
|
||||
|
||||
import { CircularProgress, Box, Typography, Theme } from '@mui/material';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
interface LoadingSpinnerProps {
|
||||
height?: number | string;
|
||||
}
|
||||
|
||||
const LoadingSpinner: FC<LoadingSpinnerProps> = ({ height = '100%' }) => (
|
||||
<Box display="flex" alignItems="center" justifyContent="center" flexDirection="column" padding={2} height={height}>
|
||||
<CircularProgress
|
||||
sx={(theme: Theme) => ({
|
||||
margin: theme.spacing(4),
|
||||
color: theme.palette.text.secondary
|
||||
})}
|
||||
size={100}
|
||||
/>
|
||||
<Typography variant="h4" color="textSecondary">
|
||||
Loading…
|
||||
</Typography>
|
||||
</Box>
|
||||
);
|
||||
const LoadingSpinner: FC<LoadingSpinnerProps> = ({ height = '100%' }) => {
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
return (
|
||||
<Box display="flex" alignItems="center" justifyContent="center" flexDirection="column" padding={2} height={height}>
|
||||
<CircularProgress
|
||||
sx={(theme: Theme) => ({
|
||||
margin: theme.spacing(4),
|
||||
color: theme.palette.text.secondary
|
||||
})}
|
||||
size={100}
|
||||
/>
|
||||
<Typography variant="h4" color="textSecondary">
|
||||
{LL.LOADING()}…
|
||||
</Typography>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default LoadingSpinner;
|
||||
|
||||
@@ -15,7 +15,7 @@ import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
const NetworkConnection: FC = () => {
|
||||
const { LL } = useI18nContext();
|
||||
useLayoutTitle(LL.NETWORK_CONNECTION());
|
||||
useLayoutTitle(LL.NETWORK());
|
||||
|
||||
const { routerTab } = useRouterTab();
|
||||
|
||||
@@ -45,9 +45,9 @@ const NetworkConnection: FC = () => {
|
||||
}}
|
||||
>
|
||||
<RouterTabs value={routerTab}>
|
||||
<Tab value="status" label="Network Status" />
|
||||
<Tab value="scan" label="Scan WiFi Networks" disabled={!authenticatedContext.me.admin} />
|
||||
<Tab value="settings" label="Network Settings" disabled={!authenticatedContext.me.admin} />
|
||||
<Tab value="status" label={LL.NETWORK() + ' ' + LL.STATUS()} />
|
||||
<Tab value="scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} />
|
||||
<Tab value="settings" label={LL.NETWORK() + ' ' + LL.SETTINGS()} disabled={!authenticatedContext.me.admin} />
|
||||
</RouterTabs>
|
||||
<Routes>
|
||||
<Route path="status" element={<NetworkStatusForm />} />
|
||||
|
||||
@@ -37,7 +37,11 @@ import { ValidateFieldsError } from 'async-validator';
|
||||
import { validate } from '../../validators';
|
||||
import { createNetworkSettingsValidator } from '../../validators/network';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
const WiFiSettingsForm: FC = () => {
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext);
|
||||
|
||||
const [initialized, setInitialized] = useState(false);
|
||||
@@ -112,7 +116,7 @@ const WiFiSettingsForm: FC = () => {
|
||||
<ValidatedTextField
|
||||
fieldErrors={fieldErrors}
|
||||
name="ssid"
|
||||
label="SSID (leave blank to disable WiFi)"
|
||||
label={'SSID (' + LL.NETWORK_BLANK_SSID() + ')'}
|
||||
fullWidth
|
||||
variant="outlined"
|
||||
value={data.ssid}
|
||||
@@ -124,7 +128,7 @@ const WiFiSettingsForm: FC = () => {
|
||||
<ValidatedPasswordField
|
||||
fieldErrors={fieldErrors}
|
||||
name="password"
|
||||
label="Password"
|
||||
label={LL.PASSWORD()}
|
||||
fullWidth
|
||||
variant="outlined"
|
||||
value={data.password}
|
||||
@@ -136,7 +140,7 @@ const WiFiSettingsForm: FC = () => {
|
||||
<ValidatedTextField
|
||||
fieldErrors={fieldErrors}
|
||||
name="tx_power"
|
||||
label="WiFi Tx Power"
|
||||
label={'WiFi Tx ' + LL.POWER()}
|
||||
InputProps={{
|
||||
endAdornment: <InputAdornment position="end">dBm</InputAdornment>
|
||||
}}
|
||||
@@ -150,21 +154,21 @@ const WiFiSettingsForm: FC = () => {
|
||||
|
||||
<BlockFormControlLabel
|
||||
control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />}
|
||||
label="Disable WiFi Sleep Mode"
|
||||
label={LL.NETWORK_DISABLE_SLEEP()}
|
||||
/>
|
||||
|
||||
<BlockFormControlLabel
|
||||
control={<Checkbox name="bandwidth20" checked={data.bandwidth20} onChange={updateFormValue} />}
|
||||
label="Use Lower WiFi Bandwidth"
|
||||
label={LL.NETWORK_LOW_BAND()}
|
||||
/>
|
||||
|
||||
<BlockFormControlLabel
|
||||
control={<Checkbox name="enableMDNS" checked={data.enableMDNS} onChange={updateFormValue} />}
|
||||
label="Enable mDNS Service"
|
||||
label={LL.NETWORK_USE_DNS()}
|
||||
/>
|
||||
|
||||
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
|
||||
General
|
||||
{LL.GENERAL_OPTIONS()}
|
||||
</Typography>
|
||||
|
||||
<ValidatedTextField
|
||||
@@ -180,12 +184,12 @@ const WiFiSettingsForm: FC = () => {
|
||||
|
||||
<BlockFormControlLabel
|
||||
control={<Checkbox name="enableIPv6" checked={data.enableIPv6} onChange={updateFormValue} />}
|
||||
label="Enable IPv6 support"
|
||||
label={LL.NETWORK_ENABLE_IPV6()}
|
||||
/>
|
||||
|
||||
<BlockFormControlLabel
|
||||
control={<Checkbox name="static_ip_config" checked={data.static_ip_config} onChange={updateFormValue} />}
|
||||
label="Use Fixed IP address"
|
||||
label={LL.NETWORK_FIXED_IP()}
|
||||
/>
|
||||
{data.static_ip_config && (
|
||||
<>
|
||||
@@ -250,7 +254,7 @@ const WiFiSettingsForm: FC = () => {
|
||||
type="submit"
|
||||
onClick={validateAndSubmit}
|
||||
>
|
||||
Save
|
||||
{LL.SAVE()}
|
||||
</Button>
|
||||
</ButtonRow>
|
||||
</>
|
||||
@@ -258,7 +262,7 @@ const WiFiSettingsForm: FC = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<SectionContent title="Network Settings" titleGutter>
|
||||
<SectionContent title={LL.NETWORK() + ' ' + LL.SETTINGS()} titleGutter>
|
||||
{content()}
|
||||
</SectionContent>
|
||||
);
|
||||
|
||||
@@ -14,6 +14,8 @@ import { NetworkConnectionStatus, NetworkStatus } from '../../types';
|
||||
import * as NetworkApi from '../../api/network';
|
||||
import { useRest } from '../../utils';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
const isConnected = ({ status }: NetworkStatus) =>
|
||||
status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED ||
|
||||
status === NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED;
|
||||
@@ -35,29 +37,6 @@ const networkStatusHighlight = ({ status }: NetworkStatus, theme: Theme) => {
|
||||
}
|
||||
};
|
||||
|
||||
const networkStatus = ({ status }: NetworkStatus) => {
|
||||
switch (status) {
|
||||
case NetworkConnectionStatus.WIFI_STATUS_NO_SHIELD:
|
||||
return 'Inactive';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_IDLE:
|
||||
return 'Idle';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL:
|
||||
return 'No SSID Available';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECTED:
|
||||
return 'Connected (WiFi)';
|
||||
case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED:
|
||||
return 'Connected (Ethernet)';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED:
|
||||
return 'Connection Failed';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST:
|
||||
return 'Connection Lost';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED:
|
||||
return 'Disconnected';
|
||||
default:
|
||||
return 'Unknown';
|
||||
}
|
||||
};
|
||||
|
||||
export const isWiFi = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED;
|
||||
export const isEthernet = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED;
|
||||
|
||||
@@ -81,8 +60,33 @@ const IPs = (status: NetworkStatus) => {
|
||||
const NetworkStatusForm: FC = () => {
|
||||
const { loadData, data, errorMessage } = useRest<NetworkStatus>({ read: NetworkApi.readNetworkStatus });
|
||||
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
const theme = useTheme();
|
||||
|
||||
const networkStatus = ({ status }: NetworkStatus) => {
|
||||
switch (status) {
|
||||
case NetworkConnectionStatus.WIFI_STATUS_NO_SHIELD:
|
||||
return LL.INACTIVE();
|
||||
case NetworkConnectionStatus.WIFI_STATUS_IDLE:
|
||||
return LL.IDLE();
|
||||
case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL:
|
||||
return 'No SSID Available';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECTED:
|
||||
return LL.CONNECTED() + ' (WiFi)';
|
||||
case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED:
|
||||
return LL.CONNECTED() + ' (Ethernet)';
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED:
|
||||
return LL.CONNECTED() + ' ' + LL.FAILED();
|
||||
case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST:
|
||||
return LL.CONNECTED() + ' ' + LL.LOST();
|
||||
case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED:
|
||||
return LL.DISCONNECTED();
|
||||
default:
|
||||
return LL.UNKNOWN();
|
||||
}
|
||||
};
|
||||
|
||||
const content = () => {
|
||||
if (!data) {
|
||||
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
|
||||
@@ -162,7 +166,7 @@ const NetworkStatusForm: FC = () => {
|
||||
</List>
|
||||
<ButtonRow>
|
||||
<Button startIcon={<RefreshIcon />} variant="outlined" color="secondary" onClick={loadData}>
|
||||
Refresh
|
||||
{LL.REFRESH()}
|
||||
</Button>
|
||||
</ButtonRow>
|
||||
</>
|
||||
@@ -170,7 +174,7 @@ const NetworkStatusForm: FC = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<SectionContent title="Network Status" titleGutter>
|
||||
<SectionContent title={LL.NETWORK() + ' ' + LL.STATUS()} titleGutter>
|
||||
{content()}
|
||||
</SectionContent>
|
||||
);
|
||||
|
||||
@@ -12,6 +12,8 @@ import { ButtonRow, FormLoader, SectionContent } from '../../components';
|
||||
|
||||
import WiFiNetworkSelector from './WiFiNetworkSelector';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
const NUM_POLLS = 10;
|
||||
const POLLING_FREQUENCY = 500;
|
||||
|
||||
@@ -22,6 +24,8 @@ const compareNetworks = (network1: WiFiNetwork, network2: WiFiNetwork) => {
|
||||
};
|
||||
|
||||
const WiFiNetworkScanner: FC = () => {
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
const { enqueueSnackbar } = useSnackbar();
|
||||
|
||||
const pollCount = useRef(0);
|
||||
@@ -46,7 +50,7 @@ const WiFiNetworkScanner: FC = () => {
|
||||
pollCount.current = completedPollCount;
|
||||
setTimeout(pollNetworkList, POLLING_FREQUENCY);
|
||||
} else {
|
||||
finishedWithError('Device did not return network list in timely manner');
|
||||
finishedWithError(LL.PROBLEM_LOADING());
|
||||
}
|
||||
} else {
|
||||
const newNetworkList = response.data;
|
||||
@@ -55,12 +59,12 @@ const WiFiNetworkScanner: FC = () => {
|
||||
}
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof AxiosError) {
|
||||
finishedWithError('Problem listing WiFi networks ' + error.response?.data.message);
|
||||
finishedWithError(LL.PROBLEM_LOADING() + ' ' + error.response?.data.message);
|
||||
} else {
|
||||
finishedWithError('Problem listing WiFi networks');
|
||||
finishedWithError(LL.PROBLEM_LOADING());
|
||||
}
|
||||
}
|
||||
}, [finishedWithError]);
|
||||
}, [finishedWithError, LL]);
|
||||
|
||||
const startNetworkScan = useCallback(async () => {
|
||||
pollCount.current = 0;
|
||||
@@ -71,12 +75,12 @@ const WiFiNetworkScanner: FC = () => {
|
||||
setTimeout(pollNetworkList, POLLING_FREQUENCY);
|
||||
} catch (error: unknown) {
|
||||
if (error instanceof AxiosError) {
|
||||
finishedWithError('Problem scanning for WiFi networks ' + error.response?.data.message);
|
||||
finishedWithError(LL.PROBLEM_LOADING() + ' ' + error.response?.data.message);
|
||||
} else {
|
||||
finishedWithError('Problem scanning for WiFi networks');
|
||||
finishedWithError(LL.PROBLEM_LOADING());
|
||||
}
|
||||
}
|
||||
}, [finishedWithError, pollNetworkList]);
|
||||
}, [finishedWithError, pollNetworkList, LL]);
|
||||
|
||||
useEffect(() => {
|
||||
startNetworkScan();
|
||||
@@ -84,13 +88,13 @@ const WiFiNetworkScanner: FC = () => {
|
||||
|
||||
const renderNetworkScanner = () => {
|
||||
if (!networkList) {
|
||||
return <FormLoader message="Scanning…" errorMessage={errorMessage} />;
|
||||
return <FormLoader message={LL.SCANNING() + '...'} errorMessage={errorMessage} />;
|
||||
}
|
||||
return <WiFiNetworkSelector networkList={networkList} />;
|
||||
};
|
||||
|
||||
return (
|
||||
<SectionContent title="Network Scanner">
|
||||
<SectionContent title={LL.NETWORK_SCANNER()}>
|
||||
{renderNetworkScanner()}
|
||||
<ButtonRow>
|
||||
<Button
|
||||
@@ -100,7 +104,7 @@ const WiFiNetworkScanner: FC = () => {
|
||||
onClick={startNetworkScan}
|
||||
disabled={!errorMessage && !networkList}
|
||||
>
|
||||
Scan again…
|
||||
{LL.SCAN_AGAIN()}…
|
||||
</Button>
|
||||
</ButtonRow>
|
||||
</SectionContent>
|
||||
|
||||
@@ -12,6 +12,8 @@ import { WiFiEncryptionType, WiFiNetwork, WiFiNetworkList } from '../../types';
|
||||
|
||||
import { WiFiConnectionContext } from './WiFiConnectionContext';
|
||||
|
||||
import { useI18nContext } from '../../i18n/i18n-react';
|
||||
|
||||
interface WiFiNetworkSelectorProps {
|
||||
networkList: WiFiNetworkList;
|
||||
}
|
||||
@@ -39,6 +41,8 @@ export const networkSecurityMode = ({ encryption_type }: WiFiNetwork) => {
|
||||
};
|
||||
|
||||
const WiFiNetworkSelector: FC<WiFiNetworkSelectorProps> = ({ networkList }) => {
|
||||
const { LL } = useI18nContext();
|
||||
|
||||
const wifiConnectionContext = useContext(WiFiConnectionContext);
|
||||
|
||||
const renderNetwork = (network: WiFiNetwork) => {
|
||||
@@ -61,7 +65,7 @@ const WiFiNetworkSelector: FC<WiFiNetworkSelectorProps> = ({ networkList }) => {
|
||||
};
|
||||
|
||||
if (networkList.networks.length === 0) {
|
||||
return <MessageBox mt={2} mb={1} message="No WiFi networks found" level="info" />;
|
||||
return <MessageBox mt={2} mb={1} message={LL.NETWORK_NO_WIFI()} level="info" />;
|
||||
}
|
||||
|
||||
return <List>{networkList.networks.map(renderNetwork)}</List>;
|
||||
|
||||
@@ -2,6 +2,8 @@ import type { Translation } from '../i18n-types';
|
||||
|
||||
const de: Translation = {
|
||||
LANGUAGE: 'Sprache',
|
||||
RETRY: 'DE_Retry',
|
||||
LOADING: 'DE_Loading',
|
||||
IS_REQUIRED: 'ist nötig',
|
||||
SIGN_IN: 'Einloggen',
|
||||
SIGN_OUT: 'Ausloggen',
|
||||
@@ -16,7 +18,7 @@ const de: Translation = {
|
||||
UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich',
|
||||
DOWNLOAD_SUCCESSFUL: 'DE_Download successful',
|
||||
INVALID_LOGIN: 'Ungültige Login Daten',
|
||||
NETWORK_CONNECTION: 'Netzwerkverbindung',
|
||||
NETWORK: 'Netzwerk',
|
||||
SECURITY: 'Sicherheit',
|
||||
ONOFF_CAP: 'AN/AUS',
|
||||
ONOFF: 'an/aus',
|
||||
@@ -51,7 +53,6 @@ const de: Translation = {
|
||||
CONNECTED: 'in Verbindung gebracht',
|
||||
TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus',
|
||||
DISCONNECTED: 'Getrennt',
|
||||
SCANNING: 'Suche nach Geräten...',
|
||||
EMS_SCAN: 'Möchten Sie wirklich einen vollständigen Gerätescan des EMS-Busses starten?',
|
||||
EMS_BUS_STATUS: 'EMS Bus Status',
|
||||
ACTIVE_DEVICES: 'Aktive Geräte und Sensoren',
|
||||
@@ -222,8 +223,23 @@ const de: Translation = {
|
||||
AP_PROVIDE_TEXT_2: 'DE_when WiFi is disconnected',
|
||||
AP_PROVIDE_TEXT_3: 'DE_never',
|
||||
AP_PREFERRED_CHANNEL: 'DE_Preferred Channel',
|
||||
AP_HIDE_SSID: 'DE_Hide SSID'
|
||||
|
||||
AP_HIDE_SSID: 'DE_Hide SSID',
|
||||
NETWORK_SCAN: 'DE_Scan WiFi Networks',
|
||||
IDLE: 'DE_Idle',
|
||||
LOST: 'DE_Lost',
|
||||
SCANNING: 'DE_Scanning',
|
||||
SCAN_AGAIN: 'DE_Scan again',
|
||||
NETWORK_SCANNER: 'DE_Network Scanner',
|
||||
NETWORK_NO_WIFI: 'DE_No WiFi networks found',
|
||||
NETWORK_BLANK_SSID: 'DE_leave blank to disable WiFi',
|
||||
POWER: 'DE_Power',
|
||||
NETWORK_DISABLE_SLEEP: 'DE_Disable WiFi Sleep Mode',
|
||||
NETWORK_LOW_BAND: 'DE_Use Lower WiFi Bandwidth',
|
||||
NETWORK_USE_DNS: 'DE_Enable mDNS Service',
|
||||
NETWORK_ENABLE_IPV6: 'DE_Enable IPv6 support',
|
||||
NETWORK_FIXED_IP: 'DE_Use Fixed IP address',
|
||||
ADMIN: 'DE_Admin',
|
||||
GUEST: 'DE_Guest'
|
||||
};
|
||||
|
||||
export default de;
|
||||
|
||||
@@ -2,6 +2,8 @@ import type { BaseTranslation } from '../i18n-types';
|
||||
|
||||
const en: BaseTranslation = {
|
||||
LANGUAGE: 'Language',
|
||||
RETRY: 'Retry',
|
||||
LOADING: 'Loading',
|
||||
IS_REQUIRED: 'is required',
|
||||
SIGN_IN: 'Sign In',
|
||||
SIGN_OUT: 'Sign Out',
|
||||
@@ -16,7 +18,7 @@ const en: BaseTranslation = {
|
||||
UPLOAD_SUCCESSFUL: 'Upload successful',
|
||||
DOWNLOAD_SUCCESSFUL: 'Download successful',
|
||||
INVALID_LOGIN: 'Invalid login details',
|
||||
NETWORK_CONNECTION: 'Network Connection',
|
||||
NETWORK: 'Network',
|
||||
SECURITY: 'Security',
|
||||
ONOFF_CAP: 'ON/OFF',
|
||||
ONOFF: 'on/off',
|
||||
@@ -51,7 +53,6 @@ const en: BaseTranslation = {
|
||||
CONNECTED: 'Connected',
|
||||
TX_ISSUES: 'Tx issues - try a different Tx Mode',
|
||||
DISCONNECTED: 'Disconnected',
|
||||
SCANNING: 'Scanning for devices...',
|
||||
EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?',
|
||||
EMS_BUS_STATUS: 'EMS Bus Status',
|
||||
ACTIVE_DEVICES: 'Active Devices & Sensors',
|
||||
@@ -222,7 +223,23 @@ const en: BaseTranslation = {
|
||||
AP_PROVIDE_TEXT_2: 'when WiFi is disconnected',
|
||||
AP_PROVIDE_TEXT_3: 'never',
|
||||
AP_PREFERRED_CHANNEL: 'Preferred Channel',
|
||||
AP_HIDE_SSID: 'Hide SSID'
|
||||
AP_HIDE_SSID: 'Hide SSID',
|
||||
NETWORK_SCAN: 'Scan WiFi Networks',
|
||||
IDLE: 'Idle',
|
||||
LOST: 'Lost',
|
||||
SCANNING: 'Scanning',
|
||||
SCAN_AGAIN: 'Scan again',
|
||||
NETWORK_SCANNER: 'Network Scanner',
|
||||
NETWORK_NO_WIFI: 'No WiFi networks found',
|
||||
NETWORK_BLANK_SSID: 'leave blank to disable WiFi',
|
||||
POWER: 'Power',
|
||||
NETWORK_DISABLE_SLEEP: 'Disable WiFi Sleep Mode',
|
||||
NETWORK_LOW_BAND: 'Use Lower WiFi Bandwidth',
|
||||
NETWORK_USE_DNS: 'Enable mDNS Service',
|
||||
NETWORK_ENABLE_IPV6: 'Enable IPv6 support',
|
||||
NETWORK_FIXED_IP: 'Use Fixed IP address',
|
||||
ADMIN: 'Admin',
|
||||
GUEST: 'Guest'
|
||||
};
|
||||
|
||||
export default en;
|
||||
|
||||
@@ -18,6 +18,14 @@ type RootTranslation = {
|
||||
* Language
|
||||
*/
|
||||
LANGUAGE: string
|
||||
/**
|
||||
* Retry
|
||||
*/
|
||||
RETRY: string
|
||||
/**
|
||||
* Loading
|
||||
*/
|
||||
LOADING: string
|
||||
/**
|
||||
* is required
|
||||
*/
|
||||
@@ -76,9 +84,9 @@ type RootTranslation = {
|
||||
*/
|
||||
INVALID_LOGIN: string
|
||||
/**
|
||||
* Network Connection
|
||||
* Network
|
||||
*/
|
||||
NETWORK_CONNECTION: string
|
||||
NETWORK: string
|
||||
/**
|
||||
* Security
|
||||
*/
|
||||
@@ -214,10 +222,6 @@ type RootTranslation = {
|
||||
* Disconnected
|
||||
*/
|
||||
DISCONNECTED: string
|
||||
/**
|
||||
* Scanning for devices...
|
||||
*/
|
||||
SCANNING: string
|
||||
/**
|
||||
* Are you sure you want to initiate a full device scan of the EMS bus?
|
||||
*/
|
||||
@@ -883,6 +887,70 @@ type RootTranslation = {
|
||||
* Hide SSID
|
||||
*/
|
||||
AP_HIDE_SSID: string
|
||||
/**
|
||||
* Scan WiFi Networks
|
||||
*/
|
||||
NETWORK_SCAN: string
|
||||
/**
|
||||
* Idle
|
||||
*/
|
||||
IDLE: string
|
||||
/**
|
||||
* Lost
|
||||
*/
|
||||
LOST: string
|
||||
/**
|
||||
* Scanning
|
||||
*/
|
||||
SCANNING: string
|
||||
/**
|
||||
* Scan again
|
||||
*/
|
||||
SCAN_AGAIN: string
|
||||
/**
|
||||
* Network Scanner
|
||||
*/
|
||||
NETWORK_SCANNER: string
|
||||
/**
|
||||
* No WiFi networks found
|
||||
*/
|
||||
NETWORK_NO_WIFI: string
|
||||
/**
|
||||
* leave blank to disable WiFi
|
||||
*/
|
||||
NETWORK_BLANK_SSID: string
|
||||
/**
|
||||
* Power
|
||||
*/
|
||||
POWER: string
|
||||
/**
|
||||
* Disable WiFi Sleep Mode
|
||||
*/
|
||||
NETWORK_DISABLE_SLEEP: string
|
||||
/**
|
||||
* Use Lower WiFi Bandwidth
|
||||
*/
|
||||
NETWORK_LOW_BAND: string
|
||||
/**
|
||||
* Enable mDNS Service
|
||||
*/
|
||||
NETWORK_USE_DNS: string
|
||||
/**
|
||||
* Enable IPv6 support
|
||||
*/
|
||||
NETWORK_ENABLE_IPV6: string
|
||||
/**
|
||||
* Use Fixed IP address
|
||||
*/
|
||||
NETWORK_FIXED_IP: string
|
||||
/**
|
||||
* Admin
|
||||
*/
|
||||
ADMIN: string
|
||||
/**
|
||||
* Guest
|
||||
*/
|
||||
GUEST: string
|
||||
}
|
||||
|
||||
export type TranslationFunctions = {
|
||||
@@ -890,6 +958,14 @@ export type TranslationFunctions = {
|
||||
* Language
|
||||
*/
|
||||
LANGUAGE: () => LocalizedString
|
||||
/**
|
||||
* Retry
|
||||
*/
|
||||
RETRY: () => LocalizedString
|
||||
/**
|
||||
* Loading
|
||||
*/
|
||||
LOADING: () => LocalizedString
|
||||
/**
|
||||
* is required
|
||||
*/
|
||||
@@ -947,9 +1023,9 @@ export type TranslationFunctions = {
|
||||
*/
|
||||
INVALID_LOGIN: () => LocalizedString
|
||||
/**
|
||||
* Network Connection
|
||||
* Network
|
||||
*/
|
||||
NETWORK_CONNECTION: () => LocalizedString
|
||||
NETWORK: () => LocalizedString
|
||||
/**
|
||||
* Security
|
||||
*/
|
||||
@@ -1082,10 +1158,6 @@ export type TranslationFunctions = {
|
||||
* Disconnected
|
||||
*/
|
||||
DISCONNECTED: () => LocalizedString
|
||||
/**
|
||||
* Scanning for devices...
|
||||
*/
|
||||
SCANNING: () => LocalizedString
|
||||
/**
|
||||
* Are you sure you want to initiate a full device scan of the EMS bus?
|
||||
*/
|
||||
@@ -1744,6 +1816,70 @@ export type TranslationFunctions = {
|
||||
* Hide SSID
|
||||
*/
|
||||
AP_HIDE_SSID: () => LocalizedString
|
||||
/**
|
||||
* Scan WiFi Networks
|
||||
*/
|
||||
NETWORK_SCAN: () => LocalizedString
|
||||
/**
|
||||
* Idle
|
||||
*/
|
||||
IDLE: () => LocalizedString
|
||||
/**
|
||||
* Lost
|
||||
*/
|
||||
LOST: () => LocalizedString
|
||||
/**
|
||||
* Scanning
|
||||
*/
|
||||
SCANNING: () => LocalizedString
|
||||
/**
|
||||
* Scan again
|
||||
*/
|
||||
SCAN_AGAIN: () => LocalizedString
|
||||
/**
|
||||
* Network Scanner
|
||||
*/
|
||||
NETWORK_SCANNER: () => LocalizedString
|
||||
/**
|
||||
* No WiFi networks found
|
||||
*/
|
||||
NETWORK_NO_WIFI: () => LocalizedString
|
||||
/**
|
||||
* leave blank to disable WiFi
|
||||
*/
|
||||
NETWORK_BLANK_SSID: () => LocalizedString
|
||||
/**
|
||||
* Power
|
||||
*/
|
||||
POWER: () => LocalizedString
|
||||
/**
|
||||
* Disable WiFi Sleep Mode
|
||||
*/
|
||||
NETWORK_DISABLE_SLEEP: () => LocalizedString
|
||||
/**
|
||||
* Use Lower WiFi Bandwidth
|
||||
*/
|
||||
NETWORK_LOW_BAND: () => LocalizedString
|
||||
/**
|
||||
* Enable mDNS Service
|
||||
*/
|
||||
NETWORK_USE_DNS: () => LocalizedString
|
||||
/**
|
||||
* Enable IPv6 support
|
||||
*/
|
||||
NETWORK_ENABLE_IPV6: () => LocalizedString
|
||||
/**
|
||||
* Use Fixed IP address
|
||||
*/
|
||||
NETWORK_FIXED_IP: () => LocalizedString
|
||||
/**
|
||||
* Admin
|
||||
*/
|
||||
ADMIN: () => LocalizedString
|
||||
/**
|
||||
* Guest
|
||||
*/
|
||||
GUEST: () => LocalizedString
|
||||
}
|
||||
|
||||
export type Formatters = {}
|
||||
|
||||
@@ -147,7 +147,7 @@ const DashboardStatus: FC = () => {
|
||||
const scan = async () => {
|
||||
try {
|
||||
await EMSESP.scanDevices();
|
||||
enqueueSnackbar(LL.SCANNING(), { variant: 'info' });
|
||||
enqueueSnackbar(LL.SCANNING() + '...', { variant: 'info' });
|
||||
} catch (error: unknown) {
|
||||
enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' });
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user