translate network

This commit is contained in:
Proddy
2022-08-28 16:36:04 +02:00
parent 3ea71e1dfb
commit 1ccacdc600
13 changed files with 285 additions and 88 deletions

View File

@@ -95,7 +95,9 @@ const LayoutAuthMenu: FC = () => {
</Avatar> </Avatar>
<Box pl={2}> <Box pl={2}>
<ItemTypography variant="h6">{me.username}</ItemTypography> <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>
</Box> </Box>
<Divider /> <Divider />

View File

@@ -31,7 +31,7 @@ const LayoutMenu: FC = () => {
</List> </List>
)} )}
<List disablePadding component="nav"> <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" /> <LayoutMenuItem icon={SettingsInputAntennaIcon} label={LL.ACCESS_POINT()} to="/ap" />
{features.ntp && <LayoutMenuItem icon={AccessTimeIcon} label="NTP" to="/ntp" />} {features.ntp && <LayoutMenuItem icon={AccessTimeIcon} label="NTP" to="/ntp" />}
{features.mqtt && <LayoutMenuItem icon={DeviceHubIcon} label="MQTT" to="/mqtt" />} {features.mqtt && <LayoutMenuItem icon={DeviceHubIcon} label="MQTT" to="/mqtt" />}

View File

@@ -5,6 +5,8 @@ import RefreshIcon from '@mui/icons-material/Refresh';
import { MessageBox } from '..'; import { MessageBox } from '..';
import { useI18nContext } from '../../i18n/i18n-react';
interface FormLoaderProps { interface FormLoaderProps {
message?: string; message?: string;
errorMessage?: string; errorMessage?: string;
@@ -12,12 +14,14 @@ interface FormLoaderProps {
} }
const FormLoader: FC<FormLoaderProps> = ({ errorMessage, onRetry, message = 'Loading…' }) => { const FormLoader: FC<FormLoaderProps> = ({ errorMessage, onRetry, message = 'Loading…' }) => {
const { LL } = useI18nContext();
if (errorMessage) { if (errorMessage) {
return ( return (
<MessageBox my={2} level="error" message={errorMessage}> <MessageBox my={2} level="error" message={errorMessage}>
{onRetry && ( {onRetry && (
<Button startIcon={<RefreshIcon />} variant="contained" color="error" onClick={onRetry}> <Button startIcon={<RefreshIcon />} variant="contained" color="error" onClick={onRetry}>
Retry {LL.RETRY()}
</Button> </Button>
)} )}
</MessageBox> </MessageBox>

View File

@@ -2,11 +2,16 @@ import { FC } from 'react';
import { CircularProgress, Box, Typography, Theme } from '@mui/material'; import { CircularProgress, Box, Typography, Theme } from '@mui/material';
import { useI18nContext } from '../../i18n/i18n-react';
interface LoadingSpinnerProps { interface LoadingSpinnerProps {
height?: number | string; height?: number | string;
} }
const LoadingSpinner: FC<LoadingSpinnerProps> = ({ height = '100%' }) => ( const LoadingSpinner: FC<LoadingSpinnerProps> = ({ height = '100%' }) => {
const { LL } = useI18nContext();
return (
<Box display="flex" alignItems="center" justifyContent="center" flexDirection="column" padding={2} height={height}> <Box display="flex" alignItems="center" justifyContent="center" flexDirection="column" padding={2} height={height}>
<CircularProgress <CircularProgress
sx={(theme: Theme) => ({ sx={(theme: Theme) => ({
@@ -16,9 +21,10 @@ const LoadingSpinner: FC<LoadingSpinnerProps> = ({ height = '100%' }) => (
size={100} size={100}
/> />
<Typography variant="h4" color="textSecondary"> <Typography variant="h4" color="textSecondary">
Loading&hellip; {LL.LOADING()}&hellip;
</Typography> </Typography>
</Box> </Box>
); );
};
export default LoadingSpinner; export default LoadingSpinner;

View File

@@ -15,7 +15,7 @@ import { useI18nContext } from '../../i18n/i18n-react';
const NetworkConnection: FC = () => { const NetworkConnection: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
useLayoutTitle(LL.NETWORK_CONNECTION()); useLayoutTitle(LL.NETWORK());
const { routerTab } = useRouterTab(); const { routerTab } = useRouterTab();
@@ -45,9 +45,9 @@ const NetworkConnection: FC = () => {
}} }}
> >
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label="Network Status" /> <Tab value="status" label={LL.NETWORK() + ' ' + LL.STATUS()} />
<Tab value="scan" label="Scan WiFi Networks" disabled={!authenticatedContext.me.admin} /> <Tab value="scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} />
<Tab value="settings" label="Network Settings" disabled={!authenticatedContext.me.admin} /> <Tab value="settings" label={LL.NETWORK() + ' ' + LL.SETTINGS()} disabled={!authenticatedContext.me.admin} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="status" element={<NetworkStatusForm />} /> <Route path="status" element={<NetworkStatusForm />} />

View File

@@ -37,7 +37,11 @@ import { ValidateFieldsError } from 'async-validator';
import { validate } from '../../validators'; import { validate } from '../../validators';
import { createNetworkSettingsValidator } from '../../validators/network'; import { createNetworkSettingsValidator } from '../../validators/network';
import { useI18nContext } from '../../i18n/i18n-react';
const WiFiSettingsForm: FC = () => { const WiFiSettingsForm: FC = () => {
const { LL } = useI18nContext();
const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext); const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext);
const [initialized, setInitialized] = useState(false); const [initialized, setInitialized] = useState(false);
@@ -112,7 +116,7 @@ const WiFiSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="ssid" name="ssid"
label="SSID (leave blank to disable WiFi)" label={'SSID (' + LL.NETWORK_BLANK_SSID() + ')'}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.ssid} value={data.ssid}
@@ -124,7 +128,7 @@ const WiFiSettingsForm: FC = () => {
<ValidatedPasswordField <ValidatedPasswordField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="password" name="password"
label="Password" label={LL.PASSWORD()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.password} value={data.password}
@@ -136,7 +140,7 @@ const WiFiSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="tx_power" name="tx_power"
label="WiFi Tx Power" label={'WiFi Tx ' + LL.POWER()}
InputProps={{ InputProps={{
endAdornment: <InputAdornment position="end">dBm</InputAdornment> endAdornment: <InputAdornment position="end">dBm</InputAdornment>
}} }}
@@ -150,21 +154,21 @@ const WiFiSettingsForm: FC = () => {
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />} control={<Checkbox name="nosleep" checked={data.nosleep} onChange={updateFormValue} />}
label="Disable WiFi Sleep Mode" label={LL.NETWORK_DISABLE_SLEEP()}
/> />
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="bandwidth20" checked={data.bandwidth20} onChange={updateFormValue} />} control={<Checkbox name="bandwidth20" checked={data.bandwidth20} onChange={updateFormValue} />}
label="Use Lower WiFi Bandwidth" label={LL.NETWORK_LOW_BAND()}
/> />
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="enableMDNS" checked={data.enableMDNS} onChange={updateFormValue} />} 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"> <Typography sx={{ pt: 2 }} variant="h6" color="primary">
General {LL.GENERAL_OPTIONS()}
</Typography> </Typography>
<ValidatedTextField <ValidatedTextField
@@ -180,12 +184,12 @@ const WiFiSettingsForm: FC = () => {
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="enableIPv6" checked={data.enableIPv6} onChange={updateFormValue} />} control={<Checkbox name="enableIPv6" checked={data.enableIPv6} onChange={updateFormValue} />}
label="Enable IPv6 support" label={LL.NETWORK_ENABLE_IPV6()}
/> />
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="static_ip_config" checked={data.static_ip_config} onChange={updateFormValue} />} 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 && ( {data.static_ip_config && (
<> <>
@@ -250,7 +254,7 @@ const WiFiSettingsForm: FC = () => {
type="submit" type="submit"
onClick={validateAndSubmit} onClick={validateAndSubmit}
> >
Save {LL.SAVE()}
</Button> </Button>
</ButtonRow> </ButtonRow>
</> </>
@@ -258,7 +262,7 @@ const WiFiSettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title="Network Settings" titleGutter> <SectionContent title={LL.NETWORK() + ' ' + LL.SETTINGS()} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -14,6 +14,8 @@ import { NetworkConnectionStatus, NetworkStatus } from '../../types';
import * as NetworkApi from '../../api/network'; import * as NetworkApi from '../../api/network';
import { useRest } from '../../utils'; import { useRest } from '../../utils';
import { useI18nContext } from '../../i18n/i18n-react';
const isConnected = ({ status }: NetworkStatus) => const isConnected = ({ status }: NetworkStatus) =>
status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED || status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED ||
status === NetworkConnectionStatus.ETHERNET_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 isWiFi = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.WIFI_STATUS_CONNECTED;
export const isEthernet = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED; export const isEthernet = ({ status }: NetworkStatus) => status === NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED;
@@ -81,8 +60,33 @@ const IPs = (status: NetworkStatus) => {
const NetworkStatusForm: FC = () => { const NetworkStatusForm: FC = () => {
const { loadData, data, errorMessage } = useRest<NetworkStatus>({ read: NetworkApi.readNetworkStatus }); const { loadData, data, errorMessage } = useRest<NetworkStatus>({ read: NetworkApi.readNetworkStatus });
const { LL } = useI18nContext();
const theme = useTheme(); 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 = () => { const content = () => {
if (!data) { if (!data) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage} />; return <FormLoader onRetry={loadData} errorMessage={errorMessage} />;
@@ -162,7 +166,7 @@ const NetworkStatusForm: FC = () => {
</List> </List>
<ButtonRow> <ButtonRow>
<Button startIcon={<RefreshIcon />} variant="outlined" color="secondary" onClick={loadData}> <Button startIcon={<RefreshIcon />} variant="outlined" color="secondary" onClick={loadData}>
Refresh {LL.REFRESH()}
</Button> </Button>
</ButtonRow> </ButtonRow>
</> </>
@@ -170,7 +174,7 @@ const NetworkStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title="Network Status" titleGutter> <SectionContent title={LL.NETWORK() + ' ' + LL.STATUS()} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -12,6 +12,8 @@ import { ButtonRow, FormLoader, SectionContent } from '../../components';
import WiFiNetworkSelector from './WiFiNetworkSelector'; import WiFiNetworkSelector from './WiFiNetworkSelector';
import { useI18nContext } from '../../i18n/i18n-react';
const NUM_POLLS = 10; const NUM_POLLS = 10;
const POLLING_FREQUENCY = 500; const POLLING_FREQUENCY = 500;
@@ -22,6 +24,8 @@ const compareNetworks = (network1: WiFiNetwork, network2: WiFiNetwork) => {
}; };
const WiFiNetworkScanner: FC = () => { const WiFiNetworkScanner: FC = () => {
const { LL } = useI18nContext();
const { enqueueSnackbar } = useSnackbar(); const { enqueueSnackbar } = useSnackbar();
const pollCount = useRef(0); const pollCount = useRef(0);
@@ -46,7 +50,7 @@ const WiFiNetworkScanner: FC = () => {
pollCount.current = completedPollCount; pollCount.current = completedPollCount;
setTimeout(pollNetworkList, POLLING_FREQUENCY); setTimeout(pollNetworkList, POLLING_FREQUENCY);
} else { } else {
finishedWithError('Device did not return network list in timely manner'); finishedWithError(LL.PROBLEM_LOADING());
} }
} else { } else {
const newNetworkList = response.data; const newNetworkList = response.data;
@@ -55,12 +59,12 @@ const WiFiNetworkScanner: FC = () => {
} }
} catch (error: unknown) { } catch (error: unknown) {
if (error instanceof AxiosError) { if (error instanceof AxiosError) {
finishedWithError('Problem listing WiFi networks ' + error.response?.data.message); finishedWithError(LL.PROBLEM_LOADING() + ' ' + error.response?.data.message);
} else { } else {
finishedWithError('Problem listing WiFi networks'); finishedWithError(LL.PROBLEM_LOADING());
} }
} }
}, [finishedWithError]); }, [finishedWithError, LL]);
const startNetworkScan = useCallback(async () => { const startNetworkScan = useCallback(async () => {
pollCount.current = 0; pollCount.current = 0;
@@ -71,12 +75,12 @@ const WiFiNetworkScanner: FC = () => {
setTimeout(pollNetworkList, POLLING_FREQUENCY); setTimeout(pollNetworkList, POLLING_FREQUENCY);
} catch (error: unknown) { } catch (error: unknown) {
if (error instanceof AxiosError) { if (error instanceof AxiosError) {
finishedWithError('Problem scanning for WiFi networks ' + error.response?.data.message); finishedWithError(LL.PROBLEM_LOADING() + ' ' + error.response?.data.message);
} else { } else {
finishedWithError('Problem scanning for WiFi networks'); finishedWithError(LL.PROBLEM_LOADING());
} }
} }
}, [finishedWithError, pollNetworkList]); }, [finishedWithError, pollNetworkList, LL]);
useEffect(() => { useEffect(() => {
startNetworkScan(); startNetworkScan();
@@ -84,13 +88,13 @@ const WiFiNetworkScanner: FC = () => {
const renderNetworkScanner = () => { const renderNetworkScanner = () => {
if (!networkList) { if (!networkList) {
return <FormLoader message="Scanning&hellip;" errorMessage={errorMessage} />; return <FormLoader message={LL.SCANNING() + '...'} errorMessage={errorMessage} />;
} }
return <WiFiNetworkSelector networkList={networkList} />; return <WiFiNetworkSelector networkList={networkList} />;
}; };
return ( return (
<SectionContent title="Network Scanner"> <SectionContent title={LL.NETWORK_SCANNER()}>
{renderNetworkScanner()} {renderNetworkScanner()}
<ButtonRow> <ButtonRow>
<Button <Button
@@ -100,7 +104,7 @@ const WiFiNetworkScanner: FC = () => {
onClick={startNetworkScan} onClick={startNetworkScan}
disabled={!errorMessage && !networkList} disabled={!errorMessage && !networkList}
> >
Scan again&hellip; {LL.SCAN_AGAIN()}&hellip;
</Button> </Button>
</ButtonRow> </ButtonRow>
</SectionContent> </SectionContent>

View File

@@ -12,6 +12,8 @@ import { WiFiEncryptionType, WiFiNetwork, WiFiNetworkList } from '../../types';
import { WiFiConnectionContext } from './WiFiConnectionContext'; import { WiFiConnectionContext } from './WiFiConnectionContext';
import { useI18nContext } from '../../i18n/i18n-react';
interface WiFiNetworkSelectorProps { interface WiFiNetworkSelectorProps {
networkList: WiFiNetworkList; networkList: WiFiNetworkList;
} }
@@ -39,6 +41,8 @@ export const networkSecurityMode = ({ encryption_type }: WiFiNetwork) => {
}; };
const WiFiNetworkSelector: FC<WiFiNetworkSelectorProps> = ({ networkList }) => { const WiFiNetworkSelector: FC<WiFiNetworkSelectorProps> = ({ networkList }) => {
const { LL } = useI18nContext();
const wifiConnectionContext = useContext(WiFiConnectionContext); const wifiConnectionContext = useContext(WiFiConnectionContext);
const renderNetwork = (network: WiFiNetwork) => { const renderNetwork = (network: WiFiNetwork) => {
@@ -61,7 +65,7 @@ const WiFiNetworkSelector: FC<WiFiNetworkSelectorProps> = ({ networkList }) => {
}; };
if (networkList.networks.length === 0) { 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>; return <List>{networkList.networks.map(renderNetwork)}</List>;

View File

@@ -2,6 +2,8 @@ import type { Translation } from '../i18n-types';
const de: Translation = { const de: Translation = {
LANGUAGE: 'Sprache', LANGUAGE: 'Sprache',
RETRY: 'DE_Retry',
LOADING: 'DE_Loading',
IS_REQUIRED: 'ist nötig', IS_REQUIRED: 'ist nötig',
SIGN_IN: 'Einloggen', SIGN_IN: 'Einloggen',
SIGN_OUT: 'Ausloggen', SIGN_OUT: 'Ausloggen',
@@ -16,7 +18,7 @@ const de: Translation = {
UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich', UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich',
DOWNLOAD_SUCCESSFUL: 'DE_Download successful', DOWNLOAD_SUCCESSFUL: 'DE_Download successful',
INVALID_LOGIN: 'Ungültige Login Daten', INVALID_LOGIN: 'Ungültige Login Daten',
NETWORK_CONNECTION: 'Netzwerkverbindung', NETWORK: 'Netzwerk',
SECURITY: 'Sicherheit', SECURITY: 'Sicherheit',
ONOFF_CAP: 'AN/AUS', ONOFF_CAP: 'AN/AUS',
ONOFF: 'an/aus', ONOFF: 'an/aus',
@@ -51,7 +53,6 @@ const de: Translation = {
CONNECTED: 'in Verbindung gebracht', CONNECTED: 'in Verbindung gebracht',
TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus', TX_ISSUES: 'Tx-Probleme - versuchen Sie einen anderen Tx-Modus',
DISCONNECTED: 'Getrennt', DISCONNECTED: 'Getrennt',
SCANNING: 'Suche nach Geräten...',
EMS_SCAN: 'Möchten Sie wirklich einen vollständigen Gerätescan des EMS-Busses starten?', EMS_SCAN: 'Möchten Sie wirklich einen vollständigen Gerätescan des EMS-Busses starten?',
EMS_BUS_STATUS: 'EMS Bus Status', EMS_BUS_STATUS: 'EMS Bus Status',
ACTIVE_DEVICES: 'Aktive Geräte und Sensoren', 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_2: 'DE_when WiFi is disconnected',
AP_PROVIDE_TEXT_3: 'DE_never', AP_PROVIDE_TEXT_3: 'DE_never',
AP_PREFERRED_CHANNEL: 'DE_Preferred Channel', 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; export default de;

View File

@@ -2,6 +2,8 @@ import type { BaseTranslation } from '../i18n-types';
const en: BaseTranslation = { const en: BaseTranslation = {
LANGUAGE: 'Language', LANGUAGE: 'Language',
RETRY: 'Retry',
LOADING: 'Loading',
IS_REQUIRED: 'is required', IS_REQUIRED: 'is required',
SIGN_IN: 'Sign In', SIGN_IN: 'Sign In',
SIGN_OUT: 'Sign Out', SIGN_OUT: 'Sign Out',
@@ -16,7 +18,7 @@ const en: BaseTranslation = {
UPLOAD_SUCCESSFUL: 'Upload successful', UPLOAD_SUCCESSFUL: 'Upload successful',
DOWNLOAD_SUCCESSFUL: 'Download successful', DOWNLOAD_SUCCESSFUL: 'Download successful',
INVALID_LOGIN: 'Invalid login details', INVALID_LOGIN: 'Invalid login details',
NETWORK_CONNECTION: 'Network Connection', NETWORK: 'Network',
SECURITY: 'Security', SECURITY: 'Security',
ONOFF_CAP: 'ON/OFF', ONOFF_CAP: 'ON/OFF',
ONOFF: 'on/off', ONOFF: 'on/off',
@@ -51,7 +53,6 @@ const en: BaseTranslation = {
CONNECTED: 'Connected', CONNECTED: 'Connected',
TX_ISSUES: 'Tx issues - try a different Tx Mode', TX_ISSUES: 'Tx issues - try a different Tx Mode',
DISCONNECTED: 'Disconnected', DISCONNECTED: 'Disconnected',
SCANNING: 'Scanning for devices...',
EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?', EMS_SCAN: 'Are you sure you want to initiate a full device scan of the EMS bus?',
EMS_BUS_STATUS: 'EMS Bus Status', EMS_BUS_STATUS: 'EMS Bus Status',
ACTIVE_DEVICES: 'Active Devices & Sensors', ACTIVE_DEVICES: 'Active Devices & Sensors',
@@ -222,7 +223,23 @@ const en: BaseTranslation = {
AP_PROVIDE_TEXT_2: 'when WiFi is disconnected', AP_PROVIDE_TEXT_2: 'when WiFi is disconnected',
AP_PROVIDE_TEXT_3: 'never', AP_PROVIDE_TEXT_3: 'never',
AP_PREFERRED_CHANNEL: 'Preferred Channel', 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; export default en;

View File

@@ -18,6 +18,14 @@ type RootTranslation = {
* Language * Language
*/ */
LANGUAGE: string LANGUAGE: string
/**
* Retry
*/
RETRY: string
/**
* Loading
*/
LOADING: string
/** /**
* is required * is required
*/ */
@@ -76,9 +84,9 @@ type RootTranslation = {
*/ */
INVALID_LOGIN: string INVALID_LOGIN: string
/** /**
* Network Connection * Network
*/ */
NETWORK_CONNECTION: string NETWORK: string
/** /**
* Security * Security
*/ */
@@ -214,10 +222,6 @@ type RootTranslation = {
* Disconnected * Disconnected
*/ */
DISCONNECTED: string DISCONNECTED: string
/**
* Scanning for devices...
*/
SCANNING: string
/** /**
* Are you sure you want to initiate a full device scan of the EMS bus? * Are you sure you want to initiate a full device scan of the EMS bus?
*/ */
@@ -883,6 +887,70 @@ type RootTranslation = {
* Hide SSID * Hide SSID
*/ */
AP_HIDE_SSID: string 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 = { export type TranslationFunctions = {
@@ -890,6 +958,14 @@ export type TranslationFunctions = {
* Language * Language
*/ */
LANGUAGE: () => LocalizedString LANGUAGE: () => LocalizedString
/**
* Retry
*/
RETRY: () => LocalizedString
/**
* Loading
*/
LOADING: () => LocalizedString
/** /**
* is required * is required
*/ */
@@ -947,9 +1023,9 @@ export type TranslationFunctions = {
*/ */
INVALID_LOGIN: () => LocalizedString INVALID_LOGIN: () => LocalizedString
/** /**
* Network Connection * Network
*/ */
NETWORK_CONNECTION: () => LocalizedString NETWORK: () => LocalizedString
/** /**
* Security * Security
*/ */
@@ -1082,10 +1158,6 @@ export type TranslationFunctions = {
* Disconnected * Disconnected
*/ */
DISCONNECTED: () => LocalizedString DISCONNECTED: () => LocalizedString
/**
* Scanning for devices...
*/
SCANNING: () => LocalizedString
/** /**
* Are you sure you want to initiate a full device scan of the EMS bus? * Are you sure you want to initiate a full device scan of the EMS bus?
*/ */
@@ -1744,6 +1816,70 @@ export type TranslationFunctions = {
* Hide SSID * Hide SSID
*/ */
AP_HIDE_SSID: () => LocalizedString 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 = {} export type Formatters = {}

View File

@@ -147,7 +147,7 @@ const DashboardStatus: FC = () => {
const scan = async () => { const scan = async () => {
try { try {
await EMSESP.scanDevices(); await EMSESP.scanDevices();
enqueueSnackbar(LL.SCANNING(), { variant: 'info' }); enqueueSnackbar(LL.SCANNING() + '...', { variant: 'info' });
} catch (error: unknown) { } catch (error: unknown) {
enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' }); enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' });
} finally { } finally {