Merge pull request #702 from pswid/dev

The translation of the web interface into Polish has been corrected and completed (e.g. the word order has been fixed).
This commit is contained in:
Proddy
2022-10-29 11:03:24 +02:00
committed by GitHub
40 changed files with 1071 additions and 804 deletions

View File

@@ -1,5 +1,5 @@
{ {
"adapter": "react", "adapter": "react",
"baseLocale": "en", "baseLocale": "pl",
"$schema": "https://unpkg.com/typesafe-i18n@5.14.0/schema/typesafe-i18n.json" "$schema": "https://unpkg.com/typesafe-i18n@5.14.0/schema/typesafe-i18n.json"
} }

View File

@@ -130,7 +130,7 @@ const LayoutAuthMenu: FC = () => {
<Box pl={2}> <Box pl={2}>
<ItemTypography variant="h6">{me.username}</ItemTypography> <ItemTypography variant="h6">{me.username}</ItemTypography>
<ItemTypography variant="body1"> <ItemTypography variant="body1">
{me.admin ? LL.ADMIN() + ' ' + LL.USER() : LL.GUEST() + ' ' + LL.USER()} {me.admin ? LL.ADMIN() : LL.GUEST()}&nbsp;{LL.USER(2)}
</ItemTypography> </ItemTypography>
</Box> </Box>
</Box> </Box>

View File

@@ -31,17 +31,17 @@ const LayoutMenu: FC = () => {
</List> </List>
)} )}
<List disablePadding component="nav"> <List disablePadding component="nav">
<LayoutMenuItem icon={SettingsEthernetIcon} label={LL.NETWORK()} to="/network" /> <LayoutMenuItem icon={SettingsEthernetIcon} label={LL.NETWORK(0)} to="/network" />
<LayoutMenuItem icon={SettingsInputAntennaIcon} label={LL.ACCESS_POINT()} to="/ap" /> <LayoutMenuItem icon={SettingsInputAntennaIcon} label={LL.ACCESS_POINT(0)} 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" />}
<LayoutMenuItem <LayoutMenuItem
icon={LockIcon} icon={LockIcon}
label={LL.SECURITY()} label={LL.SECURITY(0)}
to="/security" to="/security"
disabled={!authenticatedContext.me.admin} disabled={!authenticatedContext.me.admin}
/> />
<LayoutMenuItem icon={SettingsIcon} label={LL.SYSTEM()} to="/system" /> <LayoutMenuItem icon={SettingsIcon} label={LL.SYSTEM(0)} to="/system" />
</List> </List>
</> </>
); );

View File

