aboutsummaryrefslogtreecommitdiff
path: root/modern
diff options
context:
space:
mode:
Diffstat (limited to 'modern')
-rw-r--r--modern/.eslintrc.js28
-rw-r--r--modern/.eslintrc.json37
-rw-r--r--modern/package-lock.json12
-rw-r--r--modern/package.json7
-rw-r--r--modern/src/Navigation.jsx4
-rw-r--r--modern/src/UpdateController.jsx22
-rw-r--r--modern/src/common/attributes/useCommonUserAttributes.js4
-rw-r--r--modern/src/common/components/LocalizationProvider.jsx2
-rw-r--r--modern/src/common/components/StatusCard.jsx32
-rw-r--r--modern/src/common/util/formatter.js2
-rw-r--r--modern/src/common/util/useFeatures.js6
-rw-r--r--modern/src/login/LoginPage.jsx2
-rw-r--r--modern/src/main/DeviceRow.jsx6
-rw-r--r--modern/src/other/PositionPage.jsx1
-rw-r--r--modern/src/reports/EventReportPage.jsx4
-rw-r--r--modern/src/reports/LogsPage.jsx4
-rw-r--r--modern/src/reports/StopReportPage.jsx6
-rw-r--r--modern/src/reports/SummaryReportPage.jsx4
-rw-r--r--modern/src/reports/TripReportPage.jsx4
-rw-r--r--modern/src/resources/l10n/af.json5
-rw-r--r--modern/src/resources/l10n/ar.json5
-rw-r--r--modern/src/resources/l10n/az.json5
-rw-r--r--modern/src/resources/l10n/bg.json5
-rw-r--r--modern/src/resources/l10n/bn.json5
-rw-r--r--modern/src/resources/l10n/ca.json5
-rw-r--r--modern/src/resources/l10n/cs.json5
-rw-r--r--modern/src/resources/l10n/da.json5
-rw-r--r--modern/src/resources/l10n/de.json5
-rw-r--r--modern/src/resources/l10n/el.json5
-rw-r--r--modern/src/resources/l10n/en.json5
-rw-r--r--modern/src/resources/l10n/es.json5
-rw-r--r--modern/src/resources/l10n/fa.json5
-rw-r--r--modern/src/resources/l10n/fi.json5
-rw-r--r--modern/src/resources/l10n/fr.json5
-rw-r--r--modern/src/resources/l10n/gl.json5
-rw-r--r--modern/src/resources/l10n/he.json5
-rw-r--r--modern/src/resources/l10n/hi.json5
-rw-r--r--modern/src/resources/l10n/hr.json5
-rw-r--r--modern/src/resources/l10n/hu.json5
-rw-r--r--modern/src/resources/l10n/id.json5
-rw-r--r--modern/src/resources/l10n/it.json5
-rw-r--r--modern/src/resources/l10n/ja.json5
-rw-r--r--modern/src/resources/l10n/ka.json5
-rw-r--r--modern/src/resources/l10n/kk.json5
-rw-r--r--modern/src/resources/l10n/km.json5
-rw-r--r--modern/src/resources/l10n/ko.json5
-rw-r--r--modern/src/resources/l10n/lo.json5
-rw-r--r--modern/src/resources/l10n/lt.json29
-rw-r--r--modern/src/resources/l10n/lv.json5
-rw-r--r--modern/src/resources/l10n/mk.json596
-rw-r--r--modern/src/resources/l10n/ml.json5
-rw-r--r--modern/src/resources/l10n/mn.json5
-rw-r--r--modern/src/resources/l10n/ms.json5
-rw-r--r--modern/src/resources/l10n/nb.json5
-rw-r--r--modern/src/resources/l10n/ne.json5
-rw-r--r--modern/src/resources/l10n/nl.json5
-rw-r--r--modern/src/resources/l10n/nn.json5
-rw-r--r--modern/src/resources/l10n/pl.json5
-rw-r--r--modern/src/resources/l10n/pt.json5
-rw-r--r--modern/src/resources/l10n/pt_BR.json5
-rw-r--r--modern/src/resources/l10n/ro.json5
-rw-r--r--modern/src/resources/l10n/ru.json5
-rw-r--r--modern/src/resources/l10n/si.json5
-rw-r--r--modern/src/resources/l10n/sk.json5
-rw-r--r--modern/src/resources/l10n/sl.json5
-rw-r--r--modern/src/resources/l10n/sq.json5
-rw-r--r--modern/src/resources/l10n/sr.json5
-rw-r--r--modern/src/resources/l10n/sv.json5
-rw-r--r--modern/src/resources/l10n/ta.json5
-rw-r--r--modern/src/resources/l10n/th.json5
-rw-r--r--modern/src/resources/l10n/tr.json5
-rw-r--r--modern/src/resources/l10n/uk.json5
-rw-r--r--modern/src/resources/l10n/uz.json5
-rw-r--r--modern/src/resources/l10n/vi.json5
-rw-r--r--modern/src/resources/l10n/zh.json5
-rw-r--r--modern/src/resources/l10n/zh_TW.json5
-rw-r--r--modern/src/settings/AccumulatorsPage.jsx25
-rw-r--r--modern/src/settings/AnnouncementPage.jsx106
-rw-r--r--modern/src/settings/CalendarPage.jsx13
-rw-r--r--modern/src/settings/CommandDevicePage.jsx25
-rw-r--r--modern/src/settings/CommandGroupPage.jsx25
-rw-r--r--modern/src/settings/CommandPage.jsx13
-rw-r--r--modern/src/settings/ComputedAttributePage.jsx13
-rw-r--r--modern/src/settings/DeviceConnectionsPage.jsx17
-rw-r--r--modern/src/settings/DevicePage.jsx13
-rw-r--r--modern/src/settings/DevicesPage.jsx13
-rw-r--r--modern/src/settings/DriverPage.jsx13
-rw-r--r--modern/src/settings/GeofencePage.jsx13
-rw-r--r--modern/src/settings/GroupConnectionsPage.jsx17
-rw-r--r--modern/src/settings/GroupPage.jsx13
-rw-r--r--modern/src/settings/MaintenancePage.jsx15
-rw-r--r--modern/src/settings/NotificationPage.jsx13
-rw-r--r--modern/src/settings/PreferencesPage.jsx31
-rw-r--r--modern/src/settings/ServerPage.jsx25
-rw-r--r--modern/src/settings/SharePage.jsx109
-rw-r--r--modern/src/settings/UserConnectionsPage.jsx18
-rw-r--r--modern/src/settings/UserPage.jsx15
-rw-r--r--modern/src/settings/UsersPage.jsx22
-rw-r--r--modern/src/settings/common/useSettingsStyles.js22
-rw-r--r--modern/src/settings/components/EditAttributesAccordion.jsx16
-rw-r--r--modern/src/settings/components/EditItemView.jsx23
-rw-r--r--modern/src/settings/components/SettingsMenu.jsx21
102 files changed, 1193 insertions, 543 deletions
diff --git a/modern/.eslintrc.js b/modern/.eslintrc.js
deleted file mode 100644
index 20e3f4fb..00000000
--- a/modern/.eslintrc.js
+++ /dev/null
@@ -1,28 +0,0 @@
-module.exports = {
- extends: 'airbnb',
- parserOptions: {
- ecmaVersion: 2020,
- },
- plugins: [
- 'react',
- ],
- ignorePatterns: ['build/', 'switcher.js', 'theme.js'],
- rules: {
- 'max-len': [0],
- 'no-shadow': [0],
- 'no-return-assign': [0],
- 'no-param-reassign': [0],
- 'no-prototype-builtins': [0],
- 'object-curly-newline': [1, {
- ObjectExpression: { minProperties: 8, multiline: true, consistent: true },
- ObjectPattern: { minProperties: 8, multiline: true, consistent: true },
- ImportDeclaration: { minProperties: 4, multiline: true, consistent: true },
- ExportDeclaration: { minProperties: 4, multiline: true, consistent: true },
- }],
- 'react/function-component-definition': [1, {
- namedComponents: 'arrow-function',
- unnamedComponents: 'arrow-function',
- }],
- 'react/prop-types': [0],
- },
-};
diff --git a/modern/.eslintrc.json b/modern/.eslintrc.json
new file mode 100644
index 00000000..6a60e087
--- /dev/null
+++ b/modern/.eslintrc.json
@@ -0,0 +1,37 @@
+{
+ "extends": "airbnb",
+ "parserOptions": {
+ "ecmaVersion": 2020
+ },
+ "overrides": [{
+ "files": ["*.jsx", "*.js"]
+ }],
+ "plugins": [
+ "react"
+ ],
+ "ignorePatterns": ["build/", "switcher.js", "theme.js"],
+ "rules": {
+ "max-len": [0],
+ "no-shadow": [0],
+ "no-return-assign": [0],
+ "no-param-reassign": [0],
+ "no-prototype-builtins": [0],
+ "object-curly-newline": [1, {
+ "ObjectExpression": { "minProperties": 8, "multiline": true, "consistent": true },
+ "ObjectPattern": { "minProperties": 8, "multiline": true, "consistent": true },
+ "ImportDeclaration": { "minProperties": 4, "multiline": true, "consistent": true },
+ "ExportDeclaration": { "minProperties": 4, "multiline": true, "consistent": true }
+ }],
+ "import/no-unresolved": [1, {
+ "ignore": ["\\.svg", "virtual:"]
+ }],
+ "react/function-component-definition": [1, {
+ "namedComponents": "arrow-function",
+ "unnamedComponents": "arrow-function"
+ }],
+ "react/jsx-props-no-spreading": [0],
+ "jsx-a11y/anchor-is-valid": [0],
+ "jsx-a11y/label-has-associated-control": [0],
+ "react/prop-types": [0]
+ }
+}
diff --git a/modern/package-lock.json b/modern/package-lock.json
index 172ba661..e9a5540b 100644
--- a/modern/package-lock.json
+++ b/modern/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "traccar",
- "version": "5.11.0",
+ "version": "5.12.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "traccar",
- "version": "5.11.0",
+ "version": "5.12.0",
"dependencies": {
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
@@ -37,7 +37,7 @@
"react-window": "^1.8.10",
"recharts": "^2.10.4",
"redux": "^5.0.1",
- "vite": "^5.0.11",
+ "vite": "^5.0.12",
"vite-plugin-pwa": "^0.17.4",
"vite-plugin-svgr": "^4.2.0",
"wellknown": "^0.5.0"
@@ -11131,9 +11131,9 @@
}
},
"node_modules/vite": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz",
- "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==",
+ "version": "5.0.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz",
+ "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==",
"dependencies": {
"esbuild": "^0.19.3",
"postcss": "^8.4.32",
diff --git a/modern/package.json b/modern/package.json
index c8baba94..0a325835 100644
--- a/modern/package.json
+++ b/modern/package.json
@@ -1,6 +1,7 @@
{
"name": "traccar",
- "version": "5.11.0",
+ "version": "5.12.0",
+ "type": "module",
"private": true,
"dependencies": {
"@emotion/react": "^11.11.3",
@@ -32,7 +33,7 @@
"react-window": "^1.8.10",
"recharts": "^2.10.4",
"redux": "^5.0.1",
- "vite": "^5.0.11",
+ "vite": "^5.0.12",
"vite-plugin-pwa": "^0.17.4",
"vite-plugin-svgr": "^4.2.0",
"wellknown": "^0.5.0"
@@ -42,7 +43,7 @@
"build": "vite build",
"generate-pwa-assets": "pwa-assets-generator --preset minimal public/logo.svg",
"lint": "eslint .",
- "lint:fix": "eslint --fix --ext .js ."
+ "lint:fix": "eslint --fix ."
},
"browserslist": {
"production": [
diff --git a/modern/src/Navigation.jsx b/modern/src/Navigation.jsx
index 731eeb62..37a6ddb5 100644
--- a/modern/src/Navigation.jsx
+++ b/modern/src/Navigation.jsx
@@ -55,6 +55,8 @@ import DeviceConnectionsPage from './settings/DeviceConnectionsPage';
import GroupConnectionsPage from './settings/GroupConnectionsPage';
import UserConnectionsPage from './settings/UserConnectionsPage';
import LogsPage from './reports/LogsPage';
+import SharePage from './settings/SharePage';
+import AnnouncementPage from './settings/AnnouncementPage';
const Navigation = () => {
const navigate = useNavigate();
@@ -110,6 +112,7 @@ const Navigation = () => {
<Route path="settings">
<Route path="accumulators/:deviceId" element={<AccumulatorsPage />} />
+ <Route path="announcement" element={<AnnouncementPage />} />
<Route path="calendars" element={<CalendarsPage />} />
<Route path="calendar/:id" element={<CalendarPage />} />
<Route path="calendar" element={<CalendarPage />} />
@@ -122,6 +125,7 @@ const Navigation = () => {
<Route path="devices" element={<DevicesPage />} />
<Route path="device/:id/connections" element={<DeviceConnectionsPage />} />
<Route path="device/:id/command" element={<CommandDevicePage />} />
+ <Route path="device/:id/share" element={<SharePage />} />
<Route path="device/:id" element={<DevicePage />} />
<Route path="device" element={<DevicePage />} />
<Route path="drivers" element={<DriversPage />} />
diff --git a/modern/src/UpdateController.jsx b/modern/src/UpdateController.jsx
index 0b2b7985..80ca6dc2 100644
--- a/modern/src/UpdateController.jsx
+++ b/modern/src/UpdateController.jsx
@@ -1,12 +1,12 @@
import { Snackbar, IconButton } from '@mui/material';
import RefreshIcon from '@mui/icons-material/Refresh';
-import React from 'react'
+import React from 'react';
import { useSelector } from 'react-redux';
+import { useRegisterSW } from 'virtual:pwa-register/react';
import { useTranslation } from './common/components/LocalizationProvider';
-import { useRegisterSW } from 'virtual:pwa-register/react'
// Based on https://vite-pwa-org.netlify.app/frameworks/react.html
-function UpdateController() {
+const UpdateController = () => {
const t = useTranslation();
const swUpdateInterval = useSelector((state) => state.session.server.attributes.serviceWorkerUpdateInterval || 3600000);
@@ -21,30 +21,30 @@ function UpdateController() {
if (!(!swRegistration.installing && navigator)) {
return;
}
-
+
if (('connection' in navigator) && !navigator.onLine) {
return;
}
-
+
const newSW = await fetch(swUrl, {
cache: 'no-store',
headers: {
- 'cache': 'no-store',
+ cache: 'no-store',
'cache-control': 'no-cache',
},
});
-
+
if (newSW?.status === 200) {
await swRegistration.update();
}
}, swUpdateInterval);
}
- }
+ },
});
return (
- <Snackbar
- open={needRefresh}
+ <Snackbar
+ open={needRefresh}
message={t('settingsUpdateAvailable')}
action={(
<IconButton color="inherit" onClick={() => updateServiceWorker(true)}>
@@ -53,6 +53,6 @@ function UpdateController() {
)}
/>
);
-}
+};
export default UpdateController;
diff --git a/modern/src/common/attributes/useCommonUserAttributes.js b/modern/src/common/attributes/useCommonUserAttributes.js
index bd88d1e8..1f811e56 100644
--- a/modern/src/common/attributes/useCommonUserAttributes.js
+++ b/modern/src/common/attributes/useCommonUserAttributes.js
@@ -93,8 +93,8 @@ export default (t) => useMemo(() => ({
name: t('attributeUiDisableEvents'),
type: 'boolean',
},
- 'ui.disableVehicleFetures': {
- name: t('attributeUiDisableVehicleFetures'),
+ 'ui.disableVehicleFeatures': {
+ name: t('attributeUiDisableVehicleFeatures'),
type: 'boolean',
},
'ui.disableDrivers': {
diff --git a/modern/src/common/components/LocalizationProvider.jsx b/modern/src/common/components/LocalizationProvider.jsx
index d48b12ce..4104c773 100644
--- a/modern/src/common/components/LocalizationProvider.jsx
+++ b/modern/src/common/components/LocalizationProvider.jsx
@@ -35,6 +35,7 @@ import ko from '../../resources/l10n/ko.json'; import 'dayjs/locale/ko';
import lo from '../../resources/l10n/lo.json'; import 'dayjs/locale/lo';
import lt from '../../resources/l10n/lt.json'; import 'dayjs/locale/lt';
import lv from '../../resources/l10n/lv.json'; import 'dayjs/locale/lv';
+import mk from '../../resources/l10n/mk.json'; import 'dayjs/locale/mk';
import ml from '../../resources/l10n/ml.json'; import 'dayjs/locale/ml';
import mn from '../../resources/l10n/mn.json'; import 'dayjs/locale/mn';
import ms from '../../resources/l10n/ms.json'; import 'dayjs/locale/ms';
@@ -93,6 +94,7 @@ const languages = {
lo: { data: lo, country: 'LA', name: 'ລາວ' },
lt: { data: lt, country: 'LT', name: 'Lietuvių' },
lv: { data: lv, country: 'LV', name: 'Latviešu' },
+ mk: { data: mk, country: 'MK', name: 'Mакедонски' },
ml: { data: ml, country: 'IN', name: 'മലയാളം' },
mn: { data: mn, country: 'MN', name: 'Монгол хэл' },
ms: { data: ms, country: 'MY', name: 'بهاس ملايو' },
diff --git a/modern/src/common/components/StatusCard.jsx b/modern/src/common/components/StatusCard.jsx
index 53048645..a63d0f80 100644
--- a/modern/src/common/components/StatusCard.jsx
+++ b/modern/src/common/components/StatusCard.jsx
@@ -1,7 +1,6 @@
import React, { useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom';
-import dayjs from 'dayjs';
import Draggable from 'react-draggable';
import {
Card,
@@ -16,11 +15,6 @@ import {
Menu,
MenuItem,
CardMedia,
- Dialog,
- TextField,
- DialogActions,
- DialogContent,
- Button,
} from '@mui/material';
import makeStyles from '@mui/styles/makeStyles';
import CloseIcon from '@mui/icons-material/Close';
@@ -138,7 +132,6 @@ const StatusCard = ({ deviceId, position, onClose, disableActions, desktopPaddin
const [anchorEl, setAnchorEl] = useState(null);
const [removing, setRemoving] = useState(false);
- const [shared, setShared] = useState(null);
const handleRemove = useCatch(async (removed) => {
if (removed) {
@@ -178,20 +171,6 @@ const StatusCard = ({ deviceId, position, onClose, disableActions, desktopPaddin
}
}, [navigate, position]);
- const handleShare = useCatchCallback(async () => {
- const expiration = dayjs().add(1, 'week').toISOString();
- const response = await fetch('/api/devices/share', {
- method: 'POST',
- body: new URLSearchParams(`deviceId=${deviceId}&expiration=${expiration}`),
- });
- if (response.ok) {
- const token = await response.text();
- setShared(`${window.location.origin}?token=${token}`);
- } else {
- throw Error(await response.text());
- }
- }, [deviceId, setShared]);
-
return (
<>
<div className={classes.root}>
@@ -293,7 +272,7 @@ const StatusCard = ({ deviceId, position, onClose, disableActions, desktopPaddin
<MenuItem component="a" target="_blank" href={`https://www.google.com/maps/search/?api=1&query=${position.latitude}%2C${position.longitude}`}>{t('linkGoogleMaps')}</MenuItem>
<MenuItem component="a" target="_blank" href={`http://maps.apple.com/?ll=${position.latitude},${position.longitude}`}>{t('linkAppleMaps')}</MenuItem>
<MenuItem component="a" target="_blank" href={`https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${position.latitude}%2C${position.longitude}&heading=${position.course}`}>{t('linkStreetView')}</MenuItem>
- {!shareDisabled && !user.temporary && <MenuItem onClick={handleShare}>{t('deviceShare')}</MenuItem>}
+ {!shareDisabled && !user.temporary && <MenuItem onClick={() => navigate(`/settings/device/${deviceId}/share`)}>{t('deviceShare')}</MenuItem>}
</Menu>
)}
<RemoveDialog
@@ -302,15 +281,6 @@ const StatusCard = ({ deviceId, position, onClose, disableActions, desktopPaddin
itemId={deviceId}
onResult={(removed) => handleRemove(removed)}
/>
- <Dialog open={Boolean(shared)} onClose={() => setShared(null)}>
- <DialogContent>
- <TextField value={shared} onFocus={e => e.target.select()} />
- </DialogContent>
- <DialogActions>
- <Button onClick={() => setShared(null)}>{t('sharedCancel')}</Button>
- <Button onClick={() => navigator.clipboard?.writeText(shared)}>{t('sharedCopy')}</Button>
- </DialogActions>
- </Dialog>
</>
);
};
diff --git a/modern/src/common/util/formatter.js b/modern/src/common/util/formatter.js
index aeacc145..7b7fc96d 100644
--- a/modern/src/common/util/formatter.js
+++ b/modern/src/common/util/formatter.js
@@ -66,8 +66,6 @@ export const formatSpeed = (value, unit, t) => `${speedFromKnots(value, unit).to
export const formatVolume = (value, unit, t) => `${volumeFromLiters(value, unit).toFixed(2)} ${volumeUnitString(unit, t)}`;
-export const formatHours = (value) => dayjs.duration(value).humanize();
-
export const formatNumericHours = (value, t) => {
const hours = Math.floor(value / 3600000);
const minutes = Math.floor((value % 3600000) / 60000);
diff --git a/modern/src/common/util/useFeatures.js b/modern/src/common/util/useFeatures.js
index 08499e54..cafb2c7c 100644
--- a/modern/src/common/util/useFeatures.js
+++ b/modern/src/common/util/useFeatures.js
@@ -19,9 +19,9 @@ const featureSelector = createSelector(
(state) => state.session.user,
(server, user) => {
const disableAttributes = get(server, user, 'ui.disableAttributes');
- const disableVehicleFetures = get(server, user, 'ui.disableVehicleFetures');
- const disableDrivers = disableVehicleFetures || get(server, user, 'ui.disableDrivers');
- const disableMaintenance = disableVehicleFetures || get(server, user, 'ui.disableMaintenance');
+ const disableVehicleFeatures = get(server, user, 'ui.disableVehicleFeatures');
+ const disableDrivers = disableVehicleFeatures || get(server, user, 'ui.disableDrivers');
+ const disableMaintenance = disableVehicleFeatures || get(server, user, 'ui.disableMaintenance');
const disableGroups = get(server, user, 'ui.disableGroups');
const disableEvents = get(server, user, 'ui.disableEvents');
const disableComputedAttributes = get(server, user, 'ui.disableComputedAttributes');
diff --git a/modern/src/login/LoginPage.jsx b/modern/src/login/LoginPage.jsx
index 6cca2837..62aa4a6b 100644
--- a/modern/src/login/LoginPage.jsx
+++ b/modern/src/login/LoginPage.jsx
@@ -96,7 +96,7 @@ const LoginPage = () => {
const query = `email=${encodeURIComponent(email)}&password=${encodeURIComponent(password)}`;
const response = await fetch('/api/session', {
method: 'POST',
- body: new URLSearchParams(code.length ? query + `&code=${code}` : query),
+ body: new URLSearchParams(code.length ? `${query}&code=${code}` : query),
});
if (response.ok) {
const user = await response.json();
diff --git a/modern/src/main/DeviceRow.jsx b/modern/src/main/DeviceRow.jsx
index 8d40e139..d9c1a189 100644
--- a/modern/src/main/DeviceRow.jsx
+++ b/modern/src/main/DeviceRow.jsx
@@ -119,15 +119,15 @@ const DeviceRow = ({ data, index, style }) => {
{position.attributes.hasOwnProperty('batteryLevel') && (
<Tooltip title={`${t('positionBatteryLevel')}: ${formatPercentage(position.attributes.batteryLevel)}`}>
<IconButton size="small">
- {position.attributes.batteryLevel > 70 ? (
+ {(position.attributes.batteryLevel > 70 && (
position.attributes.charge
? (<BatteryChargingFullIcon fontSize="small" className={classes.success} />)
: (<BatteryFullIcon fontSize="small" className={classes.success} />)
- ) : position.attributes.batteryLevel > 30 ? (
+ )) || (position.attributes.batteryLevel > 30 && (
position.attributes.charge
? (<BatteryCharging60Icon fontSize="small" className={classes.warning} />)
: (<Battery60Icon fontSize="small" className={classes.warning} />)
- ) : (
+ )) || (
position.attributes.charge
? (<BatteryCharging20Icon fontSize="small" className={classes.error} />)
: (<Battery20Icon fontSize="small" className={classes.error} />)
diff --git a/modern/src/other/PositionPage.jsx b/modern/src/other/PositionPage.jsx
index 3ed3498c..f253cd2c 100644
--- a/modern/src/other/PositionPage.jsx
+++ b/modern/src/other/PositionPage.jsx
@@ -8,7 +8,6 @@ import makeStyles from '@mui/styles/makeStyles';
import ArrowBackIcon from '@mui/icons-material/ArrowBack';
import { useNavigate, useParams } from 'react-router-dom';
import { useEffectAsync } from '../reactHelper';
-import { prefixString } from '../common/util/stringUtils';
import { useTranslation } from '../common/components/LocalizationProvider';
import PositionValue from '../common/components/PositionValue';
import usePositionAttributes from '../common/attributes/usePositionAttributes';
diff --git a/modern/src/reports/EventReportPage.jsx b/modern/src/reports/EventReportPage.jsx
index 10b539ab..5ffc8ac3 100644
--- a/modern/src/reports/EventReportPage.jsx
+++ b/modern/src/reports/EventReportPage.jsx
@@ -204,7 +204,7 @@ const EventReportPage = () => {
{!loading ? items.map((item) => (
<TableRow key={item.id}>
<TableCell className={classes.columnAction} padding="none">
- {item.positionId ? selectedItem === item ? (
+ {(item.positionId && (selectedItem === item ? (
<IconButton size="small" onClick={() => setSelectedItem(null)}>
<GpsFixedIcon fontSize="small" />
</IconButton>
@@ -212,7 +212,7 @@ const EventReportPage = () => {
<IconButton size="small" onClick={() => setSelectedItem(item)}>
<LocationSearchingIcon fontSize="small" />
</IconButton>
- ) : ''}
+ ))) || ''}
</TableCell>
{columns.map((key) => (
<TableCell key={key}>
diff --git a/modern/src/reports/LogsPage.jsx b/modern/src/reports/LogsPage.jsx
index 4b689944..7bdbd309 100644
--- a/modern/src/reports/LogsPage.jsx
+++ b/modern/src/reports/LogsPage.jsx
@@ -41,7 +41,7 @@ const LogsPage = () => {
const registerDevice = (uniqueId) => {
const query = new URLSearchParams({ uniqueId });
navigate(`/settings/device?${query.toString()}`);
- }
+ };
return (
<PageLayout menu={<ReportsMenu />} breadcrumbs={['reportTitle', 'statisticsTitle']}>
@@ -55,7 +55,7 @@ const LogsPage = () => {
</TableRow>
</TableHead>
<TableBody>
- {items.map((item, index) => (
+ {items.map((item, index) => /* eslint-disable react/no-array-index-key */ (
<TableRow key={index}>
<TableCell className={classes.columnAction} padding="none">
{item.deviceId ? (
diff --git a/modern/src/reports/StopReportPage.jsx b/modern/src/reports/StopReportPage.jsx
index 3a6ee18d..066b29a4 100644
--- a/modern/src/reports/StopReportPage.jsx
+++ b/modern/src/reports/StopReportPage.jsx
@@ -7,7 +7,7 @@ import {
import GpsFixedIcon from '@mui/icons-material/GpsFixed';
import LocationSearchingIcon from '@mui/icons-material/LocationSearching';
import {
- formatDistance, formatHours, formatVolume, formatTime,
+ formatDistance, formatVolume, formatTime, formatNumericHours,
} from '../common/util/formatter';
import ReportFilter from './components/ReportFilter';
import { useAttributePreference, usePreference } from '../common/util/preferences';
@@ -95,9 +95,9 @@ const StopReportPage = () => {
case 'startOdometer':
return formatDistance(item[key], distanceUnit, t);
case 'duration':
- return formatHours(item[key]);
+ return formatNumericHours(item[key], t);
case 'engineHours':
- return formatHours(item[key]);
+ return formatNumericHours(item[key], t);
case 'spentFuel':
return formatVolume(item[key], volumeUnit, t);
case 'address':
diff --git a/modern/src/reports/SummaryReportPage.jsx b/modern/src/reports/SummaryReportPage.jsx
index ec5395f1..ae7e043e 100644
--- a/modern/src/reports/SummaryReportPage.jsx
+++ b/modern/src/reports/SummaryReportPage.jsx
@@ -5,7 +5,7 @@ import {
FormControl, InputLabel, Select, MenuItem, Table, TableHead, TableRow, TableBody, TableCell,
} from '@mui/material';
import {
- formatDistance, formatHours, formatSpeed, formatVolume, formatTime,
+ formatDistance, formatSpeed, formatVolume, formatTime, formatNumericHours,
} from '../common/util/formatter';
import ReportFilter from './components/ReportFilter';
import { useAttributePreference, usePreference } from '../common/util/preferences';
@@ -101,7 +101,7 @@ const SummaryReportPage = () => {
case 'maxSpeed':
return formatSpeed(item[key], speedUnit, t);
case 'engineHours':
- return formatHours(item[key]);
+ return formatNumericHours(item[key], t);
case 'spentFuel':
return formatVolume(item[key], volumeUnit, t);
default:
diff --git a/modern/src/reports/TripReportPage.jsx b/modern/src/reports/TripReportPage.jsx
index f5b524ad..897ee506 100644
--- a/modern/src/reports/TripReportPage.jsx
+++ b/modern/src/reports/TripReportPage.jsx
@@ -6,7 +6,7 @@ import {
import GpsFixedIcon from '@mui/icons-material/GpsFixed';
import LocationSearchingIcon from '@mui/icons-material/LocationSearching';
import {
- formatDistance, formatSpeed, formatHours, formatVolume, formatTime,
+ formatDistance, formatSpeed, formatVolume, formatTime, formatNumericHours,
} from '../common/util/formatter';
import ReportFilter from './components/ReportFilter';
import { useAttributePreference, usePreference } from '../common/util/preferences';
@@ -142,7 +142,7 @@ const TripReportPage = () => {
case 'maxSpeed':
return formatSpeed(item[key], speedUnit, t);
case 'duration':
- return formatHours(item[key]);
+ return formatNumericHours(item[key], t);
case 'spentFuel':
return formatVolume(item[key], volumeUnit, t);
case 'startAddress':
diff --git a/modern/src/resources/l10n/af.json b/modern/src/resources/l10n/af.json
index a8ac759d..f13fd4d2 100644
--- a/modern/src/resources/l10n/af.json
+++ b/modern/src/resources/l10n/af.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Stel",
"sharedCancel": "Kanselleer",
+ "sharedCopy": "Copy",
"sharedAdd": "Sit by",
"sharedEdit": "Redigeer",
"sharedRemove": "Verwyder",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Kolomme",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: deaktiveer gebeure",
- "attributeUiDisableVehicleFetures": "UI: deaktiveer voertuig eienskappe",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: deaktiveer bestuurders",
"attributeUiDisableComputedAttributes": "UI: deaktiveer berekende attribute",
"attributeUiDisableCalendars": "UI: deaktiveer kalenders",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kaart",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/ar.json b/modern/src/resources/l10n/ar.json
index 6a270749..b425452a 100644
--- a/modern/src/resources/l10n/ar.json
+++ b/modern/src/resources/l10n/ar.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "ضبط",
"sharedCancel": "إلغاء",
+ "sharedCopy": "Copy",
"sharedAdd": "إضافة",
"sharedEdit": "تعديل",
"sharedRemove": "حذف",
@@ -99,7 +100,6 @@
"sharedImport": "استيراد",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "واجهة المستخدم: تعطيل الأحداث",
- "attributeUiDisableVehicleFetures": "واجهة المستخدم: تعطيل مزايا المركبات",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "واجهة المستخدم: تعطيل السائقين",
"attributeUiDisableComputedAttributes": "واجهة المستخدم: تعطيل السمات المحصاة",
"attributeUiDisableCalendars": "واجهة المستخدم: تعطيل التقويمات",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "خريطة",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/az.json b/modern/src/resources/l10n/az.json
index e2cf9c46..183d14c5 100644
--- a/modern/src/resources/l10n/az.json
+++ b/modern/src/resources/l10n/az.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Qurmaq",
"sharedCancel": "Ləğv etmək",
+ "sharedCopy": "Copy",
"sharedAdd": "Əlavə etmək",
"sharedEdit": "Redaktə etmək",
"sharedRemove": "Silmək",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: şikəst vaqiəler",
- "attributeUiDisableVehicleFetures": "UI: Avtomobil funksiyalarını deaktiv etmək",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Sürücüləri deaktiv etmək",
"attributeUiDisableComputedAttributes": "UI: Hesablanılan atributları deaktiv etmək",
"attributeUiDisableCalendars": "UI: Təqvimləri deaktiv etmək",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Xəritə",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/bg.json b/modern/src/resources/l10n/bg.json
index e2b537e2..3a910808 100644
--- a/modern/src/resources/l10n/bg.json
+++ b/modern/src/resources/l10n/bg.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Настрой",
"sharedCancel": "Отказ",
+ "sharedCopy": "Copy",
"sharedAdd": "Добави",
"sharedEdit": "Редактирай",
"sharedRemove": "Премахни",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "Деактивирай Събития",
- "attributeUiDisableVehicleFetures": "Деактивирай МПС параметрите",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "Деактивирай Шофьори",
"attributeUiDisableComputedAttributes": "Деактивирай изчислените параметри",
"attributeUiDisableCalendars": "Деактивирай Календара",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Карта",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/bn.json b/modern/src/resources/l10n/bn.json
index 6f4f1d0e..fb310006 100644
--- a/modern/src/resources/l10n/bn.json
+++ b/modern/src/resources/l10n/bn.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "স্থাপন করুন",
"sharedCancel": " বাতিল করুন",
+ "sharedCopy": "Copy",
"sharedAdd": "যুক্ত করুন",
"sharedEdit": "সম্পাদন করুন",
"sharedRemove": "অপসারণ করুন",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "মানচিত্র",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/ca.json b/modern/src/resources/l10n/ca.json
index 9e1dacb4..68e4b571 100644
--- a/modern/src/resources/l10n/ca.json
+++ b/modern/src/resources/l10n/ca.json
@@ -5,6 +5,7 @@
"sharedUpload": "Carrega",
"sharedSet": "Establir",
"sharedCancel": "Cancel·lar",
+ "sharedCopy": "Copy",
"sharedAdd": "Afegir",
"sharedEdit": "Editar",
"sharedRemove": "Eliminar",
@@ -99,7 +100,6 @@
"sharedImport": "Importar",
"sharedColumns": "Columnes",
"sharedDropzoneText": "Arrossegueu i deixeu anar un fitxer aquí o feu clic",
- "sharedLinkCopied": "Enllaç copiat",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrència",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Deshabilitar Grups",
"attributeUiDisableEvents": "UI: Deshabilitar esdeveniments",
- "attributeUiDisableVehicleFetures": "UI: Deshabilitar característiques del vehicle",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Deshabilitar Conductors",
"attributeUiDisableComputedAttributes": "UI: Deshabilitar Atributs calculats",
"attributeUiDisableCalendars": "UI: Deshabilitar Calendari",
@@ -325,6 +325,7 @@
"serverLogo": "Imatge del logotip",
"serverLogoInverted": "Imatge de logotip invertida",
"serverChangeDisable": "Desactiva el canvi de servidor",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Mapes actius",
"mapOverlay": "Capa sobre el mapa",
diff --git a/modern/src/resources/l10n/cs.json b/modern/src/resources/l10n/cs.json
index b148315a..b68f8db1 100644
--- a/modern/src/resources/l10n/cs.json
+++ b/modern/src/resources/l10n/cs.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Nastavit",
"sharedCancel": "Zrušit",
+ "sharedCopy": "Copy",
"sharedAdd": "Přidat",
"sharedEdit": "Změnit",
"sharedRemove": "Odstranit",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Zakázat události",
- "attributeUiDisableVehicleFetures": "UI: Zakázat funkce vozidel",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Zakázat řidiče",
"attributeUiDisableComputedAttributes": "UI: Zakázat vypočítané vlastnosti",
"attributeUiDisableCalendars": "UI: Zakázat kalendáře",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/da.json b/modern/src/resources/l10n/da.json
index 0a9ec911..e264902a 100644
--- a/modern/src/resources/l10n/da.json
+++ b/modern/src/resources/l10n/da.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Indstil",
"sharedCancel": "Fortryd",
+ "sharedCopy": "Copy",
"sharedAdd": "Tilføj",
"sharedEdit": "Rediger",
"sharedRemove": "Fjern",
@@ -99,7 +100,6 @@
"sharedImport": "Importer",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "Deaktiver begivenheder",
- "attributeUiDisableVehicleFetures": "Deaktiver køretøjets funktioner",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "Deaktiver chauffører",
"attributeUiDisableComputedAttributes": "Deaktiver beregnede attributter",
"attributeUiDisableCalendars": "Deaktiver kalendere",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kort",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/de.json b/modern/src/resources/l10n/de.json
index a631111f..de37a2fe 100644
--- a/modern/src/resources/l10n/de.json
+++ b/modern/src/resources/l10n/de.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Speichern",
"sharedCancel": "Abbrechen",
+ "sharedCopy": "Kopieren",
"sharedAdd": "Hinzufügen",
"sharedEdit": "Bearbeiten",
"sharedRemove": "Entfernen",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Spalten",
"sharedDropzoneText": "Datei hierhin ziehen oder klicken",
- "sharedLinkCopied": "Link kopiert",
"sharedLogs": "Protokolle",
"calendarSimple": "Einfach",
"calendarRecurrence": "Wiederholung",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Attribute deaktivieren",
"attributeUiDisableGroups": "UI: Gruppen deaktivieren",
"attributeUiDisableEvents": "Oberfläche: Ereignisse deaktivieren",
- "attributeUiDisableVehicleFetures": "Oberfläche: Fahrzeugfunktionen deaktivieren",
+ "attributeUiDisableVehicleFeatures": "UI: Fahrzeugfunktionen deaktivieren",
"attributeUiDisableDrivers": "Oberfläche: Fahrer deaktivieren",
"attributeUiDisableComputedAttributes": "Oberfläche: Berechnete Werte deaktivieren",
"attributeUiDisableCalendars": "Oberfläche: Kalender deaktivieren",
@@ -325,6 +325,7 @@
"serverLogo": "Logo",
"serverLogoInverted": "Umgekehrte Logografik",
"serverChangeDisable": "Serverwechsel deaktivieren",
+ "serverDisableShare": "Gerätefreigabe deaktivieren",
"mapTitle": "Karte",
"mapActive": "Aktive Karte",
"mapOverlay": "Karten Overlay",
diff --git a/modern/src/resources/l10n/el.json b/modern/src/resources/l10n/el.json
index 048f5977..0439b4e2 100644
--- a/modern/src/resources/l10n/el.json
+++ b/modern/src/resources/l10n/el.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Θέσε",
"sharedCancel": "Άκυρο",
+ "sharedCopy": "Copy",
"sharedAdd": "Προσθήκη",
"sharedEdit": "Επεξεργασία",
"sharedRemove": "Διαγραφή",
@@ -99,7 +100,6 @@
"sharedImport": "Εισαγωγή",
"sharedColumns": "Στήλες",
"sharedDropzoneText": "Σύρετε και αποθέστε ένα αρχείο εδώ ή κάντε κλικ",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Απλό",
"calendarRecurrence": "Επανάληψη",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "Διεπαφή: Απενεργοποίηση χαρακτηριστικών",
"attributeUiDisableGroups": "Διεπαφή: Απενεργοποίηση ομάδων",
"attributeUiDisableEvents": "Διεπαφή: Απενεργοποίηση Γεγονότων",
- "attributeUiDisableVehicleFetures": "Διεπαφή: Απενεργοποίηση Χαρακτηριστικών Οχήματος",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "Διεπαφή: Απενεργοποίηση Οδηγών",
"attributeUiDisableComputedAttributes": "Διεπαφή: Απενεργοποίηση Υπολογισμένων Ιδιοτήτων",
"attributeUiDisableCalendars": "Διεπαφή: Απενεργοποίηση Ημερολογίων",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Χάρτης",
"mapActive": "Ενεργοί Χάρτες",
"mapOverlay": "Υπέρθεση Χάρτη",
diff --git a/modern/src/resources/l10n/en.json b/modern/src/resources/l10n/en.json
index fec79807..39fb219b 100644
--- a/modern/src/resources/l10n/en.json
+++ b/modern/src/resources/l10n/en.json
@@ -11,6 +11,7 @@
"sharedRemove": "Remove",
"sharedRemoveConfirm": "Remove item?",
"sharedNoData": "No data",
+ "sharedSubject": "Subject",
"sharedYes": "Yes",
"sharedNo": "No",
"sharedKm": "km",
@@ -101,6 +102,7 @@
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
"sharedLogs": "Logs",
+ "sharedLink": "Link",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
"calendarOnce": "Once",
@@ -148,7 +150,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -175,6 +177,7 @@
"userFixedEmail": "No Email Change",
"userToken": "Token",
"userDeleteAccount": "Delete Account",
+ "userTemporary": "Temporary",
"loginTitle": "Login",
"loginLanguage": "Language",
"loginReset": "Reset Password",
diff --git a/modern/src/resources/l10n/es.json b/modern/src/resources/l10n/es.json
index fdeafce2..a03f29b3 100644
--- a/modern/src/resources/l10n/es.json
+++ b/modern/src/resources/l10n/es.json
@@ -5,6 +5,7 @@
"sharedUpload": "Cargar",
"sharedSet": "Establecer",
"sharedCancel": "Cancelar",
+ "sharedCopy": "Copiar",
"sharedAdd": "Añadir",
"sharedEdit": "Editar",
"sharedRemove": "Eliminar",
@@ -99,7 +100,6 @@
"sharedImport": "Importar",
"sharedColumns": "Columnas",
"sharedDropzoneText": "Arrastra y suelta el archivo aquí o pulsa",
- "sharedLinkCopied": "Enlace copiado",
"sharedLogs": "Registros",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrente",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Deshabilitar Atributos",
"attributeUiDisableGroups": "UI: Deshabilitar Grupos",
"attributeUiDisableEvents": "UI: Deshabilitar panel Eventos",
- "attributeUiDisableVehicleFetures": "UI: Desactivar características del vehículo",
+ "attributeUiDisableVehicleFeatures": "UI: Desactivar características del vehículo",
"attributeUiDisableDrivers": "UI: Desactivar Conductores",
"attributeUiDisableComputedAttributes": "UI: Desactivar Atributos calculados",
"attributeUiDisableCalendars": "UI: Desactivar Calendario",
@@ -325,6 +325,7 @@
"serverLogo": "Imagen del Logo",
"serverLogoInverted": "Imagen de logo invertida",
"serverChangeDisable": "Deshabilitar el cambio de servidor",
+ "serverDisableShare": "Deshabilitar poder Compartir Dispositivos",
"mapTitle": "Mapa",
"mapActive": "Mapas activos",
"mapOverlay": "Capa sobre el mapa",
diff --git a/modern/src/resources/l10n/fa.json b/modern/src/resources/l10n/fa.json
index 441fbace..cf72798c 100644
--- a/modern/src/resources/l10n/fa.json
+++ b/modern/src/resources/l10n/fa.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "تنظیم",
"sharedCancel": "انصراف",
+ "sharedCopy": "Copy",
"sharedAdd": "اضافه كردن",
"sharedEdit": "ویرایش",
"sharedRemove": "پاک کردن",
@@ -99,7 +100,6 @@
"sharedImport": "وارد كردن",
"sharedColumns": "ستونها",
"sharedDropzoneText": "یک فایل را در اینجا بکشید و رها کنید یا کلیک کنید",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "ساده",
"calendarRecurrence": "عکس العمل",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: ویژگی ها را غیرفعال کنید",
"attributeUiDisableGroups": "UI: غیر فعال کردن گروه ها",
"attributeUiDisableEvents": "UI: غیر فعال کردن رویدادها",
- "attributeUiDisableVehicleFetures": "غیرفعال کردن ویژگی های خودرو",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "غیرفعالسازی رانندگان",
"attributeUiDisableComputedAttributes": "غیرفعالسازی محاسبات",
"attributeUiDisableCalendars": "غیرفعالسازی تقویم",
@@ -325,6 +325,7 @@
"serverLogo": "عکس لوگو",
"serverLogoInverted": "معکوس سازی رنگ لوگو",
"serverChangeDisable": "غیرفعال کردن تغییر سرور",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "نقشه",
"mapActive": "نقشه های فعال",
"mapOverlay": "لایه نقشه",
diff --git a/modern/src/resources/l10n/fi.json b/modern/src/resources/l10n/fi.json
index 49811a62..7a200e30 100644
--- a/modern/src/resources/l10n/fi.json
+++ b/modern/src/resources/l10n/fi.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Aseta",
"sharedCancel": "Peruuta",
+ "sharedCopy": "Copy",
"sharedAdd": "Lisää",
"sharedEdit": "Muokkaa",
"sharedRemove": "Poista",
@@ -99,7 +100,6 @@
"sharedImport": "Tuo",
"sharedColumns": "Sarakkeet",
"sharedDropzoneText": "Vedä ja pudota tiedosto tähän tai klikkaa",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Yksinkertainen",
"calendarRecurrence": "Toisto",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Piilota ominaisuudet",
"attributeUiDisableGroups": "UI: Piilota ryhmät",
"attributeUiDisableEvents": "UI: Piilota tapahtumat",
- "attributeUiDisableVehicleFetures": "UI: Piilota ajoneuvojen ominaisuudet",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Piilota kuljettajat",
"attributeUiDisableComputedAttributes": "UI: Piilota lasketut ominaisuudet",
"attributeUiDisableCalendars": "UI: Piilota kalenterit",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kartta",
"mapActive": "Aktiiviset kartat",
"mapOverlay": "Karttapäällys",
diff --git a/modern/src/resources/l10n/fr.json b/modern/src/resources/l10n/fr.json
index faad67cd..0f2db93c 100644
--- a/modern/src/resources/l10n/fr.json
+++ b/modern/src/resources/l10n/fr.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Régler",
"sharedCancel": "Annuler",
+ "sharedCopy": "Copy",
"sharedAdd": "Ajouter",
"sharedEdit": "Editer",
"sharedRemove": "Effacer",
@@ -99,7 +100,6 @@
"sharedImport": "Importer",
"sharedColumns": "Colonnes",
"sharedDropzoneText": "Glissez et déposez un fichier ici ou cliquez",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Récurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Désactiver les attributs",
"attributeUiDisableGroups": "UI: Désactiver groupes",
"attributeUiDisableEvents": "UI: Désactiver évènements",
- "attributeUiDisableVehicleFetures": "UI: Désactiver les fonctionalités véhicule",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Désactiver les conducteurs",
"attributeUiDisableComputedAttributes": "UI: Désactiver les attributs calculés",
"attributeUiDisableCalendars": "UI: Désactiver les calendiers",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Carte",
"mapActive": "Cartes actives",
"mapOverlay": "Superposition de cartes",
diff --git a/modern/src/resources/l10n/gl.json b/modern/src/resources/l10n/gl.json
index cbc16a2a..6a580892 100644
--- a/modern/src/resources/l10n/gl.json
+++ b/modern/src/resources/l10n/gl.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Establecer",
"sharedCancel": "Cancelar",
+ "sharedCopy": "Copy",
"sharedAdd": "Engadir",
"sharedEdit": "Editar",
"sharedRemove": "Eliminar",
@@ -99,7 +100,6 @@
"sharedImport": "Importar",
"sharedColumns": "Columnas",
"sharedDropzoneText": "Arrastra e solta un arquivo aquí ou fai clic",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recorrencia",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "IU: Desactivar atributos",
"attributeUiDisableGroups": "IU: Desactivar grupos",
"attributeUiDisableEvents": "IU: Desactivar eventos",
- "attributeUiDisableVehicleFetures": "IU: Desactivar as características do vehículo",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "IU: Desactivar condutores",
"attributeUiDisableComputedAttributes": "IU: Desactivar atributos calculados",
"attributeUiDisableCalendars": "IU: desactivar os calendarios",
@@ -325,6 +325,7 @@
"serverLogo": "Imaxe do logotipo",
"serverLogoInverted": "Imaxe do logotipo con cores inversos",
"serverChangeDisable": "Desactivar o cambio de servidor",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Mapas activos",
"mapOverlay": "Superposición de mapas",
diff --git a/modern/src/resources/l10n/he.json b/modern/src/resources/l10n/he.json
index 95fd268d..db403502 100644
--- a/modern/src/resources/l10n/he.json
+++ b/modern/src/resources/l10n/he.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "הגדרה",
"sharedCancel": "ביטול",
+ "sharedCopy": "Copy",
"sharedAdd": "הוספה",
"sharedEdit": "עריכה",
"sharedRemove": "הסרה",
@@ -99,7 +100,6 @@
"sharedImport": "ייבוא",
"sharedColumns": "עמודות",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "ממשק: בטל ארועים",
- "attributeUiDisableVehicleFetures": "ממשק: בטל תכונות רכב",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "ממשק : בטל נהגים ",
"attributeUiDisableComputedAttributes": "ממשק : בטל תכונה ממוחשבת",
"attributeUiDisableCalendars": "ממשק : בטל יומנים",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "מפה",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/hi.json b/modern/src/resources/l10n/hi.json
index 6189e2b6..e92ffb28 100644
--- a/modern/src/resources/l10n/hi.json
+++ b/modern/src/resources/l10n/hi.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "स्वीकृति दें",
"sharedCancel": "रद्द करें",
+ "sharedCopy": "Copy",
"sharedAdd": "जोड़ें",
"sharedEdit": "संपादित करें",
"sharedRemove": "हटाएं",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "यूआई: घटनाओं को अक्षम करें",
- "attributeUiDisableVehicleFetures": "यूआई: वाहन विशेषताएं अक्षम करें",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "यूआई: ड्राइवर्स को अक्षम करें",
"attributeUiDisableComputedAttributes": "यूआई: गणना गुणों को अक्षम करें",
"attributeUiDisableCalendars": "यूआई: कैलेंडर अक्षम करें",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "मानचित्र",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/hr.json b/modern/src/resources/l10n/hr.json
index 910557eb..7682d886 100644
--- a/modern/src/resources/l10n/hr.json
+++ b/modern/src/resources/l10n/hr.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Postavi",
"sharedCancel": "Poništi",
+ "sharedCopy": "Copy",
"sharedAdd": "Dodaj",
"sharedEdit": "Uredi",
"sharedRemove": "Ukloni",
@@ -99,7 +100,6 @@
"sharedImport": "Uvoz",
"sharedColumns": "Stupac",
"sharedDropzoneText": "Dovuci i pusti datoteku ovdje ili klikni",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Jednostavno",
"calendarRecurrence": "Ponavljajuće",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Onemogući atribute",
"attributeUiDisableGroups": "UI: Onemogući grupe",
"attributeUiDisableEvents": "UI: Isključi događaje",
- "attributeUiDisableVehicleFetures": "UI: Isključi značajke vozila",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Isključi vozače",
"attributeUiDisableComputedAttributes": "UI: Isključi izračunate atribute",
"attributeUiDisableCalendars": "UI: Isključi kalendare",
@@ -325,6 +325,7 @@
"serverLogo": "Logo",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Karta",
"mapActive": "Aktivna karta",
"mapOverlay": "Prekrivajuća karta",
diff --git a/modern/src/resources/l10n/hu.json b/modern/src/resources/l10n/hu.json
index 71d3f8ad..d12cda50 100644
--- a/modern/src/resources/l10n/hu.json
+++ b/modern/src/resources/l10n/hu.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Beállít",
"sharedCancel": "Mégse",
+ "sharedCopy": "Copy",
"sharedAdd": "Hozzáadás",
"sharedEdit": "Szerkesztés",
"sharedRemove": "Törlés",
@@ -99,7 +100,6 @@
"sharedImport": "Importálás",
"sharedColumns": "Oszlopok",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Csoportok letiltása",
"attributeUiDisableEvents": "UI: Események letiltása",
- "attributeUiDisableVehicleFetures": "UI: Eszköz képességeinek leállítása",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Sofőrök letiltása",
"attributeUiDisableComputedAttributes": "UI: Számított attribútumok letiltása",
"attributeUiDisableCalendars": "UI: Naptárak letiltása",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Térkép",
"mapActive": "Aktív térképek",
"mapOverlay": "Térkép réteg",
diff --git a/modern/src/resources/l10n/id.json b/modern/src/resources/l10n/id.json
index b10be72f..8e54667f 100644
--- a/modern/src/resources/l10n/id.json
+++ b/modern/src/resources/l10n/id.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Setel",
"sharedCancel": "Batal",
+ "sharedCopy": "Copy",
"sharedAdd": "Tambah",
"sharedEdit": "Ubah",
"sharedRemove": "Hapus",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI : Nonaktifkan Fitur Kendaraan",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI : Nonaktifkan Antarmuka",
"attributeUiDisableComputedAttributes": "UI : Nonaktifkan Computed Attributes",
"attributeUiDisableCalendars": "UI : Nonaktifkan Kalender",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Peta",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/it.json b/modern/src/resources/l10n/it.json
index c0a2ab43..7153f387 100644
--- a/modern/src/resources/l10n/it.json
+++ b/modern/src/resources/l10n/it.json
@@ -5,6 +5,7 @@
"sharedUpload": "Carica",
"sharedSet": "Imposta",
"sharedCancel": "Annulla",
+ "sharedCopy": "Copy",
"sharedAdd": "Aggiungi",
"sharedEdit": "Modifica",
"sharedRemove": "Rimuovi",
@@ -99,7 +100,6 @@
"sharedImport": "Importa",
"sharedColumns": "Colonne",
"sharedDropzoneText": "Trascina un file qui o clicca",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Semplice",
"calendarRecurrence": "Ricorrente",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disattiva Attributi",
"attributeUiDisableGroups": "UI: Disattiva Gruppi",
"attributeUiDisableEvents": "UI: Disattiva Eventi",
- "attributeUiDisableVehicleFetures": "UI: Disattiva Caratteristiche Veicolo",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disattiva Autisti",
"attributeUiDisableComputedAttributes": "UI: Disattiva Attributi Calcolati",
"attributeUiDisableCalendars": "UI: Disattiva Calendari",
@@ -325,6 +325,7 @@
"serverLogo": "Immagine Logo",
"serverLogoInverted": "Immagine Logo Invertita",
"serverChangeDisable": "Disattiva cambiamento Server",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mappa",
"mapActive": "Mappe Attive",
"mapOverlay": "Soprapposizione Mappa",
diff --git a/modern/src/resources/l10n/ja.json b/modern/src/resources/l10n/ja.json
index 82845694..a7b2784c 100644
--- a/modern/src/resources/l10n/ja.json
+++ b/modern/src/resources/l10n/ja.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "設定",
"sharedCancel": "キャンセル",
+ "sharedCopy": "Copy",
"sharedAdd": "追加",
"sharedEdit": "編集",
"sharedRemove": "削除",
@@ -99,7 +100,6 @@
"sharedImport": "インポート",
"sharedColumns": "列",
"sharedDropzoneText": "ファイルをドラッグ&ドロップするかクリック",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "シンプル",
"calendarRecurrence": "再発",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI:属性を無効にする",
"attributeUiDisableGroups": "UI:グループを無効にする",
"attributeUiDisableEvents": "UI: イベントを無効にする",
- "attributeUiDisableVehicleFetures": "UI: 車両の機能を無効にする",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: ドライバーを無効にする",
"attributeUiDisableComputedAttributes": "UI: 計算された属性を無効にする",
"attributeUiDisableCalendars": "UI: カレンダーを無効にする",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "地図",
"mapActive": "アクティブなマップ",
"mapOverlay": "マップのオーバーレイ",
diff --git a/modern/src/resources/l10n/ka.json b/modern/src/resources/l10n/ka.json
index ed77fda8..adc0da5c 100644
--- a/modern/src/resources/l10n/ka.json
+++ b/modern/src/resources/l10n/ka.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "დაყენება",
"sharedCancel": "უარყოფა",
+ "sharedCopy": "Copy",
"sharedAdd": "დამატება",
"sharedEdit": "შეცვლა",
"sharedRemove": "წაშლა",
@@ -99,7 +100,6 @@
"sharedImport": "იმპორტი",
"sharedColumns": "სვეტი",
"sharedDropzoneText": "გადმოათრიეთ ფაილი აქ ან დააწკაპუნეთ",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "მარტივი",
"calendarRecurrence": "რეციდივი",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "მომსხმარებლის ინტერფეისი: გამორთეთ ატრიბუტები",
"attributeUiDisableGroups": "მომსხმარებლის ინტერფეისი: ჯგუფების გამორთვა",
"attributeUiDisableEvents": "UI: მოვლენების გამორთვა",
- "attributeUiDisableVehicleFetures": "UI: ავტომობილის მახასიათებლების გამორთვა",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: მძღოლების გამორთვა",
"attributeUiDisableComputedAttributes": "UI: გამოთვლითი ატრიბუტების გამორთვა",
"attributeUiDisableCalendars": "UI: კალენდრის გამორთვა",
@@ -325,6 +325,7 @@
"serverLogo": "ლოგოს სურათი",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "რუკა",
"mapActive": "აქტიური რუკა",
"mapOverlay": "რუკის დაფარვა",
diff --git a/modern/src/resources/l10n/kk.json b/modern/src/resources/l10n/kk.json
index faa8dd15..b887b557 100644
--- a/modern/src/resources/l10n/kk.json
+++ b/modern/src/resources/l10n/kk.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Орнату",
"sharedCancel": "Болдырмау",
+ "sharedCopy": "Copy",
"sharedAdd": "Енгізу",
"sharedEdit": "Түзету",
"sharedRemove": "Жою",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Карта",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/km.json b/modern/src/resources/l10n/km.json
index ac7fae46..f14c53c3 100644
--- a/modern/src/resources/l10n/km.json
+++ b/modern/src/resources/l10n/km.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "កំណត់",
"sharedCancel": "បោះបង់",
+ "sharedCopy": "Copy",
"sharedAdd": "បន្ថែម",
"sharedEdit": "កែសម្រួល",
"sharedRemove": "យកចេញ",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "ផែនទី",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/ko.json b/modern/src/resources/l10n/ko.json
index 9db6e1b4..dc893b73 100644
--- a/modern/src/resources/l10n/ko.json
+++ b/modern/src/resources/l10n/ko.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "확인",
"sharedCancel": "취소",
+ "sharedCopy": "Copy",
"sharedAdd": "추가",
"sharedEdit": "편집",
"sharedRemove": "제거",
@@ -99,7 +100,6 @@
"sharedImport": "불러오기",
"sharedColumns": "열",
"sharedDropzoneText": "파일을 가져오거나 여기를 누르세요.",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "심플",
"calendarRecurrence": "반복 주기",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: 속성 비활성화",
"attributeUiDisableGroups": "UI: 그룹 비활성화",
"attributeUiDisableEvents": "UI: 이벤트 비활성화",
- "attributeUiDisableVehicleFetures": "UI: 기기 Fetures 비활성화",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: 운전자 비활성화",
"attributeUiDisableComputedAttributes": "UI: 자동화 속성 비활성화",
"attributeUiDisableCalendars": "UI: 달력 비활성화",
@@ -325,6 +325,7 @@
"serverLogo": "로고 이미지",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "지도",
"mapActive": "활성화된 지도",
"mapOverlay": "지도 오버레이",
diff --git a/modern/src/resources/l10n/lo.json b/modern/src/resources/l10n/lo.json
index deedec13..e23e2a24 100644
--- a/modern/src/resources/l10n/lo.json
+++ b/modern/src/resources/l10n/lo.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Set",
"sharedCancel": "ຍົກເລີກ",
+ "sharedCopy": "Copy",
"sharedAdd": "ເພີ່ມ",
"sharedEdit": "ແກ້ໄຂ",
"sharedRemove": "ລົບອອກ",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "ແຜ່ນທີ",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/lt.json b/modern/src/resources/l10n/lt.json
index f4d0c6f3..c3ecf93d 100644
--- a/modern/src/resources/l10n/lt.json
+++ b/modern/src/resources/l10n/lt.json
@@ -5,6 +5,7 @@
"sharedUpload": "Įkelti",
"sharedSet": "Nustatyti",
"sharedCancel": "Atšaukti",
+ "sharedCopy": "Kopijuoti",
"sharedAdd": "Pridėti",
"sharedEdit": "Redaguoti",
"sharedRemove": "Ištrinti",
@@ -99,8 +100,7 @@
"sharedImport": "Importuoti",
"sharedColumns": "Stulpeliai",
"sharedDropzoneText": "Nutempkite failą čia arba paspauskite",
- "sharedLinkCopied": "Nuoroda nukopijuota",
- "sharedLogs": "Logs",
+ "sharedLogs": "Žurnalai",
"calendarSimple": "Paprastas",
"calendarRecurrence": "Pasikartojimas",
"calendarOnce": "Vienkartinis",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: išjungti atributus",
"attributeUiDisableGroups": "UI: išjungti grupes",
"attributeUiDisableEvents": "UI: Išjungti įvykius",
- "attributeUiDisableVehicleFetures": "UI: Išjungti mašinos funkcijas",
+ "attributeUiDisableVehicleFeatures": "UI: Išjungti automobilio funkcijas",
"attributeUiDisableDrivers": "UI: Išjungti vairuotojus",
"attributeUiDisableComputedAttributes": "UI: Išjungti apskaičiuotus parametrus",
"attributeUiDisableCalendars": "UI: Išjungti kalendorius",
@@ -187,8 +187,8 @@
"loginUpdateSuccess": "Naujas slaptažodis sukurtas",
"loginLogout": "Atsijungti",
"loginLogo": "Logotipas",
- "loginTotpCode": "One-time Password Code",
- "loginTotpKey": "One-time Password Key",
+ "loginTotpCode": "Vienkartinio slaptažodžio kodas",
+ "loginTotpKey": "Vienkartinio slaptažodžio raktas",
"devicesAndState": "Prietaisai ir Statusas",
"deviceSelected": "Pasirinktas įrenginys",
"deviceTitle": "Prietaisai",
@@ -208,7 +208,7 @@
"deviceStatusUnknown": "Nežinoma",
"deviceRegisterFirst": "Registruokite savo pirmą įrenginį",
"deviceIdentifierHelp": "IMEI, serijinis numeris arba identifikacinis ID. Turi atitikti įrenginio ID siunčiamą į serverį.",
- "deviceShare": "Share Device",
+ "deviceShare": "Dalintis įrenginiu",
"groupDialog": "Grupė",
"groupParent": "Grupė",
"groupNoGroup": "Nenurodyta grupė",
@@ -227,11 +227,11 @@
"settingsAppVersion": "App versija",
"settingsConnection": "Susijungimas",
"settingsDarkMode": "Tamsi tema",
- "settingsTotpEnable": "Enable One-time Password",
- "settingsTotpForce": "Force One-time Password",
- "settingsServiceWorkerUpdateInterval": "ServiceWorker Update Interval",
- "settingsUpdateAvailable": "There is an update available.",
- "settingsSupport": "Support",
+ "settingsTotpEnable": "Įjungti vienkartinį slaptažodį",
+ "settingsTotpForce": "Priverstinis vienkartinis slaptažodis",
+ "settingsServiceWorkerUpdateInterval": "ServiceWorker atnaujinimo intervalas",
+ "settingsUpdateAvailable": "Yra atnaujinimas.",
+ "settingsSupport": "Pagalba",
"reportTitle": "Ataskaitos",
"reportScheduled": "Suplanuotos ataskaitos",
"reportDevice": "Prietaisas",
@@ -325,6 +325,7 @@
"serverLogo": "Logo vaizdas",
"serverLogoInverted": "Invertuotas logo vaizdas",
"serverChangeDisable": "Uždrausti keisti serverį",
+ "serverDisableShare": "Išjungti dalinimasi įrenginiais",
"mapTitle": "Žemėlapis",
"mapActive": "Aktyvūs žemėlapiai",
"mapOverlay": "Žemėlapių sluoksniai",
@@ -358,7 +359,7 @@
"mapWikimedia": "Wikimedia",
"mapOrdnanceSurvey": "Ordnance Survey",
"mapMapboxStreets": "Mapbox gatvės",
- "mapMapboxStreetsDark": "Mapbox Streets Dark",
+ "mapMapboxStreetsDark": "Tamsus Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Palydovinis",
"mapMapboxKey": "Mapbox Access Token",
@@ -453,7 +454,7 @@
"eventDeviceUnknown": "Būsena nežinoma",
"eventDeviceOffline": "Būsena atsijungęs",
"eventDeviceInactive": "Įrenginys neaktyvus",
- "eventQueuedCommandSent": "Queued command sent",
+ "eventQueuedCommandSent": "Išsiųsta komanda eilėje",
"eventDeviceMoving": "Įrenginys juda",
"eventDeviceStopped": "Įrenginys sustojo",
"eventDeviceOverspeed": "Greičio limitas viršytas",
@@ -574,7 +575,7 @@
"categoryBoat": "Valtis",
"categoryBus": "Autobusas",
"categoryCar": "Automobilis",
- "categoryCamper": "Camper",
+ "categoryCamper": "Kemperis",
"categoryCrane": "Kranas",
"categoryHelicopter": "Sraigtasparnis",
"categoryMotorcycle": "Motociklas",
diff --git a/modern/src/resources/l10n/lv.json b/modern/src/resources/l10n/lv.json
index 3743b1be..6eb0d349 100644
--- a/modern/src/resources/l10n/lv.json
+++ b/modern/src/resources/l10n/lv.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Iestatīt",
"sharedCancel": "Atcelt",
+ "sharedCopy": "Copy",
"sharedAdd": "Pievienot",
"sharedEdit": "Rediģēt",
"sharedRemove": "Dzēst",
@@ -99,7 +100,6 @@
"sharedImport": "Importēt",
"sharedColumns": "Kolonnas",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Atslēgt notikumus",
- "attributeUiDisableVehicleFetures": "UI: Atslēgt transporta iespējas",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Atslēgt vadītājus",
"attributeUiDisableComputedAttributes": "UI: Atslēgt aprēķinātos atribūtus",
"attributeUiDisableCalendars": "UI: Atslēgt kalendārus",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Karte",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/mk.json b/modern/src/resources/l10n/mk.json
new file mode 100644
index 00000000..168cc1f2
--- /dev/null
+++ b/modern/src/resources/l10n/mk.json
@@ -0,0 +1,596 @@
+{
+ "sharedLoading": "Вчитување...",
+ "sharedHide": "Сокриј",
+ "sharedSave": "Зачувај",
+ "sharedUpload": "Прикачи",
+ "sharedSet": "Постави",
+ "sharedCancel": "Откажи",
+ "sharedCopy": "Копирај",
+ "sharedAdd": "Додади",
+ "sharedEdit": "Уреди",
+ "sharedRemove": "Отстрани",
+ "sharedRemoveConfirm": "Дали да се отстрани предметот?",
+ "sharedNoData": "Нема податоци",
+ "sharedYes": "Да",
+ "sharedNo": "Не",
+ "sharedKm": "km",
+ "sharedMi": "mi",
+ "sharedNmi": "nmi",
+ "sharedMeters": "m",
+ "sharedFeet": "ft",
+ "sharedKn": "kn",
+ "sharedKmh": "km/h",
+ "sharedMph": "mph",
+ "sharedHour": "Час",
+ "sharedMinute": "Минута",
+ "sharedSecond": "Секунда",
+ "sharedDays": "денови",
+ "sharedHours": "часови",
+ "sharedMinutes": "минути",
+ "sharedDecimalDegrees": "Децимални Степени",
+ "sharedDegreesDecimalMinutes": "Степени Децимални Минути",
+ "sharedDegreesMinutesSeconds": "Степени Минути Секунди",
+ "sharedName": "Име",
+ "sharedDescription": "Опис",
+ "sharedSearch": "Пребарување",
+ "sharedIconScale": "Размер на икони",
+ "sharedGeofence": "Географска зона",
+ "sharedGeofences": "Географски зони",
+ "sharedCreateGeofence": "Креирај Географска зона",
+ "sharedNotifications": "Известувања",
+ "sharedNotification": "Известување",
+ "sharedAttributes": "Атрибути",
+ "sharedAttribute": "Атрибут",
+ "sharedDrivers": "Возачи",
+ "sharedDriver": "Возач",
+ "sharedArea": "Област",
+ "sharedSound": "Звук за известување",
+ "sharedType": "Тип",
+ "sharedDistance": "Растојание",
+ "sharedHourAbbreviation": "ч",
+ "sharedMinuteAbbreviation": "м",
+ "sharedSecondAbbreviation": "с",
+ "sharedVoltAbbreviation": "V",
+ "sharedLiterAbbreviation": "I",
+ "sharedGallonAbbreviation": "gal",
+ "sharedLiter": "Литар",
+ "sharedImpGallon": "Imp. Gallon",
+ "sharedUsGallon": "U.S. Gallon",
+ "sharedLiterPerHourAbbreviation": "л/ч",
+ "sharedGetMapState": "Состојба на Мапа",
+ "sharedComputedAttribute": "Пресметан Атрибут",
+ "sharedComputedAttributes": "Пресметани Атрибути",
+ "sharedCheckComputedAttribute": "Провери го пресметаниот атрибут",
+ "sharedExpression": "Израз",
+ "sharedDevice": "Уред",
+ "sharedTest": "Тест",
+ "sharedTestNotification": "Испрати тест известување",
+ "sharedTestNotificators": "Тест Канали",
+ "sharedTestExpression": "Тестирај Изразување",
+ "sharedCalendar": "Календар",
+ "sharedCalendars": "Календари",
+ "sharedFile": "Фајл",
+ "sharedSearchDevices": "Пребарај Уреди",
+ "sharedSortBy": "Подреди по",
+ "sharedFilterMap": "Филтер на Мапа",
+ "sharedSelectFile": "Избери фајл",
+ "sharedPhone": "Телефон",
+ "sharedRequired": "Задолжително",
+ "sharedPreferences": "Подесувања",
+ "sharedPermissions": "Дозволи",
+ "sharedConnections": "Конекции",
+ "sharedExtra": "Екстра",
+ "sharedPrimary": "Примарен",
+ "sharedSecondary": "Секундарен",
+ "sharedTypeString": "Стринг",
+ "sharedTypeNumber": "Број",
+ "sharedTypeBoolean": "Булеан",
+ "sharedTimezone": "Временска зона",
+ "sharedInfoTitle": "Инфо",
+ "sharedSavedCommand": "Зачувана Команда",
+ "sharedSavedCommands": "Зачувани Команди",
+ "sharedNew": "Нов...",
+ "sharedShowAddress": "Прикажи Адреса",
+ "sharedShowDetails": "Повеќе Детали",
+ "sharedDisabled": "Оневозможено",
+ "sharedMaintenance": "Одржување",
+ "sharedDeviceAccumulators": "Акумулатори",
+ "sharedAlarms": "Аларми",
+ "sharedLocation": "Локација",
+ "sharedImport": "Импортирај",
+ "sharedColumns": "Колони",
+ "sharedDropzoneText": "Повлечи фајл овде или кликни",
+ "sharedLogs": "Логови",
+ "calendarSimple": "Едноставно",
+ "calendarRecurrence": "Повторување",
+ "calendarOnce": "Еднаш",
+ "calendarDaily": "Дневно",
+ "calendarWeekly": "Неделно",
+ "calendarMonthly": "Месечно",
+ "calendarDays": "Денови",
+ "calendarSunday": "Недела",
+ "calendarMonday": "Понеделник",
+ "calendarTuesday": "Вторник",
+ "calendarWednesday": "Среда",
+ "calendarThursday": "Четврток",
+ "calendarFriday": "Петок",
+ "calendarSaturday": "Сабота",
+ "attributeShowGeofences": "Прикажи Географски зони",
+ "attributeSpeedLimit": "Ограничување на брзината",
+ "attributeFuelDropThreshold": "Граница на прелиено гориво",
+ "attributeFuelIncreaseThreshold": "Граница на надополнето гориво",
+ "attributePolylineDistance": "Повеќелиниска оддалеченост",
+ "attributeReportIgnoreOdometer": "Извештај: Игнорирај го одометарот",
+ "attributeWebReportColor": "Веб: Боја на извештај",
+ "attributeDevicePassword": "Лозинка на уредот",
+ "attributeDeviceImage": "Слика на уредот",
+ "attributeDeviceInactivityStart": "Почеток на неактивност на уредот",
+ "attributeDeviceInactivityPeriod": "Период на неактивност на уредот",
+ "attributeProcessingCopyAttributes": "Процесирање: Копирање на атрибути",
+ "attributeColor": "Боја",
+ "attributeWebLiveRouteLength": "Веб: Должина на рута",
+ "attributeWebSelectZoom": "Веб: Зумирај го селектираното",
+ "attributeWebMaxZoom": "Веб: Максимално зумирање",
+ "attributeTelegramChatId": "Телеграм ID",
+ "attributePushoverUserKey": "Прoследи кориснички клуч",
+ "attributePushoverDeviceNames": "Проследи ги имињата на уредите",
+ "attributeMailSmtpHost": "Меил: SMTP хост",
+ "attributeMailSmtpPort": "Меил: SMTP порт",
+ "attributeMailSmtpStarttlsEnable": "Меил: Овозможи SMTP STARTTLS",
+ "attributeMailSmtpStarttlsRequired": "Меил: SMTP STARTTLS е потребен",
+ "attributeMailSmtpSslEnable": "Меил: Овозможи SMTP SSL",
+ "attributeMailSmtpSslTrust": "Меил: SMTP SSL Trust",
+ "attributeMailSmtpSslProtocols": "Меил: SMTP SSL протоколи",
+ "attributeMailSmtpFrom": "Меил: SMTP Испраќач",
+ "attributeMailSmtpAuth": "Меил: Овозможи SMTP автентикација",
+ "attributeMailSmtpUsername": "Меил: SMTP корисничко име",
+ "attributeMailSmtpPassword": "Меил: SMTP лозинка",
+ "attributeUiDisableAttributes": "UI: Оневозможи атрибути",
+ "attributeUiDisableGroups": "UI: Оневозможи групи",
+ "attributeUiDisableEvents": "UI: Оневозможи настани",
+ "attributeUiDisableVehicleFeatures": "UI: Оневозможи карактеристики на возила",
+ "attributeUiDisableDrivers": "UI: Оневозможи возачи",
+ "attributeUiDisableComputedAttributes": "UI: Оневозможи пресметани атрибути",
+ "attributeUiDisableCalendars": "UI: Оневозможи календари",
+ "attributeUiDisableMaintenance": "UI: Оневозможи одржување",
+ "attributeUiHidePositionAttributes": "UI: Сокриј атрибути на позиција",
+ "attributeUiDisableLoginLanguage": "UI: Оневозможи промена на јазик при најава",
+ "attributeNotificationTokens": "Токени за известување",
+ "attributePopupInfo": "Popup инфо",
+ "errorTitle": "Грешка",
+ "errorGeneral": "Невалидни параметри или кршење на ограничувањето",
+ "errorConnection": "Грешка во комуникација",
+ "errorSocket": "Web socket грешка во комуникација",
+ "errorZero": "Не може да биди нула",
+ "userEmail": "e-mail",
+ "userPassword": "Лозинка",
+ "userAdmin": "Администратор",
+ "userRemember": "Запамти",
+ "userExpirationTime": "Истекува на",
+ "userDeviceLimit": "Максимален број на уреди",
+ "userUserLimit": "Максимален број на корисници",
+ "userDeviceReadonly": "Уредот е Readonly",
+ "userLimitCommands": "Ограничи команди",
+ "userDisableReports": "Оневозможи извештаи",
+ "userFixedEmail": "Забрани промена на e-mail",
+ "userToken": "Токен",
+ "userDeleteAccount": "Избриши Акаунт",
+ "loginTitle": "Најава",
+ "loginLanguage": "Јазик",
+ "loginReset": "Ресетирај лозинка",
+ "loginRegister": "Регистрација",
+ "loginLogin": "Најава",
+ "loginOpenId": "Најава со OpenID",
+ "loginFailed": "невалидна e-mail адреса или лозинка",
+ "loginCreated": "Нов корисник е регистриран",
+ "loginResetSuccess": "Проверете ја вашата e-mail адреса",
+ "loginUpdateSuccess": "Новата лозинка е поставена",
+ "loginLogout": "Одјава",
+ "loginLogo": "Лого",
+ "loginTotpCode": "Еднократен код за лозинка",
+ "loginTotpKey": "Еднократен клуч за лозинка",
+ "devicesAndState": "Уреди и статус",
+ "deviceSelected": "Избран уред",
+ "deviceTitle": "Уреди",
+ "devicePrimaryInfo": "Назив на уред",
+ "deviceSecondaryInfo": "Детали за уред",
+ "deviceIdentifier": "Идентификатор",
+ "deviceModel": "Модел",
+ "deviceContact": "Контакт",
+ "deviceCategory": "Категорија",
+ "deviceLastUpdate": "Последна промена",
+ "deviceCommand": "Команда",
+ "deviceFollow": "Прати",
+ "deviceTotalDistance": "Вкупно растојание",
+ "deviceStatus": "Статус",
+ "deviceStatusOnline": "Достапен",
+ "deviceStatusOffline": "Недостапен",
+ "deviceStatusUnknown": "Непознато",
+ "deviceRegisterFirst": "Регистрирај го твојот прв уред",
+ "deviceIdentifierHelp": "IMEI, сериски број или друг ID. Треба да биде ист со уредот кој се поврзува на сервер",
+ "deviceShare": "Сподели уред",
+ "groupDialog": "Група",
+ "groupParent": "Група",
+ "groupNoGroup": "Нема група",
+ "settingsTitle": "Подесувања",
+ "settingsUser": "Акаунт",
+ "settingsGroups": "Групи",
+ "settingsServer": "Сервер",
+ "settingsUsers": "Корисници",
+ "settingsDistanceUnit": "Единица за растојание",
+ "settingsAltitudeUnit": "Единица за висина",
+ "settingsSpeedUnit": "Единица за брзина",
+ "settingsVolumeUnit": "Единица за волумен",
+ "settingsTwelveHourFormat": "12-часовен формат",
+ "settingsCoordinateFormat": "Формат за координати",
+ "settingsServerVersion": "Верзија на сервер",
+ "settingsAppVersion": "Верзија на апликација",
+ "settingsConnection": "Конекција",
+ "settingsDarkMode": "Dark мод",
+ "settingsTotpEnable": "Овозможи еднократна лозинка",
+ "settingsTotpForce": "Форсирај еднократна лозинка",
+ "settingsServiceWorkerUpdateInterval": "Интервал на ажурирање за ServiceWorker",
+ "settingsUpdateAvailable": "Достапна е нова верзија",
+ "settingsSupport": "Поддршка",
+ "reportTitle": "Извештаи",
+ "reportScheduled": "Редовни извештаи",
+ "reportDevice": "Уред",
+ "reportGroup": "Група",
+ "reportFrom": "Од",
+ "reportTo": "До",
+ "reportShow": "Прикажи",
+ "reportClear": "Избриши",
+ "linkGoogleMaps": "Google мапи",
+ "linkAppleMaps": "Apple мапи",
+ "linkStreetView": "Уличен поглед мод",
+ "positionFixTime": "Време за фиксирање",
+ "positionDeviceTime": "Време на уредот",
+ "positionServerTime": "Време на сервер",
+ "positionValid": "Валидно",
+ "positionAccuracy": "Прецизност",
+ "positionLatitude": "Географска ширина",
+ "positionLongitude": "Географска должина",
+ "positionAltitude": "Висина",
+ "positionSpeed": "Брзина",
+ "positionCourse": "Правец",
+ "positionAddress": "Адреса",
+ "positionProtocol": "Протокол",
+ "positionDistance": "Растојание",
+ "positionRpm": "Обртаи",
+ "positionFuel": "Гориво",
+ "positionPower": "Напојување",
+ "positionBattery": "Батерија",
+ "positionRaw": "Сирови податоци",
+ "positionIndex": "Index",
+ "positionHdop": "HDOP",
+ "positionVdop": "VDOP",
+ "positionPdop": "PDOP",
+ "positionSat": "Сателити",
+ "positionSatVisible": "Видливи сателити",
+ "positionRssi": "RSSI",
+ "positionGps": "ГПС",
+ "positionRoaming": "Роаминг",
+ "positionEvent": "Настан",
+ "positionAlarm": "Аларм",
+ "positionStatus": "Статус",
+ "positionOdometer": "Одометар",
+ "positionServiceOdometer": "Сервисен одометар",
+ "positionTripOdometer": "Патен одометар",
+ "positionHours": "Часови",
+ "positionSteps": "Чекори",
+ "positionInput": "Влез",
+ "positionHeartRate": "Пулс",
+ "positionOutput": "Излез",
+ "positionBatteryLevel": "Ниво на батерија",
+ "positionFuelConsumption": "Потрошувачка на гориво",
+ "positionRfid": "RFID",
+ "positionVersionFw": "Верзија на фирмвер",
+ "positionVersionHw": "Верзија на хардвер",
+ "positionIgnition": "Контакт-IGN",
+ "positionFlags": "Ознаки",
+ "positionCharge": "Полнење",
+ "positionIp": "IP",
+ "positionArchive": "Архива",
+ "positionVin": "Бр. шасија",
+ "positionApproximate": "Приближно",
+ "positionThrottle": "Гас",
+ "positionMotion": "Движење",
+ "positionArmed": "Активен",
+ "positionAcceleration": "Забрзување",
+ "positionTemp": "Температура",
+ "positionDeviceTemp": "Температура на уред",
+ "positionCoolantTemp": "Температура на разладен елемент",
+ "positionOperator": "Оператор",
+ "positionCommand": "Команда",
+ "positionBlocked": "Блокирано",
+ "positionDtcs": "DTCs",
+ "positionObdSpeed": "OBD Брзина",
+ "positionObdOdometer": "OBD одометар",
+ "positionDrivingTime": "Време на возење",
+ "positionDriverUniqueId": "ID на возач",
+ "positionCard": "Картичка",
+ "positionImage": "Слика",
+ "positionVideo": "Видео",
+ "positionAudio": "Аудио",
+ "serverTitle": "Подесувања за сервер",
+ "serverZoom": "Зумирање",
+ "serverRegistration": "Регистрација",
+ "serverReadonly": "Само преглед",
+ "serverForceSettings": "Форсирани поставки",
+ "serverAnnouncement": "Објава",
+ "serverName": "Име на сервер",
+ "serverDescription": "Опис на сервер",
+ "serverColorPrimary": "Примарна боја",
+ "serverColorSecondary": "Секундарна боја",
+ "serverLogo": "Слика за лого",
+ "serverLogoInverted": "Инверзна слика за лого",
+ "serverChangeDisable": "Оневозможи промена на сервер",
+ "serverDisableShare": "Оневозможи споделување на уреди",
+ "mapTitle": "Мапа",
+ "mapActive": "Активни мапи",
+ "mapOverlay": "Преклопени мапи",
+ "mapOverlayCustom": "Прилагодено преклопување",
+ "mapOpenSeaMap": "OpenSeaMap",
+ "mapOpenRailwayMap": "OpenRailwayMap",
+ "mapOpenWeatherKey": "OpenWeather API клуч",
+ "mapOpenWeatherClouds": "OpenWeather облаци",
+ "mapOpenWeatherPrecipitation": "OpenWeather врнежи",
+ "mapOpenWeatherPressure": "OpenWeather атм. притисок",
+ "mapOpenWeatherWind": "OpenWeather Ветер",
+ "mapOpenWeatherTemperature": "OpenWeather Температура",
+ "mapLayer": "Тип на мапа",
+ "mapCustom": "Прилагодено (XYZ)",
+ "mapCustomArcgis": "Прилагодено (ArcGIS)",
+ "mapCustomLabel": "Прилагодена мапа",
+ "mapCarto": "Carto Basemaps",
+ "mapOsm": "OpenStreetMap",
+ "mapGoogleRoad": "Google патишта",
+ "mapGoogleHybrid": "Google хибрид",
+ "mapGoogleSatellite": "Google сателити",
+ "mapOpenTopoMap": "OpenTopoMap",
+ "mapBingKey": "Bing Maps клуч",
+ "mapBingRoad": "Bing Maps патишта",
+ "mapBingAerial": "Bing Maps воздушна",
+ "mapBingHybrid": "Bing Maps хибрид",
+ "mapBaidu": "Baidu",
+ "mapAutoNavi": "AutoNavi",
+ "mapYandexMap": "Yandex Map",
+ "mapYandexSat": "Yandex сателит",
+ "mapWikimedia": "Wikimedia",
+ "mapOrdnanceSurvey": "Ordnance Survey",
+ "mapMapboxStreets": "Mapbox Streets",
+ "mapMapboxStreetsDark": "Mapbox Streets Dark",
+ "mapMapboxOutdoors": "Mapbox Outdoors",
+ "mapMapboxSatellite": "Mapbox сателит",
+ "mapMapboxKey": "Mapbox Токен за пристап",
+ "mapMapTilerBasic": "MapTiler основна",
+ "mapMapTilerHybrid": "MapTiler хибрид",
+ "mapMapTilerKey": "MapTiler API клуч",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqDark": "LocationIQ Dark",
+ "mapLocationIqKey": "LocationIQ токен за пристап",
+ "mapTomTomBasic": "TomTom основна",
+ "mapTomTomFlow": "TomTom сообраќај",
+ "mapTomTomIncidents": "TomTom инциденти во сообраќај",
+ "mapTomTomKey": "TomTom API клуч",
+ "mapHereBasic": "Here основна",
+ "mapHereHybrid": "Here хибрид",
+ "mapHereSatellite": "Here сателит",
+ "mapHereFlow": "Here сообраќај",
+ "mapHereKey": "Here API клуч",
+ "mapShapePolygon": "Полигон",
+ "mapShapeCircle": "Круг",
+ "mapShapePolyline": "Полилинија",
+ "mapLiveRoutes": "Рути во живо",
+ "mapDirection": "Покажи насоки",
+ "mapCurrentLocation": "Моментална локација",
+ "mapPoiLayer": "Слој за точки од интерес",
+ "mapClustering": "Организација на маркери",
+ "mapOnSelect": "Прикажи мапа при селекција",
+ "mapDefault": "Предефинирана мапа",
+ "stateTitle": "Состојба",
+ "stateName": "Атрибут",
+ "stateValue": "Вредност",
+ "commandTitle": "Команда",
+ "commandSend": "Испрати",
+ "commandSent": "Командата е испратена",
+ "commandQueued": "Командата е на чекање",
+ "commandUnit": "Единица",
+ "commandCustom": "Прилагодена команда",
+ "commandDeviceIdentification": "Идентификација на уред",
+ "commandPositionSingle": "Единечно известување",
+ "commandPositionPeriodic": "Периодично известување",
+ "commandPositionStop": "Исклучи известување",
+ "commandEngineStop": "Изгаснат мотор",
+ "commandEngineResume": "Мотор во работа",
+ "commandAlarmArm": "Активирај аларм",
+ "commandAlarmDisarm": "Деактивирај аларм",
+ "commandAlarmDismiss": "Откажи аларм",
+ "commandSetTimezone": "Постави временска зона",
+ "commandRequestPhoto": "Побарај фотографија",
+ "commandPowerOff": "Исклучи уред",
+ "commandRebootDevice": "Рестартирај уред",
+ "commandFactoryReset": "Фабрични подесувања",
+ "commandSendSms": "Испрати СМС",
+ "commandSendUssd": "Испрати USSD",
+ "commandSosNumber": "Постави SOS број",
+ "commandSilenceTime": "Постави тивко време",
+ "commandSetPhonebook": "Постави Контакти",
+ "commandVoiceMessage": "Говорна порака",
+ "commandOutputControl": "Контрола на излез",
+ "commandVoiceMonitoring": "Гласовен мониторинг",
+ "commandSetAgps": "Постави АГПС",
+ "commandSetIndicator": "Постави индикатор",
+ "commandConfiguration": "Конфигурација",
+ "commandGetVersion": "Провери верзија",
+ "commandFirmwareUpdate": "Надградба на фирмвер",
+ "commandSetConnection": "Постави конекција",
+ "commandSetOdometer": "Постави одометар",
+ "commandGetModemStatus": "Провери статус на модем",
+ "commandGetDeviceStatus": "Провери статус на уред",
+ "commandSetSpeedLimit": "Постави ограничување на брзина",
+ "commandModePowerSaving": "Економичен мод",
+ "commandModeDeepSleep": "Deep Sleep мод",
+ "commandAlarmGeofence": "Постави аларм за географска зона",
+ "commandAlarmBattery": "Постави аларм за батерија",
+ "commandAlarmSos": "Постави СОС аларм",
+ "commandAlarmRemove": "Поставки за бришење на аларм",
+ "commandAlarmClock": "Постави временски аларм",
+ "commandAlarmSpeed": "Постави аларм за брзина",
+ "commandAlarmFall": "Постави аларм за пад",
+ "commandAlarmVibration": "Постави аларм за вибрации",
+ "commandFrequency": "Фреквенција",
+ "commandTimezone": "Отстапување од временска зона",
+ "commandMessage": "Порака",
+ "commandRadius": "Радиус",
+ "commandEnable": "Овозможи",
+ "commandData": "Податоци",
+ "commandIndex": "Индекс",
+ "commandPhone": "Телефонски број",
+ "commandServer": "Сервер",
+ "commandPort": "Порт",
+ "eventAll": "Сите настани",
+ "eventDeviceOnline": "Статус вклучен",
+ "eventDeviceUnknown": "Статус напознат",
+ "eventDeviceOffline": "Статус исклучен",
+ "eventDeviceInactive": "Уредот е неактивен",
+ "eventQueuedCommandSent": "Испратена команда на чекање",
+ "eventDeviceMoving": "Уредот е во движење",
+ "eventDeviceStopped": "Уредот е запрен",
+ "eventDeviceOverspeed": "Брзината е над дозволената",
+ "eventDeviceFuelDrop": "Пад на ниво на гориво",
+ "eventDeviceFuelIncrease": "Дотур на гориво",
+ "eventCommandResult": "Статус од команда",
+ "eventGeofenceEnter": "Влез во географска зона",
+ "eventGeofenceExit": "Излез од географска зона",
+ "eventAlarm": "Аларм",
+ "eventIgnitionOn": "Вклучен контакт-IGN",
+ "eventIgnitionOff": "Исклучен контакт-IGN",
+ "eventMaintenance": "Потребно е да се изврши одржување",
+ "eventTextMessage": "Примена е текст порака",
+ "eventDriverChanged": "Променет возач",
+ "eventMedia": "Media",
+ "eventsScrollToLast": "Прелистај до последна",
+ "eventsSoundEvents": "Звучни настани",
+ "eventsSoundAlarms": "звучни аларми",
+ "alarmGeneral": "Општо",
+ "alarmSos": "СОС",
+ "alarmVibration": "Вибрација",
+ "alarmMovement": "Движење",
+ "alarmLowspeed": "Мала брзина",
+ "alarmOverspeed": "Прекорачување на брзината",
+ "alarmFallDown": "Пад",
+ "alarmLowPower": "Слаб напон",
+ "alarmLowBattery": "Ниско ниво на батерија",
+ "alarmFault": "дефект, грешка",
+ "alarmPowerOff": "Исклучи",
+ "alarmPowerOn": "Уклучи",
+ "alarmDoor": "Врата",
+ "alarmLock": "Заклучи",
+ "alarmUnlock": "Отклучи",
+ "alarmGeofence": "Географска зона",
+ "alarmGeofenceEnter": "Влез во географска зона",
+ "alarmGeofenceExit": "Излез од географска зона",
+ "alarmGpsAntennaCut": "ГПС антената е исклучена",
+ "alarmAccident": "Несреќа",
+ "alarmTow": "Влечи",
+ "alarmIdle": "Неутрална брзина-лер",
+ "alarmHighRpm": "Високи обртаи",
+ "alarmHardAcceleration": "Нагло забрзување",
+ "alarmHardBraking": "Нагло кочење",
+ "alarmHardCornering": "Нагло свртување",
+ "alarmLaneChange": "Промена на траса",
+ "alarmFatigueDriving": "Возење со замор",
+ "alarmPowerCut": "Прекин на напојување",
+ "alarmPowerRestored": "Напојувањето е вратено во функција",
+ "alarmJamming": "Блокирање",
+ "alarmTemperature": "Температура",
+ "alarmParking": "Паркирање",
+ "alarmBonnet": "Хауба",
+ "alarmFootBrake": "Кочница",
+ "alarmFuelLeak": "Истекување на гориво",
+ "alarmTampering": "Манипулирање",
+ "alarmRemoving": "Отстранување",
+ "notificationType": "Тип на известување",
+ "notificationAlways": "Сите уреди",
+ "notificationNotificators": "Канали",
+ "notificatorCommand": "Команда",
+ "notificatorWeb": "Веб",
+ "notificatorMail": "е-mail",
+ "notificatorSms": "СМС",
+ "notificatorFirebase": "Firebase",
+ "notificatorTraccar": "Traccar",
+ "notificatorTelegram": "Телеграм",
+ "notificatorPushover": "Проследи",
+ "reportReplay": "Репродукција",
+ "reportCombined": "Комбинирано",
+ "reportRoute": "Рута",
+ "reportEvents": "Настани",
+ "reportTrips": "Патувања",
+ "reportStops": "Застанувања",
+ "reportSummary": "Преглед",
+ "reportDaily": "Дневен преглед",
+ "reportChart": "Графикон",
+ "reportConfigure": "Конфигурирај",
+ "reportEventTypes": "Типови на настани",
+ "reportChartType": "Тип на графикон",
+ "reportShowMarkers": "Покажи маркери",
+ "reportExport": "Извези",
+ "reportEmail": "Извештај по е-mail",
+ "reportSchedule": "Распоред",
+ "reportPeriod": "Период",
+ "reportCustom": "Прилагодено",
+ "reportToday": "Денес",
+ "reportYesterday": "Вчера",
+ "reportThisWeek": "Тековна седмица",
+ "reportPreviousWeek": "Претходна седмица",
+ "reportThisMonth": "Тековен месец",
+ "reportPreviousMonth": "Претходен месец",
+ "reportDeviceName": "Име на уред",
+ "reportAverageSpeed": "Просечна брзина",
+ "reportMaximumSpeed": "Максимална брзина",
+ "reportEngineHours": "Работни саати",
+ "reportDuration": "Времетраење",
+ "reportStartDate": "Почетен датум",
+ "reportStartTime": "Почетно време",
+ "reportStartAddress": "Почетна адреса",
+ "reportEndTime": "Крајно време",
+ "reportEndAddress": "Крајна адреса",
+ "reportSpentFuel": "Потрошено гориво",
+ "reportStartOdometer": "Почетна километража",
+ "reportEndOdometer": "Крајна километража",
+ "statisticsTitle": "Статистики",
+ "statisticsCaptureTime": "Време на сликање",
+ "statisticsActiveUsers": "Активни корисници",
+ "statisticsActiveDevices": "Активни уреди",
+ "statisticsRequests": "Барања",
+ "statisticsMessagesReceived": "Примени пораки",
+ "statisticsMessagesStored": "Сочувани пораки",
+ "statisticsGeocoder": "барања од геокодер",
+ "statisticsGeolocation": "барања од геолокација",
+ "categoryArrow": "Стрелка",
+ "categoryDefault": "Основно",
+ "categoryAnimal": "Животно",
+ "categoryBicycle": "Велосипед",
+ "categoryBoat": "Чамец",
+ "categoryBus": "Автобус",
+ "categoryCar": "Автомобил",
+ "categoryCamper": "Кампер",
+ "categoryCrane": "Кран",
+ "categoryHelicopter": "Хеликоптер",
+ "categoryMotorcycle": "Моторцикл",
+ "categoryOffroad": "Теренец",
+ "categoryPerson": "Личност",
+ "categoryPickup": "Пикап",
+ "categoryPlane": "Авион",
+ "categoryShip": "Брод",
+ "categoryTractor": "Трактор",
+ "categoryTrain": "Воз",
+ "categoryTram": "Трамвај",
+ "categoryTrolleybus": "Тролејбус",
+ "categoryTruck": "Камион",
+ "categoryVan": "Комбе",
+ "categoryScooter": "Скутер",
+ "maintenanceStart": "Почеток",
+ "maintenancePeriod": "Период"
+} \ No newline at end of file
diff --git a/modern/src/resources/l10n/ml.json b/modern/src/resources/l10n/ml.json
index 7a5b1e5f..f160ce14 100644
--- a/modern/src/resources/l10n/ml.json
+++ b/modern/src/resources/l10n/ml.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "സെറ്റ്",
"sharedCancel": "റദ്ദാക്കുക",
+ "sharedCopy": "Copy",
"sharedAdd": "ചേര്‍ക്കുക",
"sharedEdit": "തിരുത്തുക",
"sharedRemove": "നീക്കം ചെയ്യുക",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "ഭൂപടം",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/mn.json b/modern/src/resources/l10n/mn.json
index 77534a07..b0873e99 100644
--- a/modern/src/resources/l10n/mn.json
+++ b/modern/src/resources/l10n/mn.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Тааруулах",
"sharedCancel": "Цуцлах",
+ "sharedCopy": "Copy",
"sharedAdd": "Нэмэх",
"sharedEdit": "Засах",
"sharedRemove": "Хасах",
@@ -99,7 +100,6 @@
"sharedImport": "Оруулах",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Map",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/ms.json b/modern/src/resources/l10n/ms.json
index ca93e1bd..f02945d9 100644
--- a/modern/src/resources/l10n/ms.json
+++ b/modern/src/resources/l10n/ms.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Set",
"sharedCancel": "Batal",
+ "sharedCopy": "Copy",
"sharedAdd": "Tambah",
"sharedEdit": "Ubah",
"sharedRemove": "Hapus",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Peta",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/nb.json b/modern/src/resources/l10n/nb.json
index 5ee7f4c5..dce77d22 100644
--- a/modern/src/resources/l10n/nb.json
+++ b/modern/src/resources/l10n/nb.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Sett",
"sharedCancel": "Avbryt",
+ "sharedCopy": "Copy",
"sharedAdd": "Legg til",
"sharedEdit": "Endre",
"sharedRemove": "Fjern",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Deaktiver hendelser",
- "attributeUiDisableVehicleFetures": "UI: Deaktiver kjøretøysfunksjoner",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Deaktiver sjåfører",
"attributeUiDisableComputedAttributes": "UI: Deaktiver utregnede egenskaper",
"attributeUiDisableCalendars": "UI: Deaktiver kalendere",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kart",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/ne.json b/modern/src/resources/l10n/ne.json
index e74c0e9e..6c45ecc9 100644
--- a/modern/src/resources/l10n/ne.json
+++ b/modern/src/resources/l10n/ne.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "सेट गर्ने ",
"sharedCancel": "रद्ध गर्ने ",
+ "sharedCopy": "Copy",
"sharedAdd": "थप्ने",
"sharedEdit": "सच्याउने",
"sharedRemove": "हटाउने ",
@@ -99,7 +100,6 @@
"sharedImport": "आयात",
"sharedColumns": "स्तम्भहरू",
"sharedDropzoneText": "यहाँ एउटा फाइल तान्नुहोस् र छोड्नुहोस् वा क्लिक गर्नुहोस्",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "सरल",
"calendarRecurrence": "पुनरावृत्ति",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: विशेषताहरू असक्षम गर्नुहोस्",
"attributeUiDisableGroups": "UI: समूहहरू असक्षम पार्नुहोस्",
"attributeUiDisableEvents": "UI: अक्षम घटनाहरू",
- "attributeUiDisableVehicleFetures": "UI: अक्षम सवारी बिशेषताहरू",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: अक्षम ड्राईभरहरू",
"attributeUiDisableComputedAttributes": "UI: गणना गरिएका विशेषताहरू असक्षम पार्नुहोस्",
"attributeUiDisableCalendars": "UI: अक्षम पात्रो",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "नक्शा ",
"mapActive": "सक्रिय नक्शा",
"mapOverlay": "नक्सा ओभरले",
diff --git a/modern/src/resources/l10n/nl.json b/modern/src/resources/l10n/nl.json
index 70215452..ac3322ea 100644
--- a/modern/src/resources/l10n/nl.json
+++ b/modern/src/resources/l10n/nl.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Instellen",
"sharedCancel": "Annuleren",
+ "sharedCopy": "Copy",
"sharedAdd": "Toevoegen",
"sharedEdit": "Bewerken",
"sharedRemove": "Verwijderen",
@@ -99,7 +100,6 @@
"sharedImport": "Importeren",
"sharedColumns": "Kolommen",
"sharedDropzoneText": "Sleep en plaats hier een bestand of klik hier",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Eenvoudig",
"calendarRecurrence": "Herhaling",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: attributen uitschakelen",
"attributeUiDisableGroups": "UI: groepen uitschakelen",
"attributeUiDisableEvents": "UI: Gebeurtenissen uitschakelen",
- "attributeUiDisableVehicleFetures": "UI: voertuigfuncties uitschakelen",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: bestuurders uitschakelen",
"attributeUiDisableComputedAttributes": "UI: berekende attributen uitschakelen",
"attributeUiDisableCalendars": "UI: kalenders uitschakelen",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kaart",
"mapActive": "Actieve kaarten",
"mapOverlay": "Kaartlaag",
diff --git a/modern/src/resources/l10n/nn.json b/modern/src/resources/l10n/nn.json
index 7c0932c8..08088233 100644
--- a/modern/src/resources/l10n/nn.json
+++ b/modern/src/resources/l10n/nn.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Sett",
"sharedCancel": "Avbryt",
+ "sharedCopy": "Copy",
"sharedAdd": "Legg til",
"sharedEdit": "Endre",
"sharedRemove": "Fjern",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Deaktiver hendingar",
- "attributeUiDisableVehicleFetures": "UI: Deaktiver køyretøy-funksjonar",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Deaktiver Sjåførar",
"attributeUiDisableComputedAttributes": "UI: Deaktiver Berekna eigenskaper",
"attributeUiDisableCalendars": "UI: Deaktiver kalendrar",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Kart",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/pl.json b/modern/src/resources/l10n/pl.json
index d0fda5d5..6ab7e537 100644
--- a/modern/src/resources/l10n/pl.json
+++ b/modern/src/resources/l10n/pl.json
@@ -5,6 +5,7 @@
"sharedUpload": "Wyślij",
"sharedSet": "Ustaw",
"sharedCancel": "Anuluj",
+ "sharedCopy": "Copy",
"sharedAdd": "Dodaj",
"sharedEdit": "Edytuj",
"sharedRemove": "Usuń",
@@ -99,7 +100,6 @@
"sharedImport": "Importuj",
"sharedColumns": "Kolumny",
"sharedDropzoneText": "Przeciągnij i upuść plik tutaj lub kliknij",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Prosty",
"calendarRecurrence": "Powtarzalny",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Wyłącz atrybuty",
"attributeUiDisableGroups": "UI: Wyłącz grupy",
"attributeUiDisableEvents": "UI: Wyłącz zdarzenia",
- "attributeUiDisableVehicleFetures": "UI: Wyłącz funkcje pojazdu",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Wyłącz kierowców",
"attributeUiDisableComputedAttributes": "UI: Wyłącz obliczone atrybuty",
"attributeUiDisableCalendars": "UI: Wyłącz kalendarze",
@@ -325,6 +325,7 @@
"serverLogo": "Obraz logo",
"serverLogoInverted": "Odwrócony obraz logo",
"serverChangeDisable": "Wyłącz zmianę serwera",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Aktywne mapy",
"mapOverlay": "Nakładka mapy",
diff --git a/modern/src/resources/l10n/pt.json b/modern/src/resources/l10n/pt.json
index 0f0eb294..c12ba6a0 100644
--- a/modern/src/resources/l10n/pt.json
+++ b/modern/src/resources/l10n/pt.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Conjunto",
"sharedCancel": "Cancelar",
+ "sharedCopy": "Copy",
"sharedAdd": "Adicionar",
"sharedEdit": "Editar",
"sharedRemove": "Remover",
@@ -99,7 +100,6 @@
"sharedImport": "Importar",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Desativar Eventos",
- "attributeUiDisableVehicleFetures": "UI: Desativar Caracteristicas",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Desativar Condutores",
"attributeUiDisableComputedAttributes": "UI: Desativar Atributos",
"attributeUiDisableCalendars": "UI: Desativar Calendários",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/pt_BR.json b/modern/src/resources/l10n/pt_BR.json
index 989ba10b..bad06285 100644
--- a/modern/src/resources/l10n/pt_BR.json
+++ b/modern/src/resources/l10n/pt_BR.json
@@ -5,6 +5,7 @@
"sharedUpload": "Enviar",
"sharedSet": "Aplicar",
"sharedCancel": "Cancelar",
+ "sharedCopy": "Copy",
"sharedAdd": "Adicionar",
"sharedEdit": "Editar",
"sharedRemove": "Remover",
@@ -99,7 +100,6 @@
"sharedImport": "Importar",
"sharedColumns": "Colunas",
"sharedDropzoneText": "Arraste e solte um arquivo aqui ou clique",
- "sharedLinkCopied": "Link copiado",
"sharedLogs": "Logs",
"calendarSimple": "Simples",
"calendarRecurrence": "Recorrência",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Desativar atributos",
"attributeUiDisableGroups": "UI: Desabilitar Grupos",
"attributeUiDisableEvents": "UI: Eventos Desativados",
- "attributeUiDisableVehicleFetures": "UI: Desativar Características do Veículo",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Desativar Motoristas",
"attributeUiDisableComputedAttributes": "UI: Desativar Atributos Calculados",
"attributeUiDisableCalendars": "UI: Desativar Calendários",
@@ -325,6 +325,7 @@
"serverLogo": "Imagem do Logo",
"serverLogoInverted": "Imagem do logo invertida",
"serverChangeDisable": "Desabilitar mudança de servidor",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Mapas ativos",
"mapOverlay": "Sobreposição de mapa",
diff --git a/modern/src/resources/l10n/ro.json b/modern/src/resources/l10n/ro.json
index eba9f118..e2254330 100644
--- a/modern/src/resources/l10n/ro.json
+++ b/modern/src/resources/l10n/ro.json
@@ -5,6 +5,7 @@
"sharedUpload": "Încarcă",
"sharedSet": "Configurare",
"sharedCancel": "Anulează",
+ "sharedCopy": "Copy",
"sharedAdd": "Adaugă",
"sharedEdit": "Modifică",
"sharedRemove": "Elimină",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Coloane",
"sharedDropzoneText": "Drag and drop un fișier aici ori click",
- "sharedLinkCopied": "Link Copiat",
"sharedLogs": "Logs",
"calendarSimple": "Simplu",
"calendarRecurrence": "Recurent",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Dezactivare Atribute",
"attributeUiDisableGroups": "UI: Dezactivare Grupuri",
"attributeUiDisableEvents": "UI: Dezactivare Evenimente",
- "attributeUiDisableVehicleFetures": "UI: Dezactivare Detalii Vehicul",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Dezactivare Șoferi",
"attributeUiDisableComputedAttributes": "UI: Dezactivare Atribute Calculate",
"attributeUiDisableCalendars": "UI: Dezactivare Calendar",
@@ -325,6 +325,7 @@
"serverLogo": "Imagine Logo",
"serverLogoInverted": "Imagine Logo Inversată",
"serverChangeDisable": "Dezactivează Schimbarea Serverului",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Hartă",
"mapActive": "Hărți Active",
"mapOverlay": "Suprapunere Hartă",
diff --git a/modern/src/resources/l10n/ru.json b/modern/src/resources/l10n/ru.json
index 90362a7b..e93a4211 100644
--- a/modern/src/resources/l10n/ru.json
+++ b/modern/src/resources/l10n/ru.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Установить",
"sharedCancel": "Отмена",
+ "sharedCopy": "Copy",
"sharedAdd": "Добавить",
"sharedEdit": "Редактировать",
"sharedRemove": "Удалить",
@@ -99,7 +100,6 @@
"sharedImport": "Импортировать",
"sharedColumns": "Колонка",
"sharedDropzoneText": "Перетащите файл сюда или нажмите",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Простой",
"calendarRecurrence": "Повторение",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Выключить атрибуты",
"attributeUiDisableGroups": "UI: Выключить группы",
"attributeUiDisableEvents": "UI: Отключить события",
- "attributeUiDisableVehicleFetures": "UI: Отключить автомобильные функции",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Отключить водителей",
"attributeUiDisableComputedAttributes": "UI: Отключить вычисляемые атрибуты",
"attributeUiDisableCalendars": "UI: Отключить календари",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Карта",
"mapActive": "Активные карты",
"mapOverlay": "Слой карты",
diff --git a/modern/src/resources/l10n/si.json b/modern/src/resources/l10n/si.json
index 08b35bd7..6a1a6983 100644
--- a/modern/src/resources/l10n/si.json
+++ b/modern/src/resources/l10n/si.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "සකසන්න",
"sharedCancel": "සිදු කරන්න",
+ "sharedCopy": "Copy",
"sharedAdd": "එක් කරන්න",
"sharedEdit": "සංස්කරණය",
"sharedRemove": "ඉවත් කරන්න",
@@ -99,7 +100,6 @@
"sharedImport": "ආනයන",
"sharedColumns": "තීරු",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: කණ්ඩායම් අබල කරන්න",
"attributeUiDisableEvents": "අ.මු.: සිදුවීම් අබල කරන්න",
- "attributeUiDisableVehicleFetures": "අ.මු.: වාහනයේ විශේෂාංග අබල කරන්න",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: ධාවක අක්‍රීය කරන්න",
"attributeUiDisableComputedAttributes": "UI: ගණනය කළ ගුණාංග අක්‍රීය කරන්න",
"attributeUiDisableCalendars": "අ.මු.: දින දසුන අබල කරන්න",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "දක්වා",
"mapActive": "ක්රියාකාරී සිතියම්",
"mapOverlay": "සිතියම උඩ තට්ටුව",
diff --git a/modern/src/resources/l10n/sk.json b/modern/src/resources/l10n/sk.json
index 381677bc..a9403aee 100644
--- a/modern/src/resources/l10n/sk.json
+++ b/modern/src/resources/l10n/sk.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Nastaviť",
"sharedCancel": "Zrušiť",
+ "sharedCopy": "Copy",
"sharedAdd": "Pridať",
"sharedEdit": "Upraviť",
"sharedRemove": "Odstrániť",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Zakázať udalosti",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Zakázať vodičov",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Zakázať kalendáre",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Mapa",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/sl.json b/modern/src/resources/l10n/sl.json
index 58e67e57..56db2551 100644
--- a/modern/src/resources/l10n/sl.json
+++ b/modern/src/resources/l10n/sl.json
@@ -5,6 +5,7 @@
"sharedUpload": "Naloži",
"sharedSet": "Nastavi",
"sharedCancel": "Prekini",
+ "sharedCopy": "Copy",
"sharedAdd": "Dodaj",
"sharedEdit": "Uredi",
"sharedRemove": "Odstrani",
@@ -99,7 +100,6 @@
"sharedImport": "Uvozi",
"sharedColumns": "Stolpci",
"sharedDropzoneText": "Povlecite in spustite datoteko sem ali kliknite",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Preprost",
"calendarRecurrence": "Ponovitev",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Zemljevid",
"mapActive": "Aktivni zemljevidi",
"mapOverlay": "Podatkovna plast",
diff --git a/modern/src/resources/l10n/sq.json b/modern/src/resources/l10n/sq.json
index 05f24ad9..8840ddcc 100644
--- a/modern/src/resources/l10n/sq.json
+++ b/modern/src/resources/l10n/sq.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Set",
"sharedCancel": "Anullim",
+ "sharedCopy": "Copy",
"sharedAdd": "Shto",
"sharedEdit": "Ndrysho",
"sharedRemove": "Hiq",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Harta",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/sr.json b/modern/src/resources/l10n/sr.json
index 3430308d..62951ee3 100644
--- a/modern/src/resources/l10n/sr.json
+++ b/modern/src/resources/l10n/sr.json
@@ -5,6 +5,7 @@
"sharedUpload": "Učitaj",
"sharedSet": "Podesi",
"sharedCancel": "Odustani",
+ "sharedCopy": "Kopiraj",
"sharedAdd": "Dodaj",
"sharedEdit": "Podesi",
"sharedRemove": "Ukloni",
@@ -99,7 +100,6 @@
"sharedImport": "Uvoz",
"sharedColumns": "Kolone",
"sharedDropzoneText": "Prevuci file i pusti ili klikni",
- "sharedLinkCopied": "Link je kopiran",
"sharedLogs": "Dnevnici",
"calendarSimple": "Jednostavno",
"calendarRecurrence": "Ponavljanje",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "Kor.Int.: Onemogući atribute",
"attributeUiDisableGroups": "UI: Onemogući grupe",
"attributeUiDisableEvents": "UI:Onemogući Dogadjaje",
- "attributeUiDisableVehicleFetures": "KI: Onemogući Karakteristike vozila",
+ "attributeUiDisableVehicleFeatures": "KI: Onemogući Karakteristike vozila",
"attributeUiDisableDrivers": "UI: Onemogući Vozače",
"attributeUiDisableComputedAttributes": "Kor.Int. : Onemogući Izračunate atribute",
"attributeUiDisableCalendars": "UI: Onemogući Kalendare",
@@ -325,6 +325,7 @@
"serverLogo": "Logo slika",
"serverLogoInverted": "Obrnuta logo slika",
"serverChangeDisable": "Onemogući Server promene",
+ "serverDisableShare": "Onemogući deljenje vozila",
"mapTitle": "Mapa",
"mapActive": "Aktivne mape",
"mapOverlay": "Preklapanje mape",
diff --git a/modern/src/resources/l10n/sv.json b/modern/src/resources/l10n/sv.json
index be77c2c0..0a2cf6df 100644
--- a/modern/src/resources/l10n/sv.json
+++ b/modern/src/resources/l10n/sv.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Set",
"sharedCancel": "Avbryt",
+ "sharedCopy": "Copy",
"sharedAdd": "Lägg till",
"sharedEdit": "Redigera",
"sharedRemove": "Radera",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Kolumn",
"sharedDropzoneText": "Dra och släpp en fil här eller klicka",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Enkel",
"calendarRecurrence": "Upprepning",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Inaktivera attribut",
"attributeUiDisableGroups": "UI: Inaktivera Grupper",
"attributeUiDisableEvents": "UI: Inaktivera Händelser",
- "attributeUiDisableVehicleFetures": "UI: Inaktivera Fordonsfunktioner",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Inaktivera Förare",
"attributeUiDisableComputedAttributes": "UI: Inaktivera Beräknade Attribut",
"attributeUiDisableCalendars": "UI: Inaktivera Kalendrar",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Karta",
"mapActive": "Aktiva Kartor",
"mapOverlay": "Kartöverlägg",
diff --git a/modern/src/resources/l10n/ta.json b/modern/src/resources/l10n/ta.json
index afb58d4e..d0b8af0e 100644
--- a/modern/src/resources/l10n/ta.json
+++ b/modern/src/resources/l10n/ta.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "அமை",
"sharedCancel": "ரத்து செய்",
+ "sharedCopy": "Copy",
"sharedAdd": "சேர்க்க",
"sharedEdit": "தொகுக்க",
"sharedRemove": "நீக்குக",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: முடக்கு நிகழ்வுகள்",
- "attributeUiDisableVehicleFetures": "UI: வாகன அம்சங்களை முடக்கு",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: முடக்கு இயக்கிகள்",
"attributeUiDisableComputedAttributes": "UI: கணக்கிடப்பட்ட பண்புக்கூறுகளை முடக்கு",
"attributeUiDisableCalendars": "UI: நாட்காட்டியை முடக்கு ",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "வரைபடம்",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/th.json b/modern/src/resources/l10n/th.json
index c3ebbd27..da646c3a 100644
--- a/modern/src/resources/l10n/th.json
+++ b/modern/src/resources/l10n/th.json
@@ -5,6 +5,7 @@
"sharedUpload": "อัพโหลด",
"sharedSet": "ตั้งค่า",
"sharedCancel": "ยกเลิก",
+ "sharedCopy": "คัดลอก",
"sharedAdd": "เพิ่ม",
"sharedEdit": "แก้ไข",
"sharedRemove": "ลบรายการ",
@@ -99,7 +100,6 @@
"sharedImport": "นำเข้า",
"sharedColumns": "คอลัมน์",
"sharedDropzoneText": "ลากและวางไฟล์ที่นี่หรือคลิก",
- "sharedLinkCopied": "คัดลอกลิงก์แล้ว",
"sharedLogs": "Logs",
"calendarSimple": "เรียบง่าย",
"calendarRecurrence": "การเกิดซ้ำ",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: ปิดใช้งานแอตทริบิวต์",
"attributeUiDisableGroups": "UI: ปิดการใช้งานกลุ่ม",
"attributeUiDisableEvents": "UI: ปิดการใช้งานเหตุการณ์",
- "attributeUiDisableVehicleFetures": "UI: ปิดการใช้งาน Fetures ยานพาหนะ",
+ "attributeUiDisableVehicleFeatures": "UI : ปิดการใช้งานคุณสมบัติของยานพาหนะ",
"attributeUiDisableDrivers": "UI: ปิดการใช้งานไดร์เวอร์",
"attributeUiDisableComputedAttributes": "UI: ปิดใช้งานแอ็ตทริบิวต์ที่คำนวณ",
"attributeUiDisableCalendars": "UI: ปิดปฏิทิน",
@@ -325,6 +325,7 @@
"serverLogo": "รูปภาพโลโก้",
"serverLogoInverted": "กลับด้านภาพโลโก้แล้ว",
"serverChangeDisable": "ปิดใช้งานการเปลี่ยนแปลงเซิร์ฟเวอร์",
+ "serverDisableShare": "ปิดใช้งานการแชร์อุปกรณ์",
"mapTitle": "แผนที่",
"mapActive": "แผนที่ที่ใช้งานอยู่",
"mapOverlay": "การวางซ้อนแผนที่",
diff --git a/modern/src/resources/l10n/tr.json b/modern/src/resources/l10n/tr.json
index b6b2c373..4400ec9f 100644
--- a/modern/src/resources/l10n/tr.json
+++ b/modern/src/resources/l10n/tr.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Belirle",
"sharedCancel": "İptal",
+ "sharedCopy": "Copy",
"sharedAdd": "Ekle",
"sharedEdit": "Düzenle",
"sharedRemove": "Kaldır",
@@ -99,7 +100,6 @@
"sharedImport": "İçe aktarmak",
"sharedColumns": "Sütunlar",
"sharedDropzoneText": "Bir dosyayı buraya sürükleyip bırakın veya tıklayın",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Basit",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "Etkinlikler Devredışı",
- "attributeUiDisableVehicleFetures": "Görünüm: Araç Özellikleri Devredışı",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "Görünüm: Sürücüler Devredışı",
"attributeUiDisableComputedAttributes": "Görünüm: Hesaplanmış Öznitelikler Devredışı",
"attributeUiDisableCalendars": "Görünüm: Takvim Devredışı",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Harita",
"mapActive": "Aktif Haritalar",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/uk.json b/modern/src/resources/l10n/uk.json
index 686e8670..2c9318e7 100644
--- a/modern/src/resources/l10n/uk.json
+++ b/modern/src/resources/l10n/uk.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Встановити",
"sharedCancel": "Відміна",
+ "sharedCopy": "Copy",
"sharedAdd": "Додати",
"sharedEdit": "Редагувати",
"sharedRemove": "Видалити",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Вимкнути події",
- "attributeUiDisableVehicleFetures": "UI: Вимкнути автомобільні функції",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Вимкнути водіїв",
"attributeUiDisableComputedAttributes": "UI: Вимкнути обчислювані атрибути",
"attributeUiDisableCalendars": "UI: Вимкнути календарі",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Карта",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/uz.json b/modern/src/resources/l10n/uz.json
index 0ad2c11c..9ed24f92 100644
--- a/modern/src/resources/l10n/uz.json
+++ b/modern/src/resources/l10n/uz.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Ўрнатиш",
"sharedCancel": "Бекор қилиш",
+ "sharedCopy": "Copy",
"sharedAdd": "Қўшиш",
"sharedEdit": "Таҳрирлаш",
"sharedRemove": "Ўчириш",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Харита",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/vi.json b/modern/src/resources/l10n/vi.json
index 3513c3b0..c05d9f74 100644
--- a/modern/src/resources/l10n/vi.json
+++ b/modern/src/resources/l10n/vi.json
@@ -5,6 +5,7 @@
"sharedUpload": "Upload",
"sharedSet": "Thiết lập",
"sharedCancel": "Hủy",
+ "sharedCopy": "Copy",
"sharedAdd": "Thêm mới",
"sharedEdit": "Chỉnh sửa",
"sharedRemove": "Xóa",
@@ -99,7 +100,6 @@
"sharedImport": "Import",
"sharedColumns": "Columns",
"sharedDropzoneText": "Drag and drop a file here or click",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "Simple",
"calendarRecurrence": "Recurrence",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "UI: Disable Attributes",
"attributeUiDisableGroups": "UI: Disable Groups",
"attributeUiDisableEvents": "UI: Disable Events",
- "attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "UI: Disable Drivers",
"attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
"attributeUiDisableCalendars": "UI: Disable Calendars",
@@ -325,6 +325,7 @@
"serverLogo": "Logo Image",
"serverLogoInverted": "Inverted Logo Image",
"serverChangeDisable": "Disable Server Change",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "Bản đồ",
"mapActive": "Active Maps",
"mapOverlay": "Map Overlay",
diff --git a/modern/src/resources/l10n/zh.json b/modern/src/resources/l10n/zh.json
index 178b9c42..463151d1 100644
--- a/modern/src/resources/l10n/zh.json
+++ b/modern/src/resources/l10n/zh.json
@@ -5,6 +5,7 @@
"sharedUpload": "上传",
"sharedSet": "设置",
"sharedCancel": "取消",
+ "sharedCopy": "Copy",
"sharedAdd": "添加",
"sharedEdit": "编辑",
"sharedRemove": "删除",
@@ -99,7 +100,6 @@
"sharedImport": "导入",
"sharedColumns": "显示列",
"sharedDropzoneText": "将文件拖放到此处或者单击",
- "sharedLinkCopied": "链接已复制",
"sharedLogs": "日志",
"calendarSimple": "简单",
"calendarRecurrence": "复现",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "用户界面:禁用属性",
"attributeUiDisableGroups": "用户界面:禁用分组",
"attributeUiDisableEvents": "用户界面:禁用事件",
- "attributeUiDisableVehicleFetures": "用户界面:禁用车辆特性",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "用户界面:禁用驾驶员",
"attributeUiDisableComputedAttributes": "用户界面:禁用计算属性",
"attributeUiDisableCalendars": "用户界面:禁用日历",
@@ -325,6 +325,7 @@
"serverLogo": "标识图片",
"serverLogoInverted": "倒置标识图片",
"serverChangeDisable": "禁用服务器更改",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "地图",
"mapActive": "已选地图",
"mapOverlay": "地图叠层",
diff --git a/modern/src/resources/l10n/zh_TW.json b/modern/src/resources/l10n/zh_TW.json
index 6a34ba23..a38507a0 100644
--- a/modern/src/resources/l10n/zh_TW.json
+++ b/modern/src/resources/l10n/zh_TW.json
@@ -5,6 +5,7 @@
"sharedUpload": "上傳",
"sharedSet": "設定",
"sharedCancel": "取消",
+ "sharedCopy": "Copy",
"sharedAdd": "新增",
"sharedEdit": "編輯",
"sharedRemove": "移除",
@@ -99,7 +100,6 @@
"sharedImport": "接入",
"sharedColumns": "列",
"sharedDropzoneText": "將文件拖放到此處或者點擊",
- "sharedLinkCopied": "Link copied",
"sharedLogs": "Logs",
"calendarSimple": "簡單",
"calendarRecurrence": "復現",
@@ -148,7 +148,7 @@
"attributeUiDisableAttributes": "用戶界面:禁用屬性",
"attributeUiDisableGroups": "用戶界面:禁用分組",
"attributeUiDisableEvents": "用戶界面:禁用事件",
- "attributeUiDisableVehicleFetures": "用戶界面:禁用車輛特性",
+ "attributeUiDisableVehicleFeatures": "UI: Disable Vehicle Features",
"attributeUiDisableDrivers": "用戶界面:禁用駕駛員",
"attributeUiDisableComputedAttributes": "用戶界面:禁用計算屬性",
"attributeUiDisableCalendars": "用戶界面:禁用日曆",
@@ -325,6 +325,7 @@
"serverLogo": "Logo 圖片",
"serverLogoInverted": "倒置 Logo 圖片",
"serverChangeDisable": "禁改伺服器",
+ "serverDisableShare": "Disable Device Sharing",
"mapTitle": "地圖",
"mapActive": "啟用地圖",
"mapOverlay": "地圖疊層",
diff --git a/modern/src/settings/AccumulatorsPage.jsx b/modern/src/settings/AccumulatorsPage.jsx
index 5067e4fd..1c9b6e65 100644
--- a/modern/src/settings/AccumulatorsPage.jsx
+++ b/modern/src/settings/AccumulatorsPage.jsx
@@ -10,7 +10,6 @@ import {
TextField,
Button,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useTranslation } from '../common/components/LocalizationProvider';
import PageLayout from '../common/components/PageLayout';
@@ -18,31 +17,11 @@ import SettingsMenu from './components/SettingsMenu';
import { useCatch } from '../reactHelper';
import { useAttributePreference } from '../common/util/preferences';
import { distanceFromMeters, distanceToMeters, distanceUnitString } from '../common/util/converter';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const AccumulatorsPage = () => {
const navigate = useNavigate();
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const distanceUnit = useAttributePreference('distanceUnit');
diff --git a/modern/src/settings/AnnouncementPage.jsx b/modern/src/settings/AnnouncementPage.jsx
new file mode 100644
index 00000000..39488f02
--- /dev/null
+++ b/modern/src/settings/AnnouncementPage.jsx
@@ -0,0 +1,106 @@
+import React, { useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import {
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Typography,
+ Container,
+ TextField,
+ Button,
+} from '@mui/material';
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
+import { useTranslation } from '../common/components/LocalizationProvider';
+import PageLayout from '../common/components/PageLayout';
+import SettingsMenu from './components/SettingsMenu';
+import { useCatchCallback } from '../reactHelper';
+import useSettingsStyles from './common/useSettingsStyles';
+import SelectField from '../common/components/SelectField';
+import { prefixString } from '../common/util/stringUtils';
+
+const AnnouncementPage = () => {
+ const navigate = useNavigate();
+ const classes = useSettingsStyles();
+ const t = useTranslation();
+
+ const [users, setUsers] = useState([]);
+ const [notificator, setNotificator] = useState();
+ const [message, setMessage] = useState({});
+
+ const handleSend = useCatchCallback(async () => {
+ const query = new URLSearchParams();
+ users.forEach((userId) => query.append('userId', userId));
+ const response = await fetch(`/api/notifications/send/${notificator}?${query.toString()}`, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(message),
+ });
+ if (response.ok) {
+ navigate(-1);
+ } else {
+ throw Error(await response.text());
+ }
+ }, [users, notificator, message, navigate]);
+
+ return (
+ <PageLayout menu={<SettingsMenu />} breadcrumbs={['serverAnnouncement']}>
+ <Container maxWidth="xs" className={classes.container}>
+ <Accordion defaultExpanded>
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+ <Typography variant="subtitle1">
+ {t('sharedRequired')}
+ </Typography>
+ </AccordionSummary>
+ <AccordionDetails className={classes.details}>
+ <SelectField
+ multiple
+ value={users}
+ onChange={(e) => setUsers(e.target.value)}
+ endpoint="/api/users"
+ label={t('settingsUsers')}
+ />
+ <SelectField
+ value={notificator}
+ onChange={(e) => setNotificator(e.target.value)}
+ endpoint="/api/notifications/notificators"
+ keyGetter={(it) => it.type}
+ titleGetter={(it) => t(prefixString('notificator', it.type))}
+ label={t('notificationNotificators')}
+ />
+ <TextField
+ value={message.subject}
+ onChange={(e) => setMessage({ ...message, subject: e.target.value })}
+ label={t('sharedSubject')}
+ />
+ <TextField
+ value={message.body}
+ onChange={(e) => setMessage({ ...message, body: e.target.value })}
+ label={t('commandMessage')}
+ />
+ </AccordionDetails>
+ </Accordion>
+ <div className={classes.buttons}>
+ <Button
+ type="button"
+ color="primary"
+ variant="outlined"
+ onClick={() => navigate(-1)}
+ >
+ {t('sharedCancel')}
+ </Button>
+ <Button
+ type="button"
+ color="primary"
+ variant="contained"
+ onClick={handleSend}
+ disabled={!notificator || !message.subject || !message.body}
+ >
+ {t('commandSend')}
+ </Button>
+ </div>
+ </Container>
+ </PageLayout>
+ );
+};
+
+export default AnnouncementPage;
diff --git a/modern/src/settings/CalendarPage.jsx b/modern/src/settings/CalendarPage.jsx
index b7dcdd04..8a3dc986 100644
--- a/modern/src/settings/CalendarPage.jsx
+++ b/modern/src/settings/CalendarPage.jsx
@@ -5,7 +5,6 @@ import TextField from '@mui/material/TextField';
import {
Accordion, AccordionSummary, AccordionDetails, Typography, FormControl, InputLabel, Select, MenuItem,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { DropzoneArea } from 'react-mui-dropzone';
import EditItemView from './components/EditItemView';
@@ -15,6 +14,7 @@ import SettingsMenu from './components/SettingsMenu';
import { prefixString } from '../common/util/stringUtils';
import { calendarsActions } from '../store';
import { useCatch } from '../reactHelper';
+import useSettingsStyles from './common/useSettingsStyles';
const formatCalendarTime = (time) => {
const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
@@ -61,17 +61,8 @@ const simpleCalendar = () => window.btoa([
'END:VCALENDAR',
].join('\n'));
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
-
const CalendarPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const dispatch = useDispatch();
const t = useTranslation();
diff --git a/modern/src/settings/CommandDevicePage.jsx b/modern/src/settings/CommandDevicePage.jsx
index ed802bfa..b3144cd0 100644
--- a/modern/src/settings/CommandDevicePage.jsx
+++ b/modern/src/settings/CommandDevicePage.jsx
@@ -8,7 +8,6 @@ import {
Container,
Button,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useTranslation } from '../common/components/LocalizationProvider';
import BaseCommandView from './components/BaseCommandView';
@@ -17,31 +16,11 @@ import PageLayout from '../common/components/PageLayout';
import SettingsMenu from './components/SettingsMenu';
import { useCatch } from '../reactHelper';
import { useRestriction } from '../common/util/permissions';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const CommandDevicePage = () => {
const navigate = useNavigate();
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
diff --git a/modern/src/settings/CommandGroupPage.jsx b/modern/src/settings/CommandGroupPage.jsx
index e2ba3946..e55a235d 100644
--- a/modern/src/settings/CommandGroupPage.jsx
+++ b/modern/src/settings/CommandGroupPage.jsx
@@ -16,37 +16,16 @@ import {
Checkbox,
TextField,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useTranslation } from '../common/components/LocalizationProvider';
import PageLayout from '../common/components/PageLayout';
import SettingsMenu from './components/SettingsMenu';
import { useCatch } from '../reactHelper';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const CommandDevicePage = () => {
const navigate = useNavigate();
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
diff --git a/modern/src/settings/CommandPage.jsx b/modern/src/settings/CommandPage.jsx
index 1d788610..e65ecd76 100644
--- a/modern/src/settings/CommandPage.jsx
+++ b/modern/src/settings/CommandPage.jsx
@@ -2,24 +2,15 @@ import React, { useState } from 'react';
import {
Accordion, AccordionSummary, AccordionDetails, Typography, TextField,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import EditItemView from './components/EditItemView';
import { useTranslation } from '../common/components/LocalizationProvider';
import BaseCommandView from './components/BaseCommandView';
import SettingsMenu from './components/SettingsMenu';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const CommandPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const [item, setItem] = useState();
diff --git a/modern/src/settings/ComputedAttributePage.jsx b/modern/src/settings/ComputedAttributePage.jsx
index e3a5e5a2..1b19033c 100644
--- a/modern/src/settings/ComputedAttributePage.jsx
+++ b/modern/src/settings/ComputedAttributePage.jsx
@@ -14,7 +14,6 @@ import {
Button,
Snackbar,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import EditItemView from './components/EditItemView';
import { useTranslation } from '../common/components/LocalizationProvider';
@@ -23,20 +22,12 @@ import SettingsMenu from './components/SettingsMenu';
import SelectField from '../common/components/SelectField';
import { useCatch } from '../reactHelper';
import { snackBarDurationLongMs } from '../common/util/duration';
+import useSettingsStyles from './common/useSettingsStyles';
const allowedProperties = ['valid', 'latitude', 'longitude', 'altitude', 'speed', 'course', 'address', 'accuracy'];
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
-
const ComputedAttributePage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const positionAttributes = usePositionAttributes(t);
diff --git a/modern/src/settings/DeviceConnectionsPage.jsx b/modern/src/settings/DeviceConnectionsPage.jsx
index 88d47872..10d0c3f6 100644
--- a/modern/src/settings/DeviceConnectionsPage.jsx
+++ b/modern/src/settings/DeviceConnectionsPage.jsx
@@ -7,7 +7,6 @@ import {
Typography,
Container,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import LinkField from '../common/components/LinkField';
import { useTranslation } from '../common/components/LocalizationProvider';
@@ -15,21 +14,10 @@ import SettingsMenu from './components/SettingsMenu';
import { formatNotificationTitle } from '../common/util/formatter';
import PageLayout from '../common/components/PageLayout';
import useFeatures from '../common/util/useFeatures';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const DeviceConnectionsPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
@@ -73,6 +61,7 @@ const DeviceConnectionsPage = () => {
baseId={id}
keyBase="deviceId"
keyLink="driverId"
+ titleGetter={(it) => `${it.name} (${it.uniqueId})`}
label={t('sharedDrivers')}
/>
)}
diff --git a/modern/src/settings/DevicePage.jsx b/modern/src/settings/DevicePage.jsx
index 72624270..0feb000b 100644
--- a/modern/src/settings/DevicePage.jsx
+++ b/modern/src/settings/DevicePage.jsx
@@ -9,7 +9,6 @@ import {
Checkbox,
TextField,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { DropzoneArea } from 'react-mui-dropzone';
import EditItemView from './components/EditItemView';
@@ -23,18 +22,10 @@ import SettingsMenu from './components/SettingsMenu';
import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttributes';
import { useCatch } from '../reactHelper';
import useQuery from '../common/util/useQuery';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const DevicePage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const admin = useAdministrator();
diff --git a/modern/src/settings/DevicesPage.jsx b/modern/src/settings/DevicesPage.jsx
index 5ef5aae5..c0da0ba7 100644
--- a/modern/src/settings/DevicesPage.jsx
+++ b/modern/src/settings/DevicesPage.jsx
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
import { useSelector } from 'react-redux';
import { useNavigate } from 'react-router-dom';
import {
- Table, TableRow, TableCell, TableHead, TableBody,
+ Table, TableRow, TableCell, TableHead, TableBody, Button, TableFooter,
} from '@mui/material';
import LinkIcon from '@mui/icons-material/Link';
import { useEffectAsync } from '../reactHelper';
@@ -48,6 +48,10 @@ const DevicesPage = () => {
}
}, [timestamp]);
+ const handleExport = () => {
+ window.location.assign('/api/reports/devices/xlsx');
+ };
+
const actionConnections = {
key: 'connections',
title: t('sharedConnections'),
@@ -94,6 +98,13 @@ const DevicesPage = () => {
</TableRow>
)) : (<TableShimmer columns={7} endAction />)}
</TableBody>
+ <TableFooter>
+ <TableRow>
+ <TableCell colSpan={8} align="right">
+ <Button onClick={handleExport} variant="text">{t('reportExport')}</Button>
+ </TableCell>
+ </TableRow>
+ </TableFooter>
</Table>
<CollectionFab editPath="/settings/device" />
</PageLayout>
diff --git a/modern/src/settings/DriverPage.jsx b/modern/src/settings/DriverPage.jsx
index 83d1f88f..5f70a44a 100644
--- a/modern/src/settings/DriverPage.jsx
+++ b/modern/src/settings/DriverPage.jsx
@@ -3,24 +3,15 @@ import TextField from '@mui/material/TextField';
import {
Accordion, AccordionSummary, AccordionDetails, Typography,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import EditItemView from './components/EditItemView';
import EditAttributesAccordion from './components/EditAttributesAccordion';
import { useTranslation } from '../common/components/LocalizationProvider';
import SettingsMenu from './components/SettingsMenu';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const DriverPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const [item, setItem] = useState();
diff --git a/modern/src/settings/GeofencePage.jsx b/modern/src/settings/GeofencePage.jsx
index 1d9e614b..c3c96ef8 100644
--- a/modern/src/settings/GeofencePage.jsx
+++ b/modern/src/settings/GeofencePage.jsx
@@ -3,7 +3,6 @@ import { useDispatch } from 'react-redux';
import {
Accordion, AccordionSummary, AccordionDetails, Typography, TextField,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import EditItemView from './components/EditItemView';
import EditAttributesAccordion from './components/EditAttributesAccordion';
@@ -12,18 +11,10 @@ import useGeofenceAttributes from '../common/attributes/useGeofenceAttributes';
import SettingsMenu from './components/SettingsMenu';
import SelectField from '../common/components/SelectField';
import { geofencesActions } from '../store';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const GeofencePage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const dispatch = useDispatch();
const t = useTranslation();
diff --git a/modern/src/settings/GroupConnectionsPage.jsx b/modern/src/settings/GroupConnectionsPage.jsx
index 8ea3b88e..cd4e743b 100644
--- a/modern/src/settings/GroupConnectionsPage.jsx
+++ b/modern/src/settings/GroupConnectionsPage.jsx
@@ -7,7 +7,6 @@ import {
Typography,
Container,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import LinkField from '../common/components/LinkField';
import { useTranslation } from '../common/components/LocalizationProvider';
@@ -15,21 +14,10 @@ import SettingsMenu from './components/SettingsMenu';
import { formatNotificationTitle } from '../common/util/formatter';
import PageLayout from '../common/components/PageLayout';
import useFeatures from '../common/util/useFeatures';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const GroupConnectionsPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
@@ -73,6 +61,7 @@ const GroupConnectionsPage = () => {
baseId={id}
keyBase="groupId"
keyLink="driverId"
+ titleGetter={(it) => `${it.name} (${it.uniqueId})`}
label={t('sharedDrivers')}
/>
)}
diff --git a/modern/src/settings/GroupPage.jsx b/modern/src/settings/GroupPage.jsx
index 64498b9c..ba1cbc76 100644
--- a/modern/src/settings/GroupPage.jsx
+++ b/modern/src/settings/GroupPage.jsx
@@ -5,7 +5,6 @@ import TextField from '@mui/material/TextField';
import {
Accordion, AccordionSummary, AccordionDetails, Typography,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import EditItemView from './components/EditItemView';
import EditAttributesAccordion from './components/EditAttributesAccordion';
@@ -16,18 +15,10 @@ import useCommonDeviceAttributes from '../common/attributes/useCommonDeviceAttri
import useGroupAttributes from '../common/attributes/useGroupAttributes';
import { useCatch } from '../reactHelper';
import { groupsActions } from '../store';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const GroupPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const dispatch = useDispatch();
const t = useTranslation();
diff --git a/modern/src/settings/MaintenancePage.jsx b/modern/src/settings/MaintenancePage.jsx
index 987789d5..420e2b82 100644
--- a/modern/src/settings/MaintenancePage.jsx
+++ b/modern/src/settings/MaintenancePage.jsx
@@ -10,7 +10,6 @@ import {
MenuItem,
Select,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { prefixString } from '../common/util/stringUtils';
import EditItemView from './components/EditItemView';
@@ -22,18 +21,10 @@ import {
import { useTranslation } from '../common/components/LocalizationProvider';
import usePositionAttributes from '../common/attributes/usePositionAttributes';
import SettingsMenu from './components/SettingsMenu';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const MaintenancePage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const positionAttributes = usePositionAttributes(t);
@@ -48,7 +39,7 @@ const MaintenancePage = () => {
const otherList = [];
Object.keys(attributes).forEach((key) => {
const value = attributes[key];
- if (value.type === 'number') {
+ if (value.type === 'number' || key.endsWith('Time')) {
otherList.push({ key, name: value.name, type: value.type });
}
});
diff --git a/modern/src/settings/NotificationPage.jsx b/modern/src/settings/NotificationPage.jsx
index 44399f92..63aa9b95 100644
--- a/modern/src/settings/NotificationPage.jsx
+++ b/modern/src/settings/NotificationPage.jsx
@@ -10,7 +10,6 @@ import {
FormGroup,
Button,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useTranslation, useTranslationKeys } from '../common/components/LocalizationProvider';
import EditItemView from './components/EditItemView';
@@ -18,18 +17,10 @@ import { prefixString, unprefixString } from '../common/util/stringUtils';
import SelectField from '../common/components/SelectField';
import SettingsMenu from './components/SettingsMenu';
import { useCatch } from '../reactHelper';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const NotificationPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const [item, setItem] = useState();
diff --git a/modern/src/settings/PreferencesPage.jsx b/modern/src/settings/PreferencesPage.jsx
index cfdcf885..2d6df62f 100644
--- a/modern/src/settings/PreferencesPage.jsx
+++ b/modern/src/settings/PreferencesPage.jsx
@@ -5,7 +5,6 @@ import { useNavigate } from 'react-router-dom';
import {
Accordion, AccordionSummary, AccordionDetails, Typography, Container, FormControl, InputLabel, Select, MenuItem, Checkbox, FormControlLabel, FormGroup, InputAdornment, IconButton, OutlinedInput, Autocomplete, TextField, createFilterOptions, Button,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import CachedIcon from '@mui/icons-material/Cached';
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
@@ -20,6 +19,7 @@ import useMapOverlays from '../map/overlay/useMapOverlays';
import { useCatch } from '../reactHelper';
import { sessionActions } from '../store';
import { useRestriction } from '../common/util/permissions';
+import useSettingsStyles from './common/useSettingsStyles';
const deviceFields = [
{ id: 'name', name: 'sharedName' },
@@ -29,33 +29,8 @@ const deviceFields = [
{ id: 'contact', name: 'deviceContact' },
];
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
- tokenActions: {
- display: 'flex',
- flexDirection: 'column',
- },
-}));
-
const PreferencesPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const dispatch = useDispatch();
const navigate = useNavigate();
const t = useTranslation();
@@ -332,7 +307,7 @@ const PreferencesPage = () => {
value={token || ''}
endAdornment={(
<InputAdornment position="end">
- <div className={classes.tokenActions}>
+ <div className={classes.verticalActions}>
<IconButton size="small" edge="end" onClick={generateToken} disabled={!!token}>
<CachedIcon fontSize="small" />
</IconButton>
diff --git a/modern/src/settings/ServerPage.jsx b/modern/src/settings/ServerPage.jsx
index 1020092b..0ac76334 100644
--- a/modern/src/settings/ServerPage.jsx
+++ b/modern/src/settings/ServerPage.jsx
@@ -16,7 +16,6 @@ import {
MenuItem,
FormGroup,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { useNavigate } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
@@ -33,30 +32,10 @@ import { useCatch } from '../reactHelper';
import useServerAttributes from '../common/attributes/useServerAttributes';
import useMapStyles from '../map/core/useMapStyles';
import { map } from '../map/core/MapView';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const ServerPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const navigate = useNavigate();
const dispatch = useDispatch();
const t = useTranslation();
diff --git a/modern/src/settings/SharePage.jsx b/modern/src/settings/SharePage.jsx
new file mode 100644
index 00000000..d16fe44d
--- /dev/null
+++ b/modern/src/settings/SharePage.jsx
@@ -0,0 +1,109 @@
+import React, { useState } from 'react';
+import { useSelector } from 'react-redux';
+import { useNavigate, useParams } from 'react-router-dom';
+import dayjs from 'dayjs';
+import {
+ Accordion,
+ AccordionSummary,
+ AccordionDetails,
+ Typography,
+ Container,
+ TextField,
+ Button,
+} from '@mui/material';
+import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
+import { useTranslation } from '../common/components/LocalizationProvider';
+import PageLayout from '../common/components/PageLayout';
+import SettingsMenu from './components/SettingsMenu';
+import { useCatchCallback } from '../reactHelper';
+import useSettingsStyles from './common/useSettingsStyles';
+
+const SharePage = () => {
+ const navigate = useNavigate();
+ const classes = useSettingsStyles();
+ const t = useTranslation();
+
+ const { id } = useParams();
+
+ const device = useSelector((state) => state.devices.items[id]);
+
+ const [expiration, setExpiration] = useState(dayjs().add(1, 'week').locale('en').format('YYYY-MM-DD'));
+ const [link, setLink] = useState();
+
+ const handleShare = useCatchCallback(async () => {
+ const expirationTime = dayjs(expiration).toISOString();
+ const response = await fetch('/api/devices/share', {
+ method: 'POST',
+ body: new URLSearchParams(`deviceId=${id}&expiration=${expirationTime}`),
+ });
+ if (response.ok) {
+ const token = await response.text();
+ setLink(`${window.location.origin}?token=${token}`);
+ } else {
+ throw Error(await response.text());
+ }
+ }, [id, expiration, setLink]);
+
+ return (
+ <PageLayout menu={<SettingsMenu />} breadcrumbs={['deviceShare']}>
+ <Container maxWidth="xs" className={classes.container}>
+ <Accordion defaultExpanded>
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+ <Typography variant="subtitle1">
+ {t('sharedRequired')}
+ </Typography>
+ </AccordionSummary>
+ <AccordionDetails className={classes.details}>
+ <TextField
+ value={device.name}
+ label={t('sharedDevice')}
+ disabled
+ />
+ <TextField
+ label={t('userExpirationTime')}
+ type="date"
+ value={(expiration && dayjs(expiration).locale('en').format('YYYY-MM-DD')) || '2099-01-01'}
+ onChange={(e) => setExpiration(dayjs(e.target.value, 'YYYY-MM-DD').locale('en').format())}
+ />
+ <Button
+ variant="outlined"
+ color="primary"
+ onClick={handleShare}
+ >
+ {t('reportShow')}
+ </Button>
+ <TextField
+ value={link || ''}
+ onChange={(e) => setLink(e.target.value)}
+ label={t('sharedLink')}
+ InputProps={{
+ readOnly: true,
+ }}
+ />
+ </AccordionDetails>
+ </Accordion>
+ <div className={classes.buttons}>
+ <Button
+ type="button"
+ color="primary"
+ variant="outlined"
+ onClick={() => navigate(-1)}
+ >
+ {t('sharedCancel')}
+ </Button>
+ <Button
+ type="button"
+ color="primary"
+ variant="contained"
+ onClick={() => navigator.clipboard?.writeText(link)}
+ disabled={!link}
+ >
+ {t('sharedCopy')}
+ </Button>
+ </div>
+ </Container>
+ </PageLayout>
+ );
+};
+
+export default SharePage;
diff --git a/modern/src/settings/UserConnectionsPage.jsx b/modern/src/settings/UserConnectionsPage.jsx
index 80de8835..3ca0bdc1 100644
--- a/modern/src/settings/UserConnectionsPage.jsx
+++ b/modern/src/settings/UserConnectionsPage.jsx
@@ -7,28 +7,16 @@ import {
Typography,
Container,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import LinkField from '../common/components/LinkField';
import { useTranslation } from '../common/components/LocalizationProvider';
import SettingsMenu from './components/SettingsMenu';
import { formatNotificationTitle } from '../common/util/formatter';
import PageLayout from '../common/components/PageLayout';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const UserConnectionsPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
@@ -52,6 +40,7 @@ const UserConnectionsPage = () => {
baseId={id}
keyBase="userId"
keyLink="deviceId"
+ titleGetter={(it) => `${it.name} (${it.uniqueId})`}
label={t('deviceTitle')}
/>
<LinkField
@@ -110,6 +99,7 @@ const UserConnectionsPage = () => {
baseId={id}
keyBase="userId"
keyLink="driverId"
+ titleGetter={(it) => `${it.name} (${it.uniqueId})`}
label={t('sharedDrivers')}
/>
<LinkField
diff --git a/modern/src/settings/UserPage.jsx b/modern/src/settings/UserPage.jsx
index f276beca..6748dd31 100644
--- a/modern/src/settings/UserPage.jsx
+++ b/modern/src/settings/UserPage.jsx
@@ -18,7 +18,6 @@ import {
IconButton,
OutlinedInput,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import DeleteForeverIcon from '@mui/icons-material/DeleteForever';
import CachedIcon from '@mui/icons-material/Cached';
@@ -38,18 +37,10 @@ import useQuery from '../common/util/useQuery';
import { useCatch } from '../reactHelper';
import useMapStyles from '../map/core/useMapStyles';
import { map } from '../map/core/MapView';
-
-const useStyles = makeStyles((theme) => ({
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from './common/useSettingsStyles';
const UserPage = () => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const navigate = useNavigate();
const dispatch = useDispatch();
const t = useTranslation();
@@ -92,7 +83,7 @@ const UserPage = () => {
const handleGenerateTotp = useCatch(async () => {
const response = await fetch('/api/users/totp', { method: 'POST' });
if (response.ok) {
- setItem({ ...item, totpKey: await response.text() })
+ setItem({ ...item, totpKey: await response.text() });
} else {
throw Error(await response.text());
}
diff --git a/modern/src/settings/UsersPage.jsx b/modern/src/settings/UsersPage.jsx
index d04f2a2b..2941965b 100644
--- a/modern/src/settings/UsersPage.jsx
+++ b/modern/src/settings/UsersPage.jsx
@@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import {
- Table, TableRow, TableCell, TableHead, TableBody,
+ Table, TableRow, TableCell, TableHead, TableBody, Switch, TableFooter, FormControlLabel,
} from '@mui/material';
import LoginIcon from '@mui/icons-material/Login';
import LinkIcon from '@mui/icons-material/Link';
@@ -31,6 +31,7 @@ const UsersPage = () => {
const [items, setItems] = useState([]);
const [searchKeyword, setSearchKeyword] = useState('');
const [loading, setLoading] = useState(false);
+ const [temporary, setTemporary] = useState(false);
const handleLogin = useCatch(async (userId) => {
const response = await fetch(`/api/session/${userId}`);
@@ -84,7 +85,7 @@ const UsersPage = () => {
</TableRow>
</TableHead>
<TableBody>
- {!loading ? items.filter(filterByKeyword(searchKeyword)).map((item) => (
+ {!loading ? items.filter((u) => temporary || !u.temporary).filter(filterByKeyword(searchKeyword)).map((item) => (
<TableRow key={item.id}>
<TableCell>{item.name}</TableCell>
<TableCell>{item.email}</TableCell>
@@ -103,6 +104,23 @@ const UsersPage = () => {
</TableRow>
)) : (<TableShimmer columns={6} endAction />)}
</TableBody>
+ <TableFooter>
+ <TableRow>
+ <TableCell colSpan={6} align="right">
+ <FormControlLabel
+ control={(
+ <Switch
+ value={temporary}
+ onChange={(e) => setTemporary(e.target.checked)}
+ size="small"
+ />
+ )}
+ label={t('userTemporary')}
+ labelPlacement="start"
+ />
+ </TableCell>
+ </TableRow>
+ </TableFooter>
</Table>
<CollectionFab editPath="/settings/user" />
</PageLayout>
diff --git a/modern/src/settings/common/useSettingsStyles.js b/modern/src/settings/common/useSettingsStyles.js
index 396af232..b276e0b7 100644
--- a/modern/src/settings/common/useSettingsStyles.js
+++ b/modern/src/settings/common/useSettingsStyles.js
@@ -8,4 +8,26 @@ export default makeStyles((theme) => ({
width: '1%',
paddingRight: theme.spacing(1),
},
+ container: {
+ marginTop: theme.spacing(2),
+ },
+ buttons: {
+ marginTop: theme.spacing(2),
+ marginBottom: theme.spacing(2),
+ display: 'flex',
+ justifyContent: 'space-evenly',
+ '& > *': {
+ flexBasis: '33%',
+ },
+ },
+ details: {
+ display: 'flex',
+ flexDirection: 'column',
+ gap: theme.spacing(2),
+ paddingBottom: theme.spacing(3),
+ },
+ verticalActions: {
+ display: 'flex',
+ flexDirection: 'column',
+ },
}));
diff --git a/modern/src/settings/components/EditAttributesAccordion.jsx b/modern/src/settings/components/EditAttributesAccordion.jsx
index 214ddb0e..4d4ae254 100644
--- a/modern/src/settings/components/EditAttributesAccordion.jsx
+++ b/modern/src/settings/components/EditAttributesAccordion.jsx
@@ -15,7 +15,6 @@ import {
Typography,
AccordionDetails,
} from '@mui/material';
-import makeStyles from '@mui/styles/makeStyles';
import CloseIcon from '@mui/icons-material/Close';
import AddIcon from '@mui/icons-material/Add';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
@@ -26,21 +25,10 @@ import {
distanceFromMeters, distanceToMeters, distanceUnitString, speedFromKnots, speedToKnots, speedUnitString, volumeFromLiters, volumeToLiters, volumeUnitString,
} from '../../common/util/converter';
import useFeatures from '../../common/util/useFeatures';
-
-const useStyles = makeStyles((theme) => ({
- removeButton: {
- marginRight: theme.spacing(1.5),
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- gap: theme.spacing(2),
- paddingBottom: theme.spacing(3),
- },
-}));
+import useSettingsStyles from '../common/useSettingsStyles';
const EditAttributesAccordion = ({ attribute, attributes, setAttributes, definitions, focusAttribute }) => {
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const features = useFeatures();
diff --git a/modern/src/settings/components/EditItemView.jsx b/modern/src/settings/components/EditItemView.jsx
index d45855dd..61bc4161 100644
--- a/modern/src/settings/components/EditItemView.jsx
+++ b/modern/src/settings/components/EditItemView.jsx
@@ -1,37 +1,18 @@
import React from 'react';
import { useNavigate, useParams } from 'react-router-dom';
-import makeStyles from '@mui/styles/makeStyles';
import {
Container, Button, Accordion, AccordionDetails, AccordionSummary, Skeleton, Typography, TextField,
} from '@mui/material';
import { useCatch, useEffectAsync } from '../../reactHelper';
import { useTranslation } from '../../common/components/LocalizationProvider';
import PageLayout from '../../common/components/PageLayout';
-
-const useStyles = makeStyles((theme) => ({
- container: {
- marginTop: theme.spacing(2),
- },
- buttons: {
- marginTop: theme.spacing(2),
- marginBottom: theme.spacing(2),
- display: 'flex',
- justifyContent: 'space-evenly',
- '& > *': {
- flexBasis: '33%',
- },
- },
- details: {
- display: 'flex',
- flexDirection: 'column',
- },
-}));
+import useSettingsStyles from '../common/useSettingsStyles';
const EditItemView = ({
children, endpoint, item, setItem, defaultItem, validate, onItemSaved, menu, breadcrumbs,
}) => {
const navigate = useNavigate();
- const classes = useStyles();
+ const classes = useSettingsStyles();
const t = useTranslation();
const { id } = useParams();
diff --git a/modern/src/settings/components/SettingsMenu.jsx b/modern/src/settings/components/SettingsMenu.jsx
index 0f3ebbe5..6d8c0fd7 100644
--- a/modern/src/settings/components/SettingsMenu.jsx
+++ b/modern/src/settings/components/SettingsMenu.jsx
@@ -14,6 +14,7 @@ import TodayIcon from '@mui/icons-material/Today';
import PublishIcon from '@mui/icons-material/Publish';
import SmartphoneIcon from '@mui/icons-material/Smartphone';
import HelpIcon from '@mui/icons-material/Help';
+import CampaignIcon from '@mui/icons-material/Campaign';
import { Link, useLocation } from 'react-router-dom';
import { useSelector } from 'react-redux';
import { useTranslation } from '../../common/components/LocalizationProvider';
@@ -139,12 +140,20 @@ const SettingsMenu = () => {
<Divider />
<List>
{admin && (
- <MenuItem
- title={t('settingsServer')}
- link="/settings/server"
- icon={<StorageIcon />}
- selected={location.pathname === '/settings/server'}
- />
+ <>
+ <MenuItem
+ title={t('serverAnnouncement')}
+ link="/settings/announcement"
+ icon={<CampaignIcon />}
+ selected={location.pathname === '/settings/announcement'}
+ />
+ <MenuItem
+ title={t('settingsServer')}
+ link="/settings/server"
+ icon={<StorageIcon />}
+ selected={location.pathname === '/settings/server'}
+ />
+ </>
)}
<MenuItem
title={t('settingsUsers')}