@@ -74,7 +74,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="ssid" name="ssid"
label={LL.ACCESS_POINT() + ' SSID'} label={LL.ACCESS_POINT(2) + ' SSID'}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.ssid} value={data.ssid}
@@ -84,7 +84,7 @@ const APSettingsForm: FC = () => {
<ValidatedPasswordField <ValidatedPasswordField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="password" name="password"
label={LL.ACCESS_POINT() + ' ' + LL.PASSWORD()} label={LL.ACCESS_POINT(2) + ' ' + LL.PASSWORD()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.password} value={data.password}
@@ -116,7 +116,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="max_clients" name="max_clients"
label="Max Clients" label={LL.AP_MAX_CLIENTS()}
value={numberValue(data.max_clients)} value={numberValue(data.max_clients)}
fullWidth fullWidth
select select
@@ -134,7 +134,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="local_ip" name="local_ip"
label="Local IP" label={LL.AP_LOCAL_IP()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.local_ip} value={data.local_ip}
@@ -144,7 +144,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="gateway_ip" name="gateway_ip"
label="Gateway" label={LL.NETWORK_GATEWAY()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.gateway_ip} value={data.gateway_ip}
@@ -154,7 +154,7 @@ const APSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="subnet_mask" name="subnet_mask"
label="Subnet" label={LL.NETWORK_SUBNET()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.subnet_mask} value={data.subnet_mask}
@@ -180,7 +180,7 @@ const APSettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.ACCESS_POINT() + ' ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF( LL.ACCESS_POINT(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -60,14 +60,14 @@ const APStatusForm: FC = () => {
<SettingsInputAntennaIcon /> <SettingsInputAntennaIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary={LL.STATUS()} secondary={apStatus(data)} /> <ListItemText primary={LL.STATUS_OF("")} secondary={apStatus(data)} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
<ListItemAvatar> <ListItemAvatar>
<Avatar>IP</Avatar> <Avatar>IP</Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="IP Address" secondary={data.ip_address} /> <ListItemText primary={LL.ADDRESS_OF("IP")} secondary={data.ip_address} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -76,7 +76,7 @@ const APStatusForm: FC = () => {
<DeviceHubIcon /> <DeviceHubIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="MAC Address" secondary={data.mac_address} /> <ListItemText primary={LL.ADDRESS_OF("MAC")} secondary={data.mac_address} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -85,7 +85,7 @@ const APStatusForm: FC = () => {
<ComputerIcon /> <ComputerIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="AP Clients" secondary={data.station_num} /> <ListItemText primary={LL.AP_CLIENTS()} secondary={data.station_num} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
</List> </List>
@@ -99,7 +99,7 @@ const APStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.ACCESS_POINT() + ' ' + LL.STATUS()} titleGutter> <SectionContent title={LL.STATUS_OF( LL.ACCESS_POINT(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -13,7 +13,7 @@ import { useI18nContext } from '../../i18n/i18n-react';
const AccessPoint: FC = () => { const AccessPoint: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
useLayoutTitle(LL.ACCESS_POINT()); useLayoutTitle(LL.ACCESS_POINT(0));
const authenticatedContext = useContext(AuthenticatedContext); const authenticatedContext = useContext(AuthenticatedContext);
@@ -22,10 +22,10 @@ const AccessPoint: FC = () => {
return ( return (
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label={LL.ACCESS_POINT() + ' ' + LL.STATUS()} /> <Tab value="status" label={LL.STATUS_OF( LL.ACCESS_POINT(1) )} />
<Tab <Tab
value="settings" value="settings"
label={LL.ACCESS_POINT() + ' ' + LL.SETTINGS()} label={LL.SETTINGS_OF( LL.ACCESS_POINT(1) )}
disabled={!authenticatedContext.me.admin} disabled={!authenticatedContext.me.admin}
/> />
</RouterTabs> </RouterTabs>

View File

@@ -22,8 +22,8 @@ const Mqtt: FC = () => {
return ( return (
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label={'MQTT ' + LL.STATUS()} /> <Tab value="status" label={LL.STATUS_OF("MQTT")} />
<Tab value="settings" label={'MQTT ' + LL.SETTINGS()} disabled={!authenticatedContext.me.admin} /> <Tab value="settings" label={LL.SETTINGS_OF("MQTT")} disabled={!authenticatedContext.me.admin} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="status" element={<MqttStatusForm />} /> <Route path="status" element={<MqttStatusForm />} />

View File

@@ -351,7 +351,7 @@ const MqttSettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={'MQTT ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF("MQTT")} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -50,7 +50,7 @@ const MqttStatusForm: FC = () => {
return LL.NOT_ENABLED(); return LL.NOT_ENABLED();
} }
if (connected) { if (connected) {
return LL.CONNECTED() + (connect_count > 1 ? ' (' + connect_count + ')' : ''); return LL.CONNECTED(0) + (connect_count > 1 ? ' (' + connect_count + ')' : '');
} }
return LL.DISCONNECTED() + (connect_count > 1 ? ' (' + connect_count + ')' : ''); return LL.DISCONNECTED() + (connect_count > 1 ? ' (' + connect_count + ')' : '');
}; };
@@ -112,7 +112,7 @@ const MqttStatusForm: FC = () => {
<AutoAwesomeMotionIcon /> <AutoAwesomeMotionIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="MQTT Queue" secondary={data.mqtt_queued} /> <ListItemText primary={LL.MQTT_QUEUE()} secondary={data.mqtt_queued} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -121,7 +121,7 @@ const MqttStatusForm: FC = () => {
<SpeakerNotesOffIcon /> <SpeakerNotesOffIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary={'MQTT ' + LL.ERRORS()} secondary={data.mqtt_fails} /> <ListItemText primary={LL.ERRORS_OF("MQTT")} secondary={data.mqtt_fails} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
</> </>
@@ -137,7 +137,7 @@ const MqttStatusForm: FC = () => {
<DeviceHubIcon /> <DeviceHubIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary={LL.STATUS()} secondary={mqttStatus(data)} /> <ListItemText primary={LL.STATUS_OF("")} secondary={mqttStatus(data)} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
{data.enabled && renderConnectionStatus()} {data.enabled && renderConnectionStatus()}
@@ -152,7 +152,7 @@ const MqttStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title={'MQTT ' + LL.STATUS()} titleGutter> <SectionContent title={LL.STATUS_OF("MQTT")} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

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()); useLayoutTitle(LL.NETWORK(0));
const { routerTab } = useRouterTab(); const { routerTab } = useRouterTab();
@@ -45,9 +45,9 @@ const NetworkConnection: FC = () => {
}} }}
> >
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label={LL.NETWORK() + ' ' + LL.STATUS()} /> <Tab value="status" label={LL.STATUS_OF( LL.NETWORK(1) )} />
<Tab value="scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} /> <Tab value="scan" label={LL.NETWORK_SCAN()} disabled={!authenticatedContext.me.admin} />
<Tab value="settings" label={LL.NETWORK() + ' ' + LL.SETTINGS()} disabled={!authenticatedContext.me.admin} /> <Tab value="settings" label={LL.SETTINGS_OF( LL.NETWORK(1) )} disabled={!authenticatedContext.me.admin} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="status" element={<NetworkStatusForm />} /> <Route path="status" element={<NetworkStatusForm />} />

View File

@@ -140,7 +140,7 @@ const WiFiSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="tx_power" name="tx_power"
label={'WiFi Tx ' + LL.POWER()} label={LL.TX_POWER()}
InputProps={{ InputProps={{
endAdornment: <InputAdornment position="end">dBm</InputAdornment> endAdornment: <InputAdornment position="end">dBm</InputAdornment>
}} }}
@@ -174,7 +174,7 @@ const WiFiSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="hostname" name="hostname"
label="Hostname" label={LL.HOSTNAME()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.hostname} value={data.hostname}
@@ -262,7 +262,7 @@ const WiFiSettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.NETWORK() + ' ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF( LL.NETWORK(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -73,13 +73,13 @@ const NetworkStatusForm: FC = () => {
case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL: case NetworkConnectionStatus.WIFI_STATUS_NO_SSID_AVAIL:
return 'No SSID Available'; return 'No SSID Available';
case NetworkConnectionStatus.WIFI_STATUS_CONNECTED: case NetworkConnectionStatus.WIFI_STATUS_CONNECTED:
return LL.CONNECTED() + ' (WiFi)'; return LL.CONNECTED(0) + ' (WiFi)';
case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED: case NetworkConnectionStatus.ETHERNET_STATUS_CONNECTED:
return LL.CONNECTED() + ' (Ethernet)'; return LL.CONNECTED(0) + ' (Ethernet)';
case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED: case NetworkConnectionStatus.WIFI_STATUS_CONNECT_FAILED:
return LL.CONNECTED() + ' ' + LL.FAILED(); return LL.CONNECTED(1) + ' ' + LL.FAILED();
case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST: case NetworkConnectionStatus.WIFI_STATUS_CONNECTION_LOST:
return LL.CONNECTED() + ' ' + LL.LOST(); return LL.CONNECTED(1) + ' ' + LL.LOST();
case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED: case NetworkConnectionStatus.WIFI_STATUS_DISCONNECTED:
return LL.DISCONNECTED(); return LL.DISCONNECTED();
default: default:
@@ -124,7 +124,7 @@ const NetworkStatusForm: FC = () => {
<ListItemAvatar> <ListItemAvatar>
<Avatar>IP</Avatar> <Avatar>IP</Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="IP Address" secondary={IPs(data)} /> <ListItemText primary={LL.ADDRESS_OF("IP")} secondary={IPs(data)} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -133,14 +133,14 @@ const NetworkStatusForm: FC = () => {
<DeviceHubIcon /> <DeviceHubIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="MAC Address" secondary={data.mac_address} /> <ListItemText primary={LL.ADDRESS_OF("MAC")} secondary={data.mac_address} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
<ListItemAvatar> <ListItemAvatar>
<Avatar>#</Avatar> <Avatar>#</Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="Subnet Mask" secondary={data.subnet_mask} /> <ListItemText primary={LL.NETWORK_SUBNET()} secondary={data.subnet_mask} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -149,7 +149,7 @@ const NetworkStatusForm: FC = () => {
<SettingsInputComponentIcon /> <SettingsInputComponentIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="Gateway IP" secondary={data.gateway_ip || 'none'} /> <ListItemText primary={LL.NETWORK_GATEWAY()} secondary={data.gateway_ip || 'none'} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
<ListItem> <ListItem>
@@ -158,7 +158,7 @@ const NetworkStatusForm: FC = () => {
<DnsIcon /> <DnsIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="DNS Server IP" secondary={dnsServers(data)} /> <ListItemText primary={LL.NETWORK_DNS()} secondary={dnsServers(data)} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
</> </>
@@ -174,7 +174,7 @@ const NetworkStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.NETWORK() + ' ' + LL.STATUS()} titleGutter> <SectionContent title={LL.STATUS_OF( LL.NETWORK(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -58,7 +58,7 @@ const NTPSettingsForm: FC = () => {
<ValidatedTextField <ValidatedTextField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="server" name="server"
label="Server" label={LL.NTP_SERVER()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.server} value={data.server}
@@ -96,7 +96,7 @@ const NTPSettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={'NTP ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF("NTP")} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -100,7 +100,7 @@ const NTPStatusForm: FC = () => {
const renderSetTimeDialog = () => ( const renderSetTimeDialog = () => (
<Dialog open={settingTime} onClose={() => setSettingTime(false)}> <Dialog open={settingTime} onClose={() => setSettingTime(false)}>
<DialogTitle>{LL.SET_TIME()}</DialogTitle> <DialogTitle>{LL.SET_TIME(1)}</DialogTitle>
<DialogContent dividers> <DialogContent dividers>
<Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}> <Box color="warning.main" p={0} pl={0} pr={0} mt={0} mb={2}>
<Typography variant="body2">{LL.SET_TIME_TEXT()}</Typography> <Typography variant="body2">{LL.SET_TIME_TEXT()}</Typography>
@@ -129,7 +129,7 @@ const NTPStatusForm: FC = () => {
color="primary" color="primary"
autoFocus autoFocus
> >
{LL.SET_TIME()} {LL.SAVE()}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>
@@ -149,7 +149,7 @@ const NTPStatusForm: FC = () => {
<UpdateIcon /> <UpdateIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary={LL.STATUS()} secondary={ntpStatus(data)} /> <ListItemText primary={LL.STATUS_OF("")} secondary={ntpStatus(data)} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
{isNtpEnabled(data) && ( {isNtpEnabled(data) && (
@@ -160,7 +160,7 @@ const NTPStatusForm: FC = () => {
<DnsIcon /> <DnsIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="NTP Server" secondary={data.server} /> <ListItemText primary={LL.NTP_SERVER()} secondary={data.server} />
</ListItem> </ListItem>
<Divider variant="inset" component="li" /> <Divider variant="inset" component="li" />
</> </>
@@ -196,7 +196,7 @@ const NTPStatusForm: FC = () => {
<Box flexWrap="nowrap" whiteSpace="nowrap"> <Box flexWrap="nowrap" whiteSpace="nowrap">
<ButtonRow> <ButtonRow>
<Button onClick={openSetTime} variant="outlined" color="primary" startIcon={<AccessTimeIcon />}> <Button onClick={openSetTime} variant="outlined" color="primary" startIcon={<AccessTimeIcon />}>
{LL.SET_TIME()} {LL.SET_TIME(0)}
</Button> </Button>
</ButtonRow> </ButtonRow>
</Box> </Box>
@@ -208,7 +208,7 @@ const NTPStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title={'NTP ' + LL.STATUS()} titleGutter> <SectionContent title={LL.STATUS_OF("NTP")} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -21,8 +21,8 @@ const NetworkTime: FC = () => {
return ( return (
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label={'NTP ' + LL.STATUS()} /> <Tab value="status" label={LL.STATUS_OF("NTP")} />
<Tab value="settings" label={'NTP ' + LL.SETTINGS()} disabled={!authenticatedContext.me.admin} /> <Tab value="settings" label={LL.SETTINGS_OF("NTP")} disabled={!authenticatedContext.me.admin} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="status" element={<NTPStatusForm />} /> <Route path="status" element={<NTPStatusForm />} />

View File

@@ -141,7 +141,7 @@ const ManageUsersForm: FC = () => {
<Header> <Header>
<HeaderRow> <HeaderRow>
<HeaderCell resize>{LL.USERNAME()}</HeaderCell> <HeaderCell resize>{LL.USERNAME()}</HeaderCell>
<HeaderCell stiff>{LL.IS_ADMIN()}</HeaderCell> <HeaderCell stiff>{LL.IS_ADMIN(0)}</HeaderCell>
<HeaderCell stiff /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
@@ -192,7 +192,7 @@ const ManageUsersForm: FC = () => {
<Box flexWrap="nowrap" whiteSpace="nowrap"> <Box flexWrap="nowrap" whiteSpace="nowrap">
<ButtonRow> <ButtonRow>
<Button startIcon={<PersonAddIcon />} variant="outlined" color="secondary" onClick={createUser}> <Button startIcon={<PersonAddIcon />} variant="outlined" color="secondary" onClick={createUser}>
{LL.ADD()} {LL.ADD(0)}
</Button> </Button>
</ButtonRow> </ButtonRow>
</Box> </Box>

View File

@@ -12,7 +12,7 @@ import { useI18nContext } from '../../i18n/i18n-react';
const Security: FC = () => { const Security: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
useLayoutTitle(LL.SECURITY()); useLayoutTitle(LL.SECURITY(0));
const { routerTab } = useRouterTab(); const { routerTab } = useRouterTab();
@@ -20,7 +20,7 @@ const Security: FC = () => {
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="users" label={LL.MANAGE_USERS()} /> <Tab value="users" label={LL.MANAGE_USERS()} />
<Tab value="settings" label={LL.SECURITY() + ' ' + LL.SETTINGS()} /> <Tab value="settings" label={LL.SETTINGS_OF( LL.SECURITY(1) )} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="users" element={<ManageUsersForm />} /> <Route path="users" element={<ManageUsersForm />} />

View File

@@ -46,7 +46,7 @@ const SecuritySettingsForm: FC = () => {
<ValidatedPasswordField <ValidatedPasswordField
fieldErrors={fieldErrors} fieldErrors={fieldErrors}
name="jwt_secret" name="jwt_secret"
label={'su ' + LL.PASSWORD()} label={LL.SU_PASSWORD()}
fullWidth fullWidth
variant="outlined" variant="outlined"
value={data.jwt_secret} value={data.jwt_secret}
@@ -71,7 +71,7 @@ const SecuritySettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.SECURITY() + ' ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF( LL.SECURITY(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -54,7 +54,7 @@ const UserForm: FC<UserFormProps> = ({ creating, validator, user, setUser, onDon
{user && ( {user && (
<> <>
<DialogTitle id="user-form-dialog-title"> <DialogTitle id="user-form-dialog-title">
{creating ? LL.ADD() : LL.MODIFY()}&nbsp;{LL.USER()} {creating ? LL.ADD(1) : LL.MODIFY()}&nbsp;{LL.USER(1)}
</DialogTitle> </DialogTitle>
<DialogContent dividers> <DialogContent dividers>
<ValidatedTextField <ValidatedTextField
@@ -80,7 +80,7 @@ const UserForm: FC<UserFormProps> = ({ creating, validator, user, setUser, onDon
/> />
<BlockFormControlLabel <BlockFormControlLabel
control={<Checkbox name="admin" checked={user.admin} onChange={updateFormValue} />} control={<Checkbox name="admin" checked={user.admin} onChange={updateFormValue} />}
label={LL.IS_ADMIN()} label={LL.IS_ADMIN(1)}
/> />
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
@@ -94,7 +94,7 @@ const UserForm: FC<UserFormProps> = ({ creating, validator, user, setUser, onDon
color="primary" color="primary"
autoFocus autoFocus
> >
{LL.ADD()} {LL.ADD(0)}
</Button> </Button>
</DialogActions> </DialogActions>
</> </>

View File

@@ -85,7 +85,7 @@ const GeneralFileUpload: FC<UploadFileProps> = ({ uploadGeneralFile }) => {
{!uploading && ( {!uploading && (
<> <>
<Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary"> <Typography sx={{ pt: 2, pb: 2 }} variant="h6" color="primary">
{LL.DOWNLOAD()} {LL.DOWNLOAD(0)}
</Typography> </Typography>
<Box color="warning.main"> <Box color="warning.main">
<Typography mb={1} variant="body2"> <Typography mb={1} variant="body2">
@@ -93,7 +93,7 @@ const GeneralFileUpload: FC<UploadFileProps> = ({ uploadGeneralFile }) => {
</Typography> </Typography>
</Box> </Box>
<Button startIcon={<DownloadIcon />} variant="outlined" color="primary" onClick={() => downloadSettings()}> <Button startIcon={<DownloadIcon />} variant="outlined" color="primary" onClick={() => downloadSettings()}>
{LL.SETTINGS()} {LL.SETTINGS_OF("")}
</Button> </Button>
<Box color="warning.main"> <Box color="warning.main">
<Typography mt={2} mb={1} variant="body2"> <Typography mt={2} mb={1} variant="body2">

View File

@@ -93,7 +93,7 @@ const OTASettingsForm: FC = () => {
}; };
return ( return (
<SectionContent title={'OTA ' + LL.SETTINGS()} titleGutter> <SectionContent title={LL.SETTINGS_OF("OTA")} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -17,7 +17,7 @@ import { useI18nContext } from '../../i18n/i18n-react';
const System: FC = () => { const System: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
useLayoutTitle(LL.SYSTEM()); useLayoutTitle(LL.SYSTEM(0));
const { me } = useContext(AuthenticatedContext); const { me } = useContext(AuthenticatedContext);
const { features } = useContext(FeaturesContext); const { features } = useContext(FeaturesContext);
@@ -26,10 +26,10 @@ const System: FC = () => {
return ( return (
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="status" label={LL.SYSTEM() + ' ' + LL.STATUS()} /> <Tab value="status" label={LL.STATUS_OF( LL.SYSTEM(1) )} />
<Tab value="log" label={LL.SYSTEM() + ' ' + LL.LOG()} /> <Tab value="log" label={LL.LOG_OF( LL.SYSTEM(2) )} />
{features.ota && <Tab value="ota" label={'OTA ' + LL.SETTINGS()} disabled={!me.admin} />} {features.ota && <Tab value="ota" label={LL.SETTINGS_OF("OTA")} disabled={!me.admin} />}
{features.upload_firmware && <Tab value="upload" label={LL.UPLOAD_DOWNLOAD()} disabled={!me.admin} />} {features.upload_firmware && <Tab value="upload" label={LL.UPLOAD_DOWNLOAD()} disabled={!me.admin} />}
</RouterTabs> </RouterTabs>
<Routes> <Routes>

View File

@@ -202,7 +202,7 @@ const SystemLog: FC = () => {
<Grid item xs={4}> <Grid item xs={4}>
<ValidatedTextField <ValidatedTextField
name="level" name="level"
label="Log Level" label={LL.LOG_LEVEL()}
value={data.level} value={data.level}
fullWidth fullWidth
variant="outlined" variant="outlined"
@@ -278,7 +278,7 @@ const SystemLog: FC = () => {
}; };
return ( return (
<SectionContent title={LL.SYSTEM() + ' ' + LL.LOG()} titleGutter id="log-window"> <SectionContent title={LL.LOG_OF( LL.SYSTEM(2) )} titleGutter id="log-window">
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -135,7 +135,7 @@ const SystemStatusForm: FC = () => {
</Link> </Link>
)&nbsp;( )&nbsp;(
<Link target="_blank" href={latestVersion.url} color="primary"> <Link target="_blank" href={latestVersion.url} color="primary">
{LL.DOWNLOAD()} {LL.DOWNLOAD(1)}
</Link> </Link>
) )
</Box> </Box>
@@ -150,7 +150,7 @@ const SystemStatusForm: FC = () => {
</Link> </Link>
)&nbsp;( )&nbsp;(
<Link target="_blank" href={latestDevVersion.url} color="primary"> <Link target="_blank" href={latestDevVersion.url} color="primary">
{LL.DOWNLOAD()} {LL.DOWNLOAD(1)}
</Link> </Link>
) )
</Box> </Box>
@@ -229,7 +229,7 @@ const SystemStatusForm: FC = () => {
<BuildIcon /> <BuildIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary="EMS-ESP Version" secondary={'v' + data.emsesp_version} /> <ListItemText primary={LL.EMS_ESP_VER()} secondary={'v' + data.emsesp_version} />
{latestVersion && ( {latestVersion && (
<Button color="primary" onClick={() => setShowingVersion(true)}> <Button color="primary" onClick={() => setShowingVersion(true)}>
{LL.VERSION_CHECK(0)} {LL.VERSION_CHECK(0)}
@@ -373,7 +373,7 @@ const SystemStatusForm: FC = () => {
}; };
return ( return (
<SectionContent title={LL.SYSTEM() + ' ' + LL.STATUS()} titleGutter> <SectionContent title={LL.STATUS_OF( LL.SYSTEM(1) )} titleGutter>
{content()} {content()}
</SectionContent> </SectionContent>
); );

View File

@@ -9,10 +9,11 @@ const de: Translation = {
SIGN_OUT: 'Ausloggen', SIGN_OUT: 'Ausloggen',
USERNAME: 'Nutzername', USERNAME: 'Nutzername',
PASSWORD: 'Passwort', PASSWORD: 'Passwort',
SU_PASSWORD: 'su Passwort',
DASHBOARD: 'Kontrollzentrum', DASHBOARD: 'Kontrollzentrum',
SETTINGS: 'Einstellungen', SETTINGS_OF: '{0} Einstellungen',
SAVED: 'gespeichert', SAVED: 'gespeichert',
HELP: 'Hilfe', HELP_OF: '{0} Hilfe',
LOGGED_IN: 'Eingeloggt als {name}', LOGGED_IN: 'Eingeloggt als {name}',
PLEASE_SIGNIN: 'Bitte einloggen, um fortzufahren', PLEASE_SIGNIN: 'Bitte einloggen, um fortzufahren',
UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich', UPLOAD_SUCCESSFUL: 'Hochladen erfolgreich',
@@ -47,13 +48,15 @@ const de: Translation = {
ACCESS_DENIED: 'Zugriff abgelehnt', ACCESS_DENIED: 'Zugriff abgelehnt',
ANALOG_SENSOR: 'Analogsensor', ANALOG_SENSOR: 'Analogsensor',
ANALOG_SENSORS: 'Analogsensoren', ANALOG_SENSORS: 'Analogsensoren',
UPDATED: 'Aktualisiert', UPDATED_OF: '{0} Aktualisiert',
UPDATE: 'Aktualisieren', UPDATE_OF: '{0} Aktualisieren',
REMOVED: 'Entfernt', REMOVED_OF: '{0} Entfernt',
DELETION: 'Löschung', DELETION_OF: '{0} Löschung',
OFFSET: 'Addition', OFFSET: 'Addition',
FACTOR: 'Faktor', FACTOR: 'Faktor',
FREQ: 'Frequenz', FREQ: 'Frequenz',
DUTY_CYCLE: 'Duty Cycle',
UNIT: 'UoM',
STARTVALUE: 'Startwert', STARTVALUE: 'Startwert',
WARN_GPIO: 'Warnung: Vorsicht bei der korrekten Wahl des GPIO!', WARN_GPIO: 'Warnung: Vorsicht bei der korrekten Wahl des GPIO!',
EDIT: 'Editiere', EDIT: 'Editiere',
@@ -69,7 +72,7 @@ const de: Translation = {
EMS_SCAN: 'Möchten Sie wirklich eine vollständige Gerätesuche des EMS-Busses starten?', EMS_SCAN: 'Möchten Sie wirklich eine vollständige Gerätesuche des EMS-Busses starten?',
EMS_BUS_STATUS: 'EMS-Busstatus', EMS_BUS_STATUS: 'EMS-Busstatus',
ACTIVE_DEVICES: 'Aktive Geräte und Sensoren', ACTIVE_DEVICES: 'Aktive Geräte und Sensoren',
DEVICE: 'Gerät', EMS_DEVICE: 'EMS Gerät',
SUCCESS: 'ERFOLG', SUCCESS: 'ERFOLG',
FAIL: 'FEHLER', FAIL: 'FEHLER',
QUALITY: 'QUALITÄT', QUALITY: 'QUALITÄT',
@@ -96,12 +99,14 @@ const de: Translation = {
APPLICATION_SETTINGS: 'Anwendungseinstellungen', APPLICATION_SETTINGS: 'Anwendungseinstellungen',
CUSTOMIZATION: 'Anpassungen', CUSTOMIZATION: 'Anpassungen',
APPLICATION_RESTARTING: 'EMS-ESP startet neu', APPLICATION_RESTARTING: 'EMS-ESP startet neu',
BOARD_PROFILE_TEXT: INTERFACE_BOARD_PROFILE: 'Interface Platinenprofil',
'Wählen Sie ein vorkonfiguriertes Platinenprofil aus der Liste unten aus oder wählen Sie "Custom", um Ihre eigenen Hardwareeinstellungen zu konfigurieren', BOARD_PROFILE_TEXT: 'Wählen Sie ein vorkonfiguriertes Platinenprofil aus der Liste unten aus oder wählen Sie "Custom", um Ihre eigenen Hardwareeinstellungen zu konfigurieren',
BOARD_PROFILE: 'Platinenprofil', BOARD_PROFILE: 'Platinenprofil',
BUTTON: 'Taste', BUTTON: 'Taste',
TEMPERATURE: 'Temperatur', TEMPERATURE: 'Temperatur',
PHY_TYPE: 'Eth PHY Type',
DISABLED: 'deaktiviert', DISABLED: 'deaktiviert',
TX_MODE: 'Tx Mode',
GENERAL_OPTIONS: 'Allgemeine Optionen', GENERAL_OPTIONS: 'Allgemeine Optionen',
LANGUAGE_ENTITIES: 'Sprache (für Geräteentitäten)', LANGUAGE_ENTITIES: 'Sprache (für Geräteentitäten)',
HIDE_LED: 'LED ausblenden', HIDE_LED: 'LED ausblenden',
@@ -124,6 +129,7 @@ const de: Translation = {
LOGGING: 'Protokollierung', LOGGING: 'Protokollierung',
LOG_HEX: 'EMS-Telegramme hexadezimal protokollieren', LOG_HEX: 'EMS-Telegramme hexadezimal protokollieren',
ENABLE_SYSLOG: 'Syslog aktivieren', ENABLE_SYSLOG: 'Syslog aktivieren',
LOG_LEVEL: 'Log Level',
MARK_INTERVAL: 'Intervallmarke', MARK_INTERVAL: 'Intervallmarke',
SECONDS: 'Sekunden', SECONDS: 'Sekunden',
MINUTES: 'Minuten', MINUTES: 'Minuten',
@@ -157,14 +163,15 @@ const de: Translation = {
HELP_INFORMATION_5: HELP_INFORMATION_5:
'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf Github!', 'EMS-ESP ist ein freies Open-Source Projekt. Bitte unterstützen Sie die zukünftige Entwicklung mit einem "Star" auf Github!',
SUPPORT_INFO: 'Support Info', SUPPORT_INFO: 'Support Info',
UPLOAD_OF: '{0} Hochladen',
UPLOAD: 'Hochladen', UPLOAD: 'Hochladen',
DOWNLOAD: 'Herunterladen', DOWNLOAD: 'Herunterladen',
ABORTED: 'abgebrochen', ABORTED: 'abgebrochen',
FAILED: 'gescheitert', FAILED: 'gescheitert',
SUCCESSFUL: 'erfolgreich', SUCCESSFUL: 'erfolgreich',
SYSTEM: 'System', SYSTEM: 'System',
LOG: 'Log', LOG_OF: '{0} Log',
STATUS: 'Status', STATUS_OF: '{0} Status',
UPLOAD_DOWNLOAD: 'Hoch-/Herunterladen', UPLOAD_DOWNLOAD: 'Hoch-/Herunterladen',
SYSTEM_VERSION_RUNNING: 'Sie verwenden die Version', SYSTEM_VERSION_RUNNING: 'Sie verwenden die Version',
SYSTEM_APPLY_FIRMWARE: 'um die neue Firmware anzuwenden', SYSTEM_APPLY_FIRMWARE: 'um die neue Firmware anzuwenden',
@@ -179,6 +186,7 @@ const de: Translation = {
DEVELOPMENT: 'development', DEVELOPMENT: 'development',
VERSION_IS: 'Version ist', VERSION_IS: 'Version ist',
RELEASE_NOTES: 'Versionshinweise', RELEASE_NOTES: 'Versionshinweise',
EMS_ESP_VER: 'EMS-ESP Version',
PLATFORM: 'Platform (Platform / SDK)', PLATFORM: 'Platform (Platform / SDK)',
UPTIME: 'System Betriebszeit', UPTIME: 'System Betriebszeit',
CPU_FREQ: 'CPU Frequenz', CPU_FREQ: 'CPU Frequenz',
@@ -211,7 +219,7 @@ const de: Translation = {
SU_TEXT: SU_TEXT:
'Das su (super user) Passwort wird zum Signieren der Authentifikations-Tokens verwendet und ermöglicht Admin-Berechtigung in der Konsole.', 'Das su (super user) Passwort wird zum Signieren der Authentifikations-Tokens verwendet und ermöglicht Admin-Berechtigung in der Konsole.',
NOT_ENABLED: 'Nicht aktiviert', NOT_ENABLED: 'Nicht aktiviert',
ERRORS: 'Fehler', ERRORS_OF: '{0} Fehler',
DISCONNECT_REASON: 'Grund der Verbindungsunterbrechung', DISCONNECT_REASON: 'Grund der Verbindungsunterbrechung',
ENABLE_MQTT: 'MQTT aktivieren', ENABLE_MQTT: 'MQTT aktivieren',
OPTIONAL: 'Optional', OPTIONAL: 'Optional',
@@ -229,6 +237,7 @@ const de: Translation = {
MQTT_INT_THERMOSTATS: 'Thermostate', MQTT_INT_THERMOSTATS: 'Thermostate',
MQTT_INT_SOLAR: 'Solarmodule', MQTT_INT_SOLAR: 'Solarmodule',
MQTT_INT_MIXER: 'Mischermodule', MQTT_INT_MIXER: 'Mischermodule',
MQTT_QUEUE: 'MQTT Queue',
DEFAULT: 'Standard', DEFAULT: 'Standard',
MQTT_CLEAN_SESSION: 'Setze `Clean Session`', MQTT_CLEAN_SESSION: 'Setze `Clean Session`',
MQTT_RETAIN_FLAG: 'Setze `Retain flag` immer', MQTT_RETAIN_FLAG: 'Setze `Retain flag` immer',
@@ -240,6 +249,7 @@ const de: Translation = {
LOCAL_TIME: 'Lokalzeit', LOCAL_TIME: 'Lokalzeit',
UTC_TIME: 'UTC Zeit', UTC_TIME: 'UTC Zeit',
ENABLE_NTP: 'Aktiviere NTP', ENABLE_NTP: 'Aktiviere NTP',
NTP_SERVER: 'NTP Server',
TIME_ZONE: 'Zeitzone', TIME_ZONE: 'Zeitzone',
ACCESS_POINT: 'Zugangspunkt', ACCESS_POINT: 'Zugangspunkt',
AP_PROVIDE: 'Aktiviere Zugangspunkt', AP_PROVIDE: 'Aktiviere Zugangspunkt',
@@ -248,6 +258,9 @@ const de: Translation = {
AP_PROVIDE_TEXT_3: 'Niemals', AP_PROVIDE_TEXT_3: 'Niemals',
AP_PREFERRED_CHANNEL: 'Bevorzugter Kanal', AP_PREFERRED_CHANNEL: 'Bevorzugter Kanal',
AP_HIDE_SSID: 'Verstecke SSID', AP_HIDE_SSID: 'Verstecke SSID',
AP_CLIENTS: 'AP Clients',
AP_MAX_CLIENTS: 'Max Clients',
AP_LOCAL_IP: 'Local IP',
NETWORK_SCAN: 'Suche nach WiFi Netzwerken', NETWORK_SCAN: 'Suche nach WiFi Netzwerken',
IDLE: 'Leerlauf', IDLE: 'Leerlauf',
LOST: 'Verloren', LOST: 'Verloren',
@@ -256,12 +269,17 @@ const de: Translation = {
NETWORK_SCANNER: 'Netzwerk Suche', NETWORK_SCANNER: 'Netzwerk Suche',
NETWORK_NO_WIFI: 'Keine WiFi Netzwerke gefunden', NETWORK_NO_WIFI: 'Keine WiFi Netzwerke gefunden',
NETWORK_BLANK_SSID: 'Freilassen um WiFi zu deaktivieren', NETWORK_BLANK_SSID: 'Freilassen um WiFi zu deaktivieren',
POWER: 'Leistung', TX_POWER: 'Tx Leistung',
HOSTNAME: 'Hostname',
NETWORK_DISABLE_SLEEP: 'Deaktiviere WiFi Schlafmodus', NETWORK_DISABLE_SLEEP: 'Deaktiviere WiFi Schlafmodus',
NETWORK_LOW_BAND: 'Verwende niedrige WiFi Bandbreite', NETWORK_LOW_BAND: 'Verwende niedrige WiFi Bandbreite',
NETWORK_USE_DNS: 'Aktiviere mDNS Service', NETWORK_USE_DNS: 'Aktiviere mDNS Service',
NETWORK_ENABLE_IPV6: 'Aktiviere IPv6 Unterstützung', NETWORK_ENABLE_IPV6: 'Aktiviere IPv6 Unterstützung',
NETWORK_FIXED_IP: 'Feste IP Addresse', NETWORK_FIXED_IP: 'Feste IP Addresse',
NETWORK_GATEWAY: 'Getaway',
NETWORK_SUBNET: 'Subnet Mask',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMIN: 'Administrator', ADMIN: 'Administrator',
GUEST: 'Gast', GUEST: 'Gast',
NEW: 'Neuer', NEW: 'Neuer',

View File

@@ -9,10 +9,11 @@ const en: BaseTranslation = {
SIGN_OUT: 'Sign Out', SIGN_OUT: 'Sign Out',
USERNAME: 'Username', USERNAME: 'Username',
PASSWORD: 'Password', PASSWORD: 'Password',
SU_PASSWORD: 'su Password',
DASHBOARD: 'Dashboard', DASHBOARD: 'Dashboard',
SETTINGS: 'Settings', SETTINGS_OF: '{0} Settings',
SAVED: 'saved', SAVED: 'saved',
HELP: 'Help', HELP_OF: '{0} Help',
LOGGED_IN: 'Logged in as {name}', LOGGED_IN: 'Logged in as {name}',
PLEASE_SIGNIN: 'Please sign in to continue', PLEASE_SIGNIN: 'Please sign in to continue',
UPLOAD_SUCCESSFUL: 'Upload successful', UPLOAD_SUCCESSFUL: 'Upload successful',
@@ -47,13 +48,15 @@ const en: BaseTranslation = {
ACCESS_DENIED: 'Access Denied', ACCESS_DENIED: 'Access Denied',
ANALOG_SENSOR: 'Analog Sensor', ANALOG_SENSOR: 'Analog Sensor',
ANALOG_SENSORS: 'Analog Sensors', ANALOG_SENSORS: 'Analog Sensors',
UPDATED: 'Updated', UPDATED_OF: '{0} Updated',
UPDATE: 'Update', UPDATE_OF: '{0} Update',
REMOVED: 'Removed', REMOVED_OF: '{0} Removed',
DELETION: 'Deletion', DELETION_OF: '{0} Deletion',
OFFSET: 'Offset', OFFSET: 'Offset',
FACTOR: 'Factor', FACTOR: 'Factor',
FREQ: 'Frequency', FREQ: 'Frequency',
DUTY_CYCLE: 'Duty Cycle',
UNIT: 'UoM',
STARTVALUE: 'Start value', STARTVALUE: 'Start value',
WARN_GPIO: 'Warning: be careful when assigning a GPIO!', WARN_GPIO: 'Warning: be careful when assigning a GPIO!',
EDIT: 'Edit', EDIT: 'Edit',
@@ -69,7 +72,7 @@ const en: BaseTranslation = {
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',
DEVICE: 'Device', EMS_DEVICE: 'EMS Device',
SUCCESS: 'SUCCESS', SUCCESS: 'SUCCESS',
FAIL: 'FAIL', FAIL: 'FAIL',
QUALITY: 'QUALITY', QUALITY: 'QUALITY',
@@ -96,12 +99,14 @@ const en: BaseTranslation = {
APPLICATION_SETTINGS: 'Application Settings', APPLICATION_SETTINGS: 'Application Settings',
CUSTOMIZATION: 'Customization', CUSTOMIZATION: 'Customization',
APPLICATION_RESTARTING: 'EMS-ESP is restarting', APPLICATION_RESTARTING: 'EMS-ESP is restarting',
BOARD_PROFILE_TEXT: INTERFACE_BOARD_PROFILE: 'Interface Board Profile',
'Select a pre-configured interface board profile from the list below or choose Custom to configure your own hardware settings', BOARD_PROFILE_TEXT: 'Select a pre-configured interface board profile from the list below or choose Custom to configure your own hardware settings',
BOARD_PROFILE: 'Board Profile', BOARD_PROFILE: 'Board Profile',
BUTTON: 'Button', BUTTON: 'Button',
TEMPERATURE: 'Temperature', TEMPERATURE: 'Temperature',
PHY_TYPE: 'Eth PHY Type',
DISABLED: 'disabled', DISABLED: 'disabled',
TX_MODE: 'Tx Mode',
GENERAL_OPTIONS: 'General Options', GENERAL_OPTIONS: 'General Options',
LANGUAGE_ENTITIES: 'Language (for device entities)', LANGUAGE_ENTITIES: 'Language (for device entities)',
HIDE_LED: 'Hide LED', HIDE_LED: 'Hide LED',
@@ -124,11 +129,12 @@ const en: BaseTranslation = {
LOGGING: 'Logging', LOGGING: 'Logging',
LOG_HEX: 'Log EMS telegrams in hexadecimal', LOG_HEX: 'Log EMS telegrams in hexadecimal',
ENABLE_SYSLOG: 'Enable Syslog', ENABLE_SYSLOG: 'Enable Syslog',
LOG_LEVEL: 'Log Level',
MARK_INTERVAL: 'Mark Interval', MARK_INTERVAL: 'Mark Interval',
SECONDS: 'seconds', SECONDS: 'seconds',
MINUTES: 'minutes', MINUTES: 'minutes',
HOURS: 'hours',
RESTART: 'Restart', RESTART: 'Restart',
HOURS: 'hours',
RESTART_TEXT: 'EMS-ESP needs to be restarted to apply changed system settings', RESTART_TEXT: 'EMS-ESP needs to be restarted to apply changed system settings',
RESTART_CONFIRM: 'Are you sure you want to restart EMS-ESP?', RESTART_CONFIRM: 'Are you sure you want to restart EMS-ESP?',
COMMAND: 'Command', COMMAND: 'Command',
@@ -158,14 +164,15 @@ const en: BaseTranslation = {
HELP_INFORMATION_5: HELP_INFORMATION_5:
'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on Github!', 'EMS-ESP is a free and open-source project. Please support its future development by giving it a star on Github!',
SUPPORT_INFO: 'Support Info', SUPPORT_INFO: 'Support Info',
UPLOAD_OF: '{0} Upload',
UPLOAD: 'Upload', UPLOAD: 'Upload',
DOWNLOAD: 'Download', DOWNLOAD: '{{Download|download|}}',
ABORTED: 'aborted', ABORTED: 'aborted',
FAILED: 'failed', FAILED: 'failed',
SUCCESSFUL: 'successful', SUCCESSFUL: 'successful',
SYSTEM: 'System', SYSTEM: 'System',
LOG: 'Log', LOG_OF: '{0} Log',
STATUS: 'Status', STATUS_OF: '{0} Status',
UPLOAD_DOWNLOAD: 'Upload/Download', UPLOAD_DOWNLOAD: 'Upload/Download',
SYSTEM_VERSION_RUNNING: 'You are currently running version', SYSTEM_VERSION_RUNNING: 'You are currently running version',
SYSTEM_APPLY_FIRMWARE: 'to apply the new firmware', SYSTEM_APPLY_FIRMWARE: 'to apply the new firmware',
@@ -180,6 +187,7 @@ const en: BaseTranslation = {
DEVELOPMENT: 'development', DEVELOPMENT: 'development',
VERSION_IS: 'version is', VERSION_IS: 'version is',
RELEASE_NOTES: 'release notes', RELEASE_NOTES: 'release notes',
EMS_ESP_VER: 'EMS-ESP Version',
PLATFORM: 'Device (Platform / SDK)', PLATFORM: 'Device (Platform / SDK)',
UPTIME: 'System Uptime', UPTIME: 'System Uptime',
CPU_FREQ: 'CPU Frequency', CPU_FREQ: 'CPU Frequency',
@@ -212,7 +220,7 @@ const en: BaseTranslation = {
SU_TEXT: SU_TEXT:
'The su (super user) password is used to sign authentication tokens and also enable admin privileges within the Console.', 'The su (super user) password is used to sign authentication tokens and also enable admin privileges within the Console.',
NOT_ENABLED: 'Not enabled', NOT_ENABLED: 'Not enabled',
ERRORS: 'Errors', ERRORS_OF: '{0} Errors',
DISCONNECT_REASON: 'Disconnect Reason', DISCONNECT_REASON: 'Disconnect Reason',
ENABLE_MQTT: 'Enable MQTT', ENABLE_MQTT: 'Enable MQTT',
OPTIONAL: 'Optional', OPTIONAL: 'Optional',
@@ -230,6 +238,7 @@ const en: BaseTranslation = {
MQTT_INT_THERMOSTATS: 'Thermostats', MQTT_INT_THERMOSTATS: 'Thermostats',
MQTT_INT_SOLAR: 'Solar Modules', MQTT_INT_SOLAR: 'Solar Modules',
MQTT_INT_MIXER: 'Mixer Modules', MQTT_INT_MIXER: 'Mixer Modules',
MQTT_QUEUE: 'MQTT Queue',
DEFAULT: 'Default', DEFAULT: 'Default',
MQTT_CLEAN_SESSION: 'Set Clean Session', MQTT_CLEAN_SESSION: 'Set Clean Session',
MQTT_RETAIN_FLAG: 'Always set Retain flag', MQTT_RETAIN_FLAG: 'Always set Retain flag',
@@ -241,6 +250,7 @@ const en: BaseTranslation = {
LOCAL_TIME: 'Local Time', LOCAL_TIME: 'Local Time',
UTC_TIME: 'UTC Time', UTC_TIME: 'UTC Time',
ENABLE_NTP: 'Enable NTP', ENABLE_NTP: 'Enable NTP',
NTP_SERVER: 'NTP Server',
TIME_ZONE: 'Time Zone', TIME_ZONE: 'Time Zone',
ACCESS_POINT: 'Access Point', ACCESS_POINT: 'Access Point',
AP_PROVIDE: 'Enable Access Point', AP_PROVIDE: 'Enable Access Point',
@@ -249,6 +259,9 @@ const en: BaseTranslation = {
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',
AP_CLIENTS: 'AP Clients',
AP_MAX_CLIENTS: 'Max Clients',
AP_LOCAL_IP: 'Local IP',
NETWORK_SCAN: 'Scan WiFi Networks', NETWORK_SCAN: 'Scan WiFi Networks',
IDLE: 'Idle', IDLE: 'Idle',
LOST: 'Lost', LOST: 'Lost',
@@ -257,12 +270,17 @@ const en: BaseTranslation = {
NETWORK_SCANNER: 'Network Scanner', NETWORK_SCANNER: 'Network Scanner',
NETWORK_NO_WIFI: 'No WiFi networks found', NETWORK_NO_WIFI: 'No WiFi networks found',
NETWORK_BLANK_SSID: 'leave blank to disable WiFi', NETWORK_BLANK_SSID: 'leave blank to disable WiFi',
POWER: 'Power', TX_POWER: 'Tx Power',
HOSTNAME: 'Hostname',
NETWORK_DISABLE_SLEEP: 'Disable WiFi Sleep Mode', NETWORK_DISABLE_SLEEP: 'Disable WiFi Sleep Mode',
NETWORK_LOW_BAND: 'Use Lower WiFi Bandwidth', NETWORK_LOW_BAND: 'Use Lower WiFi Bandwidth',
NETWORK_USE_DNS: 'Enable mDNS Service', NETWORK_USE_DNS: 'Enable mDNS Service',
NETWORK_ENABLE_IPV6: 'Enable IPv6 support', NETWORK_ENABLE_IPV6: 'Enable IPv6 support',
NETWORK_FIXED_IP: 'Use Fixed IP address', NETWORK_FIXED_IP: 'Use Fixed IP address',
NETWORK_GATEWAY: 'Getaway',
NETWORK_SUBNET: 'Subnet Mask',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMIN: 'Admin', ADMIN: 'Admin',
GUEST: 'Guest', GUEST: 'Guest',
NEW: 'New', NEW: 'New',

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@ import type { LocaleDetector } from 'typesafe-i18n/detectors'
import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors' import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors'
import type { Formatters, Locales, Translations, TranslationFunctions } from './i18n-types' import type { Formatters, Locales, Translations, TranslationFunctions } from './i18n-types'
export const baseLocale: Locales = 'en' export const baseLocale: Locales = 'pl'
export const locales: Locales[] = [ export const locales: Locales[] = [
'de', 'de',

View File

@@ -1,6 +1,6 @@
import type { BaseTranslation } from '../i18n-types'; import type { Translation } from '../i18n-types';
const nl: BaseTranslation = { const nl: Translation = {
LANGUAGE: 'Taal', LANGUAGE: 'Taal',
RETRY: 'Opnieuw proberen', RETRY: 'Opnieuw proberen',
LOADING: 'Laden', LOADING: 'Laden',
@@ -9,10 +9,11 @@ const nl: BaseTranslation = {
SIGN_OUT: 'Uitloggen', SIGN_OUT: 'Uitloggen',
USERNAME: 'Gebruikersnaam', USERNAME: 'Gebruikersnaam',
PASSWORD: 'Wachtwoord', PASSWORD: 'Wachtwoord',
SU_PASSWORD: 'su Wachtwoord',
DASHBOARD: 'Dashboard', DASHBOARD: 'Dashboard',
SETTINGS: 'Instellingen', SETTINGS_OF: '{0} Instellingen',
SAVED: 'opgeslagen', SAVED: 'opgeslagen',
HELP: 'Help', HELP_OF: '{0} Help',
LOGGED_IN: 'Ingelogd als {name}', LOGGED_IN: 'Ingelogd als {name}',
PLEASE_SIGNIN: 'Log in om verder te gaan', PLEASE_SIGNIN: 'Log in om verder te gaan',
UPLOAD_SUCCESSFUL: 'Upload successvol', UPLOAD_SUCCESSFUL: 'Upload successvol',
@@ -47,13 +48,15 @@ const nl: BaseTranslation = {
ACCESS_DENIED: 'Toegang geweigerd', ACCESS_DENIED: 'Toegang geweigerd',
ANALOG_SENSOR: 'Analoge sensor', ANALOG_SENSOR: 'Analoge sensor',
ANALOG_SENSORS: 'Analoge Sensoren', ANALOG_SENSORS: 'Analoge Sensoren',
UPDATED: 'Bijgewerkt', UPDATED_OF: '{0} Bijgewerkt',
UPDATE: 'Bijwerken', UPDATE_OF: '{0} Bijwerken',
REMOVED: 'Verwijderd', REMOVED_OF: '{0} Verwijderd',
DELETION: 'Verwijder', DELETION_OF: '{0} Verwijder',
OFFSET: 'Offset', OFFSET: 'Offset',
FACTOR: 'Factor', FACTOR: 'Factor',
FREQ: 'Frequentie', FREQ: 'Frequentie',
DUTY_CYCLE: 'Duty Cycle',
UNIT: 'UoM',
STARTVALUE: 'Startwaarde', STARTVALUE: 'Startwaarde',
WARN_GPIO: 'Waarschuwing: let op met het koppelen van de juiste GPIO pin!', WARN_GPIO: 'Waarschuwing: let op met het koppelen van de juiste GPIO pin!',
EDIT: 'Wijzigen', EDIT: 'Wijzigen',
@@ -69,7 +72,7 @@ const nl: BaseTranslation = {
EMS_SCAN: 'Weet je zeker dat je een volledige EMS bus scan uit wilt voeren?', EMS_SCAN: 'Weet je zeker dat je een volledige EMS bus scan uit wilt voeren?',
EMS_BUS_STATUS: 'EMS busstatus', EMS_BUS_STATUS: 'EMS busstatus',
ACTIVE_DEVICES: 'Actieve Apparaten & Sensoren', ACTIVE_DEVICES: 'Actieve Apparaten & Sensoren',
DEVICE: 'Apparaat', EMS_DEVICE: 'EMS Apparaat',
SUCCESS: 'SUCCESS', SUCCESS: 'SUCCESS',
FAIL: 'MISLUKT', FAIL: 'MISLUKT',
QUALITY: 'QUALITEIT', QUALITY: 'QUALITEIT',
@@ -96,11 +99,13 @@ const nl: BaseTranslation = {
APPLICATION_SETTINGS: 'Applicatieinstellingen', APPLICATION_SETTINGS: 'Applicatieinstellingen',
CUSTOMIZATION: 'Custom aanpassingen', CUSTOMIZATION: 'Custom aanpassingen',
APPLICATION_RESTARTING: 'EMS-ESP herstarten', APPLICATION_RESTARTING: 'EMS-ESP herstarten',
BOARD_PROFILE_TEXT: INTERFACE_BOARD_PROFILE: 'Interface Apparaatprofiel',
'Selecteer een vooraf ingesteld apparaat profiel uit de lijst of kies Eigen om zelf uw hardware te configureren', BOARD_PROFILE_TEXT: 'Selecteer een vooraf ingesteld apparaat profiel uit de lijst of kies Eigen om zelf uw hardware te configureren',
BOARD_PROFILE: 'Apparaatprofiel', BOARD_PROFILE: 'Apparaatprofiel',
BUTTON: 'Toets', BUTTON: 'Toets',
TEMPERATURE: 'Temperatuur', TEMPERATURE: 'Temperatuur',
PHY_TYPE: 'Eth PHY Type',
TX_MODE: 'Tx Mode',
DISABLED: 'Uitgeschakeld', DISABLED: 'Uitgeschakeld',
GENERAL_OPTIONS: 'Algemene Opties', GENERAL_OPTIONS: 'Algemene Opties',
LANGUAGE_ENTITIES: 'Taal (voor apparaat entiteiten)', LANGUAGE_ENTITIES: 'Taal (voor apparaat entiteiten)',
@@ -124,11 +129,12 @@ const nl: BaseTranslation = {
LOGGING: 'Logging', LOGGING: 'Logging',
LOG_HEX: 'Log EMS telegrammen in hexadecimaal', LOG_HEX: 'Log EMS telegrammen in hexadecimaal',
ENABLE_SYSLOG: 'Activeer Syslog', ENABLE_SYSLOG: 'Activeer Syslog',
LOG_LEVEL: 'Log Level',
MARK_INTERVAL: 'Markeringsinterval', MARK_INTERVAL: 'Markeringsinterval',
SECONDS: 'seconden', SECONDS: 'seconden',
MINUTES: 'minuten', MINUTES: 'minuten',
RESTART: 'Herstarten',
HOURS: 'uren', HOURS: 'uren',
RESTART: 'Herstarten',
RESTART_TEXT: 'EMS-ESP dient opnieuw gestart te worden om de wijzingen toe te passen', RESTART_TEXT: 'EMS-ESP dient opnieuw gestart te worden om de wijzingen toe te passen',
RESTART_CONFIRM: 'Weet je zeker dat je EMS-ESP wilt herstarten?', RESTART_CONFIRM: 'Weet je zeker dat je EMS-ESP wilt herstarten?',
COMMAND: 'Commando', COMMAND: 'Commando',
@@ -156,14 +162,15 @@ const nl: BaseTranslation = {
HELP_INFORMATION_4: 'zorg dat je ook je systeem details zijn toevoeged voor een sneller antwoord', HELP_INFORMATION_4: 'zorg dat je ook je systeem details zijn toevoeged voor een sneller antwoord',
HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op Github!', HELP_INFORMATION_5: 'EMS-ESP is een gratis en open source project. Steun ons met een Star op Github!',
SUPPORT_INFO: 'Support Info', SUPPORT_INFO: 'Support Info',
UPLOAD_OF: '{0} Upload',
UPLOAD: 'Upload', UPLOAD: 'Upload',
DOWNLOAD: 'Download', DOWNLOAD: 'Download',
ABORTED: 'afgebroken', ABORTED: 'afgebroken',
FAILED: 'mislukt', FAILED: 'mislukt',
SUCCESSFUL: 'successvol', SUCCESSFUL: 'successvol',
SYSTEM: 'Systeem', SYSTEM: 'Systeem',
LOG: 'Log', LOG_OF: '{0} Log',
STATUS: 'Status', STATUS_OF: '{0} Status',
UPLOAD_DOWNLOAD: 'Upload/Download', UPLOAD_DOWNLOAD: 'Upload/Download',
SYSTEM_VERSION_RUNNING: 'op dit moment draai je versie', SYSTEM_VERSION_RUNNING: 'op dit moment draai je versie',
SYSTEM_APPLY_FIRMWARE: 'om de nieuwe firmware te activeren', SYSTEM_APPLY_FIRMWARE: 'om de nieuwe firmware te activeren',
@@ -178,6 +185,7 @@ const nl: BaseTranslation = {
DEVELOPMENT: 'development', DEVELOPMENT: 'development',
VERSION_IS: 'versie is', VERSION_IS: 'versie is',
RELEASE_NOTES: 'release notes', RELEASE_NOTES: 'release notes',
EMS_ESP_VER: 'EMS-ESP Version',
PLATFORM: 'Apparaat (Platform / SDK)', PLATFORM: 'Apparaat (Platform / SDK)',
UPTIME: 'Systeem Uptime', UPTIME: 'Systeem Uptime',
CPU_FREQ: 'CPU Frequency', CPU_FREQ: 'CPU Frequency',
@@ -210,7 +218,7 @@ const nl: BaseTranslation = {
SU_TEXT: SU_TEXT:
'Het su (super user) wachtwoord wordt gebruikt om authorisatie tokens te signeren en ook om admin privileges te activeren in de console.', 'Het su (super user) wachtwoord wordt gebruikt om authorisatie tokens te signeren en ook om admin privileges te activeren in de console.',
NOT_ENABLED: 'Niet geactiveerd', NOT_ENABLED: 'Niet geactiveerd',
ERRORS: 'Foutmeldingen', ERRORS_OF: '{0} Foutmeldingen',
DISCONNECT_REASON: 'Verbinding verbroken vanwege', DISCONNECT_REASON: 'Verbinding verbroken vanwege',
ENABLE_MQTT: 'Activeer MQTT', ENABLE_MQTT: 'Activeer MQTT',
OPTIONAL: 'Optioneel', OPTIONAL: 'Optioneel',
@@ -228,6 +236,7 @@ const nl: BaseTranslation = {
MQTT_INT_THERMOSTATS: 'Thermostaten', MQTT_INT_THERMOSTATS: 'Thermostaten',
MQTT_INT_SOLAR: 'Solar Modules', MQTT_INT_SOLAR: 'Solar Modules',
MQTT_INT_MIXER: 'Mixer Modules', MQTT_INT_MIXER: 'Mixer Modules',
MQTT_QUEUE: 'MQTT Queue',
DEFAULT: 'Default', DEFAULT: 'Default',
MQTT_CLEAN_SESSION: 'Clean Session aan', MQTT_CLEAN_SESSION: 'Clean Session aan',
MQTT_RETAIN_FLAG: 'Retain flag aan', MQTT_RETAIN_FLAG: 'Retain flag aan',
@@ -239,6 +248,7 @@ const nl: BaseTranslation = {
LOCAL_TIME: 'Locale Tijd', LOCAL_TIME: 'Locale Tijd',
UTC_TIME: 'UTC Tijd', UTC_TIME: 'UTC Tijd',
ENABLE_NTP: 'Activeer NTP', ENABLE_NTP: 'Activeer NTP',
NTP_SERVER: 'NTP Server',
TIME_ZONE: 'Tijdzone', TIME_ZONE: 'Tijdzone',
ACCESS_POINT: 'Access Point', ACCESS_POINT: 'Access Point',
AP_PROVIDE: 'Activeer Access Point', AP_PROVIDE: 'Activeer Access Point',
@@ -247,6 +257,9 @@ const nl: BaseTranslation = {
AP_PROVIDE_TEXT_3: 'nooit', AP_PROVIDE_TEXT_3: 'nooit',
AP_PREFERRED_CHANNEL: 'Voorkeurskanaal', AP_PREFERRED_CHANNEL: 'Voorkeurskanaal',
AP_HIDE_SSID: 'SSID verbergen', AP_HIDE_SSID: 'SSID verbergen',
AP_CLIENTS: 'AP Clients',
AP_MAX_CLIENTS: 'Max Clients',
AP_LOCAL_IP: 'Local IP',
NETWORK_SCAN: 'Scan WiFi Networken', NETWORK_SCAN: 'Scan WiFi Networken',
IDLE: 'Idle', IDLE: 'Idle',
LOST: 'Verloren', LOST: 'Verloren',
@@ -255,12 +268,17 @@ const nl: BaseTranslation = {
NETWORK_SCANNER: 'Netwerk Scanner', NETWORK_SCANNER: 'Netwerk Scanner',
NETWORK_NO_WIFI: 'Geen WiFi networken gevonden', NETWORK_NO_WIFI: 'Geen WiFi networken gevonden',
NETWORK_BLANK_SSID: 'laat leeg om WiFi uit te schakelen', NETWORK_BLANK_SSID: 'laat leeg om WiFi uit te schakelen',
POWER: 'Vermogen', TX_POWER: 'Tx Vermogen',
HOSTNAME: 'Hostname',
NETWORK_DISABLE_SLEEP: 'WiFi Sleep Mode uitzetten', NETWORK_DISABLE_SLEEP: 'WiFi Sleep Mode uitzetten',
NETWORK_LOW_BAND: 'Lagere WiFi bandbreedte gebruiken', NETWORK_LOW_BAND: 'Lagere WiFi bandbreedte gebruiken',
NETWORK_USE_DNS: 'Activeer mDNS Service', NETWORK_USE_DNS: 'Activeer mDNS Service',
NETWORK_ENABLE_IPV6: 'Activeer IPv6 support', NETWORK_ENABLE_IPV6: 'Activeer IPv6 support',
NETWORK_FIXED_IP: 'Gebruik vast IP addres', NETWORK_FIXED_IP: 'Gebruik vast IP addres',
NETWORK_GATEWAY: 'Getaway',
NETWORK_SUBNET: 'Subnet Mask',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMIN: 'Admin', ADMIN: 'Admin',
GUEST: 'Gast', GUEST: 'Gast',
NEW: 'Nieuwe', NEW: 'Nieuwe',

View File

@@ -1,6 +1,6 @@
import type { BaseTranslation } from '../i18n-types'; import type { Translation } from '../i18n-types';
const no: BaseTranslation = { const no: Translation = {
LANGUAGE: 'Språk', LANGUAGE: 'Språk',
RETRY: 'Forsøk igjen', RETRY: 'Forsøk igjen',
LOADING: 'Laster', LOADING: 'Laster',
@@ -9,10 +9,11 @@ const no: BaseTranslation = {
SIGN_OUT: 'Logg ut', SIGN_OUT: 'Logg ut',
USERNAME: 'Brukernavn', USERNAME: 'Brukernavn',
PASSWORD: 'Passord', PASSWORD: 'Passord',
SU_PASSWORD: 'su Passord',
DASHBOARD: 'Dashboard', DASHBOARD: 'Dashboard',
SETTINGS: 'Innstillinger', SETTINGS_OF: '{0} Innstillinger',
SAVED: 'lagret', SAVED: 'lagret',
HELP: 'Hjelp', HELP_OF: '{0} Hjelp',
LOGGED_IN: 'Logget in som {name}', LOGGED_IN: 'Logget in som {name}',
PLEASE_SIGNIN: 'Venligst logge inn for å fortsetta', PLEASE_SIGNIN: 'Venligst logge inn for å fortsetta',
UPLOAD_SUCCESSFUL: 'Opplasting lykkes', UPLOAD_SUCCESSFUL: 'Opplasting lykkes',
@@ -47,13 +48,15 @@ const no: BaseTranslation = {
ACCESS_DENIED: 'Tilgang nektet', ACCESS_DENIED: 'Tilgang nektet',
ANALOG_SENSOR: 'Analog Sensor', ANALOG_SENSOR: 'Analog Sensor',
ANALOG_SENSORS: 'Analoge Sensorer', ANALOG_SENSORS: 'Analoge Sensorer',
UPDATED: 'Oppdatert', UPDATED_OF: '{0} Oppdatert',
UPDATE: 'Oppdater', UPDATE_OF: '{0} Oppdater',
REMOVED: 'Slettet', REMOVED_OF: '{0} Slettet',
DELETION: 'Sletting', DELETION_OF: '{0} Sletting',
OFFSET: 'Kompensering', OFFSET: 'Kompensering',
FACTOR: 'Faktor', FACTOR: 'Faktor',
FREQ: 'Frekvens', FREQ: 'Frekvens',
DUTY_CYCLE: 'Duty Cycle',
UNIT: 'UoM',
STARTVALUE: 'Startverdi', STARTVALUE: 'Startverdi',
WARN_GPIO: 'Advarsel: vær forsiktig ved aktivering av GPIO!', WARN_GPIO: 'Advarsel: vær forsiktig ved aktivering av GPIO!',
EDIT: 'Endre', EDIT: 'Endre',
@@ -69,7 +72,7 @@ const no: BaseTranslation = {
EMS_SCAN: 'Er du sikker på du vil starte full søking av EMS bussen?', EMS_SCAN: 'Er du sikker på du vil starte full søking av EMS bussen?',
EMS_BUS_STATUS: 'EMS Buss Status', EMS_BUS_STATUS: 'EMS Buss Status',
ACTIVE_DEVICES: 'Aktive Enheter og Sensorer', ACTIVE_DEVICES: 'Aktive Enheter og Sensorer',
DEVICE: 'Enhet', EMS_DEVICE: 'EMS Enhet',
SUCCESS: 'VELLYKKET', SUCCESS: 'VELLYKKET',
FAIL: 'MISLYKKET', FAIL: 'MISLYKKET',
QUALITY: 'KVALITET', QUALITY: 'KVALITET',
@@ -96,12 +99,14 @@ const no: BaseTranslation = {
APPLICATION_SETTINGS: 'Innstillinger', APPLICATION_SETTINGS: 'Innstillinger',
CUSTOMIZATION: 'Tilpasninger', CUSTOMIZATION: 'Tilpasninger',
APPLICATION_RESTARTING: 'EMS-ESP restarter', APPLICATION_RESTARTING: 'EMS-ESP restarter',
BOARD_PROFILE_TEXT: INTERFACE_BOARD_PROFILE: 'Interface Prosessor Profil',
'Velg en pre-konfigurert prosessor profil fra listen under eller velg Tilpasset for å konfigurere dine egne innstillinger', BOARD_PROFILE_TEXT: 'Velg en pre-konfigurert prosessor profil fra listen under eller velg Tilpasset for å konfigurere dine egne innstillinger',
BOARD_PROFILE: 'Prosessor Profil', BOARD_PROFILE: 'Prosessor Profil',
BUTTON: 'Knapp', BUTTON: 'Knapp',
TEMPERATURE: 'Temperatur', TEMPERATURE: 'Temperatur',
PHY_TYPE: 'Eth PHY Type',
DISABLED: 'avslått', DISABLED: 'avslått',
TX_MODE: 'Tx Mode',
GENERAL_OPTIONS: 'Generelle Innstillinger', GENERAL_OPTIONS: 'Generelle Innstillinger',
LANGUAGE_ENTITIES: 'Språk (for objekter)', LANGUAGE_ENTITIES: 'Språk (for objekter)',
HIDE_LED: 'Skjul LED', HIDE_LED: 'Skjul LED',
@@ -124,11 +129,12 @@ const no: BaseTranslation = {
LOGGING: 'Logging', LOGGING: 'Logging',
LOG_HEX: 'Logg EMS telegrammer i hexadesimal', LOG_HEX: 'Logg EMS telegrammer i hexadesimal',
ENABLE_SYSLOG: 'Aktiver Syslog', ENABLE_SYSLOG: 'Aktiver Syslog',
LOG_LEVEL: 'Log Level',
MARK_INTERVAL: 'Oppdateringsintervall', MARK_INTERVAL: 'Oppdateringsintervall',
SECONDS: 'sekunder', SECONDS: 'sekunder',
MINUTES: 'minutter', MINUTES: 'minutter',
RESTART: 'Omstart',
HOURS: 'timer', HOURS: 'timer',
RESTART: 'Omstart',
RESTART_TEXT: 'EMS-ESP må omstartes for å iverksette endrede systeminstillinger', RESTART_TEXT: 'EMS-ESP må omstartes for å iverksette endrede systeminstillinger',
RESTART_CONFIRM: 'Er du sikker på at du vil omstarte EMS-ESP?', RESTART_CONFIRM: 'Er du sikker på at du vil omstarte EMS-ESP?',
COMMAND: 'Kommando', COMMAND: 'Kommando',
@@ -157,14 +163,15 @@ const no: BaseTranslation = {
'husk å laste ned og legg ved din systeminformasjon for en raskere respons når du rapporterer et problem', 'husk å laste ned og legg ved din systeminformasjon for en raskere respons når du rapporterer et problem',
HELP_INFORMATION_5: 'EMS-ESP er gratis og åpen kildekode. Bidra til utviklingen ved å gi oss en stjerne på GitHub!', HELP_INFORMATION_5: 'EMS-ESP er gratis og åpen kildekode. Bidra til utviklingen ved å gi oss en stjerne på GitHub!',
SUPPORT_INFO: 'Supportinfo', SUPPORT_INFO: 'Supportinfo',
UPLOAD_OF: '{0} Opplasning',
UPLOAD: 'Opplasning', UPLOAD: 'Opplasning',
DOWNLOAD: 'Nedlasting', DOWNLOAD: 'Nedlasting',
ABORTED: 'avbrutt', ABORTED: 'avbrutt',
FAILED: 'feilet', FAILED: 'feilet',
SUCCESSFUL: 'vellykket', SUCCESSFUL: 'vellykket',
SYSTEM: 'System', SYSTEM: 'System',
LOG: 'Logg', LOG_OF: '{0} Logg',
STATUS: 'Status', STATUS_OF: '{0} Status',
UPLOAD_DOWNLOAD: 'Opp/Nedlasting', UPLOAD_DOWNLOAD: 'Opp/Nedlasting',
SYSTEM_VERSION_RUNNING: 'Du benytter versjon', SYSTEM_VERSION_RUNNING: 'Du benytter versjon',
SYSTEM_APPLY_FIRMWARE: 'for å aktivere ny firmware', SYSTEM_APPLY_FIRMWARE: 'for å aktivere ny firmware',
@@ -179,6 +186,7 @@ const no: BaseTranslation = {
DEVELOPMENT: 'development', DEVELOPMENT: 'development',
VERSION_IS: 'versjonen er', VERSION_IS: 'versjonen er',
RELEASE_NOTES: 'release notes', RELEASE_NOTES: 'release notes',
EMS_ESP_VER: 'EMS-ESP Version',
PLATFORM: 'Enhet (Platform / SDK)', PLATFORM: 'Enhet (Platform / SDK)',
UPTIME: 'System Oppetid', UPTIME: 'System Oppetid',
CPU_FREQ: 'CPU Frekvens', CPU_FREQ: 'CPU Frekvens',
@@ -211,7 +219,7 @@ const no: BaseTranslation = {
SU_TEXT: SU_TEXT:
'su brukeren (super user) passord benyttes for å signere autentiserings token samt å tillate admin privileger i konsoll modus.', 'su brukeren (super user) passord benyttes for å signere autentiserings token samt å tillate admin privileger i konsoll modus.',
NOT_ENABLED: 'Ikke aktiv', NOT_ENABLED: 'Ikke aktiv',
ERRORS: 'Feil', ERRORS_OF: '{0} Feil',
DISCONNECT_REASON: 'Årsak til nedkobling', DISCONNECT_REASON: 'Årsak til nedkobling',
ENABLE_MQTT: 'Aktiver MQTT', ENABLE_MQTT: 'Aktiver MQTT',
OPTIONAL: 'Valgfritt', OPTIONAL: 'Valgfritt',
@@ -229,6 +237,7 @@ const no: BaseTranslation = {
MQTT_INT_THERMOSTATS: 'Termostat', MQTT_INT_THERMOSTATS: 'Termostat',
MQTT_INT_SOLAR: 'Solpaneler', MQTT_INT_SOLAR: 'Solpaneler',
MQTT_INT_MIXER: 'Blandeventil', MQTT_INT_MIXER: 'Blandeventil',
MQTT_QUEUE: 'MQTT Queue',
DEFAULT: 'Standard', DEFAULT: 'Standard',
MQTT_CLEAN_SESSION: 'Benytt Clean Session', MQTT_CLEAN_SESSION: 'Benytt Clean Session',
MQTT_RETAIN_FLAG: 'Alltid sett Retain flag', MQTT_RETAIN_FLAG: 'Alltid sett Retain flag',
@@ -240,6 +249,7 @@ const no: BaseTranslation = {
LOCAL_TIME: 'Lokaltid', LOCAL_TIME: 'Lokaltid',
UTC_TIME: 'UTC Tid', UTC_TIME: 'UTC Tid',
ENABLE_NTP: 'Aktiver NTP', ENABLE_NTP: 'Aktiver NTP',
NTP_SERVER: 'NTP Server',
TIME_ZONE: 'Tidssone', TIME_ZONE: 'Tidssone',
ACCESS_POINT: 'Aksesspunkt', ACCESS_POINT: 'Aksesspunkt',
AP_PROVIDE: 'Aktiver Aksesspunkt', AP_PROVIDE: 'Aktiver Aksesspunkt',
@@ -248,6 +258,9 @@ const no: BaseTranslation = {
AP_PROVIDE_TEXT_3: 'aldri', AP_PROVIDE_TEXT_3: 'aldri',
AP_PREFERRED_CHANNEL: 'Foretrukket kanal', AP_PREFERRED_CHANNEL: 'Foretrukket kanal',
AP_HIDE_SSID: 'Skjul SSID', AP_HIDE_SSID: 'Skjul SSID',
AP_CLIENTS: 'AP Clients',
AP_MAX_CLIENTS: 'Max Clients',
AP_LOCAL_IP: 'Local IP',
NETWORK_SCAN: 'Søk etter trådløst nettverk', NETWORK_SCAN: 'Søk etter trådløst nettverk',
IDLE: 'Klar', IDLE: 'Klar',
LOST: 'Mistet', LOST: 'Mistet',
@@ -256,12 +269,17 @@ const no: BaseTranslation = {
NETWORK_SCANNER: 'Nettverk Scanner', NETWORK_SCANNER: 'Nettverk Scanner',
NETWORK_NO_WIFI: 'Ingen trådløse nett funnet', NETWORK_NO_WIFI: 'Ingen trådløse nett funnet',
NETWORK_BLANK_SSID: 'la feltet være blankt for å deaktivisere trådløst nettverk', NETWORK_BLANK_SSID: 'la feltet være blankt for å deaktivisere trådløst nettverk',
POWER: 'Effekt', TX_POWER: 'Tx Effekt',
HOSTNAME: 'Hostname',
NETWORK_DISABLE_SLEEP: 'Hindre at trådløst nettverk går i Sleep Mode', NETWORK_DISABLE_SLEEP: 'Hindre at trådløst nettverk går i Sleep Mode',
NETWORK_LOW_BAND: 'Benytt smalere båndbredde på trådløst nettverk', NETWORK_LOW_BAND: 'Benytt smalere båndbredde på trådløst nettverk',
NETWORK_USE_DNS: 'Aktiviser mDNS Service', NETWORK_USE_DNS: 'Aktiviser mDNS Service',
NETWORK_ENABLE_IPV6: 'Aktiviser IPv6 støtte', NETWORK_ENABLE_IPV6: 'Aktiviser IPv6 støtte',
NETWORK_FIXED_IP: 'Benytt statisk IP adresse', NETWORK_FIXED_IP: 'Benytt statisk IP adresse',
NETWORK_GATEWAY: 'Getaway',
NETWORK_SUBNET: 'Subnet Mask',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMIN: 'Admin', ADMIN: 'Admin',
GUEST: 'Gjest', GUEST: 'Gjest',
NEW: 'Ny', NEW: 'Ny',

View File

@@ -1,25 +1,26 @@
import type { BaseTranslation } from '../i18n-types'; import type { Translation } from '../i18n-types';
const pl: BaseTranslation = { const pl: Translation = {
LANGUAGE: 'Język', LANGUAGE: 'Język',
RETRY: 'Ponów', RETRY: 'Ponów',
LOADING: 'Ładowanie', LOADING: 'Ładowanie',
IS_REQUIRED: 'Czy wymagany?', IS_REQUIRED: 'Czy wymagany?',
SIGN_IN: 'Zaloguj', SIGN_IN: 'Zaloguj',
SIGN_OUT: 'Wyloguj', SIGN_OUT: 'Wyloguj',
USERNAME: 'Użytkownik', USERNAME: 'Nazwa użytkownika',
PASSWORD: 'Hasło', PASSWORD: 'Hasło',
SU_PASSWORD: 'Hasło "su"',
DASHBOARD: 'Pulpit', DASHBOARD: 'Pulpit',
SETTINGS: 'Ustawienia', SETTINGS_OF: 'Ustawienia {0}',
SAVED: 'zapisano', SAVED: 'zostały zapisane.',
HELP: 'Pomoc', HELP_OF: 'Pomoc {0}',
LOGGED_IN: 'Zalogowany jako {name}', LOGGED_IN: 'Zalogowany jako {name}.',
PLEASE_SIGNIN: 'Zaloguj się aby kontynuować.', PLEASE_SIGNIN: 'Zaloguj się aby kontynuować.',
UPLOAD_SUCCESSFUL: 'Wysyłanie zakończone.', UPLOAD_SUCCESSFUL: 'Wysyłanie zakończone.',
DOWNLOAD_SUCCESSFUL: 'Pobieranie zakończone.', DOWNLOAD_SUCCESSFUL: 'Pobieranie zakończone.',
INVALID_LOGIN: 'Niepoprawny login', INVALID_LOGIN: 'Niepoprawny login!',
NETWORK: 'Sieć', NETWORK: '{{Sieć|sieci|}}',
SECURITY: 'Bezpieczeństwo', SECURITY: '{{B|b|}}ezpieczeństw{{o|a|}}',
ONOFF_CAP: 'wł./wył.', ONOFF_CAP: 'wł./wył.',
ONOFF: 'włączono/wyłączono', ONOFF: 'włączono/wyłączono',
TYPE: 'Typ', TYPE: 'Typ',
@@ -30,7 +31,7 @@ const pl: BaseTranslation = {
DEVICE_DETAILS: 'Szczegóły urządzenia', DEVICE_DETAILS: 'Szczegóły urządzenia',
BRAND: 'Marka', BRAND: 'Marka',
ENTITY_NAME: 'Nazwa encji', ENTITY_NAME: 'Nazwa encji',
VALUE: 'Wartość', VALUE: '{{Wartość|wartość|}}',
SHOW_FAV: 'Pokaż tylko "ulubione"', SHOW_FAV: 'Pokaż tylko "ulubione"',
DEVICE_SENSOR_DATA: 'Dane z urządzeń i czujników', DEVICE_SENSOR_DATA: 'Dane z urządzeń i czujników',
DEVICES_SENSORS: 'Urządzenia i czujniki', DEVICES_SENSORS: 'Urządzenia i czujniki',
@@ -38,22 +39,24 @@ const pl: BaseTranslation = {
RUN_COMMAND: 'Wykonaj komendę', RUN_COMMAND: 'Wykonaj komendę',
CHANGE_VALUE: 'Zmień wartość', CHANGE_VALUE: 'Zmień wartość',
CANCEL: 'Anuluj', CANCEL: 'Anuluj',
RESET: 'Resetuj', RESET: '{{Resetuj|Resetowanie|}}',
SEND: 'Wyślij', SEND: 'Wyślij',
SAVE: 'Zapisz', SAVE: 'Zapisz',
REMOVE: 'Usuń', REMOVE: 'Usuń',
PROBLEM_UPDATING: 'Problem z aktualizacją', PROBLEM_UPDATING: 'Problem z aktualizacją!',
PROBLEM_LOADING: 'Problem z pobieraniem', PROBLEM_LOADING: 'Problem z pobieraniem!',
ACCESS_DENIED: 'Brak dostępu', ACCESS_DENIED: 'Brak dostępu!',
ANALOG_SENSOR: 'urządzenia podłączonego do GPIO', ANALOG_SENSOR: 'urządzenia podłączonego do EMS-ESP',
ANALOG_SENSORS: 'Urządzenia podłączone do GPIO', ANALOG_SENSORS: 'Urządzenia podłączone do EMS-ESP',
UPDATED: 'Zaktualizowano', UPDATED_OF: 'Zaktualizowano ustawienia {0}.',
UPDATE: 'Aktualizacja', UPDATE_OF: 'Aktualizacja {0}',
REMOVED: 'Usunięto', REMOVED_OF: 'Usunięto ustawienia {0}.',
DELETION: 'Skasowano', DELETION_OF: 'Kasowanie {0}',
OFFSET: 'Korekta +/-', OFFSET: 'Korekta +/-',
FACTOR: 'Mnożnik', FACTOR: 'Mnożnik',
FREQ: 'Częstotliwość', FREQ: 'Częstotliwość',
DUTY_CYCLE: 'Wypełnienie',
UNIT: 'J.m.',
STARTVALUE: 'Wartość początkowa', STARTVALUE: 'Wartość początkowa',
WARN_GPIO: 'Uwaga! Bądź ostrożny przypisując GPIO do czujnika!', WARN_GPIO: 'Uwaga! Bądź ostrożny przypisując GPIO do czujnika!',
EDIT: 'Edycja', EDIT: 'Edycja',
@@ -62,14 +65,14 @@ const pl: BaseTranslation = {
WRITE_COMMAND: 'Wyślij komendę {cmd}', WRITE_COMMAND: 'Wyślij komendę {cmd}',
EMS_BUS_WARNING: EMS_BUS_WARNING:
'Brak połączenia z magistralą EMS. Jeśli ten błąd występuje dłużej niż kilka sekund, sprawdź ustawienia oraz profil płytki interfejsu.', 'Brak połączenia z magistralą EMS. Jeśli ten błąd występuje dłużej niż kilka sekund, sprawdź ustawienia oraz profil płytki interfejsu.',
EMS_BUS_SCANNING: 'Skanuję w poszukiwaniu urządzeń EMS...', EMS_BUS_SCANNING: 'Trwa skanowanie magistrali EMS w poszukiwaniu urządzeń...',
CONNECTED: 'połączono', CONNECTED: '{{połączono|połączenie|}}',
TX_ISSUES: 'Problem z zapisem na magistralę EMS. Spróbuj wybrać inny "tryb Tx"', TX_ISSUES: 'Problem z zapisem na magistralę EMS. Spróbuj wybrać inny "Sposób transmisji (Tx)".',
DISCONNECTED: 'brak połączenia', DISCONNECTED: 'zostało rozłączone',
EMS_SCAN: 'Czy na pewno wykonać pełne skanowanie magistrali EMS?', EMS_SCAN: 'Czy na pewno wykonać pełne skanowanie magistrali EMS?',
EMS_BUS_STATUS: 'Status magistrali EMS', EMS_BUS_STATUS: 'Status magistrali EMS',
ACTIVE_DEVICES: 'Aktywne urządzenia i czujniki', ACTIVE_DEVICES: 'Aktywne urządzenia i czujniki',
DEVICE: 'Urządzenie', EMS_DEVICE: 'Urządzenie EMS',
SUCCESS: 'Udane', SUCCESS: 'Udane',
FAIL: 'Nieudane', FAIL: 'Nieudane',
QUALITY: 'Jakość', QUALITY: 'Jakość',
@@ -84,7 +87,7 @@ const pl: BaseTranslation = {
'Odczyty czujników analogowych i cyfrowych', 'Odczyty czujników analogowych i cyfrowych',
'Publikacje MQTT', 'Publikacje MQTT',
'Wywołania API', 'Wywołania API',
'Wpisy syslog' 'Wpisy w logu systemowym'
], ],
NUM_DEVICES: '{num} urządze{{ń|nie|nia|nia|ń}} EMS', NUM_DEVICES: '{num} urządze{{ń|nie|nia|nia|ń}} EMS',
NUM_TEMP_SENSORS: '{num} czujni{{ków|k|ki|ki|ków}} temperatury', NUM_TEMP_SENSORS: '{num} czujni{{ków|k|ki|ki|ków}} temperatury',
@@ -95,12 +98,15 @@ const pl: BaseTranslation = {
NUM_MINUTES: '{num} minu{{t|ta|ty|ty|t}}', NUM_MINUTES: '{num} minu{{t|ta|ty|ty|t}}',
APPLICATION_SETTINGS: 'Ustawienia aplikacji', APPLICATION_SETTINGS: 'Ustawienia aplikacji',
CUSTOMIZATION: 'Personalizacja', CUSTOMIZATION: 'Personalizacja',
APPLICATION_RESTARTING: 'Trwa ponowne uruchamianie', APPLICATION_RESTARTING: 'Trwa ponowne uruchamianie...',
INTERFACE_BOARD_PROFILE: 'Profil płytki interfejsu',
BOARD_PROFILE_TEXT: 'Wybierz z listy wstępną konfigurację płytki interfejsu lub stwórz własną konfigurację.', BOARD_PROFILE_TEXT: 'Wybierz z listy wstępną konfigurację płytki interfejsu lub stwórz własną konfigurację.',
BOARD_PROFILE: 'Profil płytki', BOARD_PROFILE: 'Profil płytki',
BUTTON: 'Przycisk', BUTTON: 'Przycisk',
TEMPERATURE: '1-Wire®', TEMPERATURE: '1-Wire®',
PHY_TYPE: 'Typ układu ethernetowego (PHY)',
DISABLED: 'wyłączony', DISABLED: 'wyłączony',
TX_MODE: 'Sposób transmisji (Tx)',
GENERAL_OPTIONS: 'Opcje podstawowe', GENERAL_OPTIONS: 'Opcje podstawowe',
LANGUAGE_ENTITIES: 'Język encji', LANGUAGE_ENTITIES: 'Język encji',
HIDE_LED: 'Wyłącz LED', HIDE_LED: 'Wyłącz LED',
@@ -118,12 +124,13 @@ const pl: BaseTranslation = {
BOOLEAN_FORMAT_DASHBOARD: 'Format wartości binarnych dla pulpitu', BOOLEAN_FORMAT_DASHBOARD: 'Format wartości binarnych dla pulpitu',
BOOLEAN_FORMAT_API: 'Format wartości binarnych dla API/MQTT', BOOLEAN_FORMAT_API: 'Format wartości binarnych dla API/MQTT',
ENUM_FORMAT: 'Format wartości numerowanych dla API/MQTT', ENUM_FORMAT: 'Format wartości numerowanych dla API/MQTT',
INDEX: 'Indeks', INDEX: 'indeks',
ENABLE_PARASITE: 'Aktywuj zasilanie pasożytnicze', ENABLE_PARASITE: 'Aktywuj zasilanie pasożytnicze',
LOGGING: 'Logowanie', LOGGING: 'Logowanie',
LOG_HEX: 'Loguj telegramy EMS w systemie szesnastkowym (hex)', LOG_HEX: 'Loguj telegramy EMS w systemie szesnastkowym (hex)',
ENABLE_SYSLOG: 'Aktywuj syslog', ENABLE_SYSLOG: 'Aktywuj SysLog',
MARK_INTERVAL: 'Zaznacz interwał', LOG_LEVEL: 'Poziom logowania',
MARK_INTERVAL: 'Oznaczaj interwały (0=brak)',
SECONDS: 'sek.', SECONDS: 'sek.',
MINUTES: 'min.', MINUTES: 'min.',
HOURS: 'godz.', HOURS: 'godz.',
@@ -133,7 +140,7 @@ const pl: BaseTranslation = {
COMMAND: 'KOMENDA', COMMAND: 'KOMENDA',
CUSTOMIZATIONS_RESTART: 'Wszystkie personalizacje zostały usunięte. Restartuję...', CUSTOMIZATIONS_RESTART: 'Wszystkie personalizacje zostały usunięte. Restartuję...',
CUSTOMIZATIONS_FULL: 'Wybrano za dużo obiektów. Wprowadź zmiany w mniejszych partiach.', CUSTOMIZATIONS_FULL: 'Wybrano za dużo obiektów. Wprowadź zmiany w mniejszych partiach.',
CUSTOMIZATIONS_SAVED: 'Personalizacje zapisane.', CUSTOMIZATIONS_SAVED: 'Personalizacje zostały zapisane.',
CUSTOMIZATIONS_HELP_1: 'Wybierz urządzenie EMS, dostosuj opcje lub kliknij by zmienić nazwę encji.', CUSTOMIZATIONS_HELP_1: 'Wybierz urządzenie EMS, dostosuj opcje lub kliknij by zmienić nazwę encji.',
CUSTOMIZATIONS_HELP_2: 'oznacz jako ulubioną', CUSTOMIZATIONS_HELP_2: 'oznacz jako ulubioną',
CUSTOMIZATIONS_HELP_3: 'zablokuj możliwość zapisu', CUSTOMIZATIONS_HELP_3: 'zablokuj możliwość zapisu',
@@ -144,27 +151,28 @@ const pl: BaseTranslation = {
OPTIONS: 'Opcje', OPTIONS: 'Opcje',
NAME: 'nazwa', NAME: 'nazwa',
CUSTOMIZATIONS_RESET: CUSTOMIZATIONS_RESET:
'Czy jesteś pewien, że chcesz usunąć wszystkie personalizacje łącznie z ustawieniami dla czujników temperatury i analogowych?', 'Czy jesteś pewien, że chcesz usunąć wszystkie personalizacje łącznie z ustawieniami dla czujników temperatury 1-Wire® i urządzeń podłączonych do EMS-ESP?',
DEVICE_ENTITIES: 'Encje urządzenia', DEVICE_ENTITIES: 'Encje urządzenia',
USER_CUSTOMIZATION: 'Personalizacje użytkownika', USER_CUSTOMIZATION: 'Personalizacje użytkownika',
SUPPORT_INFORMATION: 'Dodatkowe informacje', SUPPORT_INFORMATION: 'Informacje dotyczące wsparcia',
CLICK_HERE: 'Kliknij tu', CLICK_HERE: 'Kliknij tu',
HELP_INFORMATION_1: 'Skorzystaj z wiki w celu znalezienia szczegółowych instrukcji jak skonfigurować EMS-ESP', HELP_INFORMATION_1: 'W celu znalezienia szczegółowych instrukcji jak skonfigurować EMS-ESP skorzystaj z wiki',
HELP_INFORMATION_2: 'Skorzystaj z serwera Discord w celu komunikacji na żywo ze społecznością', HELP_INFORMATION_2: 'W celu komunikacji na żywo ze społecznością skorzystaj z serwera Discord',
HELP_INFORMATION_3: 'Aby zaproponować nową funkcjonalność lub zgłosić problem', HELP_INFORMATION_3: 'Aby zaproponować nową funkcjonalność lub zgłosić problem',
HELP_INFORMATION_4: HELP_INFORMATION_4:
'gdy zgłaszasz problem, będzie on szybciej rozwiązany gdy do zgłoszenia dołączysz pełną informację o swoim systemie', 'zgłaszając problem, nie zapomnij dołączyć informacji o swoim systemie',
HELP_INFORMATION_5: HELP_INFORMATION_5:
'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na Github!', 'EMS-ESP jest darmowym projektem typu open-source. Aby go wesprzeć, rozważ przyznanie nam gwiazdki na Github!',
SUPPORT_INFO: 'Dodatkowe informacje', SUPPORT_INFO: 'Pobierz informacje',
UPLOAD_OF: 'Wysyłanie {0}',
UPLOAD: 'Wysyłanie', UPLOAD: 'Wysyłanie',
DOWNLOAD: 'Pobieranie', DOWNLOAD: '{{P|p|P}}obier{{anie|z|z}}',
ABORTED: 'przerwano.', ABORTED: 'zostało przerwane!',
FAILED: 'nie powiodło się!', FAILED: 'nie powiodło się!',
SUCCESSFUL: 'powiodło się.', SUCCESSFUL: 'powiodło się.',
SYSTEM: 'System', SYSTEM: '{{S|s||s}}yste{{m|mu||mowy}}',
LOG: 'Log', LOG_OF: 'Log {0}',
STATUS: 'Status', STATUS_OF: 'Status {0}',
UPLOAD_DOWNLOAD: 'Przesyłanie plików', UPLOAD_DOWNLOAD: 'Przesyłanie plików',
SYSTEM_VERSION_RUNNING: 'Obecnie zainstalowana wersja to:', SYSTEM_VERSION_RUNNING: 'Obecnie zainstalowana wersja to:',
SYSTEM_APPLY_FIRMWARE: '', SYSTEM_APPLY_FIRMWARE: '',
@@ -173,12 +181,13 @@ const pl: BaseTranslation = {
FACTORY_RESET: 'Ustawienia fabryczne', FACTORY_RESET: 'Ustawienia fabryczne',
SYSTEM_FACTORY_TEXT: 'Interfejs EMS-ESP został przywrócony do ustawień fabrycznych i zostanie teraz ponownie uruchomiony.', SYSTEM_FACTORY_TEXT: 'Interfejs EMS-ESP został przywrócony do ustawień fabrycznych i zostanie teraz ponownie uruchomiony.',
SYSTEM_FACTORY_TEXT_DIALOG: 'Czy jesteś pewien, że chcesz przywrócić ustawienia fabryczne interfejsu EMS-ESP? ', SYSTEM_FACTORY_TEXT_DIALOG: 'Czy jesteś pewien, że chcesz przywrócić ustawienia fabryczne interfejsu EMS-ESP? ',
VERSION_CHECK: '{{Sprawdź wersję (main translation idx=0)|Sprawdzanie wersji (alt translation idx=1)|not used (translation idx=other)}}', VERSION_CHECK: 'Sprawd{{ź|zanie|}} wersj{{ę|i|}}',
THE_LATEST: 'Najnowsza', THE_LATEST: 'Najnowsza',
OFFICIAL: 'oficjalna', OFFICIAL: 'oficjalna',
DEVELOPMENT: 'testowa', DEVELOPMENT: 'testowa',
VERSION_IS: 'wersja to', VERSION_IS: 'wersja to',
RELEASE_NOTES: 'lista zmian', RELEASE_NOTES: 'lista zmian',
EMS_ESP_VER: 'Wersja EMS-ESP',
PLATFORM: 'Urządzenie (platforma / SDK)', PLATFORM: 'Urządzenie (platforma / SDK)',
UPTIME: 'Czas działania systemu', UPTIME: 'Czas działania systemu',
CPU_FREQ: 'Taktowanie CPU', CPU_FREQ: 'Taktowanie CPU',
@@ -195,23 +204,23 @@ const pl: BaseTranslation = {
'Pobierz ustawienia aplikacji. Uważaj jeśli udostępniasz plik z ustawieniami, ponieważ zawiera on hasła oraz inne wrażliwe informacje!', 'Pobierz ustawienia aplikacji. Uważaj jeśli udostępniasz plik z ustawieniami, ponieważ zawiera on hasła oraz inne wrażliwe informacje!',
UPLOAD_TEXT: 'Wyślij firmware (.bin), ustawienia lub personalizacje (.json)', UPLOAD_TEXT: 'Wyślij firmware (.bin), ustawienia lub personalizacje (.json)',
UPLOADING: 'Wysłano', UPLOADING: 'Wysłano',
UPLOAD_DROP_TEXT: 'Przeciągnij plik lub kliknij', UPLOAD_DROP_TEXT: 'Przeciągnij tutaj plik lub kliknij',
ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!', ERROR: 'Nieoczekiwany błąd, spróbuj ponownie!',
TIME_SET: 'Ustaw czas', TIME_SET: 'Ustaw czas',
MANAGE_USERS: 'Zarządzanie użytkownikami', MANAGE_USERS: 'Zarządzanie użytkownikami',
IS_ADMIN: 'Admin?', IS_ADMIN: '{{Admin?|Uprawnienia administratora|}}',
USER_WARNING: 'Przynajmniej jeden użytkownik musi mieć uprawnienia admina!', USER_WARNING: 'Przynajmniej jeden użytkownik musi mieć uprawnienia administratora!',
ADD: 'Dodaj', ADD: 'Doda{{j|wanie|C}}',
ACCESS_TOKEN_FOR: 'Token dostępu dla', ACCESS_TOKEN_FOR: 'Token dostępu dla użytkownika',
ACCESS_TOKEN_TEXT: ACCESS_TOKEN_TEXT:
'Token jest używany w wywołaniach REST API wymagających autoryzacji. Można go przekazywać bezpośrednio lub przez URL.', 'Token jest używany w wywołaniach REST API wymagających autoryzacji. Można go przekazywać bezpośrednio lub przez URL.',
GENERATING_TOKEN: 'Generowanie tokenu', GENERATING_TOKEN: 'Generowanie tokenu',
USER: 'Użytkownik', USER: '{{Użytkownik|użytkownika|}}',
MODIFY: 'Modyfikuj', MODIFY: 'Edycja',
SU_TEXT: SU_TEXT:
'Hasło su (super-użytkownika) jest wykorzystywane do autoryzacji tokenów oraz dostępu do konsoli z uprawnieniami admina.', 'Hasło "su" (super-użytkownika) jest wykorzystywane do autoryzacji tokenów oraz dostępu do konsoli z uprawnieniami administratora.',
NOT_ENABLED: 'nieaktywowany', NOT_ENABLED: 'nieaktywowany',
ERRORS: 'Błędy', ERRORS_OF: 'Błędy {0}',
DISCONNECT_REASON: 'Powód rozłączenia', DISCONNECT_REASON: 'Powód rozłączenia',
ENABLE_MQTT: 'Aktywuj MQTT', ENABLE_MQTT: 'Aktywuj MQTT',
OPTIONAL: 'opcjonalny', OPTIONAL: 'opcjonalny',
@@ -229,40 +238,50 @@ const pl: BaseTranslation = {
MQTT_INT_THERMOSTATS: 'Termostaty', MQTT_INT_THERMOSTATS: 'Termostaty',
MQTT_INT_SOLAR: 'Panele solarne', MQTT_INT_SOLAR: 'Panele solarne',
MQTT_INT_MIXER: 'Mieszacze', MQTT_INT_MIXER: 'Mieszacze',
MQTT_QUEUE: 'Kolejka MQTT',
DEFAULT: 'Domyślnie', DEFAULT: 'Domyślnie',
MQTT_CLEAN_SESSION: 'Ustawiaj "Clean session"', MQTT_CLEAN_SESSION: 'Ustawiaj "Clean session"',
MQTT_RETAIN_FLAG: 'Ustawiaj flagę "Retain"', MQTT_RETAIN_FLAG: 'Ustawiaj flagę "Retain"',
INACTIVE: 'nieaktywny', INACTIVE: 'nieaktywny',
ACTIVE: 'aktywny', ACTIVE: 'aktywny',
UNKNOWN: 'nieznany', UNKNOWN: 'nieznany',
SET_TIME: 'Ustaw datę i godzinę', SET_TIME: '{{Ustaw zegar|Ustawianie zegara|}}',
SET_TIME_TEXT: 'Wprowadź aktualną datę i godzinę', SET_TIME_TEXT: 'Wprowadź aktualną datę i godzinę',
LOCAL_TIME: 'Czas lokalny', LOCAL_TIME: 'Czas lokalny',
UTC_TIME: 'Czas UTC', UTC_TIME: 'Czas UTC',
ENABLE_NTP: 'Aktywuj NTP (data i godzina będą automatycznie synchronizowane z poniższym serwerem czasu)', ENABLE_NTP: 'Aktywuj NTP (data i godzina będą automatycznie synchronizowane z poniższym serwerem czasu)',
NTP_SERVER: 'Serwer NTP',
TIME_ZONE: 'Strefa czasowa', TIME_ZONE: 'Strefa czasowa',
ACCESS_POINT: 'Punkt dostępowy', ACCESS_POINT: '{{Punkt|punktu|}} {{dostępowy|dostępowego|}}',
AP_PROVIDE: 'Aktywuj punkt dostępowy (Access Point)', AP_PROVIDE: 'Aktywuj punkt dostępowy (Access Point)',
AP_PROVIDE_TEXT_1: 'zawsze', AP_PROVIDE_TEXT_1: 'zawsze',
AP_PROVIDE_TEXT_2: 'gdy połączenie WiFi jest rozłączone', AP_PROVIDE_TEXT_2: 'gdy połączenie WiFi jest rozłączone',
AP_PROVIDE_TEXT_3: 'nigdy', AP_PROVIDE_TEXT_3: 'nigdy',
AP_PREFERRED_CHANNEL: 'Preferowany kanał', AP_PREFERRED_CHANNEL: 'Preferowany kanał',
AP_HIDE_SSID: 'Ukryj SSID', AP_HIDE_SSID: 'Ukryj SSID',
AP_CLIENTS: 'Liczba klientów',
AP_MAX_CLIENTS: 'Maksymalna liczba klientów',
AP_LOCAL_IP: 'Lokalny adres IP',
NETWORK_SCAN: 'Skanuj sieci WiFi', NETWORK_SCAN: 'Skanuj sieci WiFi',
IDLE: 'uśpiony', IDLE: 'uśpiony',
LOST: 'utracony', LOST: 'zostało utracone.',
SCANNING: 'Skanuję', SCANNING: 'Skanuję',
SCAN_AGAIN: 'Skanuj ponownie', SCAN_AGAIN: 'Skanuj ponownie',
NETWORK_SCANNER: 'Skaner sieci WiFi', NETWORK_SCANNER: 'Skaner sieci WiFi',
NETWORK_NO_WIFI: 'Brak sieci WiFi w zasięgu', NETWORK_NO_WIFI: 'Brak sieci WiFi w zasięgu',
NETWORK_BLANK_SSID: 'pozostaw puste aby wyłączyć WiFi', NETWORK_BLANK_SSID: 'pozostaw puste aby wyłączyć WiFi',
POWER: 'moc', TX_POWER: 'Moc nadawania',
HOSTNAME: 'Nazwa w sieci',
NETWORK_DISABLE_SLEEP: 'Wyłącz tryb usypiania WiFi', NETWORK_DISABLE_SLEEP: 'Wyłącz tryb usypiania WiFi',
NETWORK_LOW_BAND: 'Używaj zmniejszonej przepustowości WiFi', NETWORK_LOW_BAND: 'Używaj zmniejszonej przepustowości WiFi',
NETWORK_USE_DNS: 'Włącz wsparcie dla mDNS', NETWORK_USE_DNS: 'Włącz wsparcie dla mDNS',
NETWORK_ENABLE_IPV6: 'Włącz wsparcie dla IPv6', NETWORK_ENABLE_IPV6: 'Włącz wsparcie dla IPv6',
NETWORK_FIXED_IP: 'Użyj stałego adresu IP', NETWORK_FIXED_IP: 'Użyj stałego adresu IP',
ADMIN: 'Admin', NETWORK_GATEWAY: 'Brama',
NETWORK_SUBNET: 'Maska podsieci',
NETWORK_DNS: 'Serwery DNS',
ADDRESS_OF: 'Adres {0}',
ADMIN: 'Administrator',
GUEST: 'Gość', GUEST: 'Gość',
NEW: 'Nowy', NEW: 'Nowy',
RENAME: 'Zmień nazwę', RENAME: 'Zmień nazwę',

View File

@@ -1,6 +1,6 @@
import type { BaseTranslation } from '../i18n-types'; import type { Translation } from '../i18n-types';
const se: BaseTranslation = { const se: Translation = {
LANGUAGE: 'Språk', LANGUAGE: 'Språk',
RETRY: 'Försök igen', RETRY: 'Försök igen',
LOADING: 'Laddar', LOADING: 'Laddar',
@@ -9,10 +9,11 @@ const se: BaseTranslation = {
SIGN_OUT: 'Logga Ut', SIGN_OUT: 'Logga Ut',
USERNAME: 'Användarnamn', USERNAME: 'Användarnamn',
PASSWORD: 'Lösenord', PASSWORD: 'Lösenord',
SU_PASSWORD: 'su Lösenord',
DASHBOARD: 'Kontrollpanel', DASHBOARD: 'Kontrollpanel',
SETTINGS: 'Inställningar', SETTINGS_OF: '{0} Inställningar',
SAVED: 'Sparat', SAVED: 'Sparat',
HELP: 'Hjälp', HELP_OF: '{0} Hjälp',
LOGGED_IN: 'Inloggad som {name}', LOGGED_IN: 'Inloggad som {name}',
PLEASE_SIGNIN: 'Vänligen logga in för att fortsätta', PLEASE_SIGNIN: 'Vänligen logga in för att fortsätta',
UPLOAD_SUCCESSFUL: 'Uppladdning lyckades', UPLOAD_SUCCESSFUL: 'Uppladdning lyckades',
@@ -47,13 +48,15 @@ const se: BaseTranslation = {
ACCESS_DENIED: 'Åtkomst Nekad', ACCESS_DENIED: 'Åtkomst Nekad',
ANALOG_SENSOR: 'Analog Sensor', ANALOG_SENSOR: 'Analog Sensor',
ANALOG_SENSORS: 'Analoga Sensorer', ANALOG_SENSORS: 'Analoga Sensorer',
UPDATED: 'Uppdaterad', UPDATED_OF: '{0} Uppdaterad',
UPDATE: 'Uppdatera', UPDATE_OF: '{0} Uppdatera',
REMOVED: 'Raderad', REMOVED_OF: '{0} Raderad',
DELETION: 'Radering', DELETION_OF: '{0} Radering',
OFFSET: 'Kompensering', OFFSET: 'Kompensering',
FACTOR: 'Faktor', FACTOR: 'Faktor',
FREQ: 'Frekvens', FREQ: 'Frekvens',
DUTY_CYCLE: 'Duty Cycle',
UNIT: 'UoM',
STARTVALUE: 'Startvärde', STARTVALUE: 'Startvärde',
WARN_GPIO: 'Varning: Var försiktig vid aktivering av GPIO!', WARN_GPIO: 'Varning: Var försiktig vid aktivering av GPIO!',
EDIT: 'Ändra', EDIT: 'Ändra',
@@ -69,7 +72,7 @@ const se: BaseTranslation = {
EMS_SCAN: 'Är du säker att du vill initiera en full genomsökning av EMS-bussen?', EMS_SCAN: 'Är du säker att du vill initiera en full genomsökning av EMS-bussen?',
EMS_BUS_STATUS: 'EMS-Buss Status', EMS_BUS_STATUS: 'EMS-Buss Status',
ACTIVE_DEVICES: 'Aktiva Enheter', ACTIVE_DEVICES: 'Aktiva Enheter',
DEVICE: 'Enhet', EMS_DEVICE: 'EMS Enhet',
SUCCESS: 'Lyckades', SUCCESS: 'Lyckades',
FAIL: 'Misslyckades', FAIL: 'Misslyckades',
QUALITY: 'Kvalitet', QUALITY: 'Kvalitet',
@@ -96,12 +99,14 @@ const se: BaseTranslation = {
APPLICATION_SETTINGS: 'Inställningar', APPLICATION_SETTINGS: 'Inställningar',
CUSTOMIZATION: 'Anpassa', CUSTOMIZATION: 'Anpassa',
APPLICATION_RESTARTING: 'EMS-ESP startar om', APPLICATION_RESTARTING: 'EMS-ESP startar om',
BOARD_PROFILE_TEXT: INTERFACE_BOARD_PROFILE: 'Interface Hårdvaruprofil',
'Välj en förkonfigurerad hårdvaruprofil från listan nedan eller välj Anpassad för att konfigurera dina egna hårdvaruinställningar', BOARD_PROFILE_TEXT: 'Välj en förkonfigurerad hårdvaruprofil från listan nedan eller välj Anpassad för att konfigurera dina egna hårdvaruinställningar',
BOARD_PROFILE: 'Hårdvaruprofil', BOARD_PROFILE: 'Hårdvaruprofil',
BUTTON: 'Knapp', BUTTON: 'Knapp',
TEMPERATURE: 'Temperatur', TEMPERATURE: 'Temperatur',
PHY_TYPE: 'Eth PHYType',
DISABLED: 'inaktiverad', DISABLED: 'inaktiverad',
TX_MODE: 'Tx Mode',
GENERAL_OPTIONS: 'Allmänna Inställningar', GENERAL_OPTIONS: 'Allmänna Inställningar',
LANGUAGE_ENTITIES: 'Språk (för entiteter)', LANGUAGE_ENTITIES: 'Språk (för entiteter)',
HIDE_LED: 'Inaktivera LED', HIDE_LED: 'Inaktivera LED',
@@ -124,12 +129,14 @@ const se: BaseTranslation = {
LOGGING: 'Loggning', LOGGING: 'Loggning',
LOG_HEX: 'Logga EMS-telegram i hexadecimal', LOG_HEX: 'Logga EMS-telegram i hexadecimal',
ENABLE_SYSLOG: 'Aktivera Syslog', ENABLE_SYSLOG: 'Aktivera Syslog',
LOG_LEVEL: 'Log Level',
MARK_INTERVAL: 'Markerings-interval', MARK_INTERVAL: 'Markerings-interval',
SECONDS: 'sekunder', SECONDS: 'sekunder',
MINUTES: 'minuter', MINUTES: 'minuter',
RESTART: 'Starta om',
HOURS: 'timmar', HOURS: 'timmar',
RESTART: 'Starta om',
RESTART_TEXT: 'EMS-ESP kräver en omstart för att applicera förändrade systeminställningar', RESTART_TEXT: 'EMS-ESP kräver en omstart för att applicera förändrade systeminställningar',
RESTART_CONFIRM: 'Är du säker på att du vill starta om EMS-ESP?',
COMMAND: 'Kommando', COMMAND: 'Kommando',
CUSTOMIZATIONS_RESTART: 'Alla anpassningr har raderats. Startar om...', CUSTOMIZATIONS_RESTART: 'Alla anpassningr har raderats. Startar om...',
CUSTOMIZATIONS_FULL: 'Antal valda enheter för högt. Vänligen spara i mindre antal åt gången.', CUSTOMIZATIONS_FULL: 'Antal valda enheter för högt. Vänligen spara i mindre antal åt gången.',
@@ -156,14 +163,15 @@ const se: BaseTranslation = {
HELP_INFORMATION_5: HELP_INFORMATION_5:
'EMS-ESP är gratis och är öppen källkod. Bidra till utveklingen genom att ge oss en stjärna på GitHub!', 'EMS-ESP är gratis och är öppen källkod. Bidra till utveklingen genom att ge oss en stjärna på GitHub!',
SUPPORT_INFO: 'Supportinfo', SUPPORT_INFO: 'Supportinfo',
UPLOAD_OF: '{0} Uppladdning',
UPLOAD: 'Uppladdning', UPLOAD: 'Uppladdning',
DOWNLOAD: 'Nedladdning', DOWNLOAD: 'Nedladdning',
ABORTED: 'Avbruten', ABORTED: 'Avbruten',
FAILED: 'Misslyckades', FAILED: 'Misslyckades',
SUCCESSFUL: 'Lyckades', SUCCESSFUL: 'Lyckades',
SYSTEM: 'System', SYSTEM: 'System',
LOG: 'Logg', LOG_OF: '{0} Logg',
STATUS: 'Status', STATUS_OF: '{0} Status',
UPLOAD_DOWNLOAD: 'Upp/Nedladdning', UPLOAD_DOWNLOAD: 'Upp/Nedladdning',
SYSTEM_VERSION_RUNNING: 'Du använder version', SYSTEM_VERSION_RUNNING: 'Du använder version',
SYSTEM_APPLY_FIRMWARE: 'för att aktivera ny firmware', SYSTEM_APPLY_FIRMWARE: 'för att aktivera ny firmware',
@@ -176,8 +184,9 @@ const se: BaseTranslation = {
THE_LATEST: 'Den senaste', THE_LATEST: 'Den senaste',
OFFICIAL: 'official', OFFICIAL: 'official',
DEVELOPMENT: 'development', DEVELOPMENT: 'development',
/**VERSION_IS: 'version is',*/ VERSION_IS: 'version is',
RELEASE_NOTES: 'release notes', RELEASE_NOTES: 'release notes',
EMS_ESP_VER: 'EMS-ESP Version',
PLATFORM: 'Enhet (Plattform / SDK)', PLATFORM: 'Enhet (Plattform / SDK)',
UPTIME: 'Systemets Uptid', UPTIME: 'Systemets Uptid',
CPU_FREQ: 'CPU-frekvens', CPU_FREQ: 'CPU-frekvens',
@@ -210,7 +219,7 @@ const se: BaseTranslation = {
SU_TEXT: SU_TEXT:
'SU-användarens (super user) lösenord används för att signera autensierings-tokens samt för att aktivera administratörsprivilegier i Console-läge', 'SU-användarens (super user) lösenord används för att signera autensierings-tokens samt för att aktivera administratörsprivilegier i Console-läge',
NOT_ENABLED: 'Ej aktiv', NOT_ENABLED: 'Ej aktiv',
ERRORS: 'fel', ERRORS_OF: '{0} fel',
DISCONNECT_REASON: 'Anledning till nedkoppling', DISCONNECT_REASON: 'Anledning till nedkoppling',
ENABLE_MQTT: 'Aktivera MQTT', ENABLE_MQTT: 'Aktivera MQTT',
OPTIONAL: 'Valfritt', OPTIONAL: 'Valfritt',
@@ -228,6 +237,7 @@ const se: BaseTranslation = {
MQTT_INT_THERMOSTATS: 'Termostater', MQTT_INT_THERMOSTATS: 'Termostater',
MQTT_INT_SOLAR: 'Solpaneler', MQTT_INT_SOLAR: 'Solpaneler',
MQTT_INT_MIXER: 'Blandarventiler', MQTT_INT_MIXER: 'Blandarventiler',
MQTT_QUEUE: 'MQTT Queue',
DEFAULT: 'Standard', DEFAULT: 'Standard',
MQTT_CLEAN_SESSION: 'Använd "Clean Session"-flaggan', MQTT_CLEAN_SESSION: 'Använd "Clean Session"-flaggan',
MQTT_RETAIN_FLAG: 'Använd "Always Retain"-flaggan', MQTT_RETAIN_FLAG: 'Använd "Always Retain"-flaggan',
@@ -239,6 +249,7 @@ const se: BaseTranslation = {
LOCAL_TIME: 'Lokal Tid', LOCAL_TIME: 'Lokal Tid',
UTC_TIME: 'UTC-tid', UTC_TIME: 'UTC-tid',
ENABLE_NTP: 'Aktivera NTP', ENABLE_NTP: 'Aktivera NTP',
NTP_SERVER: 'NTP Server',
TIME_ZONE: 'Tidszon', TIME_ZONE: 'Tidszon',
ACCESS_POINT: 'Accesspunkt', ACCESS_POINT: 'Accesspunkt',
AP_PROVIDE: 'Aktivera Accesspunkt', AP_PROVIDE: 'Aktivera Accesspunkt',
@@ -247,6 +258,9 @@ const se: BaseTranslation = {
AP_PROVIDE_TEXT_3: 'aldrig', AP_PROVIDE_TEXT_3: 'aldrig',
AP_PREFERRED_CHANNEL: 'Föredragen kanal', AP_PREFERRED_CHANNEL: 'Föredragen kanal',
AP_HIDE_SSID: 'Göm SSID', AP_HIDE_SSID: 'Göm SSID',
AP_CLIENTS: 'AP Clients',
AP_MAX_CLIENTS: 'Max Clients',
AP_LOCAL_IP: 'Local IP',
NETWORK_SCAN: 'Sök efter WiFi-nätverk', NETWORK_SCAN: 'Sök efter WiFi-nätverk',
IDLE: 'Vilande', IDLE: 'Vilande',
LOST: 'Förlorad', LOST: 'Förlorad',
@@ -255,12 +269,17 @@ const se: BaseTranslation = {
NETWORK_SCANNER: 'Hittade nätverk', NETWORK_SCANNER: 'Hittade nätverk',
NETWORK_NO_WIFI: 'Inga WiFi-nätverk hittades', NETWORK_NO_WIFI: 'Inga WiFi-nätverk hittades',
NETWORK_BLANK_SSID: 'lämna blankt för att inaktivera WiFi', NETWORK_BLANK_SSID: 'lämna blankt för att inaktivera WiFi',
POWER: 'Effekt', TX_POWER: 'Tx Effekt',
HOSTNAME: 'Hostname',
NETWORK_DISABLE_SLEEP: 'Inaktivera sömnläge', NETWORK_DISABLE_SLEEP: 'Inaktivera sömnläge',
NETWORK_LOW_BAND: 'Använd lägre bandbredd', NETWORK_LOW_BAND: 'Använd lägre bandbredd',
NETWORK_USE_DNS: 'Aktivera mDNS-tjänsten', NETWORK_USE_DNS: 'Aktivera mDNS-tjänsten',
NETWORK_ENABLE_IPV6: 'Aktivera IPv6-support', NETWORK_ENABLE_IPV6: 'Aktivera IPv6-support',
NETWORK_FIXED_IP: 'Använd statiskt IP', NETWORK_FIXED_IP: 'Använd statiskt IP',
NETWORK_GATEWAY: 'Getaway',
NETWORK_SUBNET: 'Subnet Mask',
NETWORK_DNS: 'DNS Servers',
ADDRESS_OF: '{0} Address',
ADMIN: 'Admin', ADMIN: 'Admin',
GUEST: 'Gäst', GUEST: 'Gäst',
NEW: 'Ny', NEW: 'Ny',

View File

@@ -332,7 +332,7 @@ const DashboardData: FC = () => {
{ accessor: (dv: any) => dv.id.slice(2), name: LL.ENTITY_NAME() }, { accessor: (dv: any) => dv.id.slice(2), name: LL.ENTITY_NAME() },
{ {
accessor: (dv: any) => (typeof dv.v === 'number' ? new Intl.NumberFormat().format(dv.v) : dv.v), accessor: (dv: any) => (typeof dv.v === 'number' ? new Intl.NumberFormat().format(dv.v) : dv.v),
name: LL.VALUE() name: LL.VALUE(0)
}, },
{ accessor: (dv: any) => DeviceValueUOM_s[dv.u], name: 'UoM' } { accessor: (dv: any) => DeviceValueUOM_s[dv.u], name: 'UoM' }
]; ];
@@ -559,11 +559,11 @@ const DashboardData: FC = () => {
offset: sensor.o offset: sensor.o
}); });
if (response.status === 204) { if (response.status === 204) {
enqueueSnackbar(LL.TEMP_SENSOR() + ' ' + LL.UPLOAD_TEXT() + ' ' + LL.FAILED(), { variant: 'error' }); enqueueSnackbar(LL.UPLOAD_OF( LL.TEMP_SENSOR() ) + ' ' + LL.FAILED(), { variant: 'error' });
} else if (response.status === 403) { } else if (response.status === 403) {
enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' }); enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' });
} else { } else {
enqueueSnackbar(LL.TEMP_SENSOR() + ' ' + LL.UPDATED(), { variant: 'success' }); enqueueSnackbar(LL.UPDATED_OF( LL.TEMP_SENSOR() ), { variant: 'success' });
} }
setSensor(undefined); setSensor(undefined);
} catch (error) { } catch (error) {
@@ -802,7 +802,7 @@ const DashboardData: FC = () => {
endIcon={getSortIcon(dv_sort.state, 'VALUE')} endIcon={getSortIcon(dv_sort.state, 'VALUE')}
onClick={() => dv_sort.fns.onToggleSort({ sortKey: 'VALUE' })} onClick={() => dv_sort.fns.onToggleSort({ sortKey: 'VALUE' })}
> >
{LL.VALUE()} {LL.VALUE(0)}
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell stiff /> <HeaderCell stiff />
@@ -878,7 +878,7 @@ const DashboardData: FC = () => {
endIcon={getSortIcon(sensor_sort.state, 'TEMPERATURE')} endIcon={getSortIcon(sensor_sort.state, 'TEMPERATURE')}
onClick={() => sensor_sort.fns.onToggleSort({ sortKey: 'TEMPERATURE' })} onClick={() => sensor_sort.fns.onToggleSort({ sortKey: 'TEMPERATURE' })}
> >
{LL.VALUE()} {LL.VALUE(0)}
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell stiff /> <HeaderCell stiff />
@@ -946,7 +946,7 @@ const DashboardData: FC = () => {
{LL.TYPE()} {LL.TYPE()}
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell stiff>{LL.VALUE()}</HeaderCell> <HeaderCell stiff>{LL.VALUE(0)}</HeaderCell>
<HeaderCell stiff /> <HeaderCell stiff />
</HeaderRow> </HeaderRow>
</Header> </Header>
@@ -986,11 +986,11 @@ const DashboardData: FC = () => {
}); });
if (response.status === 204) { if (response.status === 204) {
enqueueSnackbar(LL.ANALOG_SENSOR() + ' ' + LL.DELETION() + ' ' + LL.FAILED(), { variant: 'error' }); enqueueSnackbar(LL.DELETION_OF( LL.ANALOG_SENSOR() ) + ' ' + LL.FAILED(), { variant: 'error' });
} else if (response.status === 403) { } else if (response.status === 403) {
enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' }); enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' });
} else { } else {
enqueueSnackbar(LL.ANALOG_SENSOR() + ' ' + LL.REMOVED(), { variant: 'success' }); enqueueSnackbar( LL.REMOVED_OF( LL.ANALOG_SENSOR() ), { variant: 'success' });
} }
} catch (error) { } catch (error) {
enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' }); enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' });
@@ -1014,11 +1014,11 @@ const DashboardData: FC = () => {
}); });
if (response.status === 204) { if (response.status === 204) {
enqueueSnackbar(LL.ANALOG_SENSOR() + ' ' + LL.UPDATE() + ' ' + LL.FAILED(), { variant: 'error' }); enqueueSnackbar(LL.UPDATE_OF( LL.ANALOG_SENSOR() ) + ' ' + LL.FAILED(), { variant: 'error' });
} else if (response.status === 403) { } else if (response.status === 403) {
enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' }); enqueueSnackbar(LL.ACCESS_DENIED(), { variant: 'error' });
} else { } else {
enqueueSnackbar(LL.ANALOG_SENSOR() + ' ' + LL.UPDATED(), { variant: 'success' }); enqueueSnackbar(LL.UPDATED_OF( LL.ANALOG_SENSOR() ), { variant: 'success' });
} }
} catch (error) { } catch (error) {
enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' }); enqueueSnackbar(extractErrorMessage(error, LL.PROBLEM_UPDATING()), { variant: 'error' });
@@ -1077,7 +1077,7 @@ const DashboardData: FC = () => {
{analog.t >= AnalogType.COUNTER && analog.t <= AnalogType.RATE && ( {analog.t >= AnalogType.COUNTER && analog.t <= AnalogType.RATE && (
<> <>
<Grid item> <Grid item>
<ValidatedTextField name="u" label="UoM" value={analog.u} select onChange={updateValue(setAnalog)}> <ValidatedTextField name="u" label={LL.UNIT()} value={analog.u} select onChange={updateValue(setAnalog)}>
{DeviceValueUOM_s.map((val, i) => ( {DeviceValueUOM_s.map((val, i) => (
<MenuItem key={i} value={i}> <MenuItem key={i} value={i}>
{val} {val}
@@ -1135,7 +1135,7 @@ const DashboardData: FC = () => {
<Grid item> <Grid item>
<ValidatedTextField <ValidatedTextField
name="o" name="o"
label={LL.VALUE()} label={LL.VALUE(0)}
value={numberValue(analog.o)} value={numberValue(analog.o)}
sx={{ width: '20ch' }} sx={{ width: '20ch' }}
type="number" type="number"
@@ -1151,7 +1151,7 @@ const DashboardData: FC = () => {
<Grid item> <Grid item>
<ValidatedTextField <ValidatedTextField
name="o" name="o"
label={LL.VALUE()} label={LL.VALUE(0)}
value={numberValue(analog.o)} value={numberValue(analog.o)}
sx={{ width: '20ch' }} sx={{ width: '20ch' }}
type="number" type="number"
@@ -1182,7 +1182,7 @@ const DashboardData: FC = () => {
<Grid item> <Grid item>
<ValidatedTextField <ValidatedTextField
name="o" name="o"
label="Duty Cycle" label={LL.DUTY_CYCLE()}
value={numberValue(analog.o)} value={numberValue(analog.o)}
sx={{ width: '20ch' }} sx={{ width: '20ch' }}
type="number" type="number"

View File

@@ -88,7 +88,7 @@ const DashboardStatus: FC = () => {
const busStatus = ({ status }: Status) => { const busStatus = ({ status }: Status) => {
switch (status) { switch (status) {
case busConnectionStatus.BUS_STATUS_CONNECTED: case busConnectionStatus.BUS_STATUS_CONNECTED:
return LL.CONNECTED(); return LL.CONNECTED(0);
case busConnectionStatus.BUS_STATUS_TX_ERRORS: case busConnectionStatus.BUS_STATUS_TX_ERRORS:
return LL.TX_ISSUES(); return LL.TX_ISSUES();
case busConnectionStatus.BUS_STATUS_OFFLINE: case busConnectionStatus.BUS_STATUS_OFFLINE:
@@ -158,7 +158,7 @@ const DashboardStatus: FC = () => {
const formatDurationSec = (duration_sec: number) => { const formatDurationSec = (duration_sec: number) => {
const { days, hours, minutes, seconds } = parseMilliseconds(duration_sec * 1000); const { days, hours, minutes, seconds } = parseMilliseconds(duration_sec * 1000);
let formatted = ' '; let formatted = '';
if (days) { if (days) {
formatted += LL.NUM_DAYS({ num: days }) + ' '; formatted += LL.NUM_DAYS({ num: days }) + ' ';
} }
@@ -201,7 +201,7 @@ const DashboardStatus: FC = () => {
<DirectionsBusIcon /> <DirectionsBusIcon />
</Avatar> </Avatar>
</ListItemAvatar> </ListItemAvatar>
<ListItemText primary={LL.EMS_BUS_STATUS()} secondary={busStatus(data) + formatDurationSec(data.uptime)} /> <ListItemText primary={LL.EMS_BUS_STATUS()} secondary={busStatus(data) + ' (' + formatDurationSec(data.uptime) + ')'} />
</ListItem> </ListItem>
<ListItem> <ListItem>
<ListItemAvatar> <ListItemAvatar>

View File

@@ -13,12 +13,12 @@ const Help: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
const { routerTab } = useRouterTab(); const { routerTab } = useRouterTab();
useLayoutTitle(LL.HELP()); useLayoutTitle(LL.HELP_OF(""));
return ( return (
<> <>
<RouterTabs value={routerTab}> <RouterTabs value={routerTab}>
<Tab value="information" label={'EMS-ESP ' + LL.HELP()} /> <Tab value="information" label={LL.HELP_OF("EMS-ESP")} />
</RouterTabs> </RouterTabs>
<Routes> <Routes>
<Route path="information" element={<HelpInformation />} /> <Route path="information" element={<HelpInformation />} />

View File

@@ -22,11 +22,11 @@ const ProjectMenu: FC = () => {
<LayoutMenuItem icon={DashboardIcon} label={LL.DASHBOARD()} to={`/${PROJECT_PATH}/dashboard`} /> <LayoutMenuItem icon={DashboardIcon} label={LL.DASHBOARD()} to={`/${PROJECT_PATH}/dashboard`} />
<LayoutMenuItem <LayoutMenuItem
icon={TuneIcon} icon={TuneIcon}
label={LL.SETTINGS()} label={LL.SETTINGS_OF("")}
to={`/${PROJECT_PATH}/settings`} to={`/${PROJECT_PATH}/settings`}
disabled={!authenticatedContext.me.admin} disabled={!authenticatedContext.me.admin}
/> />
<LayoutMenuItem icon={InfoIcon} label={LL.HELP()} to={`/${PROJECT_PATH}/help`} /> <LayoutMenuItem icon={InfoIcon} label={LL.HELP_OF("")} to={`/${PROJECT_PATH}/help`} />
</List> </List>
); );
}; };

View File

@@ -14,7 +14,7 @@ const Settings: FC = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
const { routerTab } = useRouterTab(); const { routerTab } = useRouterTab();
useLayoutTitle(LL.SETTINGS()); useLayoutTitle(LL.SETTINGS_OF(""));
return ( return (
<> <>

View File

@@ -115,7 +115,7 @@ const SettingsApplication: FC = () => {
return ( return (
<> <>
<Typography sx={{ pt: 2 }} variant="h6" color="primary"> <Typography sx={{ pt: 2 }} variant="h6" color="primary">
Interface {LL.BOARD_PROFILE()} {LL.INTERFACE_BOARD_PROFILE()}
</Typography> </Typography>
<Box color="warning.main"> <Box color="warning.main">
<Typography variant="body2">{LL.BOARD_PROFILE_TEXT()}</Typography> <Typography variant="body2">{LL.BOARD_PROFILE_TEXT()}</Typography>
@@ -213,7 +213,7 @@ const SettingsApplication: FC = () => {
<Grid item xs={4}> <Grid item xs={4}>
<ValidatedTextField <ValidatedTextField
name="phy_type" name="phy_type"
label="Eth PHY Type" label={LL.PHY_TYPE()}
disabled={saving} disabled={saving}
value={data.phy_type} value={data.phy_type}
fullWidth fullWidth
@@ -245,7 +245,7 @@ const SettingsApplication: FC = () => {
<Grid item> <Grid item>
<ValidatedTextField <ValidatedTextField
name="eth_phy_addr" name="eth_phy_addr"
label="Eth I²C-address" label="Eth I²C Address"
fullWidth fullWidth
variant="outlined" variant="outlined"
value={numberValue(data.eth_phy_addr)} value={numberValue(data.eth_phy_addr)}
@@ -258,7 +258,7 @@ const SettingsApplication: FC = () => {
<Grid item> <Grid item>
<ValidatedTextField <ValidatedTextField
name="eth_clock_mode" name="eth_clock_mode"
label="Eth Clock Mode" label="Eth Clk Mode"
disabled={saving} disabled={saving}
value={data.eth_clock_mode} value={data.eth_clock_mode}
fullWidth fullWidth
@@ -278,13 +278,13 @@ const SettingsApplication: FC = () => {
</> </>
)} )}
<Typography variant="h6" color="primary"> <Typography variant="h6" color="primary">
EMS Bus {LL.SETTINGS()} {LL.SETTINGS_OF("EMS BUS")}
</Typography> </Typography>
<Grid container spacing={1} direction="row" justifyContent="flex-start" alignItems="flex-start"> <Grid container spacing={1} direction="row" justifyContent="flex-start" alignItems="flex-start">
<Grid item xs={6}> <Grid item xs={6}>
<ValidatedTextField <ValidatedTextField
name="tx_mode" name="tx_mode"
label="Tx Mode" label={LL.TX_MODE()}
disabled={saving} disabled={saving}
value={data.tx_mode} value={data.tx_mode}
fullWidth fullWidth
@@ -483,7 +483,7 @@ const SettingsApplication: FC = () => {
margin="normal" margin="normal"
select select
> >
<MenuItem value={1}>{LL.VALUE()}</MenuItem> <MenuItem value={1}>{LL.VALUE(1)}</MenuItem>
<MenuItem value={2}>{LL.INDEX()}</MenuItem> <MenuItem value={2}>{LL.INDEX()}</MenuItem>
</ValidatedTextField> </ValidatedTextField>
</Grid> </Grid>
@@ -551,7 +551,7 @@ const SettingsApplication: FC = () => {
<Grid item xs={4}> <Grid item xs={4}>
<ValidatedTextField <ValidatedTextField
name="syslog_level" name="syslog_level"
label="Log Level" label={LL.LOG_LEVEL()}
value={data.syslog_level} value={data.syslog_level}
fullWidth fullWidth
variant="outlined" variant="outlined"

View File

@@ -296,7 +296,7 @@ const SettingsCustomization: FC = () => {
</Box> </Box>
<ValidatedTextField <ValidatedTextField
name="device" name="device"
label={'EMS ' + LL.DEVICE()} label={LL.EMS_DEVICE()}
variant="outlined" variant="outlined"
fullWidth fullWidth
value={selectedDevice} value={selectedDevice}
@@ -449,7 +449,7 @@ const SettingsCustomization: FC = () => {
{LL.NAME()} {LL.NAME()}
</Button> </Button>
</HeaderCell> </HeaderCell>
<HeaderCell resize>{LL.VALUE()}</HeaderCell> <HeaderCell resize>{LL.VALUE(0)}</HeaderCell>
</HeaderRow> </HeaderRow>
</Header> </Header>
<Body> <Body>
@@ -513,7 +513,7 @@ const SettingsCustomization: FC = () => {
const renderResetDialog = () => ( const renderResetDialog = () => (
<Dialog open={confirmReset} onClose={() => setConfirmReset(false)}> <Dialog open={confirmReset} onClose={() => setConfirmReset(false)}>
<DialogTitle>{LL.RESET()}</DialogTitle> <DialogTitle>{LL.RESET(1)}</DialogTitle>
<DialogContent dividers>{LL.CUSTOMIZATIONS_RESET()}</DialogContent> <DialogContent dividers>{LL.CUSTOMIZATIONS_RESET()}</DialogContent>
<DialogActions> <DialogActions>
<Button startIcon={<CancelIcon />} variant="outlined" onClick={() => setConfirmReset(false)} color="secondary"> <Button startIcon={<CancelIcon />} variant="outlined" onClick={() => setConfirmReset(false)} color="secondary">
@@ -526,7 +526,7 @@ const SettingsCustomization: FC = () => {
autoFocus autoFocus
color="error" color="error"
> >
{LL.RESET()} {LL.RESET(0)}
</Button> </Button>
</DialogActions> </DialogActions>
</Dialog> </Dialog>
@@ -555,7 +555,7 @@ const SettingsCustomization: FC = () => {
color="error" color="error"
onClick={() => setConfirmReset(true)} onClick={() => setConfirmReset(true)}
> >
{LL.RESET()} {LL.RESET(0)}
</Button> </Button>
</ButtonRow> </ButtonRow>
</Box> </Box>

View File

@@ -47,7 +47,7 @@ export const useRest = <D>({ read, update }: RestRequestOptions<D>) => {
if (response.status === 202) { if (response.status === 202) {
setRestartNeeded(true); setRestartNeeded(true);
} else { } else {
enqueueSnackbar(LL.SETTINGS() + ' ' + LL.SAVED(), { variant: 'success' }); enqueueSnackbar(LL.SETTINGS_OF("") + ' ' + LL.SAVED(), { variant: 'success' });
} }
} catch (error) { } catch (error) {
const message = extractErrorMessage(error, LL.PROBLEM_UPDATING()); const message = extractErrorMessage(error, LL.PROBLEM_UPDATING());