aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2021-09-06 11:59:42 -0700
committerAshutosh Bishnoi <mail2bishnoi@gmail.com>2022-02-15 11:28:09 +0530
commit682bc9db991ef5d550b6b0b780371f19359511ad (patch)
tree261e25a5edc102fa31c19af1fe365ebb89cd8d34
parent158f8ba27f354b53f4d25613d1ff1828cbad0bea (diff)
downloadtrackermap-web-682bc9db991ef5d550b6b0b780371f19359511ad.tar.gz
trackermap-web-682bc9db991ef5d550b6b0b780371f19359511ad.tar.bz2
trackermap-web-682bc9db991ef5d550b6b0b780371f19359511ad.zip
# This is a combination of 30 commits.
# This is the 1st commit message: Close socket on logout (fix #896) # This is the commit message #2: Fix lint # This is the commit message #3: Add calendar menu # This is the commit message #4: Add calendar file upload # This is the commit message #5: Disable icon tinting in Firefox # This is the commit message #6: Move ignition icon # This is the commit message #7: Specify icon sizes # This is the commit message #8: Fix lint issues # This is the commit message #9: Add accuracy button # This is the commit message #10: Merge shock and vibration alarms # This is the commit message #11: Add events alarm column # This is the commit message #12: Enable LocationIQ by default # This is the commit message #13: Update LocationIQ keys # This is the commit message #14: Fix selector style # This is the commit message #15: Support server change # This is the commit message #16: Update localization script # This is the commit message #17: Update localization # This is the commit message #18: Command to install dependency # This is the commit message #19: Update JavaScript libraries # This is the commit message #20: Fix modern app issues # This is the commit message #21: Fix image URL # This is the commit message #22: Fix user list (fix #898) # This is the commit message #23: Fix formatting issue # This is the commit message #24: Add option to disable reports # This is the commit message #25: Fix add button position # This is the commit message #26: Select device based on uniqueId # This is the commit message #27: Update devices list search # This is the commit message #28: Fix lint problems # This is the commit message #29: Changed devices list search # This is the commit message #30: Changed device list search
-rw-r--r--modern/package.json2
-rw-r--r--modern/public/images/icon/animal.svg2
-rw-r--r--modern/public/images/icon/bicycle.svg2
-rw-r--r--modern/public/images/icon/boat.svg2
-rw-r--r--modern/public/images/icon/bus.svg2
-rw-r--r--modern/public/images/icon/car.svg2
-rw-r--r--modern/public/images/icon/crane.svg2
-rw-r--r--modern/public/images/icon/default.svg2
-rw-r--r--modern/public/images/icon/helicopter.svg2
-rw-r--r--modern/public/images/icon/motorcycle.svg2
-rw-r--r--modern/public/images/icon/offroad.svg2
-rw-r--r--modern/public/images/icon/person.svg2
-rw-r--r--modern/public/images/icon/pickup.svg2
-rw-r--r--modern/public/images/icon/plane.svg2
-rw-r--r--modern/public/images/icon/scooter.svg2
-rw-r--r--modern/public/images/icon/ship.svg2
-rw-r--r--modern/public/images/icon/tractor.svg2
-rw-r--r--modern/public/images/icon/train.svg2
-rw-r--r--modern/public/images/icon/tram.svg2
-rw-r--r--modern/public/images/icon/trolleybus.svg2
-rw-r--r--modern/public/images/icon/truck.svg2
-rw-r--r--modern/public/images/icon/van.svg2
-rw-r--r--modern/public/images/ignition.svg (renamed from modern/public/images/icon/ignition.svg)0
-rw-r--r--modern/src/App.js4
-rw-r--r--modern/src/DevicesList.js23
-rw-r--r--modern/src/EditCollectionView.js6
-rw-r--r--modern/src/MainPage.js12
-rw-r--r--modern/src/SocketController.js25
-rw-r--r--modern/src/admin/UsersPage.js4
-rw-r--r--modern/src/attributes/useUserAttributes.js4
-rw-r--r--modern/src/components/SideNav.js2
-rw-r--r--modern/src/map/Map.js6
-rw-r--r--modern/src/map/mapStyles.js2
-rw-r--r--modern/src/map/mapUtil.js34
-rw-r--r--modern/src/reactHelper.js9
-rw-r--r--modern/src/reports/ReportFilter.js4
-rw-r--r--modern/src/settings/CalendarPage.js82
-rw-r--r--modern/src/settings/CalendarsPage.js63
-rw-r--r--modern/src/settings/OptionsLayout/useRoutes.js7
-rw-r--r--modern/src/theme/index.js4
-rw-r--r--modern/src/theme/overrides.js11
-rw-r--r--package.json4
-rwxr-xr-xtools/translate.py41
-rw-r--r--web/app/controller/Root.js10
-rw-r--r--web/app/model/Server.js3
-rw-r--r--web/app/model/User.js3
-rw-r--r--web/app/store/CommonUserAttributes.js6
-rw-r--r--web/app/store/MapTypes.js9
-rw-r--r--web/app/view/MainController.js4
-rw-r--r--web/app/view/ReportController.js6
-rw-r--r--web/app/view/State.js15
-rw-r--r--web/app/view/StateController.js3
-rw-r--r--web/app/view/dialog/Login.js41
-rw-r--r--web/app/view/dialog/Server.js6
-rw-r--r--web/app/view/dialog/User.js8
-rw-r--r--web/app/view/dialog/UserController.js1
-rw-r--r--web/app/view/map/BaseMap.js32
-rw-r--r--web/app/view/map/Map.js16
-rw-r--r--web/app/view/map/MapController.js8
-rw-r--r--web/l10n/af.json6
-rw-r--r--web/l10n/ar.json6
-rw-r--r--web/l10n/az.json6
-rw-r--r--web/l10n/bg.json6
-rw-r--r--web/l10n/bn.json6
-rw-r--r--web/l10n/cs.json24
-rw-r--r--web/l10n/da.json6
-rw-r--r--web/l10n/de.json6
-rw-r--r--web/l10n/el.json6
-rw-r--r--web/l10n/en.json6
-rw-r--r--web/l10n/es.json198
-rw-r--r--web/l10n/fa.json6
-rw-r--r--web/l10n/fi.json6
-rw-r--r--web/l10n/fr.json6
-rw-r--r--web/l10n/he.json6
-rw-r--r--web/l10n/hi.json10
-rw-r--r--web/l10n/hr.json6
-rw-r--r--web/l10n/hu.json6
-rw-r--r--web/l10n/id.json6
-rw-r--r--web/l10n/it.json6
-rw-r--r--web/l10n/ja.json6
-rw-r--r--web/l10n/ka.json6
-rw-r--r--web/l10n/kk.json6
-rw-r--r--web/l10n/km.json6
-rw-r--r--web/l10n/ko.json6
-rw-r--r--web/l10n/lo.json6
-rw-r--r--web/l10n/lt.json6
-rw-r--r--web/l10n/lv.json6
-rw-r--r--web/l10n/ml.json6
-rw-r--r--web/l10n/mn.json6
-rw-r--r--web/l10n/ms.json6
-rw-r--r--web/l10n/nb.json6
-rw-r--r--web/l10n/ne.json6
-rw-r--r--web/l10n/nl.json6
-rw-r--r--web/l10n/nn.json6
-rw-r--r--web/l10n/pl.json20
-rw-r--r--web/l10n/pt.json6
-rw-r--r--web/l10n/pt_BR.json6
-rw-r--r--web/l10n/ro.json6
-rw-r--r--web/l10n/ru.json6
-rw-r--r--web/l10n/si.json306
-rw-r--r--web/l10n/sk.json6
-rw-r--r--web/l10n/sl.json24
-rw-r--r--web/l10n/sq.json6
-rw-r--r--web/l10n/sr.json6
-rw-r--r--web/l10n/sv.json6
-rw-r--r--web/l10n/ta.json6
-rw-r--r--web/l10n/th.json6
-rw-r--r--web/l10n/tr.json6
-rw-r--r--web/l10n/uk.json6
-rw-r--r--web/l10n/uz.json6
-rw-r--r--web/l10n/vi.json6
-rw-r--r--web/l10n/zh.json6
-rw-r--r--web/l10n/zh_TW.json6
113 files changed, 989 insertions, 443 deletions
diff --git a/modern/package.json b/modern/package.json
index a9050fb5..4ac91845 100644
--- a/modern/package.json
+++ b/modern/package.json
@@ -13,9 +13,9 @@
"@tmcw/togeojson": "^4.5.0",
"@turf/circle": "^6.5.0",
"@turf/turf": "^6.4.0",
- "canvas-tint-image": "^2.0.1",
"mapbox-gl": "^1.13.1",
"maplibre-gl": "^1.15.0",
+ "material-ui-dropzone": "^3.5.0",
"moment": "^2.29.1",
"react": "^17.0.2",
"react-container-dimensions": "^1.4.1",
diff --git a/modern/public/images/icon/animal.svg b/modern/public/images/icon/animal.svg
index 87a914ca..5a239349 100644
--- a/modern/public/images/icon/animal.svg
+++ b/modern/public/images/icon/animal.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 8.9003906 3.0019531 C 8.7956094 2.9959687 8.6911875 3.0029844 8.5859375 3.0214844 C 7.4759375 3.2044844 6.813875 4.6223594 7.046875 6.3183594 C 7.182875 7.3053594 7.6113594 8.1708594 8.1933594 8.6308594 C 8.5023594 8.8738594 8.8396406 9 9.1816406 9 C 9.2586406 9 9.3360625 8.9934687 9.4140625 8.9804688 C 10.524062 8.7974688 11.186125 7.3795937 10.953125 5.6835938 C 10.817125 4.6965937 10.390594 3.8310937 9.8085938 3.3710938 C 9.5243437 3.1468438 9.2147344 3.0199063 8.9003906 3.0019531 z M 15.097656 3.0039062 C 14.782656 3.0227031 14.474906 3.1448906 14.191406 3.3691406 C 13.609406 3.8291406 13.181875 4.6936406 13.046875 5.6816406 C 12.814875 7.3786406 13.474984 8.7974688 14.583984 8.9804688 C 14.661984 8.9924688 14.740359 9 14.818359 9 C 15.161359 9 15.499594 8.8738594 15.808594 8.6308594 C 16.390594 8.1708594 16.818125 7.3063594 16.953125 6.3183594 C 17.185125 4.6213594 16.524062 3.2025312 15.414062 3.0195312 C 15.308063 3.0025313 15.202656 2.9976406 15.097656 3.0039062 z M 4.6484375 8 C 4.5197266 8.0056641 4.39225 8.0274063 4.265625 8.0664062 C 3.824625 8.2044063 3.4583281 8.5369062 3.2363281 9.0039062 C 2.9493281 9.6089062 2.9221094 10.382 3.1621094 11.125 C 3.5271094 12.257 4.4012969 13 5.2792969 13 C 5.4322969 13 5.584375 12.977641 5.734375 12.931641 C 6.175375 12.793641 6.5416719 12.461141 6.7636719 11.994141 C 7.0506719 11.389141 7.0778906 10.616047 6.8378906 9.8730469 C 6.4625156 8.7110469 5.5494141 7.9603516 4.6484375 8 z M 19.349609 8 C 18.447197 7.9608438 17.537484 8.7101719 17.162109 9.8730469 C 16.922109 10.615047 16.948328 11.389141 17.236328 11.994141 C 17.458328 12.461141 17.824625 12.793641 18.265625 12.931641 C 18.415625 12.977641 18.568703 13 18.720703 13 C 19.598703 13 20.471891 12.256047 20.837891 11.123047 C 21.077891 10.381047 21.051672 9.6089063 20.763672 9.0039062 C 20.541672 8.5369062 20.175375 8.2044062 19.734375 8.0664062 C 19.607375 8.0275313 19.478525 8.0055937 19.349609 8 z M 12 10 C 10.835 10 9.7605 11.077125 9.0625 12.828125 C 8.5395 14.138125 7.503625 15.152125 6.265625 15.828125 C 5.154625 16.434125 5 17.11725 5 17.65625 C 5 19.82025 8.533 20.998047 12 20.998047 C 15.467 20.998047 19 19.82025 19 17.65625 C 19 17.11725 18.845375 16.433172 17.734375 15.826172 C 16.495375 15.151172 15.4605 14.138125 14.9375 12.828125 C 14.2395 11.078125 13.165 10 12 10 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 8.9003906 3.0019531 C 8.7956094 2.9959687 8.6911875 3.0029844 8.5859375 3.0214844 C 7.4759375 3.2044844 6.813875 4.6223594 7.046875 6.3183594 C 7.182875 7.3053594 7.6113594 8.1708594 8.1933594 8.6308594 C 8.5023594 8.8738594 8.8396406 9 9.1816406 9 C 9.2586406 9 9.3360625 8.9934687 9.4140625 8.9804688 C 10.524062 8.7974688 11.186125 7.3795937 10.953125 5.6835938 C 10.817125 4.6965937 10.390594 3.8310937 9.8085938 3.3710938 C 9.5243437 3.1468438 9.2147344 3.0199063 8.9003906 3.0019531 z M 15.097656 3.0039062 C 14.782656 3.0227031 14.474906 3.1448906 14.191406 3.3691406 C 13.609406 3.8291406 13.181875 4.6936406 13.046875 5.6816406 C 12.814875 7.3786406 13.474984 8.7974688 14.583984 8.9804688 C 14.661984 8.9924688 14.740359 9 14.818359 9 C 15.161359 9 15.499594 8.8738594 15.808594 8.6308594 C 16.390594 8.1708594 16.818125 7.3063594 16.953125 6.3183594 C 17.185125 4.6213594 16.524062 3.2025312 15.414062 3.0195312 C 15.308063 3.0025313 15.202656 2.9976406 15.097656 3.0039062 z M 4.6484375 8 C 4.5197266 8.0056641 4.39225 8.0274063 4.265625 8.0664062 C 3.824625 8.2044063 3.4583281 8.5369062 3.2363281 9.0039062 C 2.9493281 9.6089062 2.9221094 10.382 3.1621094 11.125 C 3.5271094 12.257 4.4012969 13 5.2792969 13 C 5.4322969 13 5.584375 12.977641 5.734375 12.931641 C 6.175375 12.793641 6.5416719 12.461141 6.7636719 11.994141 C 7.0506719 11.389141 7.0778906 10.616047 6.8378906 9.8730469 C 6.4625156 8.7110469 5.5494141 7.9603516 4.6484375 8 z M 19.349609 8 C 18.447197 7.9608438 17.537484 8.7101719 17.162109 9.8730469 C 16.922109 10.615047 16.948328 11.389141 17.236328 11.994141 C 17.458328 12.461141 17.824625 12.793641 18.265625 12.931641 C 18.415625 12.977641 18.568703 13 18.720703 13 C 19.598703 13 20.471891 12.256047 20.837891 11.123047 C 21.077891 10.381047 21.051672 9.6089063 20.763672 9.0039062 C 20.541672 8.5369062 20.175375 8.2044062 19.734375 8.0664062 C 19.607375 8.0275313 19.478525 8.0055937 19.349609 8 z M 12 10 C 10.835 10 9.7605 11.077125 9.0625 12.828125 C 8.5395 14.138125 7.503625 15.152125 6.265625 15.828125 C 5.154625 16.434125 5 17.11725 5 17.65625 C 5 19.82025 8.533 20.998047 12 20.998047 C 15.467 20.998047 19 19.82025 19 17.65625 C 19 17.11725 18.845375 16.433172 17.734375 15.826172 C 16.495375 15.151172 15.4605 14.138125 14.9375 12.828125 C 14.2395 11.078125 13.165 10 12 10 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/bicycle.svg b/modern/public/images/icon/bicycle.svg
index 6cb40987..a473f4bc 100644
--- a/modern/public/images/icon/bicycle.svg
+++ b/modern/public/images/icon/bicycle.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 15 3 A 1.0001 1.0001 0 0 0 14 4 L 14 4.1855469 A 1.0001 1.0001 0 0 0 14.052734 4.5058594 L 14.978516 7.2382812 L 9.9550781 15 L 9.8925781 15 C 9.5602248 13.416061 8.4541484 12.127761 6.9960938 11.492188 L 8.5527344 9 L 11 9 L 11 7 L 5 7 L 5 9 L 6.1972656 9 L 4.9453125 11.003906 A 1.0001 1.0001 0 0 0 4.9003906 11.005859 A 1.0001 1.0001 0 0 0 4.8007812 11.023438 A 1.0001 1.0001 0 0 0 4.640625 11.072266 C 2.0692551 11.267733 5.9211895e-16 13.381669 0 16 C 0 18.745455 2.2545455 21 5 21 C 7.4035927 21 9.4308229 19.272621 9.8984375 17 L 10.5 17 A 1.0001 1.0001 0 0 0 11.339844 16.542969 L 15.796875 9.65625 L 16.490234 11.705078 C 15.010817 12.576973 14 14.171245 14 16 C 14 18.745455 16.254545 21 19 21 C 21.745455 21 24 18.745455 24 16 C 24 13.381005 21.929707 11.266824 19.357422 11.072266 A 1.0001 1.0001 0 0 0 19 11 C 18.788557 11 18.581767 11.017029 18.376953 11.042969 L 16.332031 5 L 19 5 C 19.56503 5 20 5.4349698 20 6 C 20 6.5650302 19.56503 7 19 7 L 19 9 C 20.64497 9 22 7.6449698 22 6 C 22 4.3550302 20.64497 3 19 3 L 15 3 z M 5 13 C 6.3020387 13 7.4022636 13.838627 7.8164062 15 L 5 15 L 5 17 L 7.8164062 17 C 7.4022636 18.161373 6.3020387 19 5 19 C 3.3454545 19 2 17.654545 2 16 C 2 14.345455 3.3454545 13 5 13 z M 19.041016 13.003906 C 20.676234 13.026486 22 14.359504 22 16 C 22 17.654545 20.654545 19 19 19 C 17.345455 19 16 17.654545 16 16 C 16 15.046643 16.45524 14.2061 17.150391 13.65625 L 18.052734 16.320312 L 19.947266 15.679688 L 19.041016 13.003906 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 15 3 A 1.0001 1.0001 0 0 0 14 4 L 14 4.1855469 A 1.0001 1.0001 0 0 0 14.052734 4.5058594 L 14.978516 7.2382812 L 9.9550781 15 L 9.8925781 15 C 9.5602248 13.416061 8.4541484 12.127761 6.9960938 11.492188 L 8.5527344 9 L 11 9 L 11 7 L 5 7 L 5 9 L 6.1972656 9 L 4.9453125 11.003906 A 1.0001 1.0001 0 0 0 4.9003906 11.005859 A 1.0001 1.0001 0 0 0 4.8007812 11.023438 A 1.0001 1.0001 0 0 0 4.640625 11.072266 C 2.0692551 11.267733 5.9211895e-16 13.381669 0 16 C 0 18.745455 2.2545455 21 5 21 C 7.4035927 21 9.4308229 19.272621 9.8984375 17 L 10.5 17 A 1.0001 1.0001 0 0 0 11.339844 16.542969 L 15.796875 9.65625 L 16.490234 11.705078 C 15.010817 12.576973 14 14.171245 14 16 C 14 18.745455 16.254545 21 19 21 C 21.745455 21 24 18.745455 24 16 C 24 13.381005 21.929707 11.266824 19.357422 11.072266 A 1.0001 1.0001 0 0 0 19 11 C 18.788557 11 18.581767 11.017029 18.376953 11.042969 L 16.332031 5 L 19 5 C 19.56503 5 20 5.4349698 20 6 C 20 6.5650302 19.56503 7 19 7 L 19 9 C 20.64497 9 22 7.6449698 22 6 C 22 4.3550302 20.64497 3 19 3 L 15 3 z M 5 13 C 6.3020387 13 7.4022636 13.838627 7.8164062 15 L 5 15 L 5 17 L 7.8164062 17 C 7.4022636 18.161373 6.3020387 19 5 19 C 3.3454545 19 2 17.654545 2 16 C 2 14.345455 3.3454545 13 5 13 z M 19.041016 13.003906 C 20.676234 13.026486 22 14.359504 22 16 C 22 17.654545 20.654545 19 19 19 C 17.345455 19 16 17.654545 16 16 C 16 15.046643 16.45524 14.2061 17.150391 13.65625 L 18.052734 16.320312 L 19.947266 15.679688 L 19.041016 13.003906 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/boat.svg b/modern/public/images/icon/boat.svg
index 592302a6..33bfe27d 100644
--- a/modern/public/images/icon/boat.svg
+++ b/modern/public/images/icon/boat.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 8.984375 2 A 1.0001 1.0001 0 0 0 8 3 L 8 3.171875 A 1.0001 1.0001 0 0 0 8.1796875 3.7441406 C 8.1180983 3.655854 8.2336897 3.8448895 8.3242188 4.0742188 C 8.4147476 4.303548 8.5237599 4.6182502 8.625 4.9804688 C 8.8274803 5.7049057 9 6.6278333 9 7.5 C 9 8.3721667 8.826034 9.3020135 8.6230469 10.035156 C 8.5215533 10.401728 8.4134185 10.720739 8.3222656 10.955078 C 8.2311127 11.189417 8.1185954 11.380905 8.1699219 11.304688 A 1.0001 1.0001 0 0 0 8 11.863281 L 8 12 A 1.0001 1.0001 0 0 0 9.125 12.992188 L 17.125 11.992188 A 1.0001 1.0001 0 0 0 18 11 C 18 7.3353738 15.68235 4.987833 13.509766 3.6992188 C 11.337181 2.4106043 9.1835938 2.0175781 9.1835938 2.0175781 A 1.0001 1.0001 0 0 0 8.984375 2 z M 10.568359 4.5625 C 11.166859 4.7839713 11.793876 5.0049413 12.490234 5.4179688 C 14.111319 6.3794746 15.54945 7.8407091 15.869141 10.132812 L 10.472656 10.808594 C 10.498986 10.720814 10.524991 10.661471 10.550781 10.568359 C 10.789539 9.7060027 11 8.6278333 11 7.5 C 11 6.4168081 10.795681 5.4010041 10.568359 4.5625 z M 3 14.990234 C 2.735 14.990234 2.4799687 15.095203 2.2929688 15.283203 C 2.1059688 15.471203 2 15.725234 2 15.990234 C 2 18.038234 2.5637344 19.616687 3.6777344 20.679688 C 5.1287344 22.064688 6.9660469 21.991234 6.9980469 21.990234 L 17.998047 22 L 18 22 C 21.007 22 23 17.73 23 16 C 23 15.448 22.553 15 22 15 L 3 14.990234 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 8.984375 2 A 1.0001 1.0001 0 0 0 8 3 L 8 3.171875 A 1.0001 1.0001 0 0 0 8.1796875 3.7441406 C 8.1180983 3.655854 8.2336897 3.8448895 8.3242188 4.0742188 C 8.4147476 4.303548 8.5237599 4.6182502 8.625 4.9804688 C 8.8274803 5.7049057 9 6.6278333 9 7.5 C 9 8.3721667 8.826034 9.3020135 8.6230469 10.035156 C 8.5215533 10.401728 8.4134185 10.720739 8.3222656 10.955078 C 8.2311127 11.189417 8.1185954 11.380905 8.1699219 11.304688 A 1.0001 1.0001 0 0 0 8 11.863281 L 8 12 A 1.0001 1.0001 0 0 0 9.125 12.992188 L 17.125 11.992188 A 1.0001 1.0001 0 0 0 18 11 C 18 7.3353738 15.68235 4.987833 13.509766 3.6992188 C 11.337181 2.4106043 9.1835938 2.0175781 9.1835938 2.0175781 A 1.0001 1.0001 0 0 0 8.984375 2 z M 10.568359 4.5625 C 11.166859 4.7839713 11.793876 5.0049413 12.490234 5.4179688 C 14.111319 6.3794746 15.54945 7.8407091 15.869141 10.132812 L 10.472656 10.808594 C 10.498986 10.720814 10.524991 10.661471 10.550781 10.568359 C 10.789539 9.7060027 11 8.6278333 11 7.5 C 11 6.4168081 10.795681 5.4010041 10.568359 4.5625 z M 3 14.990234 C 2.735 14.990234 2.4799687 15.095203 2.2929688 15.283203 C 2.1059688 15.471203 2 15.725234 2 15.990234 C 2 18.038234 2.5637344 19.616687 3.6777344 20.679688 C 5.1287344 22.064688 6.9660469 21.991234 6.9980469 21.990234 L 17.998047 22 L 18 22 C 21.007 22 23 17.73 23 16 C 23 15.448 22.553 15 22 15 L 3 14.990234 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/bus.svg b/modern/public/images/icon/bus.svg
index aa014fb8..5e881481 100644
--- a/modern/public/images/icon/bus.svg
+++ b/modern/public/images/icon/bus.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 11 3 C 7.375 3 3 3.237 3 7 L 3 18 C 3 18.884916 3.3906671 19.671627 4 20.220703 L 4 22 C 4 22.552 4.448 23 5 23 L 6 23 C 6.552 23 7 22.552 7 22 L 7 21 L 17 21 L 17 22 C 17 22.552 17.448 23 18 23 L 19 23 C 19.552 23 20 22.552 20 22 L 20 20.220703 C 20.609333 19.671627 21 18.884916 21 18 L 21 7 C 21 3.237 16.625 3 13 3 L 11 3 z M 5 7 L 19 7 L 19 13 L 5 13 L 5 7 z M 6.5 16 C 7.328 16 8 16.672 8 17.5 C 8 18.328 7.328 19 6.5 19 C 5.672 19 5 18.328 5 17.5 C 5 16.672 5.672 16 6.5 16 z M 17.5 16 C 18.328 16 19 16.672 19 17.5 C 19 18.328 18.328 19 17.5 19 C 16.672 19 16 18.328 16 17.5 C 16 16.672 16.672 16 17.5 16 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 11 3 C 7.375 3 3 3.237 3 7 L 3 18 C 3 18.884916 3.3906671 19.671627 4 20.220703 L 4 22 C 4 22.552 4.448 23 5 23 L 6 23 C 6.552 23 7 22.552 7 22 L 7 21 L 17 21 L 17 22 C 17 22.552 17.448 23 18 23 L 19 23 C 19.552 23 20 22.552 20 22 L 20 20.220703 C 20.609333 19.671627 21 18.884916 21 18 L 21 7 C 21 3.237 16.625 3 13 3 L 11 3 z M 5 7 L 19 7 L 19 13 L 5 13 L 5 7 z M 6.5 16 C 7.328 16 8 16.672 8 17.5 C 8 18.328 7.328 19 6.5 19 C 5.672 19 5 18.328 5 17.5 C 5 16.672 5.672 16 6.5 16 z M 17.5 16 C 18.328 16 19 16.672 19 17.5 C 19 18.328 18.328 19 17.5 19 C 16.672 19 16 18.328 16 17.5 C 16 16.672 16.672 16 17.5 16 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/car.svg b/modern/public/images/icon/car.svg
index 2d0cae40..f919e0be 100644
--- a/modern/public/images/icon/car.svg
+++ b/modern/public/images/icon/car.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M18.947,5.013C18.74,4.407,18.169,4,17.529,4H6.471C5.831,4,5.26,4.407,5.053,5.013L3,11v8c0,0.552,0.448,1,1,1h1 c0.552,0,1-0.448,1-1v-1h12v1c0,0.552,0.448,1,1,1h1c0.552,0,1-0.448,1-1v-8L18.947,5.013z M6.829,6h10.343l1.371,4H5.457L6.829,6z M6.5,15C5.672,15,5,14.328,5,13.5S5.672,12,6.5,12S8,12.672,8,13.5S7.328,15,6.5,15z M17.5,15c-0.828,0-1.5-0.672-1.5-1.5 s0.672-1.5,1.5-1.5s1.5,0.672,1.5,1.5S18.328,15,17.5,15z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M18.947,5.013C18.74,4.407,18.169,4,17.529,4H6.471C5.831,4,5.26,4.407,5.053,5.013L3,11v8c0,0.552,0.448,1,1,1h1 c0.552,0,1-0.448,1-1v-1h12v1c0,0.552,0.448,1,1,1h1c0.552,0,1-0.448,1-1v-8L18.947,5.013z M6.829,6h10.343l1.371,4H5.457L6.829,6z M6.5,15C5.672,15,5,14.328,5,13.5S5.672,12,6.5,12S8,12.672,8,13.5S7.328,15,6.5,15z M17.5,15c-0.828,0-1.5-0.672-1.5-1.5 s0.672-1.5,1.5-1.5s1.5,0.672,1.5,1.5S18.328,15,17.5,15z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/crane.svg b/modern/public/images/icon/crane.svg
index ff9dff4d..23db0916 100644
--- a/modern/public/images/icon/crane.svg
+++ b/modern/public/images/icon/crane.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 20.970703 1 A 1.0001 1.0001 0 0 0 20.59375 1.0859375 L 11.714844 5.03125 C 11.624515 5.018834 11.53526 5 11.443359 5 L 7 5 C 5.897 5 5 5.897 5 7 L 5 13 C 2.8026661 13 1 14.802666 1 17 L 1 18 L 1.203125 18 C 1.6594792 19.706363 3.1564058 21 5 21 L 17 21 C 18.843594 21 20.340521 19.706363 20.796875 18 L 21 18 L 21 17 C 21 14.802666 19.197334 13 17 13 L 17 11.220703 C 17 10.653703 16.808922 10.092703 16.419922 9.5957031 L 13.585938 6.390625 L 20 3.5390625 L 20 7.5 C 20 7.7869372 19.786937 8 19.5 8 C 19.213063 8 19 7.7869372 19 7.5 L 17 7.5 C 17 8.8690628 18.130937 10 19.5 10 C 20.869063 10 22 8.8690628 22 7.5 L 22 2 A 1.0001 1.0001 0 0 0 20.970703 1 z M 9 7 L 11.517578 7.0664062 L 14.111328 10 L 9 10 L 9 7 z M 5 15 L 17 15 C 18.116666 15 19 15.883334 19 17 C 19 18.116666 18.116666 19 17 19 L 5 19 C 3.8833339 19 3 18.116666 3 17 C 3 15.883334 3.8833339 15 5 15 z M 5 16 A 1 1 0 0 0 4 17 A 1 1 0 0 0 5 18 A 1 1 0 0 0 6 17 A 1 1 0 0 0 5 16 z M 9 16 A 1 1 0 0 0 8 17 A 1 1 0 0 0 9 18 A 1 1 0 0 0 10 17 A 1 1 0 0 0 9 16 z M 13 16 A 1 1 0 0 0 12 17 A 1 1 0 0 0 13 18 A 1 1 0 0 0 14 17 A 1 1 0 0 0 13 16 z M 17 16 A 1 1 0 0 0 16 17 A 1 1 0 0 0 17 18 A 1 1 0 0 0 18 17 A 1 1 0 0 0 17 16 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 20.970703 1 A 1.0001 1.0001 0 0 0 20.59375 1.0859375 L 11.714844 5.03125 C 11.624515 5.018834 11.53526 5 11.443359 5 L 7 5 C 5.897 5 5 5.897 5 7 L 5 13 C 2.8026661 13 1 14.802666 1 17 L 1 18 L 1.203125 18 C 1.6594792 19.706363 3.1564058 21 5 21 L 17 21 C 18.843594 21 20.340521 19.706363 20.796875 18 L 21 18 L 21 17 C 21 14.802666 19.197334 13 17 13 L 17 11.220703 C 17 10.653703 16.808922 10.092703 16.419922 9.5957031 L 13.585938 6.390625 L 20 3.5390625 L 20 7.5 C 20 7.7869372 19.786937 8 19.5 8 C 19.213063 8 19 7.7869372 19 7.5 L 17 7.5 C 17 8.8690628 18.130937 10 19.5 10 C 20.869063 10 22 8.8690628 22 7.5 L 22 2 A 1.0001 1.0001 0 0 0 20.970703 1 z M 9 7 L 11.517578 7.0664062 L 14.111328 10 L 9 10 L 9 7 z M 5 15 L 17 15 C 18.116666 15 19 15.883334 19 17 C 19 18.116666 18.116666 19 17 19 L 5 19 C 3.8833339 19 3 18.116666 3 17 C 3 15.883334 3.8833339 15 5 15 z M 5 16 A 1 1 0 0 0 4 17 A 1 1 0 0 0 5 18 A 1 1 0 0 0 6 17 A 1 1 0 0 0 5 16 z M 9 16 A 1 1 0 0 0 8 17 A 1 1 0 0 0 9 18 A 1 1 0 0 0 10 17 A 1 1 0 0 0 9 16 z M 13 16 A 1 1 0 0 0 12 17 A 1 1 0 0 0 13 18 A 1 1 0 0 0 14 17 A 1 1 0 0 0 13 16 z M 17 16 A 1 1 0 0 0 16 17 A 1 1 0 0 0 17 18 A 1 1 0 0 0 18 17 A 1 1 0 0 0 17 16 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/default.svg b/modern/public/images/icon/default.svg
index 886a6670..a4ba881f 100644
--- a/modern/public/images/icon/default.svg
+++ b/modern/public/images/icon/default.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M12,2C8.134,2,5,5.134,5,9c0,5,7,13,7,13s7-8,7-13C19,5.134,15.866,2,12,2z M12,11.5c-1.381,0-2.5-1.119-2.5-2.5 c0-1.381,1.119-2.5,2.5-2.5s2.5,1.119,2.5,2.5C14.5,10.381,13.381,11.5,12,11.5z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M12,2C8.134,2,5,5.134,5,9c0,5,7,13,7,13s7-8,7-13C19,5.134,15.866,2,12,2z M12,11.5c-1.381,0-2.5-1.119-2.5-2.5 c0-1.381,1.119-2.5,2.5-2.5s2.5,1.119,2.5,2.5C14.5,10.381,13.381,11.5,12,11.5z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/helicopter.svg b/modern/public/images/icon/helicopter.svg
index 19442684..2849ee8d 100644
--- a/modern/public/images/icon/helicopter.svg
+++ b/modern/public/images/icon/helicopter.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 2 3 L 2 5 L 9 5 L 9 3 L 2 3 z M 11 3 L 11 6.2050781 C 8.584 6.6840781 7.012375 7.956 6.359375 9 L 4 9 L 4 7 L 2 7 L 2 13 L 4 13 L 4 11 L 6 11 L 6 13.300781 C 6 15.370781 7.8795313 17 10.269531 17 L 13.810547 17 C 16.170547 17 21.570703 17 21.970703 13 L 17 13 C 14.79 13 13 11.21 13 9 L 13 3 L 11 3 z M 15 3 L 15 5 L 22 5 L 22 3 L 15 3 z M 15 6.1699219 L 15 9 C 15 10.1 15.9 11 17 11 L 21.740234 11 C 20.940234 8.64 18.28 6.7299219 15 6.1699219 z M 21 18 C 21 18.552 20.552 19 20 19 L 6 19 L 6 21 L 20 21 C 21.654 21 23 19.654 23 18 L 21 18 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 2 3 L 2 5 L 9 5 L 9 3 L 2 3 z M 11 3 L 11 6.2050781 C 8.584 6.6840781 7.012375 7.956 6.359375 9 L 4 9 L 4 7 L 2 7 L 2 13 L 4 13 L 4 11 L 6 11 L 6 13.300781 C 6 15.370781 7.8795313 17 10.269531 17 L 13.810547 17 C 16.170547 17 21.570703 17 21.970703 13 L 17 13 C 14.79 13 13 11.21 13 9 L 13 3 L 11 3 z M 15 3 L 15 5 L 22 5 L 22 3 L 15 3 z M 15 6.1699219 L 15 9 C 15 10.1 15.9 11 17 11 L 21.740234 11 C 20.940234 8.64 18.28 6.7299219 15 6.1699219 z M 21 18 C 21 18.552 20.552 19 20 19 L 6 19 L 6 21 L 20 21 C 21.654 21 23 19.654 23 18 L 21 18 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/motorcycle.svg b/modern/public/images/icon/motorcycle.svg
index 55c47e56..0289a346 100644
--- a/modern/public/images/icon/motorcycle.svg
+++ b/modern/public/images/icon/motorcycle.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 12 2 L 12 4 L 14.300781 4 L 15.228516 6.5371094 L 13.837891 7 L 11 7 A 1.0001 1.0001 0 0 0 10.292969 7.2929688 L 8.5859375 9 L 6 9 L 4 9 L 2 9 L 2 11 L 4 11 L 4 12.050781 C 1.7620407 12.304527 0 14.197514 0 16.5 C 0 18.973437 2.0265633 21 4.5 21 C 6.9734367 21 9 18.973437 9 16.5 C 9 16.272263 8.9647678 16.052912 8.9316406 15.833984 L 13.195312 14.980469 A 1.0001 1.0001 0 0 0 13.986328 14.164062 L 14.886719 8.7597656 L 15.916016 8.4160156 L 17.421875 12.535156 C 15.991607 13.291295 15 14.778882 15 16.5 C 15 18.973437 17.026563 21 19.5 21 C 21.973437 21 24 18.973437 24 16.5 C 24 14.026563 21.973437 12 19.5 12 C 19.452602 12 19.408387 12.012195 19.361328 12.013672 L 17.894531 8 L 21 8 L 21 6 L 17.162109 6 L 15.939453 2.65625 A 1.0001 1.0001 0 0 0 15 2 L 12 2 z M 11.414062 9 L 12.820312 9 L 12.126953 13.154297 L 8.1914062 13.941406 C 7.6586419 13.176759 6.8905699 12.598894 6 12.279297 L 6 11 L 9 11 A 1.0001 1.0001 0 0 0 9.7070312 10.707031 L 11.414062 9 z M 4.5 14 C 5.8925565 14 7 15.107443 7 16.5 C 7 17.892557 5.8925565 19 4.5 19 C 3.1074435 19 2 17.892557 2 16.5 C 2 15.107443 3.1074435 14 4.5 14 z M 19.5 14 C 20.892557 14 22 15.107443 22 16.5 C 22 17.892557 20.892557 19 19.5 19 C 18.107443 19 17 17.892557 17 16.5 C 17 15.107443 18.107443 14 19.5 14 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 12 2 L 12 4 L 14.300781 4 L 15.228516 6.5371094 L 13.837891 7 L 11 7 A 1.0001 1.0001 0 0 0 10.292969 7.2929688 L 8.5859375 9 L 6 9 L 4 9 L 2 9 L 2 11 L 4 11 L 4 12.050781 C 1.7620407 12.304527 0 14.197514 0 16.5 C 0 18.973437 2.0265633 21 4.5 21 C 6.9734367 21 9 18.973437 9 16.5 C 9 16.272263 8.9647678 16.052912 8.9316406 15.833984 L 13.195312 14.980469 A 1.0001 1.0001 0 0 0 13.986328 14.164062 L 14.886719 8.7597656 L 15.916016 8.4160156 L 17.421875 12.535156 C 15.991607 13.291295 15 14.778882 15 16.5 C 15 18.973437 17.026563 21 19.5 21 C 21.973437 21 24 18.973437 24 16.5 C 24 14.026563 21.973437 12 19.5 12 C 19.452602 12 19.408387 12.012195 19.361328 12.013672 L 17.894531 8 L 21 8 L 21 6 L 17.162109 6 L 15.939453 2.65625 A 1.0001 1.0001 0 0 0 15 2 L 12 2 z M 11.414062 9 L 12.820312 9 L 12.126953 13.154297 L 8.1914062 13.941406 C 7.6586419 13.176759 6.8905699 12.598894 6 12.279297 L 6 11 L 9 11 A 1.0001 1.0001 0 0 0 9.7070312 10.707031 L 11.414062 9 z M 4.5 14 C 5.8925565 14 7 15.107443 7 16.5 C 7 17.892557 5.8925565 19 4.5 19 C 3.1074435 19 2 17.892557 2 16.5 C 2 15.107443 3.1074435 14 4.5 14 z M 19.5 14 C 20.892557 14 22 15.107443 22 16.5 C 22 17.892557 20.892557 19 19.5 19 C 18.107443 19 17 17.892557 17 16.5 C 17 15.107443 18.107443 14 19.5 14 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/offroad.svg b/modern/public/images/icon/offroad.svg
index 80c9507a..b0072b69 100644
--- a/modern/public/images/icon/offroad.svg
+++ b/modern/public/images/icon/offroad.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M22,6h-2v2.65l-1.02-4.84C18.89,3.34,18.48,3,18,3H6C5.52,3,5.11,3.34,5.02,3.81L4,8.64V6H2v3h1.62L2.3,10.28 C2.11,10.47,2,10.73,2,11v9c0,0.552,0.448,1,1,1h2l-0.006-3h14.011L19,21h2c0.552,0,1-0.448,1-1v-9c0-0.27-0.11-0.53-0.31-0.72 L20.37,9H22V6z M6.82,5h10.36l0.79,4H6.03L6.82,5z M5.5,15C4.67,15,4,14.33,4,13.5C4,12.67,4.67,12,5.5,12S7,12.67,7,13.5 C7,14.33,6.33,15,5.5,15z M15,16H9v-4h6V16z M18.5,15c-0.83,0-1.5-0.67-1.5-1.5c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5 C20,14.33,19.33,15,18.5,15z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M22,6h-2v2.65l-1.02-4.84C18.89,3.34,18.48,3,18,3H6C5.52,3,5.11,3.34,5.02,3.81L4,8.64V6H2v3h1.62L2.3,10.28 C2.11,10.47,2,10.73,2,11v9c0,0.552,0.448,1,1,1h2l-0.006-3h14.011L19,21h2c0.552,0,1-0.448,1-1v-9c0-0.27-0.11-0.53-0.31-0.72 L20.37,9H22V6z M6.82,5h10.36l0.79,4H6.03L6.82,5z M5.5,15C4.67,15,4,14.33,4,13.5C4,12.67,4.67,12,5.5,12S7,12.67,7,13.5 C7,14.33,6.33,15,5.5,15z M15,16H9v-4h6V16z M18.5,15c-0.83,0-1.5-0.67-1.5-1.5c0-0.83,0.67-1.5,1.5-1.5s1.5,0.67,1.5,1.5 C20,14.33,19.33,15,18.5,15z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/person.svg b/modern/public/images/icon/person.svg
index f470355a..805ba442 100644
--- a/modern/public/images/icon/person.svg
+++ b/modern/public/images/icon/person.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 12 4 C 9.789063 4 8 5.789063 8 8 C 8 10.210938 9.789063 12 12 12 C 14.210938 12 16 10.210938 16 8 C 16 5.789063 14.210938 4 12 4 Z M 9.03125 13.40625 C 5.253906 14.550781 4 17.65625 4 17.65625 L 4 20 L 20 20 L 20 17.65625 C 20 17.65625 18.746094 14.550781 14.96875 13.40625 C 14.761719 14.863281 13.511719 16 12 16 C 10.488281 16 9.238281 14.863281 9.03125 13.40625 Z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 12 4 C 9.789063 4 8 5.789063 8 8 C 8 10.210938 9.789063 12 12 12 C 14.210938 12 16 10.210938 16 8 C 16 5.789063 14.210938 4 12 4 Z M 9.03125 13.40625 C 5.253906 14.550781 4 17.65625 4 17.65625 L 4 20 L 20 20 L 20 17.65625 C 20 17.65625 18.746094 14.550781 14.96875 13.40625 C 14.761719 14.863281 13.511719 16 12 16 C 10.488281 16 9.238281 14.863281 9.03125 13.40625 Z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/pickup.svg b/modern/public/images/icon/pickup.svg
index d14f6bb7..db4494b7 100644
--- a/modern/public/images/icon/pickup.svg
+++ b/modern/public/images/icon/pickup.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 8 3 A 1.0001 1.0001 0 0 0 7 4 L 7 10 L 1 10 C 0.45 10 0 10.45 0 11 L 0 18 C 0 18.55 0.45 19 1 19 L 2.5605469 19 C 3.2568565 20.187528 4.5333802 21 6 21 C 7.4666198 21 8.7431435 20.187528 9.4394531 19 L 14.560547 19 C 15.256857 20.187528 16.53338 21 18 21 C 19.46662 21 20.743143 20.187528 21.439453 19 L 23 19 C 23.55 19 24 18.55 24 18 L 24 12.820312 C 24 11.870312 23.320625 11.039375 22.390625 10.859375 L 18.642578 10.109375 L 14.869141 3.5039062 A 1.0001 1.0001 0 0 0 14 3 L 8 3 z M 9 5 L 13.419922 5 L 16.275391 10 L 9 10 L 9 5 z M 6 15 C 7.1164141 15 8 15.883586 8 17 C 8 18.116414 7.1164141 19 6 19 C 4.8835859 19 4 18.116414 4 17 C 4 15.883586 4.8835859 15 6 15 z M 18 15 C 19.116414 15 20 15.883586 20 17 C 20 18.116414 19.116414 19 18 19 C 16.883586 19 16 18.116414 16 17 C 16 15.883586 16.883586 15 18 15 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 8 3 A 1.0001 1.0001 0 0 0 7 4 L 7 10 L 1 10 C 0.45 10 0 10.45 0 11 L 0 18 C 0 18.55 0.45 19 1 19 L 2.5605469 19 C 3.2568565 20.187528 4.5333802 21 6 21 C 7.4666198 21 8.7431435 20.187528 9.4394531 19 L 14.560547 19 C 15.256857 20.187528 16.53338 21 18 21 C 19.46662 21 20.743143 20.187528 21.439453 19 L 23 19 C 23.55 19 24 18.55 24 18 L 24 12.820312 C 24 11.870312 23.320625 11.039375 22.390625 10.859375 L 18.642578 10.109375 L 14.869141 3.5039062 A 1.0001 1.0001 0 0 0 14 3 L 8 3 z M 9 5 L 13.419922 5 L 16.275391 10 L 9 10 L 9 5 z M 6 15 C 7.1164141 15 8 15.883586 8 17 C 8 18.116414 7.1164141 19 6 19 C 4.8835859 19 4 18.116414 4 17 C 4 15.883586 4.8835859 15 6 15 z M 18 15 C 19.116414 15 20 15.883586 20 17 C 20 18.116414 19.116414 19 18 19 C 16.883586 19 16 18.116414 16 17 C 16 15.883586 16.883586 15 18 15 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/plane.svg b/modern/public/images/icon/plane.svg
index 5f4890b7..5210e4c9 100644
--- a/modern/public/images/icon/plane.svg
+++ b/modern/public/images/icon/plane.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M8,22h2l4.997-8H20c1.105,0,2-0.895,2-2s-0.895-2-2-2h-5.003L10,2H8l2.493,8H4.996L3.5,8H2l1,4l-1,4h1.5l1.496-2h5.497 L8,22z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M8,22h2l4.997-8H20c1.105,0,2-0.895,2-2s-0.895-2-2-2h-5.003L10,2H8l2.493,8H4.996L3.5,8H2l1,4l-1,4h1.5l1.496-2h5.497 L8,22z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/scooter.svg b/modern/public/images/icon/scooter.svg
index e3b6df0d..ea23f9fa 100644
--- a/modern/public/images/icon/scooter.svg
+++ b/modern/public/images/icon/scooter.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 17.5 3 C 16.672 3 16 3.672 16 4.5 C 16 4.6761216 16.035954 4.8429605 16.091797 5 L 14 5 L 14 7 L 16.310547 7 L 16.519531 7.5605469 L 12.619141 11 L 9 11 L 9 9 L 12 9 L 12 7 L 2 7 L 2 9 L 4.2402344 9 L 3.7304688 9.4492188 C 2.5804687 10.439219 1 11.8 1 14 C 1 14.27 1.1090625 14.520938 1.2890625 14.710938 L 1.4472656 14.869141 C 1.1853855 15.359439 1.0234375 15.909585 1.0234375 16.5 C 1.0234375 18.418558 2.5945875 20 4.5117188 20 C 6.2579417 20 7.7029312 18.683767 7.9492188 17 L 16.074219 17 C 16.320506 18.683767 17.765496 20 19.511719 20 C 21.42885 20 23 18.418558 23 16.5 C 23 15.033786 22.079411 13.770945 20.791016 13.253906 L 20.695312 13 L 23 13 L 23 11 L 19.945312 11 L 18.070312 6 L 20 6 L 20 3 L 17.5 3 z M 4.5117188 15 C 5.3427564 15 6 15.657134 6 16.5 C 6 17.342866 5.3427564 18 4.5117188 18 C 3.6806811 18 3.0234375 17.342866 3.0234375 16.5 C 3.0234375 15.657134 3.6806811 15 4.5117188 15 z M 19.511719 15 C 20.342756 15 21 15.657134 21 16.5 C 21 17.342866 20.342756 18 19.511719 18 C 18.680681 18 18.023438 17.342866 18.023438 16.5 C 18.023438 15.657134 18.680681 15 19.511719 15 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 17.5 3 C 16.672 3 16 3.672 16 4.5 C 16 4.6761216 16.035954 4.8429605 16.091797 5 L 14 5 L 14 7 L 16.310547 7 L 16.519531 7.5605469 L 12.619141 11 L 9 11 L 9 9 L 12 9 L 12 7 L 2 7 L 2 9 L 4.2402344 9 L 3.7304688 9.4492188 C 2.5804687 10.439219 1 11.8 1 14 C 1 14.27 1.1090625 14.520938 1.2890625 14.710938 L 1.4472656 14.869141 C 1.1853855 15.359439 1.0234375 15.909585 1.0234375 16.5 C 1.0234375 18.418558 2.5945875 20 4.5117188 20 C 6.2579417 20 7.7029312 18.683767 7.9492188 17 L 16.074219 17 C 16.320506 18.683767 17.765496 20 19.511719 20 C 21.42885 20 23 18.418558 23 16.5 C 23 15.033786 22.079411 13.770945 20.791016 13.253906 L 20.695312 13 L 23 13 L 23 11 L 19.945312 11 L 18.070312 6 L 20 6 L 20 3 L 17.5 3 z M 4.5117188 15 C 5.3427564 15 6 15.657134 6 16.5 C 6 17.342866 5.3427564 18 4.5117188 18 C 3.6806811 18 3.0234375 17.342866 3.0234375 16.5 C 3.0234375 15.657134 3.6806811 15 4.5117188 15 z M 19.511719 15 C 20.342756 15 21 15.657134 21 16.5 C 21 17.342866 20.342756 18 19.511719 18 C 18.680681 18 18.023438 17.342866 18.023438 16.5 C 18.023438 15.657134 18.680681 15 19.511719 15 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/ship.svg b/modern/public/images/icon/ship.svg
index 58b21f4b..b8c563c8 100644
--- a/modern/public/images/icon/ship.svg
+++ b/modern/public/images/icon/ship.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 11 2 L 11 3 L 9 3 A 1.0001 1.0001 0 0 0 8 4 L 8 5 L 6 5 A 1.0001 1.0001 0 0 0 5 6 L 5 10.880859 L 4.1601562 11.109375 C 3.3001563 11.289375 2.5804688 11.889219 2.2304688 12.699219 C 1.8804687 13.509219 1.940625 14.439453 2.390625 15.189453 L 4 17.880859 L 4 18.980469 C 3.9171433 18.988279 3.8366386 19 3.75 19 C 3.1869011 19 2.694455 18.824995 2.3925781 18.605469 C 2.0907013 18.385943 2 18.181158 2 18 L 0 18 C 0 18.923842 0.52342369 19.718432 1.2167969 20.222656 C 1.91017 20.72688 2.7940989 21 3.75 21 C 4.7059011 21 5.58983 20.72688 6.2832031 20.222656 C 6.3611489 20.165974 6.4268517 20.093089 6.5 20.029297 C 6.5731483 20.093089 6.6388511 20.165974 6.7167969 20.222656 C 7.41017 20.72688 8.2940989 21 9.25 21 C 10.205901 21 11.08983 20.72688 11.783203 20.222656 C 11.861149 20.165974 11.926852 20.093089 12 20.029297 C 12.073148 20.093089 12.138851 20.165974 12.216797 20.222656 C 12.91017 20.72688 13.794099 21 14.75 21 C 15.705901 21 16.58983 20.72688 17.283203 20.222656 C 17.361149 20.165974 17.426852 20.093089 17.5 20.029297 C 17.573148 20.093089 17.638851 20.165974 17.716797 20.222656 C 18.41017 20.72688 19.294099 21 20.25 21 C 21.205901 21 22.08983 20.72688 22.783203 20.222656 C 23.476576 19.718432 24 18.923842 24 18 L 22 18 C 22 18.181158 21.9093 18.385943 21.607422 18.605469 C 21.305545 18.824995 20.813099 19 20.25 19 C 20.163361 19 20.082857 18.988279 20 18.980469 L 20 17.880859 L 21.609375 15.199219 C 22.059375 14.439219 22.119531 13.509219 21.769531 12.699219 C 21.419531 11.889219 20.700625 11.299141 19.890625 11.119141 L 19 10.876953 L 19 6 A 1.0001 1.0001 0 0 0 18 5 L 16 5 L 16 4 A 1.0001 1.0001 0 0 0 15 3 L 13 3 L 13 2 L 11 2 z M 10 5 L 14 5 L 14 6 A 1.0001 1.0001 0 0 0 15 7 L 17 7 L 17 10.335938 L 12 8.9804688 L 7 10.337891 L 7 7 L 9 7 A 1.0001 1.0001 0 0 0 10 6 L 10 5 z M 8 14 C 8.6 14 9 14.47 9 15 C 9 15.53 8.6 16 8 16 C 7.4 16 7 15.53 7 15 C 7 14.47 7.4 14 8 14 z M 16 14 C 16.6 14 17 14.47 17 15 C 17 15.53 16.6 16 16 16 C 15.4 16 15 15.53 15 15 C 15 14.47 15.4 14 16 14 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 11 2 L 11 3 L 9 3 A 1.0001 1.0001 0 0 0 8 4 L 8 5 L 6 5 A 1.0001 1.0001 0 0 0 5 6 L 5 10.880859 L 4.1601562 11.109375 C 3.3001563 11.289375 2.5804688 11.889219 2.2304688 12.699219 C 1.8804687 13.509219 1.940625 14.439453 2.390625 15.189453 L 4 17.880859 L 4 18.980469 C 3.9171433 18.988279 3.8366386 19 3.75 19 C 3.1869011 19 2.694455 18.824995 2.3925781 18.605469 C 2.0907013 18.385943 2 18.181158 2 18 L 0 18 C 0 18.923842 0.52342369 19.718432 1.2167969 20.222656 C 1.91017 20.72688 2.7940989 21 3.75 21 C 4.7059011 21 5.58983 20.72688 6.2832031 20.222656 C 6.3611489 20.165974 6.4268517 20.093089 6.5 20.029297 C 6.5731483 20.093089 6.6388511 20.165974 6.7167969 20.222656 C 7.41017 20.72688 8.2940989 21 9.25 21 C 10.205901 21 11.08983 20.72688 11.783203 20.222656 C 11.861149 20.165974 11.926852 20.093089 12 20.029297 C 12.073148 20.093089 12.138851 20.165974 12.216797 20.222656 C 12.91017 20.72688 13.794099 21 14.75 21 C 15.705901 21 16.58983 20.72688 17.283203 20.222656 C 17.361149 20.165974 17.426852 20.093089 17.5 20.029297 C 17.573148 20.093089 17.638851 20.165974 17.716797 20.222656 C 18.41017 20.72688 19.294099 21 20.25 21 C 21.205901 21 22.08983 20.72688 22.783203 20.222656 C 23.476576 19.718432 24 18.923842 24 18 L 22 18 C 22 18.181158 21.9093 18.385943 21.607422 18.605469 C 21.305545 18.824995 20.813099 19 20.25 19 C 20.163361 19 20.082857 18.988279 20 18.980469 L 20 17.880859 L 21.609375 15.199219 C 22.059375 14.439219 22.119531 13.509219 21.769531 12.699219 C 21.419531 11.889219 20.700625 11.299141 19.890625 11.119141 L 19 10.876953 L 19 6 A 1.0001 1.0001 0 0 0 18 5 L 16 5 L 16 4 A 1.0001 1.0001 0 0 0 15 3 L 13 3 L 13 2 L 11 2 z M 10 5 L 14 5 L 14 6 A 1.0001 1.0001 0 0 0 15 7 L 17 7 L 17 10.335938 L 12 8.9804688 L 7 10.337891 L 7 7 L 9 7 A 1.0001 1.0001 0 0 0 10 6 L 10 5 z M 8 14 C 8.6 14 9 14.47 9 15 C 9 15.53 8.6 16 8 16 C 7.4 16 7 15.53 7 15 C 7 14.47 7.4 14 8 14 z M 16 14 C 16.6 14 17 14.47 17 15 C 17 15.53 16.6 16 16 16 C 15.4 16 15 15.53 15 15 C 15 14.47 15.4 14 16 14 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/tractor.svg b/modern/public/images/icon/tractor.svg
index 03c577ef..3a9e9f25 100644
--- a/modern/public/images/icon/tractor.svg
+++ b/modern/public/images/icon/tractor.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 5 4 C 4.448 4 4 4.448 4 5 L 4 11.609375 C 2.2234889 12.523708 1 14.3737 1 16.5 C 1 19.525721 3.4742785 22 6.5 22 C 9.0054253 22 11.12762 20.301307 11.785156 18 L 16.050781 18 C 16.026575 18.164905 16 18.328781 16 18.5 C 16 20.421152 17.578848 22 19.5 22 C 21.421152 22 23 20.421152 23 18.5 C 23 17.116848 22.175306 15.9223 21 15.355469 L 21 10 C 21 9.448 20.552 9 20 9 L 17 9 L 17 6 L 18 6 L 19 6 L 19 4 L 18 4 L 17 4 C 15.906937 4 15 4.9069372 15 6 L 15 9 L 12.677734 9 L 10.927734 4.6289062 C 10.775734 4.2499062 10.409 4 10 4 L 5 4 z M 6.5 13 C 8.4448413 13 10 14.555159 10 16.5 C 10 18.444841 8.4448413 20 6.5 20 C 4.5551587 20 3 18.444841 3 16.5 C 3 14.555159 4.5551587 13 6.5 13 z M 6.5 15 A 1.5 1.5 0 0 0 5 16.5 A 1.5 1.5 0 0 0 6.5 18 A 1.5 1.5 0 0 0 8 16.5 A 1.5 1.5 0 0 0 6.5 15 z M 19.5 17 C 20.340272 17 21 17.659728 21 18.5 C 21 19.340272 20.340272 20 19.5 20 C 18.659728 20 18 19.340272 18 18.5 C 18 17.659728 18.659728 17 19.5 17 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 5 4 C 4.448 4 4 4.448 4 5 L 4 11.609375 C 2.2234889 12.523708 1 14.3737 1 16.5 C 1 19.525721 3.4742785 22 6.5 22 C 9.0054253 22 11.12762 20.301307 11.785156 18 L 16.050781 18 C 16.026575 18.164905 16 18.328781 16 18.5 C 16 20.421152 17.578848 22 19.5 22 C 21.421152 22 23 20.421152 23 18.5 C 23 17.116848 22.175306 15.9223 21 15.355469 L 21 10 C 21 9.448 20.552 9 20 9 L 17 9 L 17 6 L 18 6 L 19 6 L 19 4 L 18 4 L 17 4 C 15.906937 4 15 4.9069372 15 6 L 15 9 L 12.677734 9 L 10.927734 4.6289062 C 10.775734 4.2499062 10.409 4 10 4 L 5 4 z M 6.5 13 C 8.4448413 13 10 14.555159 10 16.5 C 10 18.444841 8.4448413 20 6.5 20 C 4.5551587 20 3 18.444841 3 16.5 C 3 14.555159 4.5551587 13 6.5 13 z M 6.5 15 A 1.5 1.5 0 0 0 5 16.5 A 1.5 1.5 0 0 0 6.5 18 A 1.5 1.5 0 0 0 8 16.5 A 1.5 1.5 0 0 0 6.5 15 z M 19.5 17 C 20.340272 17 21 17.659728 21 18.5 C 21 19.340272 20.340272 20 19.5 20 C 18.659728 20 18 19.340272 18 18.5 C 18 17.659728 18.659728 17 19.5 17 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/train.svg b/modern/public/images/icon/train.svg
index db3a1077..125b468e 100644
--- a/modern/public/images/icon/train.svg
+++ b/modern/public/images/icon/train.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 7 2 C 5.34375 2 4 3.34375 4 5 L 4 16.84375 C 4 18.53125 5.332031 19.921875 7 20 L 6 21 L 6 22 L 18 22 L 18 21 L 17 20 C 18.667969 19.921875 20 18.53125 20 16.84375 L 20 5 C 20 3.34375 18.65625 2 17 2 Z M 9 4 L 15 4 L 15 5 L 9 5 Z M 6 7 L 11 7 L 11 12 L 6 12 Z M 13 7 L 18 7 L 18 12 L 13 12 Z M 7.5 15 C 8.328125 15 9 15.671875 9 16.5 C 9 17.328125 8.328125 18 7.5 18 C 6.671875 18 6 17.328125 6 16.5 C 6 15.671875 6.671875 15 7.5 15 Z M 16.5 15 C 17.328125 15 18 15.671875 18 16.5 C 18 17.328125 17.328125 18 16.5 18 C 15.671875 18 15 17.328125 15 16.5 C 15 15.671875 15.671875 15 16.5 15 Z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 7 2 C 5.34375 2 4 3.34375 4 5 L 4 16.84375 C 4 18.53125 5.332031 19.921875 7 20 L 6 21 L 6 22 L 18 22 L 18 21 L 17 20 C 18.667969 19.921875 20 18.53125 20 16.84375 L 20 5 C 20 3.34375 18.65625 2 17 2 Z M 9 4 L 15 4 L 15 5 L 9 5 Z M 6 7 L 11 7 L 11 12 L 6 12 Z M 13 7 L 18 7 L 18 12 L 13 12 Z M 7.5 15 C 8.328125 15 9 15.671875 9 16.5 C 9 17.328125 8.328125 18 7.5 18 C 6.671875 18 6 17.328125 6 16.5 C 6 15.671875 6.671875 15 7.5 15 Z M 16.5 15 C 17.328125 15 18 15.671875 18 16.5 C 18 17.328125 17.328125 18 16.5 18 C 15.671875 18 15 17.328125 15 16.5 C 15 15.671875 15.671875 15 16.5 15 Z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/tram.svg b/modern/public/images/icon/tram.svg
index 549346eb..f54084f7 100644
--- a/modern/public/images/icon/tram.svg
+++ b/modern/public/images/icon/tram.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 12 0 C 8.9426113 0 6.309955 0.29967448 4.7363281 0.73242188 L 5.2675781 2.6601562 C 6.4939513 2.3229037 9.0813887 2 12 2 C 14.920658 2 17.508002 2.3229037 18.734375 2.6601562 L 19.265625 0.73242188 C 17.691998 0.29967448 15.059342 0 12 0 z M 8 4 C 5.79 4 4 5.79 4 8 L 4 19 L 4 22.263672 C 4 22.670672 4.336 23 4.75 23 L 7 23 L 7 22 L 17 22 L 17 23 L 19.25 23 C 19.664 23 20 22.670672 20 22.263672 L 20 19 L 20 8 C 20 5.79 18.21 4 16 4 L 8 4 z M 8 6 L 16 6 C 17.1 6 18 6.9 18 8 L 18 13 L 6 13 L 6 8 C 6 6.9 6.9 6 8 6 z M 12 16 C 12.55 16 13 16.45 13 17 C 13 17.55 12.55 18 12 18 C 11.45 18 11 17.55 11 17 C 11 16.45 11.45 16 12 16 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 12 0 C 8.9426113 0 6.309955 0.29967448 4.7363281 0.73242188 L 5.2675781 2.6601562 C 6.4939513 2.3229037 9.0813887 2 12 2 C 14.920658 2 17.508002 2.3229037 18.734375 2.6601562 L 19.265625 0.73242188 C 17.691998 0.29967448 15.059342 0 12 0 z M 8 4 C 5.79 4 4 5.79 4 8 L 4 19 L 4 22.263672 C 4 22.670672 4.336 23 4.75 23 L 7 23 L 7 22 L 17 22 L 17 23 L 19.25 23 C 19.664 23 20 22.670672 20 22.263672 L 20 19 L 20 8 C 20 5.79 18.21 4 16 4 L 8 4 z M 8 6 L 16 6 C 17.1 6 18 6.9 18 8 L 18 13 L 6 13 L 6 8 C 6 6.9 6.9 6 8 6 z M 12 16 C 12.55 16 13 16.45 13 17 C 13 17.55 12.55 18 12 18 C 11.45 18 11 17.55 11 17 C 11 16.45 11.45 16 12 16 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/trolleybus.svg b/modern/public/images/icon/trolleybus.svg
index 76f749c9..46ecc712 100644
--- a/modern/public/images/icon/trolleybus.svg
+++ b/modern/public/images/icon/trolleybus.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M17,4h-0.52l1.2-3h-2.16l-1.2,3H9.68l-1.2-3H6.32l1.2,3H7C4.79,4,3,5.79,3,8v13.26C3,21.67,3.34,22,3.75,22H6v-2h12v2h2.25 c0.41,0,0.75-0.33,0.75-0.74V8C21,5.79,19.21,4,17,4z M8,16c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,16,8,16z M16,16 c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S16.55,16,16,16z M19,11H5V8c0-1.1,0.9-2,2-2h10c1.1,0,2,0.9,2,2V11z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M17,4h-0.52l1.2-3h-2.16l-1.2,3H9.68l-1.2-3H6.32l1.2,3H7C4.79,4,3,5.79,3,8v13.26C3,21.67,3.34,22,3.75,22H6v-2h12v2h2.25 c0.41,0,0.75-0.33,0.75-0.74V8C21,5.79,19.21,4,17,4z M8,16c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S8.55,16,8,16z M16,16 c-0.55,0-1-0.45-1-1s0.45-1,1-1s1,0.45,1,1S16.55,16,16,16z M19,11H5V8c0-1.1,0.9-2,2-2h10c1.1,0,2,0.9,2,2V11z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/truck.svg b/modern/public/images/icon/truck.svg
index 4dd910c8..df5c164c 100644
--- a/modern/public/images/icon/truck.svg
+++ b/modern/public/images/icon/truck.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 3 3 C 2.45 3 2 3.45 2 4 L 2 17 C 2 17.55 2.45 18 3 18 L 3.0507812 18 C 3.2958204 19.692046 4.7411114 21 6.5 21 C 8.2588886 21 9.7041796 19.692046 9.9492188 18 L 14.050781 18 C 14.29582 19.692046 15.741111 21 17.5 21 C 19.258889 21 20.70418 19.692046 20.949219 18 L 22 18 C 22.55 18 23 17.55 23 17 L 23 12.310547 C 23 11.750547 22.850781 11.210469 22.550781 10.730469 L 20.519531 7.4296875 C 19.969531 6.5496875 19.000937 6 17.960938 6 L 14 6 L 14 4 C 14 3.45 13.55 3 13 3 L 3 3 z M 14 8 L 17.960938 8 C 18.310938 8 18.630547 8.1804687 18.810547 8.4804688 L 20.849609 11.779297 C 20.949609 11.939297 21 12.120547 21 12.310547 L 21 16 L 20.648438 16 C 20.084435 14.821937 18.891001 14 17.5 14 C 16.108999 14 14.915565 14.821937 14.351562 16 L 14 16 L 14 8 z M 6.5 16 C 7.327 16 8 16.673 8 17.5 C 8 18.327 7.327 19 6.5 19 C 5.673 19 5 18.327 5 17.5 C 5 16.673 5.673 16 6.5 16 z M 17.5 16 C 18.327 16 19 16.673 19 17.5 C 19 18.327 18.327 19 17.5 19 C 16.673 19 16 18.327 16 17.5 C 16 16.673 16.673 16 17.5 16 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 3 3 C 2.45 3 2 3.45 2 4 L 2 17 C 2 17.55 2.45 18 3 18 L 3.0507812 18 C 3.2958204 19.692046 4.7411114 21 6.5 21 C 8.2588886 21 9.7041796 19.692046 9.9492188 18 L 14.050781 18 C 14.29582 19.692046 15.741111 21 17.5 21 C 19.258889 21 20.70418 19.692046 20.949219 18 L 22 18 C 22.55 18 23 17.55 23 17 L 23 12.310547 C 23 11.750547 22.850781 11.210469 22.550781 10.730469 L 20.519531 7.4296875 C 19.969531 6.5496875 19.000937 6 17.960938 6 L 14 6 L 14 4 C 14 3.45 13.55 3 13 3 L 3 3 z M 14 8 L 17.960938 8 C 18.310938 8 18.630547 8.1804687 18.810547 8.4804688 L 20.849609 11.779297 C 20.949609 11.939297 21 12.120547 21 12.310547 L 21 16 L 20.648438 16 C 20.084435 14.821937 18.891001 14 17.5 14 C 16.108999 14 14.915565 14.821937 14.351562 16 L 14 16 L 14 8 z M 6.5 16 C 7.327 16 8 16.673 8 17.5 C 8 18.327 7.327 19 6.5 19 C 5.673 19 5 18.327 5 17.5 C 5 16.673 5.673 16 6.5 16 z M 17.5 16 C 18.327 16 19 16.673 19 17.5 C 19 18.327 18.327 19 17.5 19 C 16.673 19 16 18.327 16 17.5 C 16 16.673 16.673 16 17.5 16 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/van.svg b/modern/public/images/icon/van.svg
index 7ee3cc54..a3ee13c7 100644
--- a/modern/public/images/icon/van.svg
+++ b/modern/public/images/icon/van.svg
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#000000"><path d="M 5 3 C 3.35 3 2 4.35 2 6 L 2 17 C 2 17.55 2.45 18 3 18 L 4.0507812 18 C 4.2958204 19.692046 5.7411114 21 7.5 21 C 9.2588886 21 10.70418 19.692046 10.949219 18 L 13.050781 18 C 13.29582 19.692046 14.741111 21 16.5 21 C 18.258889 21 19.70418 19.692046 19.949219 18 L 21 18 C 21.55 18 22 17.55 22 17 L 22 11.740234 C 22 11.020234 21.739297 10.329063 21.279297 9.7890625 L 16.359375 4.0507812 C 15.789375 3.3807813 14.960078 3 14.080078 3 L 5 3 z M 12 5 L 14.080078 5 C 14.370078 5 14.649844 5.1296094 14.839844 5.3496094 L 19.679688 11 L 12 11 L 12 5 z M 7.5 16 C 8.327 16 9 16.673 9 17.5 C 9 18.327 8.327 19 7.5 19 C 6.673 19 6 18.327 6 17.5 C 6 16.673 6.673 16 7.5 16 z M 16.5 16 C 17.327 16 18 16.673 18 17.5 C 18 18.327 17.327 19 16.5 19 C 15.673 19 15 18.327 15 17.5 C 15 16.673 15.673 16 16.5 16 z" fill="#000000"/></svg>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="#000000"><path d="M 5 3 C 3.35 3 2 4.35 2 6 L 2 17 C 2 17.55 2.45 18 3 18 L 4.0507812 18 C 4.2958204 19.692046 5.7411114 21 7.5 21 C 9.2588886 21 10.70418 19.692046 10.949219 18 L 13.050781 18 C 13.29582 19.692046 14.741111 21 16.5 21 C 18.258889 21 19.70418 19.692046 19.949219 18 L 21 18 C 21.55 18 22 17.55 22 17 L 22 11.740234 C 22 11.020234 21.739297 10.329063 21.279297 9.7890625 L 16.359375 4.0507812 C 15.789375 3.3807813 14.960078 3 14.080078 3 L 5 3 z M 12 5 L 14.080078 5 C 14.370078 5 14.649844 5.1296094 14.839844 5.3496094 L 19.679688 11 L 12 11 L 12 5 z M 7.5 16 C 8.327 16 9 16.673 9 17.5 C 9 18.327 8.327 19 7.5 19 C 6.673 19 6 18.327 6 17.5 C 6 16.673 6.673 16 7.5 16 z M 16.5 16 C 17.327 16 18 16.673 18 17.5 C 18 18.327 17.327 19 16.5 19 C 15.673 19 15 18.327 15 17.5 C 15 16.673 15.673 16 16.5 16 z" fill="#000000"/></svg>
diff --git a/modern/public/images/icon/ignition.svg b/modern/public/images/ignition.svg
index d731c92e..d731c92e 100644
--- a/modern/public/images/icon/ignition.svg
+++ b/modern/public/images/ignition.svg
diff --git a/modern/src/App.js b/modern/src/App.js
index eb1a8818..a53ffc6c 100644
--- a/modern/src/App.js
+++ b/modern/src/App.js
@@ -24,6 +24,8 @@ import SummaryReportPage from './reports/SummaryReportPage';
import ChartReportPage from './reports/ChartReportPage';
import DriversPage from './settings/DriversPage';
import DriverPage from './settings/DriverPage';
+import CalendarsPage from './settings/CalendarsPage';
+import CalendarPage from './settings/CalendarPage';
import ComputedAttributesPage from './settings/ComputedAttributesPage';
import ComputedAttributePage from './settings/ComputedAttributePage';
import MaintenancesPage from './settings/MaintenancesPage';
@@ -69,6 +71,8 @@ const App = () => {
<Route exact path="/settings/group/:id?" component={GroupPage} />
<Route exact path="/settings/drivers" component={DriversPage} />
<Route exact path="/settings/driver/:id?" component={DriverPage} />
+ <Route exact path="/settings/calendars" component={CalendarsPage} />
+ <Route exact path="/settings/calendar/:id?" component={CalendarPage} />
<Route exact path="/settings/attributes" component={ComputedAttributesPage} />
<Route exact path="/settings/attribute/:id?" component={ComputedAttributePage} />
<Route exact path="/settings/maintenances" component={MaintenancesPage} />
diff --git a/modern/src/DevicesList.js b/modern/src/DevicesList.js
index cea7c38c..10ac4fc7 100644
--- a/modern/src/DevicesList.js
+++ b/modern/src/DevicesList.js
@@ -1,4 +1,4 @@
-import React, { useRef } from 'react';
+import React, { useEffect, useRef, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { makeStyles } from '@material-ui/core/styles';
import Avatar from '@material-ui/core/Avatar';
@@ -12,7 +12,7 @@ import SvgIcon from '@material-ui/core/SvgIcon';
import { FixedSizeList } from 'react-window';
import AutoSizer from 'react-virtualized-auto-sizer';
import BatteryFullIcon from '@material-ui/icons/BatteryFull';
-import { ReactComponent as IgnitionIcon } from '../public/images/icon/ignition.svg';
+import { ReactComponent as IgnitionIcon } from '../public/images/ignition.svg';
import { devicesActions } from './store';
import EditCollectionView from './EditCollectionView';
@@ -126,12 +126,21 @@ const DeviceRow = ({ data, index, style }) => {
);
};
-const DeviceView = ({ updateTimestamp, onMenuClick }) => {
+const DeviceView = ({ updateTimestamp, onMenuClick, filter }) => {
const classes = useStyles();
const dispatch = useDispatch();
const listInnerEl = useRef(null);
const items = useSelector(getDevices);
+ const [filteredItems, setFilteredItems] = useState(null);
+
+ useEffect(() => {
+ setFilteredItems(
+ filter.trim().length > 0
+ ? items.filter((item) => `${item.name} ${item.uniqueId}`.toLowerCase().includes(filter?.toLowerCase()))
+ : items,
+ );
+ }, [filter, items]);
if (listInnerEl.current) {
listInnerEl.current.className = classes.listInner;
@@ -151,8 +160,8 @@ const DeviceView = ({ updateTimestamp, onMenuClick }) => {
<FixedSizeList
width={width}
height={height}
- itemCount={items.length}
- itemData={{ items, onMenuClick }}
+ itemCount={filteredItems.length}
+ itemData={{ items: filteredItems, onMenuClick }}
itemSize={72}
overscanCount={10}
innerRef={listInnerEl}
@@ -165,8 +174,8 @@ const DeviceView = ({ updateTimestamp, onMenuClick }) => {
);
};
-const DevicesList = () => (
- <EditCollectionView content={DeviceView} editPath="/device" endpoint="devices" disableAdd />
+const DevicesList = ({ filter }) => (
+ <EditCollectionView content={DeviceView} editPath="/device" endpoint="devices" disableAdd filter={filter} />
);
export default DevicesList;
diff --git a/modern/src/EditCollectionView.js b/modern/src/EditCollectionView.js
index 0bfec615..2d011302 100644
--- a/modern/src/EditCollectionView.js
+++ b/modern/src/EditCollectionView.js
@@ -12,14 +12,14 @@ import { useTranslation } from './LocalizationProvider';
const useStyles = makeStyles((theme) => ({
fab: {
- position: 'absolute',
+ position: 'fixed',
bottom: theme.spacing(2),
right: theme.spacing(2),
},
}));
const EditCollectionView = ({
- content, editPath, endpoint, disableAdd,
+ content, editPath, endpoint, disableAdd, filter,
}) => {
const classes = useStyles();
const history = useHistory();
@@ -64,7 +64,7 @@ const EditCollectionView = ({
return (
<>
- <Content updateTimestamp={updateTimestamp} onMenuClick={menuShow} />
+ <Content updateTimestamp={updateTimestamp} onMenuClick={menuShow} filter={filter} />
{adminEnabled && !disableAdd
&& (
<Fab size="medium" color="primary" className={classes.fab} onClick={handleAdd}>
diff --git a/modern/src/MainPage.js b/modern/src/MainPage.js
index 7fd43154..0176c7f0 100644
--- a/modern/src/MainPage.js
+++ b/modern/src/MainPage.js
@@ -98,7 +98,7 @@ const MainPage = () => {
const isTablet = useMediaQuery(theme.breakpoints.down('md'));
const isPhone = useMediaQuery(theme.breakpoints.down('xs'));
- const [deviceName, setDeviceName] = useState('');
+ const [searchKeyword, setSearchKeyword] = useState('');
const [collapsed, setCollapsed] = useState(false);
const handleClose = () => {
@@ -139,11 +139,11 @@ const MainPage = () => {
)}
<TextField
fullWidth
- name="deviceName"
- value={deviceName}
- autoComplete="deviceName"
+ name="searchKeyword"
+ value={searchKeyword}
+ autoComplete="searchKeyword"
autoFocus
- onChange={(event) => setDeviceName(event.target.value)}
+ onChange={(event) => setSearchKeyword(event.target.value)}
placeholder="Search Devices"
variant="filled"
/>
@@ -158,7 +158,7 @@ const MainPage = () => {
</Toolbar>
</Paper>
<div className={classes.deviceList}>
- <DevicesList />
+ <DevicesList filter={searchKeyword} />
</div>
</Paper>
<BottomMenu />
diff --git a/modern/src/SocketController.js b/modern/src/SocketController.js
index ae82d134..ac950190 100644
--- a/modern/src/SocketController.js
+++ b/modern/src/SocketController.js
@@ -1,3 +1,4 @@
+import { useRef } from 'react';
import { useDispatch, useSelector, connect } from 'react-redux';
import { useHistory } from 'react-router-dom';
@@ -24,13 +25,17 @@ const displayNotifications = (events) => {
const SocketController = () => {
const dispatch = useDispatch();
const history = useHistory();
+
const authenticated = useSelector((state) => !!state.session.user);
+ const socketRef = useRef();
+
const connectSocket = () => {
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
const socket = new WebSocket(`${protocol}//${window.location.host}/api/socket`);
+ socketRef.current = socket;
- socket.onclose = () => {
+ socket.onerror = () => {
setTimeout(() => connectSocket(), 60 * 1000);
};
@@ -62,14 +67,20 @@ const SocketController = () => {
dispatch(devicesActions.refresh(await response.json()));
}
connectSocket();
+ return () => {
+ const socket = socketRef.current;
+ if (socket) {
+ socket.close();
+ }
+ };
+ }
+ const response = await fetch('/api/session');
+ if (response.ok) {
+ dispatch(sessionActions.updateUser(await response.json()));
} else {
- const response = await fetch('/api/session');
- if (response.ok) {
- dispatch(sessionActions.updateUser(await response.json()));
- } else {
- history.push('/login');
- }
+ history.push('/login');
}
+ return null;
}, [authenticated]);
return null;
diff --git a/modern/src/admin/UsersPage.js b/modern/src/admin/UsersPage.js
index bd2a0033..289598e7 100644
--- a/modern/src/admin/UsersPage.js
+++ b/modern/src/admin/UsersPage.js
@@ -51,8 +51,8 @@ const UsersView = ({ updateTimestamp, onMenuClick }) => {
</TableCell>
<TableCell>{item.name}</TableCell>
<TableCell>{item.email}</TableCell>
- <TableCell>{formatBoolean(item, 'administrator', t)}</TableCell>
- <TableCell>{formatBoolean(item, 'disabled', t)}</TableCell>
+ <TableCell>{formatBoolean(item.administrator, t)}</TableCell>
+ <TableCell>{formatBoolean(item.disabled, t)}</TableCell>
</TableRow>
))}
</TableBody>
diff --git a/modern/src/attributes/useUserAttributes.js b/modern/src/attributes/useUserAttributes.js
index 61c61899..0101d2f5 100644
--- a/modern/src/attributes/useUserAttributes.js
+++ b/modern/src/attributes/useUserAttributes.js
@@ -17,10 +17,6 @@ export default (t) => useMemo(() => ({
name: t('attributeWebMaxZoom'),
type: 'number',
},
- 'ui.disableReport': {
- name: t('attributeUiDisableReport'),
- type: 'boolean',
- },
'ui.disableEvents': {
name: t('attributeUiDisableEvents'),
type: 'boolean',
diff --git a/modern/src/components/SideNav.js b/modern/src/components/SideNav.js
index bcf8ecd5..62c64fd2 100644
--- a/modern/src/components/SideNav.js
+++ b/modern/src/components/SideNav.js
@@ -21,7 +21,7 @@ const SideNav = ({ routes }) => {
key={route.href || route.subheader}
button
to={route.href}
- selected={location.pathname.match(route.match || route.href)}
+ selected={location.pathname.match(route.match || route.href) !== null}
>
<ListItemIcon>{route.icon}</ListItemIcon>
<ListItemText primary={route.name} />
diff --git a/modern/src/map/Map.js b/modern/src/map/Map.js
index 5e182a44..b020423a 100644
--- a/modern/src/map/Map.js
+++ b/modern/src/map/Map.js
@@ -8,7 +8,7 @@ import { SwitcherControl } from './switcher/switcher';
import deviceCategories from '../common/deviceCategories';
import { prepareIcon, loadImage } from './mapUtil';
import {
- styleCarto, styleMapbox, styleMapTiler, styleOsm,
+ styleCarto, styleLocationIq, styleMapbox, styleMapTiler, styleOsm,
} from './mapStyles';
import { useAttributePreference } from '../common/preferences';
import palette from '../theme/palette';
@@ -89,6 +89,7 @@ const Map = ({ children }) => {
const mapboxAccessToken = useAttributePreference('mapboxAccessToken');
const mapTilerKey = useAttributePreference('mapTilerKey');
+ const locationIqKey = useAttributePreference('locationIqKey', 'pk.0f147952a41c555a5b70614039fd148b');
useEffect(() => {
maplibregl.accessToken = mapboxAccessToken;
@@ -96,6 +97,9 @@ const Map = ({ children }) => {
useEffect(() => {
switcher.updateStyles([
+ { id: 'locationIqStreets', title: t('mapLocationIqStreets'), uri: styleLocationIq('streets', locationIqKey) },
+ { id: 'locationIqEarth', title: t('mapLocationIqEarth'), uri: styleLocationIq('earth', locationIqKey) },
+ { id: 'locationIqHybrid', title: t('mapLocationIqHybrid'), uri: styleLocationIq('hybrid', locationIqKey) },
{ id: 'osm', title: t('mapOsm'), uri: styleOsm() },
{ id: 'carto', title: t('mapCarto'), uri: styleCarto() },
{ id: 'mapboxStreets', title: t('mapMapboxStreets'), uri: styleMapbox('streets-v11') },
diff --git a/modern/src/map/mapStyles.js b/modern/src/map/mapStyles.js
index 9650ead5..86813a13 100644
--- a/modern/src/map/mapStyles.js
+++ b/modern/src/map/mapStyles.js
@@ -51,3 +51,5 @@ export const styleCarto = () => ({
export const styleMapbox = (style) => `mapbox://styles/mapbox/${style}`;
export const styleMapTiler = (style, key) => `https://api.maptiler.com/maps/${style}/style.json?key=${key}`;
+
+export const styleLocationIq = (style, key) => `https://tiles.locationiq.com/v3/${style}/vector.json?key=${key}`;
diff --git a/modern/src/map/mapUtil.js b/modern/src/map/mapUtil.js
index e3c32f46..2aa86c68 100644
--- a/modern/src/map/mapUtil.js
+++ b/modern/src/map/mapUtil.js
@@ -1,5 +1,4 @@
import { parse, stringify } from 'wellknown';
-import canvasTintImage from 'canvas-tint-image';
import circle from '@turf/circle';
export const loadImage = (url) => new Promise((imageLoaded) => {
@@ -8,12 +7,31 @@ export const loadImage = (url) => new Promise((imageLoaded) => {
image.src = url;
});
-export const prepareIcon = (background, icon, color) => {
- const pixelRatio = window.devicePixelRatio;
+const canvasTintImage = (image, color) => {
+ const canvas = document.createElement('canvas');
+ canvas.width = image.width * devicePixelRatio;
+ canvas.height = image.height * devicePixelRatio;
+ canvas.style.width = `${image.width}px`;
+ canvas.style.height = `${image.height}px`;
+
+ const context = canvas.getContext('2d');
+
+ context.save();
+ context.fillStyle = color;
+ context.globalAlpha = 1;
+ context.fillRect(0, 0, canvas.width, canvas.height);
+ context.globalCompositeOperation = 'destination-atop';
+ context.globalAlpha = 1;
+ context.drawImage(image, 0, 0, canvas.width, canvas.height);
+ context.restore();
+ return canvas;
+};
+
+export const prepareIcon = (background, icon, color) => {
const canvas = document.createElement('canvas');
- canvas.width = background.width * pixelRatio;
- canvas.height = background.height * pixelRatio;
+ canvas.width = background.width * devicePixelRatio;
+ canvas.height = background.height * devicePixelRatio;
canvas.style.width = `${background.width}px`;
canvas.style.height = `${background.height}px`;
@@ -24,7 +42,11 @@ export const prepareIcon = (background, icon, color) => {
const iconRatio = 0.5;
const imageWidth = canvas.width * iconRatio;
const imageHeight = canvas.height * iconRatio;
- context.drawImage(canvasTintImage(icon, color, 1), (canvas.width - imageWidth) / 2, (canvas.height - imageHeight) / 2, imageWidth, imageHeight);
+ if (navigator.userAgent.indexOf('Firefox') > 0) {
+ context.drawImage(icon, (canvas.width - imageWidth) / 2, (canvas.height - imageHeight) / 2, imageWidth, imageHeight);
+ } else {
+ context.drawImage(canvasTintImage(icon, color), (canvas.width - imageWidth) / 2, (canvas.height - imageHeight) / 2, imageWidth, imageHeight);
+ }
}
return context.getImageData(0, 0, canvas.width, canvas.height);
diff --git a/modern/src/reactHelper.js b/modern/src/reactHelper.js
index f3ef78dd..7503360a 100644
--- a/modern/src/reactHelper.js
+++ b/modern/src/reactHelper.js
@@ -9,7 +9,14 @@ export const usePrevious = (value) => {
};
export const useEffectAsync = (effect, deps) => {
+ const ref = useRef();
useEffect(() => {
- effect();
+ effect().then((result) => ref.current = result);
+ return () => {
+ const result = ref.current;
+ if (result) {
+ result();
+ }
+ };
}, deps);
};
diff --git a/modern/src/reports/ReportFilter.js b/modern/src/reports/ReportFilter.js
index 23c7fc00..bfd8a540 100644
--- a/modern/src/reports/ReportFilter.js
+++ b/modern/src/reports/ReportFilter.js
@@ -60,13 +60,13 @@ const ReportFilter = ({ children, handleSubmit, showOnly }) => {
};
return (
- <Grid container spacing={2} justify="flex-end">
+ <Grid container spacing={2} justifyContent="flex-end">
<Grid item xs={12} sm={period === 'custom' ? 3 : 6}>
<FormControl variant="filled" fullWidth>
<InputLabel>{t('reportDevice')}</InputLabel>
<Select value={deviceId} onChange={(e) => setDeviceId(e.target.value)}>
{devices.map((device) => (
- <MenuItem value={device.id}>{device.name}</MenuItem>
+ <MenuItem key={device.id} value={device.id}>{device.name}</MenuItem>
))}
</Select>
</FormControl>
diff --git a/modern/src/settings/CalendarPage.js b/modern/src/settings/CalendarPage.js
new file mode 100644
index 00000000..60d4ef76
--- /dev/null
+++ b/modern/src/settings/CalendarPage.js
@@ -0,0 +1,82 @@
+import React, { useState } from 'react';
+import TextField from '@material-ui/core/TextField';
+import {
+ Accordion, AccordionSummary, AccordionDetails, makeStyles, Typography,
+} from '@material-ui/core';
+import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
+import { DropzoneArea } from 'material-ui-dropzone';
+import EditItemView from '../EditItemView';
+import EditAttributesView from '../attributes/EditAttributesView';
+import { useTranslation } from '../LocalizationProvider';
+
+const useStyles = makeStyles(() => ({
+ details: {
+ flexDirection: 'column',
+ },
+}));
+
+const CalendarPage = () => {
+ const classes = useStyles();
+ const t = useTranslation();
+
+ const [item, setItem] = useState();
+
+ const handleFiles = (files) => {
+ if (files.length > 0) {
+ const reader = new FileReader();
+ reader.onload = (event) => {
+ const { result } = event.target;
+ setItem({ ...item, data: result.substr(result.indexOf(',') + 1) });
+ };
+ reader.readAsDataURL(files[0]);
+ } else {
+ setItem({ ...item, data: null });
+ }
+ };
+
+ return (
+ <EditItemView endpoint="calendars" item={item} setItem={setItem}>
+ {item
+ && (
+ <>
+ <Accordion defaultExpanded>
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+ <Typography variant="subtitle1">
+ {t('sharedRequired')}
+ </Typography>
+ </AccordionSummary>
+ <AccordionDetails className={classes.details}>
+ <TextField
+ margin="normal"
+ value={item.name || ''}
+ onChange={(event) => setItem({ ...item, name: event.target.value })}
+ label={t('sharedName')}
+ variant="filled"
+ />
+ <DropzoneArea
+ filesLimit={1}
+ onChange={handleFiles}
+ />
+ </AccordionDetails>
+ </Accordion>
+ <Accordion>
+ <AccordionSummary expandIcon={<ExpandMoreIcon />}>
+ <Typography variant="subtitle1">
+ {t('sharedAttributes')}
+ </Typography>
+ </AccordionSummary>
+ <AccordionDetails className={classes.details}>
+ <EditAttributesView
+ attributes={item.attributes}
+ setAttributes={(attributes) => setItem({ ...item, attributes })}
+ definitions={{}}
+ />
+ </AccordionDetails>
+ </Accordion>
+ </>
+ )}
+ </EditItemView>
+ );
+};
+
+export default CalendarPage;
diff --git a/modern/src/settings/CalendarsPage.js b/modern/src/settings/CalendarsPage.js
new file mode 100644
index 00000000..076f30ca
--- /dev/null
+++ b/modern/src/settings/CalendarsPage.js
@@ -0,0 +1,63 @@
+import React, { useState } from 'react';
+import {
+ TableContainer, Table, TableRow, TableCell, TableHead, TableBody, makeStyles, IconButton,
+} from '@material-ui/core';
+import MoreVertIcon from '@material-ui/icons/MoreVert';
+import { useEffectAsync } from '../reactHelper';
+import EditCollectionView from '../EditCollectionView';
+import OptionsLayout from './OptionsLayout';
+import { useTranslation } from '../LocalizationProvider';
+
+const useStyles = makeStyles((theme) => ({
+ columnAction: {
+ width: theme.spacing(1),
+ padding: theme.spacing(0, 1),
+ },
+}));
+
+const CalendarsView = ({ updateTimestamp, onMenuClick }) => {
+ const classes = useStyles();
+ const t = useTranslation();
+
+ const [items, setItems] = useState([]);
+
+ useEffectAsync(async () => {
+ const response = await fetch('/api/calendars');
+ if (response.ok) {
+ setItems(await response.json());
+ }
+ }, [updateTimestamp]);
+
+ return (
+ <TableContainer>
+ <Table>
+ <TableHead>
+ <TableRow>
+ <TableCell className={classes.columnAction} />
+ <TableCell>{t('sharedName')}</TableCell>
+ </TableRow>
+ </TableHead>
+ <TableBody>
+ {items.map((item) => (
+ <TableRow key={item.id}>
+ <TableCell className={classes.columnAction} padding="none">
+ <IconButton onClick={(event) => onMenuClick(event.currentTarget, item.id)}>
+ <MoreVertIcon />
+ </IconButton>
+ </TableCell>
+ <TableCell>{item.name}</TableCell>
+ </TableRow>
+ ))}
+ </TableBody>
+ </Table>
+ </TableContainer>
+ );
+};
+
+const CalendarsPage = () => (
+ <OptionsLayout>
+ <EditCollectionView content={CalendarsView} editPath="/settings/calendar" endpoint="calendars" />
+ </OptionsLayout>
+);
+
+export default CalendarsPage;
diff --git a/modern/src/settings/OptionsLayout/useRoutes.js b/modern/src/settings/OptionsLayout/useRoutes.js
index 8be4ec30..efbd9eb2 100644
--- a/modern/src/settings/OptionsLayout/useRoutes.js
+++ b/modern/src/settings/OptionsLayout/useRoutes.js
@@ -8,6 +8,7 @@ import StorageIcon from '@material-ui/icons/Storage';
import BuildIcon from '@material-ui/icons/Build';
import PeopleIcon from '@material-ui/icons/People';
import BarChartIcon from '@material-ui/icons/BarChart';
+import TodayIcon from '@material-ui/icons/Today';
import { getIsAdmin, getUserId } from '../../common/selectors';
import { useTranslation } from '../../LocalizationProvider';
@@ -61,6 +62,12 @@ const useMainRoutes = (t, userId) => useMemo(() => [
icon: <PersonIcon />,
},
{
+ match: 'calendar',
+ name: t('sharedCalendars'),
+ href: '/settings/calendars',
+ icon: <TodayIcon />,
+ },
+ {
match: 'attribute',
name: t('sharedComputedAttributes'),
href: '/settings/attributes',
diff --git a/modern/src/theme/index.js b/modern/src/theme/index.js
index dc0a35bf..02865c23 100644
--- a/modern/src/theme/index.js
+++ b/modern/src/theme/index.js
@@ -1,9 +1,9 @@
-import { createMuiTheme } from '@material-ui/core/styles';
+import { createTheme } from '@material-ui/core/styles';
import palette from './palette';
import overrides from './overrides';
import dimensions from './dimensions';
-const theme = createMuiTheme({
+const theme = createTheme({
palette,
overrides,
dimensions,
diff --git a/modern/src/theme/overrides.js b/modern/src/theme/overrides.js
index a6d08cf1..d1fe844c 100644
--- a/modern/src/theme/overrides.js
+++ b/modern/src/theme/overrides.js
@@ -24,7 +24,8 @@ export default {
input: {
height: dimensions.inputHeight,
borderRadius: dimensions.borderRadius,
- paddingTop: '10px',
+ paddingTop: '11.5px',
+ paddingBottom: '11.5px',
boxSizing: 'border-box',
'&:-webkit-autofill': {
WebkitBoxShadow: '0 0 0 100px #eeeeee inset',
@@ -42,6 +43,14 @@ export default {
},
},
},
+ MuiSelect: {
+ select: {
+ borderRadius: dimensions.borderRadius,
+ '&&:focus': {
+ borderRadius: dimensions.borderRadius,
+ },
+ },
+ },
MuiButton: {
root: {
height: dimensions.inputHeight,
diff --git a/package.json b/package.json
index eb87b1ac..d8c43c6b 100644
--- a/package.json
+++ b/package.json
@@ -2,9 +2,9 @@
"name": "traccar-web",
"dependencies": {
"extjs-gpl": "^6.2.0",
- "ol": "^6.6.1",
+ "ol": "^6.12.0",
"ol-layerswitcher": "^3.8.3",
- "openlayers-dist": "^6.6.1",
+ "openlayers-dist": "^6.12.0",
"proj4": "^2.7.5"
},
"devDependencies": {
diff --git a/tools/translate.py b/tools/translate.py
index e8324a61..43e90849 100755
--- a/tools/translate.py
+++ b/tools/translate.py
@@ -1,35 +1,32 @@
-#!/usr/bin/python
+#!/usr/local/bin/python3
+
+# pip3 install --upgrade transifex-python
import os
import optparse
-import urllib2
-import json
-import base64
+import requests
+from transifex.api import transifex_api
parser = optparse.OptionParser()
-parser.add_option("-u", "--user", dest="username", help="transifex user login")
-parser.add_option("-p", "--password", dest="password", help="transifex user password")
+parser.add_option("-t", "--token", dest="token", help="transifex token")
(options, args) = parser.parse_args()
-if not options.username or not options.password:
- parser.error('User name and password are required')
+if not options.token:
+ parser.error('Token is required')
os.chdir(os.path.dirname(os.path.abspath(__file__)))
-path = "../web/l10n/"
-
-def request(url):
- req = urllib2.Request(url)
- auth = base64.encodestring("%s:%s" % (options.username, options.password)).replace("\n", "")
- req.add_header("Authorization", "Basic %s" % auth)
- return urllib2.urlopen(req)
+transifex_api.setup(auth=options.token)
-resource = json.load(request("https://www.transifex.com/api/2/project/traccar/resource/web/?details"))
+organization = transifex_api.Organization.get(slug='traccar')
+project = organization.fetch('projects').get(slug='traccar')
+resource = project.fetch('resources').get(slug='web')
+languages = project.fetch('languages')
-for language in resource["available_languages"]:
- code = language["code"]
- data = request("https://www.transifex.com/api/2/project/traccar/resource/web/translation/" + code + "?file")
- file = open(path + code + ".json", "wb")
- file.write(data.read())
- file.close()
+for language in languages:
+ print(language.code)
+ url = transifex_api.ResourceTranslationsAsyncDownload.download(resource=resource, language=language)
+ result = requests.get(url)
+ with open('../web/l10n/' + language.code + '.json', "w") as file:
+ file.write(result.text)
diff --git a/web/app/controller/Root.js b/web/app/controller/Root.js
index 65b56fa6..a37bc06f 100644
--- a/web/app/controller/Root.js
+++ b/web/app/controller/Root.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -308,7 +308,7 @@ Ext.define('Traccar.controller.Root', {
},
updatePositions: function (array, first) {
- var i, store, entity, deviceId, device;
+ var i, store, entity, uniqueId, device;
store = Ext.getStore('LatestPositions');
for (i = 0; i < array.length; i++) {
entity = store.findRecord('deviceId', array[i].deviceId, 0, false, false, true);
@@ -322,9 +322,9 @@ Ext.define('Traccar.controller.Root', {
}
}
if (first) {
- deviceId = Ext.Object.fromQueryString(window.location.search).deviceId;
- if (deviceId) {
- device = Ext.getStore('VisibleDevices').findRecord('id', deviceId, 0, false, true, true);
+ uniqueId = Ext.Object.fromQueryString(window.location.search).deviceId;
+ if (uniqueId) {
+ device = Ext.getStore('VisibleDevices').findRecord('uniqueId', uniqueId, 0, false, true, true);
if (device) {
this.fireEvent('selectdevice', device, true);
}
diff --git a/web/app/model/Server.js b/web/app/model/Server.js
index afafe908..177b4fc4 100644
--- a/web/app/model/Server.js
+++ b/web/app/model/Server.js
@@ -35,6 +35,9 @@ Ext.define('Traccar.model.Server', {
name: 'limitCommands',
type: 'boolean'
}, {
+ name: 'disableReports',
+ type: 'boolean'
+ }, {
name: 'map',
type: 'string'
}, {
diff --git a/web/app/model/User.js b/web/app/model/User.js
index 76f2a366..fcaff007 100644
--- a/web/app/model/User.js
+++ b/web/app/model/User.js
@@ -81,6 +81,9 @@ Ext.define('Traccar.model.User', {
name: 'limitCommands',
type: 'boolean'
}, {
+ name: 'disableReports',
+ type: 'boolean'
+ }, {
name: 'poiLayer',
type: 'string'
}, {
diff --git a/web/app/store/CommonUserAttributes.js b/web/app/store/CommonUserAttributes.js
index a8e92825..7d0ea969 100644
--- a/web/app/store/CommonUserAttributes.js
+++ b/web/app/store/CommonUserAttributes.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2022 Anton Tananaev (anton@traccar.org)
* Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
@@ -39,10 +39,6 @@ Ext.define('Traccar.store.CommonUserAttributes', {
minValue: Traccar.Style.mapDefaultZoom,
maxValue: Traccar.Style.mapMaxZoom
}, {
- key: 'ui.disableReport',
- name: Strings.attributeUiDisableReport,
- valueType: 'boolean'
- }, {
key: 'ui.disableEvents',
name: Strings.attributeUiDisableEvents,
valueType: 'boolean'
diff --git a/web/app/store/MapTypes.js b/web/app/store/MapTypes.js
index 9cca525e..01657565 100644
--- a/web/app/store/MapTypes.js
+++ b/web/app/store/MapTypes.js
@@ -20,6 +20,15 @@ Ext.define('Traccar.store.MapTypes', {
fields: ['key', 'name'],
data: [{
+ key: 'locationIqStreets',
+ name: Strings.mapLocationIqStreets
+ }, {
+ key: 'locationIqEarth',
+ name: Strings.mapLocationIqEarth
+ }, {
+ key: 'locationIqHybrid',
+ name: Strings.mapLocationIqHybrid
+ }, {
key: 'osm',
name: Strings.mapOsm
}, {
diff --git a/web/app/view/MainController.js b/web/app/view/MainController.js
index 7cd03050..8ed986af 100644
--- a/web/app/view/MainController.js
+++ b/web/app/view/MainController.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 - 2022 Anton Tananaev (anton@traccar.org)
* Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
@@ -20,7 +20,7 @@ Ext.define('Traccar.view.MainController', {
alias: 'controller.mainController',
init: function () {
- this.lookupReference('reportView').setHidden(Traccar.app.getBooleanAttributePreference('ui.disableReport'));
+ this.lookupReference('reportView').setHidden(Traccar.app.getPreference('disableReports', false));
this.lookupReference('eventsView').setHidden(Traccar.app.getBooleanAttributePreference('ui.disableEvents'));
}
});
diff --git a/web/app/view/ReportController.js b/web/app/view/ReportController.js
index cc0fd4ac..4241df35 100644
--- a/web/app/view/ReportController.js
+++ b/web/app/view/ReportController.js
@@ -528,6 +528,12 @@ Ext.define('Traccar.view.ReportController', {
return Traccar.app.getEventString(value);
}
}, {
+ text: Strings.positionAlarm,
+ dataIndex: 'attributes',
+ renderer: function (value) {
+ return value['alarm'];
+ }
+ }, {
text: Strings.sharedGeofence,
dataIndex: 'geofenceId',
renderer: Traccar.AttributeFormatter.getFormatter('geofenceId')
diff --git a/web/app/view/State.js b/web/app/view/State.js
index ed9951b5..c0a430d9 100644
--- a/web/app/view/State.js
+++ b/web/app/view/State.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -61,19 +61,20 @@ Ext.define('Traccar.view.State', {
dataIndex: 'value',
cellWrap: true,
renderer: function (value, metaData, record) {
- var position, device;
- if (record.get('attribute') === 'alarm') {
+ var position, device, attribute;
+ attribute = record.get('attribute');
+ if (attribute === 'alarm') {
metaData.tdCls = 'view-color-red';
- } else if (record.get('name') === Strings.positionAddress && !value) {
+ } else if (attribute === 'address' && !value) {
return '<a href="#" onclick="Ext.fireEvent(\'stategeocode\')" >' +
Strings.sharedShowAddress + '</a>';
- } else if (record.get('name') === Strings.positionImage || record.get('name') === Strings.positionAudio) {
+ } else if (attribute === 'image' || attribute === 'video' || attribute === 'audio') {
position = this.getController().position;
if (position) {
device = Ext.getStore('Devices').getById(position.get('deviceId'));
if (device) {
- return '<a target="_blank" href="/api/media/' + device.get('uniqueId') + '/' + value + '" >' +
- value + '</a>';
+ return '<a target="_blank" href="/api/media/' +
+ device.get('uniqueId') + '/' + value + '" >' + value + '</a>';
}
}
}
diff --git a/web/app/view/StateController.js b/web/app/view/StateController.js
index 1ab1aa2f..f04d7185 100644
--- a/web/app/view/StateController.js
+++ b/web/app/view/StateController.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -128,6 +128,7 @@ Ext.define('Traccar.view.StateController', {
store.add(Ext.create('Traccar.model.Attribute', {
priority: this.keys[key].priority,
name: this.keys[key].name,
+ attribute: key,
value: Traccar.AttributeFormatter.getFormatter(key)(this.position.get(key))
}));
}
diff --git a/web/app/view/dialog/Login.js b/web/app/view/dialog/Login.js
index 86917b94..d5658914 100644
--- a/web/app/view/dialog/Login.js
+++ b/web/app/view/dialog/Login.js
@@ -50,6 +50,47 @@ Ext.define('Traccar.view.dialog.Login', {
margin: '10px auto 25px'
}
}, {
+ xtype: 'pickerfield',
+ fieldLabel: Strings.settingsServer,
+ editable: false,
+ value: window.location.host,
+ hidden: !window.appInterface && !(window.webkit && window.webkit.messageHandlers.appInterface),
+ createPicker: function () {
+ var self = this, popup = Ext.create({
+ xtype: 'window',
+ closeAction: 'hide',
+ referenceHolder: true,
+ minWidth: 204,
+ layout: 'form',
+ header: false,
+ resizable: true,
+ items: [{
+ xtype: 'textfield',
+ anchor: '100%',
+ reference: 'serverAddress',
+ value: window.location.href
+ }],
+ fbar: [{
+ text: Strings.sharedSet,
+ handler: function () {
+ var message = 'server|' + popup.lookupReference('serverAddress').getValue();
+ if (window.webkit && window.webkit.messageHandlers.appInterface) {
+ window.webkit.messageHandlers.appInterface.postMessage(message);
+ }
+ if (window.appInterface) {
+ window.appInterface.postMessage(message);
+ }
+ }
+ }, {
+ text: Strings.sharedCancel,
+ handler: function () {
+ self.collapse();
+ }
+ }]
+ });
+ return popup;
+ }
+ }, {
xtype: 'combobox',
name: 'language',
fieldLabel: Strings.loginLanguage,
diff --git a/web/app/view/dialog/Server.js b/web/app/view/dialog/Server.js
index d9e225ec..6ee250b6 100644
--- a/web/app/view/dialog/Server.js
+++ b/web/app/view/dialog/Server.js
@@ -122,6 +122,12 @@ Ext.define('Traccar.view.dialog.Server', {
uncheckedValue: false,
name: 'limitCommands',
fieldLabel: Strings.userLimitCommands
+ }, {
+ xtype: 'checkboxfield',
+ inputValue: true,
+ uncheckedValue: false,
+ name: 'disableReports',
+ fieldLabel: Strings.userDisableReports
}]
}]
},
diff --git a/web/app/view/dialog/User.js b/web/app/view/dialog/User.js
index 917f110c..7335ee79 100644
--- a/web/app/view/dialog/User.js
+++ b/web/app/view/dialog/User.js
@@ -145,6 +145,14 @@ Ext.define('Traccar.view.dialog.User', {
disabled: true,
reference: 'limitCommandsField'
}, {
+ xtype: 'checkboxfield',
+ inputValue: true,
+ uncheckedValue: false,
+ name: 'disableReports',
+ fieldLabel: Strings.userDisableReports,
+ disabled: true,
+ reference: 'disableReportsField'
+ }, {
xtype: 'datefield',
name: 'expirationTime',
fieldLabel: Strings.userExpirationTime,
diff --git a/web/app/view/dialog/UserController.js b/web/app/view/dialog/UserController.js
index 7383f9ee..4ba48563 100644
--- a/web/app/view/dialog/UserController.js
+++ b/web/app/view/dialog/UserController.js
@@ -31,6 +31,7 @@ Ext.define('Traccar.view.dialog.UserController', {
this.lookupReference('expirationTimeField').setDisabled(false);
this.lookupReference('deviceReadonlyField').setDisabled(false);
this.lookupReference('limitCommandsField').setDisabled(false);
+ this.lookupReference('disableReportsField').setDisabled(false);
}
},
diff --git a/web/app/view/map/BaseMap.js b/web/app/view/map/BaseMap.js
index efd05021..c27a8d79 100644
--- a/web/app/view/map/BaseMap.js
+++ b/web/app/view/map/BaseMap.js
@@ -30,12 +30,13 @@ Ext.define('Traccar.view.map.BaseMap', {
},
initMap: function () {
- var server, layer, type, bingKey, lat, lon, zoom, maxZoom, target, poiLayer, self = this;
+ var server, layer, type, bingKey, locationIqKey, lat, lon, zoom, maxZoom, target, poiLayer, self = this;
server = Traccar.app.getServer();
type = Traccar.app.getPreference('map', null);
bingKey = server.get('bingKey');
+ locationIqKey = Traccar.app.getAttributePreference('locationIqKey', 'pk.0f147952a41c555a5b70614039fd148b');
layer = new ol.layer.Group({
title: Strings.mapLayer,
@@ -125,8 +126,35 @@ Ext.define('Traccar.view.map.BaseMap', {
new ol.layer.Tile({
title: Strings.mapOsm,
type: 'base',
- visible: type === 'osm' || type === 'wikimedia' || !type,
+ visible: type === 'osm',
source: new ol.source.OSM({})
+ }),
+ new ol.layer.Tile({
+ title: Strings.mapLocationIqHybrid,
+ type: 'base',
+ visible: type === 'locationIqHybrid',
+ source: new ol.source.XYZ({
+ url: 'https://{a-c}-tiles.locationiq.com/v3/hybrid/r/{z}/{x}/{y}.jpg?key=' + locationIqKey,
+ attributions: '&copy; <a href="https://locationiq.com/">LocationIQ</a>'
+ })
+ }),
+ new ol.layer.Tile({
+ title: Strings.mapLocationIqEarth,
+ type: 'base',
+ visible: type === 'locationIqEarth',
+ source: new ol.source.XYZ({
+ url: 'https://{a-c}-tiles.locationiq.com/v3/earth/r/{z}/{x}/{y}.jpg?key=' + locationIqKey,
+ attributions: '&copy; <a href="https://locationiq.com/">LocationIQ</a>'
+ })
+ }),
+ new ol.layer.Tile({
+ title: Strings.mapLocationIqStreets,
+ type: 'base',
+ visible: type === 'locationIqStreets' || type === 'wikimedia' || !type,
+ source: new ol.source.XYZ({
+ url: 'https://{a-c}-tiles.locationiq.com/v3/streets/r/{z}/{x}/{y}.png?key=' + locationIqKey,
+ attributions: '&copy; <a href="https://locationiq.com/">LocationIQ</a>'
+ })
})
]
});
diff --git a/web/app/view/map/Map.js b/web/app/view/map/Map.js
index fbaa7587..36e81de7 100644
--- a/web/app/view/map/Map.js
+++ b/web/app/view/map/Map.js
@@ -66,6 +66,13 @@ Ext.define('Traccar.view.map.Map', {
stateId: 'show-geofences-button',
tooltip: Strings.sharedGeofences
}, {
+ handler: 'showAccuracy',
+ reference: 'showAccuracyButton',
+ glyph: 'xf140@FontAwesome',
+ pressed: true,
+ stateId: 'show-accuracy-button',
+ tooltip: Strings.positionAccuracy
+ }, {
handler: 'showCurrentLocation',
glyph: 'xf124@FontAwesome',
tooltip: Strings.mapCurrentLocation
@@ -95,6 +102,10 @@ Ext.define('Traccar.view.map.Map', {
return this.accuracySource;
},
+ getAccuracyLayer: function () {
+ return this.accuracyLayer;
+ },
+
getRouteSource: function () {
return this.routeSource;
},
@@ -133,10 +144,11 @@ Ext.define('Traccar.view.map.Map', {
}));
this.accuracySource = new ol.source.Vector({});
- this.map.addLayer(new ol.layer.Vector({
+ this.accuracyLayer = new ol.layer.Vector({
name: 'accuracyLayer',
source: this.accuracySource
- }));
+ });
+ this.map.addLayer(this.accuracyLayer);
this.markersSource = new ol.source.Vector({});
this.map.addLayer(new ol.layer.Vector({
diff --git a/web/app/view/map/MapController.js b/web/app/view/map/MapController.js
index 7ba0ee3b..f6d88eed 100644
--- a/web/app/view/map/MapController.js
+++ b/web/app/view/map/MapController.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2022 Anton Tananaev (anton@traccar.org)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -45,7 +45,7 @@ Ext.define('Traccar.view.map.MapController', {
init: function () {
this.callParent();
this.lookupReference('showReportsButton').setVisible(
- Traccar.app.isMobile() && !Traccar.app.getBooleanAttributePreference('ui.disableReport'));
+ Traccar.app.isMobile() && !Traccar.app.getPreference('disableReports', false));
this.lookupReference('showEventsButton').setVisible(
Traccar.app.isMobile() && !Traccar.app.getBooleanAttributePreference('ui.disableEvents'));
},
@@ -68,6 +68,10 @@ Ext.define('Traccar.view.map.MapController', {
this.getView().getLiveRouteLayer().setVisible(button.pressed);
},
+ showAccuracy: function (button) {
+ this.getView().getAccuracyLayer().setVisible(button.pressed);
+ },
+
getMapState: function () {
var zoom, center, projection;
projection = this.getView().getMapView().getProjection();
diff --git a/web/l10n/af.json b/web/l10n/af.json
index 0042f7a0..a5456366 100644
--- a/web/l10n/af.json
+++ b/web/l10n/af.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Veelhoek",
"mapShapeCircle": "Sirkel",
"mapShapePolyline": "Veelhoeklyn",
@@ -373,7 +378,6 @@
"alarmJamming": "Seinverstoring",
"alarmTemperature": "Temperatuur",
"alarmParking": "Parkeer",
- "alarmShock": "Skok",
"alarmBonnet": "Enjinkap",
"alarmFootBrake": "Voetrem",
"alarmFuelLeak": "Brandstoflek",
diff --git a/web/l10n/ar.json b/web/l10n/ar.json
index 35a0654b..f69af6da 100644
--- a/web/l10n/ar.json
+++ b/web/l10n/ar.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox للشوارع",
"mapMapboxOutdoors": "Mapbox بالخارج",
"mapMapboxSatellite": "Mapbox بالقمر الصناعي",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "مضلع",
"mapShapeCircle": "دائرة",
"mapShapePolyline": "متعدد الضلوع",
@@ -373,7 +378,6 @@
"alarmJamming": "التشويش",
"alarmTemperature": "الحرارة",
"alarmParking": "اصطفاف",
- "alarmShock": "صدمة",
"alarmBonnet": "غطاء محرك السيارة",
"alarmFootBrake": "فرامل القدم",
"alarmFuelLeak": "تسرب وقود",
diff --git a/web/l10n/az.json b/web/l10n/az.json
index ccc33ae7..12d4f467 100644
--- a/web/l10n/az.json
+++ b/web/l10n/az.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Çoxbucaq",
"mapShapeCircle": "Dairə",
"mapShapePolyline": "Xətt",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "düşərgə",
- "alarmShock": "zərbə",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Ayaq əyləci",
"alarmFuelLeak": "Yanacaq sızması",
diff --git a/web/l10n/bg.json b/web/l10n/bg.json
index b299d375..898e2000 100644
--- a/web/l10n/bg.json
+++ b/web/l10n/bg.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Многоъгълник",
"mapShapeCircle": "Кръг",
"mapShapePolyline": "Линия",
@@ -373,7 +378,6 @@
"alarmJamming": "Заглушаване",
"alarmTemperature": "Температура",
"alarmParking": "Паркиране",
- "alarmShock": "Удар",
"alarmBonnet": "Капак",
"alarmFootBrake": "Спирачен педал",
"alarmFuelLeak": "Теч на гориво",
diff --git a/web/l10n/bn.json b/web/l10n/bn.json
index 293f4425..b912a7cd 100644
--- a/web/l10n/bn.json
+++ b/web/l10n/bn.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "বহুভুজ",
"mapShapeCircle": "বৃত্ত / বৃত্তাকার",
"mapShapePolyline": "পলিলাইন",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/cs.json b/web/l10n/cs.json
index d88620da..edc40b33 100644
--- a/web/l10n/cs.json
+++ b/web/l10n/cs.json
@@ -127,18 +127,18 @@
"userExpirationTime": "Konec platnosti",
"userDeviceLimit": "Limit zařízení",
"userUserLimit": "Limit uživatele",
- "userDeviceReadonly": "Zařízení je v módu pouze-čtení",
+ "userDeviceReadonly": "Zařízení pouze pro čtení",
"userLimitCommands": "Limit příkazů",
"userToken": "Token",
"loginTitle": "Přihlášení",
"loginLanguage": "Jazyk",
- "loginReset": "Reset Password",
+ "loginReset": "Obnovit Heslo",
"loginRegister": "Registrace",
"loginLogin": "Přihlášení",
"loginFailed": "Nesprávný email nebo heslo",
"loginCreated": "Nový uživatel byl zaregistrován",
- "loginResetSuccess": "Check your email",
- "loginUpdateSuccess": "New password is set",
+ "loginResetSuccess": "Zkontroluj si email ",
+ "loginUpdateSuccess": "Nové heslo je nastaveno",
"loginLogout": "Odhlášení",
"loginLogo": "Logo",
"devicesAndState": "Zařízení a stav",
@@ -151,7 +151,7 @@
"deviceCommand": "Příkaz",
"deviceFollow": "Sledovat",
"deviceTotalDistance": "Celková vzdálenost",
- "deviceStatus": "Status",
+ "deviceStatus": "Stav",
"deviceStatusOnline": "Online",
"deviceStatusOffline": "Offline",
"deviceStatusUnknown": "Neznámý",
@@ -261,11 +261,16 @@
"mapMapboxStreets": "Mapbox ulice",
"mapMapboxOutdoors": "Mapbox venkovní",
"mapMapboxSatellite": "Mapbox satelit",
+ "mapMapTilerBasic": "MapTiler Základní",
+ "mapMapTilerHybrid": "MapTiler Hybridní",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybridní",
"mapShapePolygon": "Mnohoúhelník",
"mapShapeCircle": "Kruh",
"mapShapePolyline": "Křivka",
"mapLiveRoutes": "Trasy živě",
- "mapCurrentLocation": "Current Location",
+ "mapCurrentLocation": "Současná pozice",
"mapPoiLayer": "Vrstva s POI",
"stateTitle": "Stav",
"stateName": "Atribut",
@@ -373,7 +378,6 @@
"alarmJamming": "Zaseknutí",
"alarmTemperature": "Teplota",
"alarmParking": "Parkování",
- "alarmShock": "Otřes",
"alarmBonnet": "Kapota",
"alarmFootBrake": "Nožní brzda",
"alarmFuelLeak": "Únik paliva",
@@ -398,7 +402,7 @@
"reportConfigure": "Nastavit",
"reportEventTypes": "Typy událostí",
"reportChartType": "Typ grafu",
- "reportShowMarkers": "Zobrazit markery",
+ "reportShowMarkers": "Zobrazit značky",
"reportExport": "Exportovat",
"reportEmail": "Zaslat report mailem",
"reportPeriod": "Období",
@@ -412,7 +416,7 @@
"reportDeviceName": "Jméno zařízení",
"reportAverageSpeed": "Průměrná rychlost",
"reportMaximumSpeed": "Maximální rychlost",
- "reportEngineHours": "Hodiny motoru",
+ "reportEngineHours": "Motohodiny",
"reportDuration": "Trvání",
"reportStartDate": "Počáteční datum",
"reportStartTime": "Čas startu",
@@ -440,7 +444,7 @@
"categoryCar": "Auto",
"categoryCrane": "Jeřáb",
"categoryHelicopter": "Helikoptéra",
- "categoryMotorcycle": "Motorka",
+ "categoryMotorcycle": "Motocykl",
"categoryOffroad": "Offroad",
"categoryPerson": "Osoba",
"categoryPickup": "Pickup",
diff --git a/web/l10n/da.json b/web/l10n/da.json
index 61ac5cd7..8b3f955d 100644
--- a/web/l10n/da.json
+++ b/web/l10n/da.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox gader",
"mapMapboxOutdoors": "Mapbox udendørs",
"mapMapboxSatellite": "Mapbox satellit",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Cirkel",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Fastklemning",
"alarmTemperature": "Temperatur",
"alarmParking": "Parkering",
- "alarmShock": "Stød",
"alarmBonnet": "Motorhjelm",
"alarmFootBrake": "Fodbremse",
"alarmFuelLeak": "Brændstoflækage",
diff --git a/web/l10n/de.json b/web/l10n/de.json
index e20d8378..68a5ada8 100644
--- a/web/l10n/de.json
+++ b/web/l10n/de.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Kreis",
"mapShapePolyline": "Polylinie",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperatur",
"alarmParking": "Parken",
- "alarmShock": "Erschütterung",
"alarmBonnet": "Haube",
"alarmFootBrake": "Betriebsbremse",
"alarmFuelLeak": "Treibstoffleck",
diff --git a/web/l10n/el.json b/web/l10n/el.json
index 6d6be3e2..c3a8c7dd 100644
--- a/web/l10n/el.json
+++ b/web/l10n/el.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Πολύγωνο",
"mapShapeCircle": "Κύκλος",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/en.json b/web/l10n/en.json
index 97243a69..6f1cbc4c 100644
--- a/web/l10n/en.json
+++ b/web/l10n/en.json
@@ -106,7 +106,6 @@
"attributeMailSmtpAuth": "Mail: SMTP Auth Enable",
"attributeMailSmtpUsername": "Mail: SMTP Username",
"attributeMailSmtpPassword": "Mail: SMTP Password",
- "attributeUiDisableReport": "UI: Disable Report",
"attributeUiDisableEvents": "UI: Disable Events",
"attributeUiDisableVehicleFetures": "UI: Disable Vehicle Fetures",
"attributeUiDisableDrivers": "UI: Disable Drivers",
@@ -129,6 +128,7 @@
"userUserLimit": "User Limit",
"userDeviceReadonly": "Device Readonly",
"userLimitCommands": "Limit Commands",
+ "userDisableReports": "Disable Reports",
"userToken": "Token",
"loginTitle": "Login",
"loginLanguage": "Language",
@@ -263,6 +263,9 @@
"mapMapboxSatellite": "Mapbox Satellite",
"mapMapTilerBasic": "MapTiler Basic",
"mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Circle",
"mapShapePolyline": "Polyline",
@@ -375,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/es.json b/web/l10n/es.json
index 5cdf7838..8863155b 100644
--- a/web/l10n/es.json
+++ b/web/l10n/es.json
@@ -1,10 +1,10 @@
{
- "sharedLoading": "Cargando...",
+ "sharedLoading": "Cargando…",
"sharedHide": "Ocultar",
"sharedSave": "Guardar",
"sharedSet": "Establecer",
"sharedCancel": "Cancelar",
- "sharedAdd": "Agregar",
+ "sharedAdd": "Añadir",
"sharedEdit": "Editar",
"sharedRemove": "Eliminar",
"sharedRemoveConfirm": "¿Eliminar elemento?",
@@ -19,8 +19,8 @@
"sharedHour": "Hora",
"sharedMinute": "Minuto",
"sharedSecond": "Segundo",
- "sharedDays": "días",
- "sharedHours": "horas",
+ "sharedDays": "Días",
+ "sharedHours": "Horas",
"sharedMinutes": "minutos",
"sharedDecimalDegrees": "Grados",
"sharedDegreesDecimalMinutes": "Minutos",
@@ -28,8 +28,8 @@
"sharedName": "Nombre",
"sharedDescription": "Descripción",
"sharedSearch": "Buscar",
- "sharedGeofence": "Geocerca",
- "sharedGeofences": "Geocercas",
+ "sharedGeofence": "Geo-Zona",
+ "sharedGeofences": "Geo-Zonas",
"sharedNotifications": "Notificaciones",
"sharedNotification": "Notificación",
"sharedAttributes": "Atributos",
@@ -47,9 +47,9 @@
"sharedLiterAbbreviation": "I",
"sharedGallonAbbreviation": "Galón",
"sharedLiter": "Litro",
- "sharedImpGallon": "Imp. Galón",
- "sharedUsGallon": "U.S. Galón",
- "sharedLiterPerHourAbbreviation": "I/h",
+ "sharedImpGallon": "Galón Imp.",
+ "sharedUsGallon": "Galón U.S.",
+ "sharedLiterPerHourAbbreviation": "L/h",
"sharedGetMapState": "Obtener Estado del Mapa",
"sharedComputedAttribute": "Atributo calculado",
"sharedComputedAttributes": "Atributos calculados",
@@ -70,31 +70,31 @@
"sharedTypeString": "Cadena",
"sharedTypeNumber": "Número",
"sharedTypeBoolean": "Booleano",
- "sharedTimezone": "Zona horaria",
+ "sharedTimezone": "Zona Horaria",
"sharedInfoTitle": "Información",
"sharedSavedCommand": "Comando guardado",
"sharedSavedCommands": "Comandos guardados",
- "sharedNew": "Nuevo...",
- "sharedShowAddress": "Mostrar Dirección",
+ "sharedNew": "Nuevo…",
+ "sharedShowAddress": "Mostrar calle",
"sharedShowDetails": "Más detalles",
"sharedDisabled": "Deshabilitado",
"sharedMaintenance": "Mantenimientos",
"sharedDeviceAccumulators": "Acumulador",
"sharedAlarms": "Alarmas",
"sharedLocation": "Ubicación",
- "sharedImport": "Import",
+ "sharedImport": "Importar",
"attributeSpeedLimit": "Límite de velocidad",
"attributePolylineDistance": "Distancia de polilínea",
"attributeReportIgnoreOdometer": "Reporte: Ignorar el odómetro",
"attributeWebReportColor": "Web: Color de reporte",
"attributeDevicePassword": "Contraseña de dispositivo",
- "attributeDeviceInactivityStart": "Device Inactivity Start",
- "attributeDeviceInactivityPeriod": "Device Inactivity Period",
+ "attributeDeviceInactivityStart": "Inicio de inactividad del dispositivo",
+ "attributeDeviceInactivityPeriod": "Periodo de inactividad del dispositivo",
"attributeProcessingCopyAttributes": "Procesando: Copia de atributos",
"attributeColor": "Color",
- "attributeWebLiveRouteLength": "Web: Longitud de la ruta en vivo",
+ "attributeWebLiveRouteLength": "Web: Longitud de la ruta en directo",
"attributeWebSelectZoom": "Web: hacer zoom al seleccionar",
- "attributeWebMaxZoom": "Web: Zoom Máximo",
+ "attributeWebMaxZoom": "Web: Zoom máximo",
"attributeMailSmtpHost": "Correo: Servidor SMTP",
"attributeMailSmtpPort": "Correo: Puerto SMTP",
"attributeMailSmtpStarttlsEnable": "Correo: Habilitar SMTP STARTTLS",
@@ -106,40 +106,40 @@
"attributeMailSmtpAuth": "Correo: Habilitar autenticación SMTP",
"attributeMailSmtpUsername": "Correo: Nombre de usuario SMTP",
"attributeMailSmtpPassword": "Correo: Contraseña SMTP",
- "attributeUiDisableReport": "UI: Deshabilitar reporte",
- "attributeUiDisableEvents": "UI: Deshabilitar Eventos",
- "attributeUiDisableVehicleFetures": "UI: Deshabilitar Características del vehiculo",
+ "attributeUiDisableReport": "UI: Deshabilitar panel Reportes",
+ "attributeUiDisableEvents": "UI: Deshabilitar panel Eventos",
+ "attributeUiDisableVehicleFetures": "UI: Deshabilitar características del vehículo",
"attributeUiDisableDrivers": "UI: Deshabilitar Conductores",
- "attributeUiDisableComputedAttributes": "UI: Deshabilitar Atributos Calculados",
+ "attributeUiDisableComputedAttributes": "UI: Deshabilitar Atributos calculados",
"attributeUiDisableCalendars": "UI: Deshabilitar Calendario",
"attributeUiDisableMaintenance": "UI: Deshabilitar Mantenimiento",
"attributeUiHidePositionAttributes": "UI: Ocultar Atributos de Posición",
"attributeNotificationTokens": "Notification Tokens",
"errorTitle": "Error",
- "errorGeneral": "Parámetros inválidos o violación de restricciónes",
- "errorConnection": "Error de Conexión",
- "errorSocket": "Error de conexión web",
+ "errorGeneral": "Parámetros no válidos o fuera de los límites",
+ "errorConnection": "Error en la conexión",
+ "errorSocket": "Error del Web-Socket",
"errorZero": "No puede ser cero",
"userEmail": "Email",
"userPassword": "Contraseña",
"userAdmin": "Administrador",
"userRemember": "Recordar",
- "userExpirationTime": "Vencimiento",
- "userDeviceLimit": "Límite del dispositivo",
- "userUserLimit": "Límite de usuario",
+ "userExpirationTime": "Caducidad",
+ "userDeviceLimit": "Límite de dispositivos",
+ "userUserLimit": "Límite de usuarios",
"userDeviceReadonly": "Dispositivo de sólo lectura",
"userLimitCommands": "Limitar Comandos",
- "userToken": "Símbolo",
- "loginTitle": "Ingresar",
+ "userToken": "Token Acceso",
+ "loginTitle": "Iniciar sesión",
"loginLanguage": "Idioma",
- "loginReset": "Reset Password",
- "loginRegister": "Registrar",
- "loginLogin": "Ingresar",
- "loginFailed": "Dirección de correo o contraseña incorrecta",
+ "loginReset": "Reiniciar contraseña",
+ "loginRegister": "Registrarse",
+ "loginLogin": "Iniciar sesión",
+ "loginFailed": "Email o contraseña incorrecta",
"loginCreated": "Se ha registrado un nuevo usuario",
- "loginResetSuccess": "Check your email",
- "loginUpdateSuccess": "New password is set",
- "loginLogout": "Salir",
+ "loginResetSuccess": "Comprueba tu email",
+ "loginUpdateSuccess": "Se ha creado la nueva contraseña",
+ "loginLogout": "Cerrar Sesión",
"loginLogo": "Logotipo",
"devicesAndState": "Dispositivos y Estado",
"deviceTitle": "Dispositivos",
@@ -150,7 +150,7 @@
"deviceLastUpdate": "Última Actualización",
"deviceCommand": "Comando",
"deviceFollow": "Seguir",
- "deviceTotalDistance": "Distancia total",
+ "deviceTotalDistance": "Distancia Total",
"deviceStatus": "Estado",
"deviceStatusOnline": "En línea",
"deviceStatusOffline": "Fuera de línea",
@@ -166,8 +166,8 @@
"settingsDistanceUnit": "Unidad de Distancia",
"settingsSpeedUnit": "Unidad de Velocidad",
"settingsVolumeUnit": "Unidad de Volumen",
- "settingsTwelveHourFormat": "Formato de 12 horas",
- "settingsCoordinateFormat": "Formato de coordenadas",
+ "settingsTwelveHourFormat": "Formato de 12h.",
+ "settingsCoordinateFormat": "Formato de Coordenadas",
"reportTitle": "Reportes",
"reportDevice": "Dispositivos",
"reportGroup": "Grupo",
@@ -182,16 +182,16 @@
"positionLongitude": "Longitud",
"positionAltitude": "Altitud",
"positionSpeed": "Velocidad",
- "positionCourse": "Curso",
- "positionAddress": "Dirección",
+ "positionCourse": "Rumbo",
+ "positionAddress": "Dirección Calle",
"positionProtocol": "Protocolo",
"positionDistance": "Distancia",
"positionRpm": "RPM",
"positionFuel": "Combustible",
- "positionPower": "Corriente",
+ "positionPower": "Energía",
"positionBattery": "Batería",
"positionRaw": "Crudo",
- "positionIndex": "Indice",
+ "positionIndex": "Índice / Index",
"positionHdop": "HDOP",
"positionVdop": "VDOP",
"positionPdop": "PDOP",
@@ -211,7 +211,7 @@
"positionInput": "Entrada",
"positionOutput": "Salida",
"positionBatteryLevel": "Nivel de batería",
- "positionFuelConsumption": "Consumo de gasolina",
+ "positionFuelConsumption": "Consumo de combustible",
"positionRfid": "RFDI",
"positionVersionFw": "Versión de firmware",
"positionVersionHw": "Versión de hardware",
@@ -233,39 +233,44 @@
"positionDtcs": "DTCs",
"positionObdSpeed": "Velocidad OBD",
"positionObdOdometer": "Odómetro OBD",
- "positionDriverUniqueId": "ID Único de conductor",
+ "positionDriverUniqueId": "ID única del conductor",
"positionImage": "Imagen",
"positionAudio": "Audio",
"serverTitle": "Ajustes del servidor",
"serverZoom": "Zoom",
"serverRegistration": "Registro",
"serverReadonly": "Sólo lectura",
- "serverForceSettings": "Forzar Valores",
- "serverAnnouncement": "Announcement",
+ "serverForceSettings": "Forzar estos ajustes",
+ "serverAnnouncement": "Mostrar anuncio",
"mapTitle": "Mapa",
- "mapLayer": "Capa de Mapa",
+ "mapLayer": "Capas del Mapa",
"mapCustom": "Personalizado (XYZ)",
"mapCustomArcgis": "ArcGIS Personalizado",
"mapCustomLabel": "Mapa Personalizado",
- "mapCarto": "Mapas base Carto",
+ "mapCarto": "Carto",
"mapOsm": "Open Street Map",
"mapBingKey": "Bing Maps Key",
"mapBingRoad": "Bing Maps - Carretera",
"mapBingAerial": "Bing Maps - Aéreo",
- "mapBingHybrid": "Bing Maps híbrido",
+ "mapBingHybrid": "Bing Maps - Híbrido",
"mapBaidu": "Baidu",
"mapAutoNavi": "AutoNavi",
- "mapYandexMap": "Mapa Yandex",
+ "mapYandexMap": "Yandex",
"mapYandexSat": "Yandex Satélite",
"mapWikimedia": "Wikimedia",
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polígono",
"mapShapeCircle": "Círculo",
"mapShapePolyline": "Polilínea",
- "mapLiveRoutes": "Rutas en vivo",
- "mapCurrentLocation": "Current Location",
+ "mapLiveRoutes": "Rutas en Directo",
+ "mapCurrentLocation": "Ubicación Actual",
"mapPoiLayer": "Capa POI",
"stateTitle": "Estado",
"stateName": "Parámetro",
@@ -277,42 +282,42 @@
"commandUnit": "Unidad",
"commandCustom": "Comando personalizado",
"commandDeviceIdentification": "Identificación de Dispositivo",
- "commandPositionSingle": "Reporte único",
+ "commandPositionSingle": "Reporte Único",
"commandPositionPeriodic": "Reporte Periódico",
"commandPositionStop": "Detener Reporte",
"commandEngineStop": "Apagar motor",
"commandEngineResume": "Desbloquear Encendido de Motor",
"commandAlarmArm": "Armar Alarma",
"commandAlarmDisarm": "Desarmar Alarma",
- "commandAlarmDismiss": "Dismiss Alarm",
- "commandSetTimezone": "Establecer zona horaria",
+ "commandAlarmDismiss": "Descartar Alarma",
+ "commandSetTimezone": "Establecer Zona Horaria",
"commandRequestPhoto": "Solicitar Foto",
- "commandPowerOff": "Dispositivo apagado",
+ "commandPowerOff": "Apagar dispositivo",
"commandRebootDevice": "Reiniciar dispositivo",
- "commandFactoryReset": "Factory Reset",
+ "commandFactoryReset": "Valores de fábrica",
"commandSendSms": "Enviar SMS",
"commandSendUssd": "Enviar USSD",
"commandSosNumber": "Establecer el número SOS",
- "commandSilenceTime": "Setear horario de silencio",
+ "commandSilenceTime": "Establecer horario de silencio",
"commandSetPhonebook": "Establecer contacto",
"commandVoiceMessage": "Mensaje de voz",
"commandOutputControl": "Control de Salidas",
"commandVoiceMonitoring": "Monitoreo de Voz",
- "commandSetAgps": "Configurar AGPS",
- "commandSetIndicator": "Ajustar indicador",
+ "commandSetAgps": "Establecer AGPS",
+ "commandSetIndicator": "Establecer indicador",
"commandConfiguration": "Configuración",
"commandGetVersion": "Obtener Versión",
"commandFirmwareUpdate": "Actualizar Firmware",
- "commandSetConnection": "Configurar Conexión",
- "commandSetOdometer": "Configurar Odómetro",
+ "commandSetConnection": "Establecer Conexión",
+ "commandSetOdometer": "Establecer Odómetro",
"commandGetModemStatus": "Obtener Estatus de Módem",
"commandGetDeviceStatus": "Obtener Estatus de Dispositivo",
- "commandSetSpeedLimit": "Set Speed Limit",
+ "commandSetSpeedLimit": "Establecer Límite de Velocidad",
"commandModePowerSaving": "Modificar Ahorro de Energía",
- "commandModeDeepSleep": "Modificar Ahorro Profundo",
+ "commandModeDeepSleep": "Modificar Ahorro de energía Profundo",
"commandMovementAlarm": "Alarma de Movimiento",
"commandFrequency": "Frequencia",
- "commandTimezone": "Compensación horaria",
+ "commandTimezone": "Compensación de zona horaria",
"commandMessage": "Mensaje",
"commandRadius": "Radio",
"commandEnable": "Activado",
@@ -321,32 +326,32 @@
"commandPhone": "Número de Teléfono",
"commandServer": "Servidor",
"commandPort": "Puerto",
- "eventAll": "Todos los Eventos",
- "eventDeviceOnline": "El Dispositivo Esta en Línea",
- "eventDeviceUnknown": "El Estado del Dispositivo es Desconocido ",
- "eventDeviceOffline": "El Dispositivo esta Fuera de Línea",
- "eventDeviceInactive": "Dispositivo inactivo",
- "eventDeviceMoving": "El Dispositivo esta en Movimiento ",
- "eventDeviceStopped": "El Dispositivo se ha Detenido ",
- "eventDeviceOverspeed": "El Dispositivo ha Excedido el Limite de Velocidad ",
+ "eventAll": "Todos los eventos",
+ "eventDeviceOnline": "Dispositivo en Línea",
+ "eventDeviceUnknown": "Dispositivo en estado Desconocido",
+ "eventDeviceOffline": "Dispositivo Fuera de Línea",
+ "eventDeviceInactive": "Dispositivo Inactivo",
+ "eventDeviceMoving": "Dispositivo en Movimiento",
+ "eventDeviceStopped": "Dispositivo Detenido",
+ "eventDeviceOverspeed": "Excedido el límite de Velocidad",
"eventDeviceFuelDrop": "Perdida de Combustible ",
- "eventCommandResult": "Resultado de comando",
- "eventGeofenceEnter": "El Dispositivo ha entrado en la Geocerca ",
- "eventGeofenceExit": "El Dispositivo ha salido de la Geocerca ",
+ "eventCommandResult": "Resultado del comando",
+ "eventGeofenceEnter": "Entrada en la Geo-Zona",
+ "eventGeofenceExit": "Salida de la Geo-Zona",
"eventAlarm": "Alarma ",
- "eventIgnitionOn": "Encendido ON",
- "eventIgnitionOff": "Encendido OFF",
- "eventMaintenance": "Requiere mantenimiento",
+ "eventIgnitionOn": "Llave encendido ON",
+ "eventIgnitionOff": "Llave encendido OFF",
+ "eventMaintenance": "Se requiere mantenimiento",
"eventTextMessage": "Mensaje de texto recibido",
- "eventDriverChanged": "El Conductor ha Cambiado",
+ "eventDriverChanged": "El conductor ha cambiado",
"eventsScrollToLast": "Desplazarse hasta el último",
"alarmGeneral": "General",
"alarmSos": "SOS",
"alarmVibration": "Vibración",
"alarmMovement": "Movimiento",
- "alarmLowspeed": " Rápida Aceleración",
+ "alarmLowspeed": "Baja Velocidad",
"alarmOverspeed": "Exceso de Velocidad ",
- "alarmFallDown": "Alarma de caida",
+ "alarmFallDown": "Alarma de caída",
"alarmLowPower": "Energía baja",
"alarmLowBattery": "Batería Baja",
"alarmFault": "Alarma de fallo",
@@ -355,39 +360,38 @@
"alarmDoor": "Puerta",
"alarmLock": "Bloqueado",
"alarmUnlock": "Desbloquear",
- "alarmGeofence": "Geocerca",
- "alarmGeofenceEnter": "El Dispositivo ha entrado a la Geocerca",
- "alarmGeofenceExit": "El Dispositivo ha salido de la Geocerca ",
+ "alarmGeofence": "Geo-Zona",
+ "alarmGeofenceEnter": "El Dispositivo ha entrado a la Geo-Zona",
+ "alarmGeofenceExit": "El Dispositivo ha salido de la Geo-Zona",
"alarmGpsAntennaCut": "Antena del GPS Cortada ",
"alarmAccident": "Accidente",
- "alarmTow": "Remolque",
+ "alarmTow": "Grúa de arrastre",
"alarmIdle": "Reposo",
"alarmHighRpm": "Altas revoluciones",
"alarmHardAcceleration": "Aceleración brusca",
- "alarmHardBraking": "Frenado extremo",
+ "alarmHardBraking": "Frenada extrema",
"alarmHardCornering": "Giro brusco",
"alarmLaneChange": "Cambio de carril",
"alarmFatigueDriving": "Conducción fatigosa",
- "alarmPowerCut": "Fuente de poder desconectada",
- "alarmPowerRestored": "Fuente de poder restaurada",
+ "alarmPowerCut": "Energía desconectada",
+ "alarmPowerRestored": "Energía restaurada",
"alarmJamming": "Interferencia",
- "alarmTemperature": "Alarma de temperatura",
+ "alarmTemperature": "Temperatura",
"alarmParking": "Aparcamiento",
- "alarmShock": "Choque",
"alarmBonnet": "Capó",
"alarmFootBrake": "Freno de pie",
- "alarmFuelLeak": "Drenaje de combustible",
+ "alarmFuelLeak": "Fuga de combustible",
"alarmTampering": "Manipulación",
"alarmRemoving": "Eliminando",
"notificationType": "Tipo de Notificación",
- "notificationAlways": "Todos los Dispositivos",
+ "notificationAlways": "Todos los dispositivos",
"notificationNotificators": "Canales",
"notificatorWeb": "Web",
"notificatorMail": "Correo",
"notificatorSms": "SMS",
"notificatorFirebase": "Firebase",
"notificatorTraccar": "Traccar",
- "reportReplay": "Replay",
+ "reportReplay": "Repetir",
"reportRoute": "Ruta",
"reportEvents": "Eventos",
"reportTrips": "Viajes",
@@ -409,7 +413,7 @@
"reportPreviousWeek": "Semana anterior",
"reportThisMonth": "Mes Actual",
"reportPreviousMonth": "Mes Anterior",
- "reportDeviceName": "Nombre de Dispositivo",
+ "reportDeviceName": "Nombre",
"reportAverageSpeed": "Velocidad promedio",
"reportMaximumSpeed": "Velocidad Máxima",
"reportEngineHours": "Horas Motor",
@@ -423,7 +427,7 @@
"reportStartOdometer": "Odómetro inical",
"reportEndOdometer": "Odómetro final",
"statisticsTitle": "Estadísticas",
- "statisticsCaptureTime": "Tiempo de captura",
+ "statisticsCaptureTime": "Fecha de captura",
"statisticsActiveUsers": "Usuarios Activos",
"statisticsActiveDevices": "Dispositivos Activos",
"statisticsRequests": "Peticiones",
diff --git a/web/l10n/fa.json b/web/l10n/fa.json
index 1a77883f..87d0ed22 100644
--- a/web/l10n/fa.json
+++ b/web/l10n/fa.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "چند ضلعی",
"mapShapeCircle": "دایره ",
"mapShapePolyline": "چند خطی",
@@ -373,7 +378,6 @@
"alarmJamming": "مسدود",
"alarmTemperature": "دما",
"alarmParking": "پارکینگ",
- "alarmShock": "شوک",
"alarmBonnet": "صندوق",
"alarmFootBrake": "پدال ترمز",
"alarmFuelLeak": "نشت باک",
diff --git a/web/l10n/fi.json b/web/l10n/fi.json
index 2b37d75a..43cdf864 100644
--- a/web/l10n/fi.json
+++ b/web/l10n/fi.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Monikulmio",
"mapShapeCircle": "Ympyrä",
"mapShapePolyline": "Murtoviiva",
@@ -373,7 +378,6 @@
"alarmJamming": "Häirintä",
"alarmTemperature": "Lämpötila",
"alarmParking": "Pysäköinti",
- "alarmShock": "Isku",
"alarmBonnet": "Konepelti",
"alarmFootBrake": "Jalkajarru",
"alarmFuelLeak": "Polttoainevuoto",
diff --git a/web/l10n/fr.json b/web/l10n/fr.json
index 076981ac..48ca84d7 100644
--- a/web/l10n/fr.json
+++ b/web/l10n/fr.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygone",
"mapShapeCircle": "Cercle",
"mapShapePolyline": "Polyligne",
@@ -373,7 +378,6 @@
"alarmJamming": "Brouillage",
"alarmTemperature": "Température",
"alarmParking": "Parking",
- "alarmShock": "Choc",
"alarmBonnet": "Capot",
"alarmFootBrake": "Frein à pied",
"alarmFuelLeak": "Fuite de carburant",
diff --git a/web/l10n/he.json b/web/l10n/he.json
index 53985e7e..d27b37ad 100644
--- a/web/l10n/he.json
+++ b/web/l10n/he.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "פוליגון",
"mapShapeCircle": "מעגל",
"mapShapePolyline": "צלע",
@@ -373,7 +378,6 @@
"alarmJamming": "שיבוש",
"alarmTemperature": "טמפרטורה",
"alarmParking": "חניה",
- "alarmShock": "בולם",
"alarmBonnet": "מכסה מנוע",
"alarmFootBrake": "בלם ",
"alarmFuelLeak": "דליפת דלק",
diff --git a/web/l10n/hi.json b/web/l10n/hi.json
index 6e18ec5d..eb688833 100644
--- a/web/l10n/hi.json
+++ b/web/l10n/hi.json
@@ -8,8 +8,8 @@
"sharedEdit": "संपादित करें",
"sharedRemove": "हटाएं",
"sharedRemoveConfirm": "आइटम हटाएं ?",
- "sharedYes": "Yes",
- "sharedNo": "No",
+ "sharedYes": "हाँ",
+ "sharedNo": "नहीं",
"sharedKm": "किमी / किलोमीटर",
"sharedMi": "एम आई",
"sharedNmi": "nmi",
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "बहुभुज",
"mapShapeCircle": "वृत्त",
"mapShapePolyline": "पाली लाइन",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/hr.json b/web/l10n/hr.json
index 7f0c44bf..358c9224 100644
--- a/web/l10n/hr.json
+++ b/web/l10n/hr.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox ulice",
"mapMapboxOutdoors": "Mapbox izvana",
"mapMapboxSatellite": "Mapbox satelit",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Mnogokut",
"mapShapeCircle": "Krug",
"mapShapePolyline": "Razlomljena linija",
@@ -373,7 +378,6 @@
"alarmJamming": "Ometanje",
"alarmTemperature": "Temperatura",
"alarmParking": "Parking",
- "alarmShock": "Udar",
"alarmBonnet": "Hauba",
"alarmFootBrake": "Kočnica",
"alarmFuelLeak": "Curenje goriva",
diff --git a/web/l10n/hu.json b/web/l10n/hu.json
index 18b56b13..35fcdb48 100644
--- a/web/l10n/hu.json
+++ b/web/l10n/hu.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Poligon",
"mapShapeCircle": "Kör",
"mapShapePolyline": "Vonallánc",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/id.json b/web/l10n/id.json
index 657e23f6..da8ab394 100644
--- a/web/l10n/id.json
+++ b/web/l10n/id.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Poligon",
"mapShapeCircle": "Lingkaran",
"mapShapePolyline": "Garis Poli",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/it.json b/web/l10n/it.json
index d727a0fb..c6427ba2 100644
--- a/web/l10n/it.json
+++ b/web/l10n/it.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Poligono",
"mapShapeCircle": "Cerchio",
"mapShapePolyline": "Polylinea",
@@ -373,7 +378,6 @@
"alarmJamming": "Disturbatore Frequenze",
"alarmTemperature": "Temperatura",
"alarmParking": "Parcheggio",
- "alarmShock": "Incidente",
"alarmBonnet": "Cofano",
"alarmFootBrake": "Freno a pedale",
"alarmFuelLeak": "Perdita carburante",
diff --git a/web/l10n/ja.json b/web/l10n/ja.json
index 61df9977..74c56409 100644
--- a/web/l10n/ja.json
+++ b/web/l10n/ja.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "多角形",
"mapShapeCircle": "円形",
"mapShapePolyline": "折れ線形",
@@ -373,7 +378,6 @@
"alarmJamming": "ジャミング",
"alarmTemperature": "温度",
"alarmParking": "駐車",
- "alarmShock": "衝撃",
"alarmBonnet": "ボンネット",
"alarmFootBrake": "フットブレーキ",
"alarmFuelLeak": "燃料漏れ",
diff --git a/web/l10n/ka.json b/web/l10n/ka.json
index 0acc10a0..a052d66a 100644
--- a/web/l10n/ka.json
+++ b/web/l10n/ka.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox ქუჩები",
"mapMapboxOutdoors": "Mapbox ღია ცის ქვეშ",
"mapMapboxSatellite": "Mapbox სატელიტი",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "მრავალკუთხედი",
"mapShapeCircle": "წრე",
"mapShapePolyline": "ტეხილი ხაზები",
@@ -373,7 +378,6 @@
"alarmJamming": "ჭექითი ცვეთა",
"alarmTemperature": "ტემპერატურა",
"alarmParking": "პარკინგი",
- "alarmShock": "შოკი",
"alarmBonnet": "კაპოტი",
"alarmFootBrake": "ფეხის მუხრუჭი",
"alarmFuelLeak": "საწვავის გაჟონვა",
diff --git a/web/l10n/kk.json b/web/l10n/kk.json
index a6589312..d47098e7 100644
--- a/web/l10n/kk.json
+++ b/web/l10n/kk.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Көпбұрыш",
"mapShapeCircle": "Шеңбер",
"mapShapePolyline": "Сызық",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/km.json b/web/l10n/km.json
index 9b3e24fa..1423888e 100644
--- a/web/l10n/km.json
+++ b/web/l10n/km.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "ពហុកោណ",
"mapShapeCircle": "រង្វង់",
"mapShapePolyline": "ពហុបន្ទាត់",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/ko.json b/web/l10n/ko.json
index 3a2ebe20..b525fed1 100644
--- a/web/l10n/ko.json
+++ b/web/l10n/ko.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "다각형",
"mapShapeCircle": "원형",
"mapShapePolyline": "폴리라인",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/lo.json b/web/l10n/lo.json
index 12c8ddf0..8c660a90 100644
--- a/web/l10n/lo.json
+++ b/web/l10n/lo.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "ໂພລີກອນ",
"mapShapeCircle": "ວົງກົມ",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/lt.json b/web/l10n/lt.json
index 228a26a5..10c658ff 100644
--- a/web/l10n/lt.json
+++ b/web/l10n/lt.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox gatvės",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Palydovinis",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygonas",
"mapShapeCircle": "Apskritimas",
"mapShapePolyline": "Polilinija",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/lv.json b/web/l10n/lv.json
index b387aa78..0190beab 100644
--- a/web/l10n/lv.json
+++ b/web/l10n/lv.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Daudzstūris",
"mapShapeCircle": "Aplis",
"mapShapePolyline": "Lauzta līnija",
@@ -373,7 +378,6 @@
"alarmJamming": "Sastrēgums",
"alarmTemperature": "Temperatūra",
"alarmParking": "Stāvvieta",
- "alarmShock": "Trieciens",
"alarmBonnet": "Motora pārsegs",
"alarmFootBrake": "Kājas bremze",
"alarmFuelLeak": "Degvielas noplūde",
diff --git a/web/l10n/ml.json b/web/l10n/ml.json
index 9ce6d1a0..be91b14e 100644
--- a/web/l10n/ml.json
+++ b/web/l10n/ml.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Circle",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/mn.json b/web/l10n/mn.json
index 7675707e..c2688f87 100644
--- a/web/l10n/mn.json
+++ b/web/l10n/mn.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Circle",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/ms.json b/web/l10n/ms.json
index f94b432d..ef1d1ba7 100644
--- a/web/l10n/ms.json
+++ b/web/l10n/ms.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Circle",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/nb.json b/web/l10n/nb.json
index dbf5785f..83e474a2 100644
--- a/web/l10n/nb.json
+++ b/web/l10n/nb.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Mangekant",
"mapShapeCircle": "Sirkel",
"mapShapePolyline": "Polylinje",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Tempratur",
"alarmParking": "Parkering",
- "alarmShock": "Støt",
"alarmBonnet": "Panser",
"alarmFootBrake": "Bremsepedal",
"alarmFuelLeak": "Drivstofflekasje",
diff --git a/web/l10n/ne.json b/web/l10n/ne.json
index c6b0db49..3314f971 100644
--- a/web/l10n/ne.json
+++ b/web/l10n/ne.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "बहुभुज",
"mapShapeCircle": "वृत्त",
"mapShapePolyline": "बहुरेखा",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "तापक्रम",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/nl.json b/web/l10n/nl.json
index 4447ed53..859fde4d 100644
--- a/web/l10n/nl.json
+++ b/web/l10n/nl.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygoon",
"mapShapeCircle": "Cirkel",
"mapShapePolyline": "Polylijn",
@@ -373,7 +378,6 @@
"alarmJamming": "Verstoring",
"alarmTemperature": "Temperatuur",
"alarmParking": "Parkeren",
- "alarmShock": "Schok",
"alarmBonnet": "Motorkap",
"alarmFootBrake": "Voetrem",
"alarmFuelLeak": "Brandstoflek",
diff --git a/web/l10n/nn.json b/web/l10n/nn.json
index d275369b..19922e00 100644
--- a/web/l10n/nn.json
+++ b/web/l10n/nn.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Mangekant",
"mapShapeCircle": "Sirkel",
"mapShapePolyline": "Polylinje",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperatur",
"alarmParking": "Parkering",
- "alarmShock": "Sjokk",
"alarmBonnet": "Motorpanser",
"alarmFootBrake": "Bremsepedal",
"alarmFuelLeak": "Drivstofflekkasje",
diff --git a/web/l10n/pl.json b/web/l10n/pl.json
index d67da1e8..0ff64b00 100644
--- a/web/l10n/pl.json
+++ b/web/l10n/pl.json
@@ -252,15 +252,20 @@
"mapBingKey": "Bing Maps Key",
"mapBingRoad": "Bing Maps Road",
"mapBingAerial": "Bing Maps Aerial",
- "mapBingHybrid": "Mapa hybrydowa Bing",
+ "mapBingHybrid": "Bing Maps Hybrid",
"mapBaidu": "Baidu",
- "mapAutoNavi": "Auto nawigacja",
- "mapYandexMap": "Mapa Yandex",
- "mapYandexSat": "Satelita Yandex",
+ "mapAutoNavi": "AutoNavi",
+ "mapYandexMap": "Yandex Map",
+ "mapYandexSat": "Yandex Satellite",
"mapWikimedia": "Wikimedia",
- "mapMapboxStreets": "Mapbox ulice",
- "mapMapboxOutdoors": "Mapbox na zewnątrz",
- "mapMapboxSatellite": "Mapbox satelity",
+ "mapMapboxStreets": "Mapbox Streets",
+ "mapMapboxOutdoors": "Mapbox Outdoors",
+ "mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Wielokąt",
"mapShapeCircle": "Okrąg",
"mapShapePolyline": "Krzywa",
@@ -373,7 +378,6 @@
"alarmJamming": "Zakłócanie",
"alarmTemperature": "Temperatura",
"alarmParking": "Parkowanie",
- "alarmShock": "Wstrząs",
"alarmBonnet": "Maska",
"alarmFootBrake": "Hamulec nożny",
"alarmFuelLeak": "Wyciek paliwa",
diff --git a/web/l10n/pt.json b/web/l10n/pt.json
index 1f76ad7d..db612938 100644
--- a/web/l10n/pt.json
+++ b/web/l10n/pt.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Ruas",
"mapMapboxOutdoors": "Mapbox ao ar livre",
"mapMapboxSatellite": "Mapbox Satélite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polígono",
"mapShapeCircle": "Circulo",
"mapShapePolyline": "Linha Polígono",
@@ -373,7 +378,6 @@
"alarmJamming": "Alarme de Bloqueio",
"alarmTemperature": "Temperatura",
"alarmParking": "Estacionamento",
- "alarmShock": "Choque",
"alarmBonnet": "Alarme do Capô",
"alarmFootBrake": "Alarme de Travão de Mão",
"alarmFuelLeak": "Perda de Combustivel",
diff --git a/web/l10n/pt_BR.json b/web/l10n/pt_BR.json
index 8a22b3aa..b8f41975 100644
--- a/web/l10n/pt_BR.json
+++ b/web/l10n/pt_BR.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Ruas",
"mapMapboxOutdoors": "Mapbox ao ar livre",
"mapMapboxSatellite": "Mapbox Satélite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polígono",
"mapShapeCircle": "Círculo",
"mapShapePolyline": "Polilinha",
@@ -373,7 +378,6 @@
"alarmJamming": "Interferência",
"alarmTemperature": "Temperatura",
"alarmParking": "Estacionamento",
- "alarmShock": "Choque",
"alarmBonnet": "Capô",
"alarmFootBrake": "Freio de mão",
"alarmFuelLeak": "Vazamento de combustível",
diff --git a/web/l10n/ro.json b/web/l10n/ro.json
index 8a36f2d3..d4eaa197 100644
--- a/web/l10n/ro.json
+++ b/web/l10n/ro.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Poligon",
"mapShapeCircle": "Cerc",
"mapShapePolyline": "Polilinie",
@@ -373,7 +378,6 @@
"alarmJamming": "Bruiaj",
"alarmTemperature": "Temperatura",
"alarmParking": "Parcare",
- "alarmShock": "Soc",
"alarmBonnet": "Capota",
"alarmFootBrake": "Frana de serviciu",
"alarmFuelLeak": "Pierdere combustibil",
diff --git a/web/l10n/ru.json b/web/l10n/ru.json
index 526d9cda..608d934c 100644
--- a/web/l10n/ru.json
+++ b/web/l10n/ru.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Улицы",
"mapMapboxOutdoors": "Mapbox Топография",
"mapMapboxSatellite": "Mapbox Спутник",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Многоугольник",
"mapShapeCircle": "Круг",
"mapShapePolyline": "Линия",
@@ -373,7 +378,6 @@
"alarmJamming": "Заглушено",
"alarmTemperature": "Температура",
"alarmParking": "Парковка",
- "alarmShock": "Шок",
"alarmBonnet": "Капот",
"alarmFootBrake": "Ножной тормоз",
"alarmFuelLeak": "Утечка топлива",
diff --git a/web/l10n/si.json b/web/l10n/si.json
index 40fa1b2d..afa28f6d 100644
--- a/web/l10n/si.json
+++ b/web/l10n/si.json
@@ -1,37 +1,37 @@
{
- "sharedLoading": "පූරණය කරමින් ...",
+ "sharedLoading": "පූරණය වෙමින්...",
"sharedHide": "සඟවන්න",
"sharedSave": "සුරකින්න",
"sharedSet": "සකසන්න",
"sharedCancel": "අවලංගු කරන්න",
"sharedAdd": "එක් කරන්න",
- "sharedEdit": "සංස්කරණය කරන්න",
+ "sharedEdit": "සංස්කරණය",
"sharedRemove": "ඉවත් කරන්න",
- "sharedRemoveConfirm": "අයිතමය ඉවත් කරන්න ද?",
+ "sharedRemoveConfirm": "Remove item?",
"sharedYes": "Yes",
"sharedNo": "No",
"sharedKm": "කි.මී.",
"sharedMi": "සැතපුම්",
"sharedNmi": "nmi",
"sharedKn": "kn",
- "sharedKmh": "කි.මී / පැ ",
+ "sharedKmh": "කි.මී/පැ ",
"sharedMph": "mph",
"sharedHour": "පැය",
- "sharedMinute": "මිනිත්තු",
+ "sharedMinute": "විනාඩි",
"sharedSecond": "තත්පර",
- "sharedDays": "දින",
+ "sharedDays": "දවස්",
"sharedHours": "පැය",
- "sharedMinutes": "මිනිත්තු",
+ "sharedMinutes": "විනාඩි",
"sharedDecimalDegrees": "දශම අංශක",
- "sharedDegreesDecimalMinutes": "දශම අංශක මිනිත්තු",
+ "sharedDegreesDecimalMinutes": "Degrees Decimal Minutes",
"sharedDegreesMinutesSeconds": "දශම අංශක තප්පර ",
"sharedName": "නම",
- "sharedDescription": "විස්තරය",
+ "sharedDescription": "සවිස්තරය",
"sharedSearch": "සොයන්න",
"sharedGeofence": "භූ වැටිය",
"sharedGeofences": "භූ වැටි",
- "sharedNotifications": "නිවේදන",
- "sharedNotification": "දැනුම්දීම්",
+ "sharedNotifications": "දැනුම්දීම්",
+ "sharedNotification": "දැනුම්දීම",
"sharedAttributes": "උපලක්ෂණ",
"sharedAttribute": "උපලක්ෂණය",
"sharedDrivers": "රියදුරන්",
@@ -42,8 +42,8 @@
"sharedDistance": "දුර",
"sharedHourAbbreviation": "පැ.",
"sharedMinuteAbbreviation": "මි.",
- "sharedSecondAbbreviation": "තත්පර",
- "sharedVoltAbbreviation": "වෝල්ට්",
+ "sharedSecondAbbreviation": "තත්.",
+ "sharedVoltAbbreviation": "V",
"sharedLiterAbbreviation": "l",
"sharedGallonAbbreviation": "ගැලුම්",
"sharedLiter": "ලීටර",
@@ -56,9 +56,9 @@
"sharedCheckComputedAttribute": "ගණනය කළ ගුණාංගය පරීක්ෂා කරන්න",
"sharedExpression": "ප්‍රකාශනය",
"sharedDevice": "උපාංගය",
- "sharedTestNotification": "ටෙස්ට් දැනුම්දීම් යවන්න",
+ "sharedTestNotification": "අත්හදාබැලීමේ දැනුම්දීම යවන්න",
"sharedCalendar": "දින දසුන",
- "sharedCalendars": "දින දර්ශන",
+ "sharedCalendars": "දින දසුන්",
"sharedFile": "ගොනුව",
"sharedSelectFile": "ගොනුව තෝරන්න",
"sharedPhone": "දුරකථනය",
@@ -77,7 +77,7 @@
"sharedNew": "අලුත්…",
"sharedShowAddress": "ලිපිනය පෙන්වන්න",
"sharedShowDetails": "More Details",
- "sharedDisabled": "අබාධිතයි",
+ "sharedDisabled": "අබල කර ඇත",
"sharedMaintenance": "නඩත්තුව",
"sharedDeviceAccumulators": "Accumulators",
"sharedAlarms": "Alarms",
@@ -85,42 +85,42 @@
"sharedImport": "Import",
"attributeSpeedLimit": "වේග සීමාව",
"attributePolylineDistance": "Polyline Distance",
- "attributeReportIgnoreOdometer": "වාර්තාව: නොසලකා හරිනවා ප්රතිමාවේ",
- "attributeWebReportColor": "වෙබ්: වාර්තාවේ වර්ණ",
- "attributeDevicePassword": "උපාංග මුරපදය",
+ "attributeReportIgnoreOdometer": "වාර්තාව: සැතපුම්මානය නොසලකන්න",
+ "attributeWebReportColor": "වියමන: පාට වාර්තාකරන්න",
+ "attributeDevicePassword": "උපාංගයේ මුරපදය",
"attributeDeviceInactivityStart": "Device Inactivity Start",
"attributeDeviceInactivityPeriod": "Device Inactivity Period",
- "attributeProcessingCopyAttributes": "සැකසුම: පිටපත් ලක්ෂණ",
+ "attributeProcessingCopyAttributes": "Processing: Copy Attributes",
"attributeColor": "වර්ණ",
- "attributeWebLiveRouteLength": "වෙබ්: සජීවී මාර්ග දිග",
- "attributeWebSelectZoom": "වෙබ්: වැඩි කරන්න තෝරන්න",
- "attributeWebMaxZoom": "වෙබ්: උපරිම විශාලනය",
- "attributeMailSmtpHost": "විද්‍යුත් තැපැල් : SMTP සත්කාරකය",
- "attributeMailSmtpPort": "විද්‍යුත් තැපැල් : SMTP පෝට්",
- "attributeMailSmtpStarttlsEnable": "විද්‍යුත් තැපැල් : SMTP STARTTLS සක්‍රීයයි ",
- "attributeMailSmtpStarttlsRequired": "විද්‍යුත් තැපැල් : SMTP STARTTLS අවශයි ",
- "attributeMailSmtpSslEnable": "විද්‍යුත් තැපැල් : SMTP SSL සක්‍රීයයි",
- "attributeMailSmtpSslTrust": "විද්‍යුත් තැපැල් : SSL විශ්වාසය",
- "attributeMailSmtpSslProtocols": "විද්‍යුත් තැපැල් : SMTP SSL ප්‍රොටෝකෝලය ",
- "attributeMailSmtpFrom": "විද්‍යුත් තැපැල් : SMTP පත්‍රිකාව ",
- "attributeMailSmtpAuth": "විද්‍යුත් තැපැල් : SMTP Auth සක්‍රීයයි",
- "attributeMailSmtpUsername": "විද්‍යුත් තැපැල් : SMTP  පරිශීලක නාමය",
- "attributeMailSmtpPassword": "විද්‍යුත් තැපැල් : SMTP මුරපදය",
- "attributeUiDisableReport": "UI: වාර්තාව අක්‍රිය කරන්න",
- "attributeUiDisableEvents": "UI: සිදුවීම් අක්‍රිය කරන්න",
- "attributeUiDisableVehicleFetures": "වාහනයේ විශේෂාංග අක්‍රිය කරන්න ",
- "attributeUiDisableDrivers": "UI: ධාවකය අක්‍රිය කරන්න",
- "attributeUiDisableComputedAttributes": "UI: පරිගණකගත ගුණාංග අක්‍රිය කරන්න",
- "attributeUiDisableCalendars": "UI: දින දර්ශන අක්‍රිය කරන්න",
+ "attributeWebLiveRouteLength": "Web: Live Route Length",
+ "attributeWebSelectZoom": "Web: Zoom On Select",
+ "attributeWebMaxZoom": "වියමන: උපරිම විශාලනය",
+ "attributeMailSmtpHost": "තැපෑල: ස.තැ.මා.කෙ. සත්කාරකය",
+ "attributeMailSmtpPort": "තැපෑල: ස.තැ.මා.කෙ. කෙවෙනිය",
+ "attributeMailSmtpStarttlsEnable": "Mail: SMTP STARTTLS Enable",
+ "attributeMailSmtpStarttlsRequired": "Mail: SMTP STARTTLS Required",
+ "attributeMailSmtpSslEnable": "Mail: SMTP SSL Enable",
+ "attributeMailSmtpSslTrust": "Mail: SMTP SSL Trust",
+ "attributeMailSmtpSslProtocols": "Mail: SMTP SSL Protocols",
+ "attributeMailSmtpFrom": "Mail: SMTP From",
+ "attributeMailSmtpAuth": "Mail: SMTP Auth Enable",
+ "attributeMailSmtpUsername": "තැපෑල: ස.තැ.මා.කෙ. පරිශීලකනාමය",
+ "attributeMailSmtpPassword": "තැපෑල: ස.තැ.මා.කෙ. මුරපදය",
+ "attributeUiDisableReport": "අ.මු.: වාර්තාව අබල කරන්න",
+ "attributeUiDisableEvents": "අ.මු.: සිදුවීම් අබල කරන්න",
+ "attributeUiDisableVehicleFetures": "අ.මු.: වාහනයේ විශේෂාංග අබල කරන්න",
+ "attributeUiDisableDrivers": "UI: Disable Drivers",
+ "attributeUiDisableComputedAttributes": "UI: Disable Computed Attributes",
+ "attributeUiDisableCalendars": "අ.මු.: දින දසුන අබල කරන්න",
"attributeUiDisableMaintenance": "UI: Disable Maintenance",
"attributeUiHidePositionAttributes": "UI: Hide Position Attributes",
"attributeNotificationTokens": "Notification Tokens",
- "errorTitle": "දෝෂයක් ",
- "errorGeneral": "අවලංගු පරාමිති හෝ බාධක උල්ලංඝනය කිරීම",
- "errorConnection": "සම්බන්ධතා දෝෂයක් !",
- "errorSocket": "වෙබ් සොකට් සම්බන්ධතා දෝෂය",
- "errorZero": "ශුන්ය විය නොහැක",
- "userEmail": "විද්‍යුත් තැපෑල",
+ "errorTitle": "දෝෂයකි",
+ "errorGeneral": "Invalid parameters or constraints violation",
+ "errorConnection": "සම්බන්ධතාවේ දෝෂයකි",
+ "errorSocket": "Web socket connection error",
+ "errorZero": "ශුන්ය විය නොහැකිය",
+ "userEmail": "වි-තැපෑල",
"userPassword": "මුරපදය",
"userAdmin": "පරිපාලක",
"userRemember": "මතක තබාගන්න",
@@ -130,51 +130,51 @@
"userDeviceReadonly": "උපාංගය කියවීම පමණි",
"userLimitCommands": "සීමිත විධානයන්",
"userToken": "Token",
- "loginTitle": "පිවිසුම් ගිණුම",
+ "loginTitle": "ඇතුල් වන්න",
"loginLanguage": "භාෂාව",
"loginReset": "Reset Password",
- "loginRegister": "ලියාපදිංචි කරන්න",
- "loginLogin": "පිවිසුම",
- "loginFailed": "ඊ-මේල් ලිපිනය හෝ මුරපදය වැරදිය !",
- "loginCreated": "නව පරිශීලක ලියාපදිංචි කරන ලදි !",
+ "loginRegister": "ලියාපදිංචි වන්න",
+ "loginLogin": "ඇතුල් වන්න",
+ "loginFailed": "වි-තැපැල් ලිපිනය හෝ මුරපදය වැරදිය!",
+ "loginCreated": "New user has been registered",
"loginResetSuccess": "Check your email",
"loginUpdateSuccess": "New password is set",
- "loginLogout": "ඉවත්වන්න",
+ "loginLogout": "නික්මෙන්න",
"loginLogo": "ලාංඡනය",
- "devicesAndState": "උපාංග සහ ස්වභාවය",
+ "devicesAndState": "උපාංග සහ තත්වය",
"deviceTitle": "උපාංග",
- "deviceIdentifier": "හඳුනාගැනීමේ කේතය",
+ "deviceIdentifier": "හඳුන්වනය",
"deviceModel": "ආකෘතිය",
- "deviceContact": "අමතන්න",
- "deviceCategory": "වර්ගය",
- "deviceLastUpdate": "අවසන් යාවත්කාලීනය",
+ "deviceContact": "Contact",
+ "deviceCategory": "ප්‍රවර්ගය",
+ "deviceLastUpdate": "අවසන් යාවත්කාලය",
"deviceCommand": "විධානය",
"deviceFollow": "ලුහුබඳින්න",
- "deviceTotalDistance": "සම්පූර්ණ දුර ප්‍රමාණය ",
+ "deviceTotalDistance": "මුළු දුර",
"deviceStatus": "තත්ත්වය",
- "deviceStatusOnline": "සම්බන්ධිතය",
- "deviceStatusOffline": "අසම්බන්ධිතය",
+ "deviceStatusOnline": "Online",
+ "deviceStatusOffline": "Offline",
"deviceStatusUnknown": "නොදන්නා",
"groupDialog": "සමූහය",
"groupParent": "සමූහය",
- "groupNoGroup": "සමූහ එපා",
+ "groupNoGroup": "සමූහ නැත",
"settingsTitle": "සැකසුම්",
"settingsUser": "ගිණුම",
"settingsGroups": "සමූහ",
"settingsServer": "සේවාදායකය",
- "settingsUsers": "පරිශීලකයන්",
- "settingsDistanceUnit": "දුරස්ථ අංශය",
+ "settingsUsers": "පරිශීලකයින්",
+ "settingsDistanceUnit": "Distance Unit",
"settingsSpeedUnit": "වේග ඒකකයක්",
"settingsVolumeUnit": "Volume Unit",
"settingsTwelveHourFormat": "පැය 12 ආකෘතිය",
- "settingsCoordinateFormat": "සම්බන්ධීකරණ ආකෘතිය",
+ "settingsCoordinateFormat": "Coordinates Format",
"reportTitle": "වාර්තා",
"reportDevice": "උපාංගය",
"reportGroup": "සමුහය",
"reportFrom": "සිට",
"reportTo": "දක්වා",
"reportShow": "පෙන්වන්න",
- "reportClear": "ඉවත් කරන්න",
+ "reportClear": "හිස් කරන්න",
"positionFixTime": "කාලය",
"positionValid": "වලංගු",
"positionAccuracy": "නිරවද්යතාව",
@@ -184,13 +184,13 @@
"positionSpeed": "වේගය",
"positionCourse": "දිගංශය",
"positionAddress": "ලිපිනය",
- "positionProtocol": "ප්රොටොකෝලය",
+ "positionProtocol": "කෙටුම්පත",
"positionDistance": "දුර",
"positionRpm": "RPM",
"positionFuel": "ඉන්ධන",
"positionPower": "බලය",
- "positionBattery": "බැටරි",
- "positionRaw": "අමු",
+ "positionBattery": "වියළිකෝෂය",
+ "positionRaw": "Raw",
"positionIndex": "Index",
"positionHdop": "HDOP",
"positionVdop": "VDOP",
@@ -201,46 +201,46 @@
"positionGps": "ගි.පි.එස් ",
"positionRoaming": "Roaming",
"positionEvent": "සිදුවීම",
- "positionAlarm": "ශබ්දය",
+ "positionAlarm": "Alarm",
"positionStatus": "තත්ත්වය",
- "positionOdometer": "මීටරය ",
- "positionServiceOdometer": "සේවා මීටරය ",
- "positionTripOdometer": "සංචාර මීටරය ",
+ "positionOdometer": "සැතපුම්මානය",
+ "positionServiceOdometer": "සේවා සැතපුම්මානය",
+ "positionTripOdometer": "චාරිකා සැතපුම්මානය",
"positionHours": "පැය",
"positionSteps": "පියවර",
- "positionInput": "ආදාන",
- "positionOutput": "ප්‍රිතිදාන ",
- "positionBatteryLevel": "බැටරි මට්ටම",
+ "positionInput": "ආදානය",
+ "positionOutput": "ප්‍රතිදානය",
+ "positionBatteryLevel": "විදුලිකෝෂයේ මට්ටම",
"positionFuelConsumption": "ඉන්ධන පරිභෝජනය",
"positionRfid": "RFID",
- "positionVersionFw": "ෆර්ම්වෙයාර් සංස්කරණය",
- "positionVersionHw": "දෘඩාංග සංස්කරණය",
+ "positionVersionFw": "ස්ථිරාංගයේ අනුවාදය",
+ "positionVersionHw": "දෘඩාංගයේ අනුවාදය",
"positionIgnition": "තාපනය",
- "positionFlags": "කොඩි",
+ "positionFlags": "Flags",
"positionCharge": "ගාස්තුව",
- "positionIp": "අයි.පි ",
- "positionArchive": "ලේඛනාගාරය",
+ "positionIp": "අ.ජා.කෙ.",
+ "positionArchive": "සංරක්‍ෂිතය",
"positionVin": "VIN",
"positionApproximate": "දළ වශයෙන්",
"positionThrottle": "Throttle",
- "positionMotion": "යෝජනාව",
+ "positionMotion": "චලනය",
"positionArmed": "ආයුධ",
"positionAcceleration": "ත්වරණය",
- "positionDeviceTemp": "උපකරණයේ උෂ්ණත්වය",
+ "positionDeviceTemp": "උපාංගයේ උෂ්ණත්වය",
"positionOperator": "ක්‍රියාකරු ",
"positionCommand": "විධානය",
- "positionBlocked": "බ්ලොක් වී ඇත",
+ "positionBlocked": "අවහිර කර ඇත",
"positionDtcs": "DTCs",
- "positionObdSpeed": "OBD වේගය",
- "positionObdOdometer": "OBD මීටරය ",
+ "positionObdSpeed": "OBD Speed",
+ "positionObdOdometer": "OBD Odometer",
"positionDriverUniqueId": "Driver Unique Id",
"positionImage": "රූප",
- "positionAudio": "ශබ්දය ",
+ "positionAudio": "Audio",
"serverTitle": "සේවාදායකයේ සැකසුම්",
"serverZoom": "විශාලනය",
"serverRegistration": "ලියාපදිංචි කිරීම",
"serverReadonly": "කියවීමට පමණි",
- "serverForceSettings": "බලය සැකසීම්",
+ "serverForceSettings": "Force Settings",
"serverAnnouncement": "Announcement",
"mapTitle": "සිතියම",
"mapLayer": "සිතියම් ස්තරය",
@@ -248,78 +248,83 @@
"mapCustomArcgis": "Custom (ArcGIS)",
"mapCustomLabel": "Custom map",
"mapCarto": "Carto Basemaps",
- "mapOsm": "විවෘත වීදියේ සිතියම",
- "mapBingKey": "Bing Maps Key",
- "mapBingRoad": " සිතියම් පාර",
+ "mapOsm": "ඕපන් ස්ට්‍රීට් මැප්ස්",
+ "mapBingKey": "බින්ග් මැප්ස් යතුර",
+ "mapBingRoad": "බින්ග් මැප්ස් පාර",
"mapBingAerial": "Bing Maps Aerial",
"mapBingHybrid": "Bing Maps Hybrid",
"mapBaidu": "Baidu",
"mapAutoNavi": "AutoNavi",
- "mapYandexMap": "සිතියම",
- "mapYandexSat": "චන්ද්‍රිකාව ",
+ "mapYandexMap": "යාන්ඩෙක්ස් සිතියම",
+ "mapYandexSat": "යාන්ඩෙක්ස් චන්ද්‍රිකාව",
"mapWikimedia": "Wikimedia",
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "බහුඅශ්‍රය",
"mapShapeCircle": "වෘත්තය",
- "mapShapePolyline": "රේකාව ",
- "mapLiveRoutes": "සජීවී මාර්ග",
+ "mapShapePolyline": "Polyline",
+ "mapLiveRoutes": "Live Routes",
"mapCurrentLocation": "Current Location",
"mapPoiLayer": "POI ස්තරය",
"stateTitle": "තත්වය",
- "stateName": "පරාමිතිය",
+ "stateName": "Attribute",
"stateValue": "අගය",
"commandTitle": "විධානය",
"commandSend": "යවන්න",
"commandSent": "Command sent",
"commandQueued": "Command queued",
"commandUnit": "ඒකකය",
- "commandCustom": "UI: පරිගණකගත ගුණාංග අක්‍රිය කරන්න",
+ "commandCustom": "Custom command",
"commandDeviceIdentification": "උපාංග හඳුනා ගැනීම",
"commandPositionSingle": "තනි වාර්තාව",
"commandPositionPeriodic": "ආවර්තිතව වාර්තා කරන්න",
"commandPositionStop": "වාර්තා කිරීම නවත්වන්න",
- "commandEngineStop": "එන්ජිම නවත්වන්න",
- "commandEngineResume": "එන්ජිම නැවත ආරම්භ කරන්න",
+ "commandEngineStop": "Engine Stop",
+ "commandEngineResume": "Engine Resume",
"commandAlarmArm": "Arm Alarm",
"commandAlarmDisarm": "Disarm Alarm",
"commandAlarmDismiss": "Dismiss Alarm",
"commandSetTimezone": "කලාපය සකසන්න",
"commandRequestPhoto": "ඡායාරූප ඉල්ලීම",
"commandPowerOff": "Power Off Device",
- "commandRebootDevice": "උපකරණය නැවත ආරම්භ කරන්න",
+ "commandRebootDevice": "උපාංගය යළි අරඹන්න",
"commandFactoryReset": "Factory Reset",
"commandSendSms": "කෙටි පණිවිඩ යවන්න",
"commandSendUssd": "USSD යවන්න",
"commandSosNumber": "SOS අංකය සකසන්න",
- "commandSilenceTime": "නිහඬ කාලයකි",
- "commandSetPhonebook": "දුරකථන නාමාවලිය සැකසීම ",
+ "commandSilenceTime": "Set Silence Time",
+ "commandSetPhonebook": "දුරකථනපොත සකසන්න",
"commandVoiceMessage": "හඬ පණිවුඩය",
- "commandOutputControl": "නිමැවුම් පාලනය",
- "commandVoiceMonitoring": "හඬ අධීක්ෂණය",
+ "commandOutputControl": "Output Control",
+ "commandVoiceMonitoring": "Voice Monitoring",
"commandSetAgps": "Set AGPS",
"commandSetIndicator": "දර්ශකය සකසන්න",
- "commandConfiguration": "සැකසුම් ",
- "commandGetVersion": "අනුවාදය ලබා ගන්න",
- "commandFirmwareUpdate": "ෆර්ම්වෙයාර් යාවත්කාලීන කරන්න",
+ "commandConfiguration": "වින්‍යාසය",
+ "commandGetVersion": "අනුවාදය ගන්න",
+ "commandFirmwareUpdate": "ස්ථිරාංගය යාවත්කාල කරන්න",
"commandSetConnection": "සම්බන්ධතාවය සකසන්න",
- "commandSetOdometer": "මීටරය සකසන්න ",
- "commandGetModemStatus": "මෝඩම් තත්ත්වය ලබා ගන්න",
- "commandGetDeviceStatus": "උපකරණයේ තත්ත්වය ලබා ගන්න",
+ "commandSetOdometer": "සැතපුම්මානය සකසන්න ",
+ "commandGetModemStatus": "Get Modem Status",
+ "commandGetDeviceStatus": "උපාංගයේ තත්ත්වය ගන්න",
"commandSetSpeedLimit": "Set Speed Limit",
- "commandModePowerSaving": "බල සුරැකීම වෙනස් කරන්න",
- "commandModeDeepSleep": "ගැඹුරු නින්ද වෙනස් කරන්න",
- "commandMovementAlarm": "චලනය නිවේදන",
+ "commandModePowerSaving": "Modify Power Saving",
+ "commandModeDeepSleep": "Modify Deep Sleep",
+ "commandMovementAlarm": "Movement Alarm",
"commandFrequency": "සංඛ්යාතය",
- "commandTimezone": "වේලා කලාපය",
+ "commandTimezone": "Timezone Offset",
"commandMessage": "පණිවිඩය",
"commandRadius": "අරය ",
- "commandEnable": "සක්‍රිය ",
+ "commandEnable": "සබල කරන්න",
"commandData": "දත්ත",
"commandIndex": "දර්ශකය",
"commandPhone": "දුරකථන අංකය",
- "commandServer": "සේවාදායකය පරිගණකය ",
+ "commandServer": "සේවාදායකය",
"commandPort": "Port",
"eventAll": "සියලු සිදුවීම්",
"eventDeviceOnline": "Status online",
@@ -330,16 +335,16 @@
"eventDeviceStopped": "Device stopped",
"eventDeviceOverspeed": "Speed limit exceeded",
"eventDeviceFuelDrop": "Fuel drop",
- "eventCommandResult": "විධානය ප්‍රතිපල ",
+ "eventCommandResult": "විධානයේ ප්‍රතිඵල",
"eventGeofenceEnter": "Geofence entered",
"eventGeofenceExit": "Geofence exited",
"eventAlarm": "Alarm",
"eventIgnitionOn": "Ignition on",
"eventIgnitionOff": "Ignition off",
- "eventMaintenance": "නඩත්තු කිරීම අවශයි ",
- "eventTextMessage": "කෙටි පණිවිඩය ලැබී ඇත",
+ "eventMaintenance": "නඩත්තු කිරීම අවශ්‍යයි",
+ "eventTextMessage": "Text message received",
"eventDriverChanged": "Driver changed",
- "eventsScrollToLast": "අන්තිමට චලනය කරන්න",
+ "eventsScrollToLast": "Scroll To Last",
"alarmGeneral": "General",
"alarmSos": "SOS",
"alarmVibration": "Vibration",
@@ -373,14 +378,13 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
"alarmTampering": "Tampering",
"alarmRemoving": "Removing",
- "notificationType": "නිවේදන ආකාරය",
- "notificationAlways": "සියලු උපකරණ",
+ "notificationType": "දැනුම්දීම් වර්ග",
+ "notificationAlways": "සියළු උපාංග",
"notificationNotificators": "Channels",
"notificatorWeb": "Web",
"notificatorMail": "Mail",
@@ -390,32 +394,32 @@
"reportReplay": "Replay",
"reportRoute": "ගමන් මඟ",
"reportEvents": "සිදුවීම්",
- "reportTrips": "ගමන්",
- "reportStops": "නැවතීම ",
+ "reportTrips": "චාරිකා",
+ "reportStops": "නැවතීම්",
"reportSummary": "සාරාංශය",
"reportDaily": "Daily Summary",
- "reportChart": "සටහන",
- "reportConfigure": "හැඩගසනවා",
+ "reportChart": "Chart",
+ "reportConfigure": "වින්‍යාසගත කරන්න",
"reportEventTypes": "සිදුවීම් වර්ග",
- "reportChartType": "සටහන් වර්ග ",
- "reportShowMarkers": "ලකුණු පෙන්නවන්න ",
- "reportExport": "අපනයන",
+ "reportChartType": "Chart Type",
+ "reportShowMarkers": "Show Markers",
+ "reportExport": "නිර්යාත",
"reportEmail": "Email Report",
- "reportPeriod": "කාලය",
- "reportCustom": "වෙනස්කම් ",
+ "reportPeriod": "Period",
+ "reportCustom": "Custom",
"reportToday": "අද",
"reportYesterday": "ඊයේ",
"reportThisWeek": "මෙම සතිය",
"reportPreviousWeek": "පසුගිය සතියේ",
- "reportThisMonth": "මේ මාසයේ",
+ "reportThisMonth": "මෙම මාසය",
"reportPreviousMonth": "පසුගිය මාසය",
- "reportDeviceName": "උපකරණ නම",
+ "reportDeviceName": "උපාංගයේ නම",
"reportAverageSpeed": "සාමාන්‍ය වේගය",
"reportMaximumSpeed": "උපරිම වේගය",
"reportEngineHours": "Engine Hours",
"reportDuration": "කාලසීමාව",
"reportStartDate": "Start Date",
- "reportStartTime": "ආරම්භක වේලාව ",
+ "reportStartTime": "ආරම්භක වේලාව",
"reportStartAddress": "ආරම්භ ලිපිනය",
"reportEndTime": "අවසානය",
"reportEndAddress": "අවසාන ලිපිනය",
@@ -423,35 +427,35 @@
"reportStartOdometer": "Odometer Start",
"reportEndOdometer": "Odometer End",
"statisticsTitle": "සංඛ්යාලේඛන",
- "statisticsCaptureTime": "ග්‍රහණය කර ගන්නා අවස්ථාව ",
+ "statisticsCaptureTime": "Capture Time",
"statisticsActiveUsers": "ක්‍රියාකාරී පරිශීලකයින්",
- "statisticsActiveDevices": "ක්‍රියාකාරී උපකරණ ",
+ "statisticsActiveDevices": "ක්‍රියාකාරී උපාංග",
"statisticsRequests": "ඉල්ලීම්",
- "statisticsMessagesReceived": "ලැබුණු පණිවිඩය",
+ "statisticsMessagesReceived": "ලැබුණු පණිවිඩ",
"statisticsMessagesStored": "ගබඩා කර ඇති පණිවිඩ",
- "statisticsGeocoder": "භූකකර් ඉල්ලීම්",
+ "statisticsGeocoder": "Geocoder Requests",
"statisticsGeolocation": "භූගෝලීය ඉල්ලීම්",
"categoryArrow": "ඊ තලය ",
- "categoryDefault": "පෙර පැවති ",
- "categoryAnimal": "සත්ව",
- "categoryBicycle": "බයිසිකලයක්",
- "categoryBoat": "බෝට්ටුව ",
- "categoryBus": "බස්",
- "categoryCar": "මෝටර් රථ",
- "categoryCrane": "ක්රේන්",
- "categoryHelicopter": "හෙලිකොප්ටරය",
- "categoryMotorcycle": "යතුරුපැදි",
+ "categoryDefault": "පෙරනිමි",
+ "categoryAnimal": "සතුන්",
+ "categoryBicycle": "පාපැදිය",
+ "categoryBoat": "Boat",
+ "categoryBus": "Bus",
+ "categoryCar": "Car",
+ "categoryCrane": "දොඹකරය",
+ "categoryHelicopter": "Helicopter",
+ "categoryMotorcycle": "යතුරුපැදිය",
"categoryOffroad": "පාරෙන් පිට",
"categoryPerson": "පුද්ගලයා",
- "categoryPickup": "එකතු කර ගන්නවා ",
+ "categoryPickup": "Pickup",
"categoryPlane": "ගුවන්යානය",
"categoryShip": "නැව",
- "categoryTractor": "ට්‍රැක්ටර් ",
+ "categoryTractor": "Tractor",
"categoryTrain": "Train",
"categoryTram": "Tram",
"categoryTrolleybus": "Trolleybus",
- "categoryTruck": "ට්‍රක් රථය",
- "categoryVan": "වැන් රථය ",
+ "categoryTruck": "Truck",
+ "categoryVan": "Van",
"categoryScooter": "Scooter",
"maintenanceStart": "ආරම්භය",
"maintenancePeriod": "කාලය"
diff --git a/web/l10n/sk.json b/web/l10n/sk.json
index 44c5978e..fae4d7e4 100644
--- a/web/l10n/sk.json
+++ b/web/l10n/sk.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygón",
"mapShapeCircle": "Kruh",
"mapShapePolyline": "Lomená čiara",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Teplota",
"alarmParking": "Parkovanie",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/sl.json b/web/l10n/sl.json
index d40081a0..60893226 100644
--- a/web/l10n/sl.json
+++ b/web/l10n/sl.json
@@ -81,7 +81,7 @@
"sharedMaintenance": "Vzdrževanje",
"sharedDeviceAccumulators": "Accumulators",
"sharedAlarms": "Alarmi",
- "sharedLocation": "Location",
+ "sharedLocation": "Lokacija",
"sharedImport": "Import",
"attributeSpeedLimit": "Omejitev hitrosti",
"attributePolylineDistance": "Polyline Distance",
@@ -132,7 +132,7 @@
"userToken": "Žeton",
"loginTitle": "Prijava",
"loginLanguage": "Jezik",
- "loginReset": "Reset Password",
+ "loginReset": "Ponastavi geslo",
"loginRegister": "Registracija",
"loginLogin": "Prijava",
"loginFailed": "Nepravilna e-pošta ali geslo",
@@ -261,11 +261,16 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Poligon",
"mapShapeCircle": "Krog",
"mapShapePolyline": "Polyline",
- "mapLiveRoutes": "Live Routes",
- "mapCurrentLocation": "Current Location",
+ "mapLiveRoutes": "Žive poti",
+ "mapCurrentLocation": "Trenutna lokacija",
"mapPoiLayer": "POI Layer",
"stateTitle": "Stanje",
"stateName": "Parameter",
@@ -373,7 +378,6 @@
"alarmJamming": "Motnja",
"alarmTemperature": "Temperatura",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
@@ -393,14 +397,14 @@
"reportTrips": "Poti",
"reportStops": "Postanki",
"reportSummary": "Povzetek",
- "reportDaily": "Daily Summary",
+ "reportDaily": "Dnevni povzetek",
"reportChart": "Graf",
"reportConfigure": "Nastavi",
"reportEventTypes": "Tipi dogodkov",
"reportChartType": "Tip grafa",
"reportShowMarkers": "Prikaži oznake",
"reportExport": "Izvozi",
- "reportEmail": "Email Report",
+ "reportEmail": "Pošlji po E-Pošti",
"reportPeriod": "Obdobje",
"reportCustom": "Poljubno",
"reportToday": "Danes",
@@ -414,14 +418,14 @@
"reportMaximumSpeed": "Najvišja hitrost",
"reportEngineHours": "Motorinh ur",
"reportDuration": "Trajanje",
- "reportStartDate": "Start Date",
+ "reportStartDate": "Datum začetka",
"reportStartTime": "Začetni čas",
"reportStartAddress": "Začetni naslov",
"reportEndTime": "Končni čas",
"reportEndAddress": "Končni naslov",
"reportSpentFuel": "Porabljeno gorivo",
- "reportStartOdometer": "Odometer Start",
- "reportEndOdometer": "Odometer End",
+ "reportStartOdometer": "Začetno stanje števca",
+ "reportEndOdometer": "Končno stanje števca",
"statisticsTitle": "Statistika",
"statisticsCaptureTime": "Začetni čas",
"statisticsActiveUsers": "Aktivni uporabniki",
diff --git a/web/l10n/sq.json b/web/l10n/sq.json
index cd3ae2d5..944bcbb5 100644
--- a/web/l10n/sq.json
+++ b/web/l10n/sq.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Circle",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/sr.json b/web/l10n/sr.json
index 603f5198..e2e7322c 100644
--- a/web/l10n/sr.json
+++ b/web/l10n/sr.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Ulice",
+ "mapLocationIqEarth": "LocationIQ Zemlja",
+ "mapLocationIqHybrid": "LocationIQ Hibrid",
"mapShapePolygon": "Višeugao",
"mapShapeCircle": "Krug",
"mapShapePolyline": "Višelinijski",
@@ -373,7 +378,6 @@
"alarmJamming": "Ometanje signala",
"alarmTemperature": "Temperatura",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Hauba",
"alarmFootBrake": "Nožna kočnica",
"alarmFuelLeak": "Curenje goriva",
diff --git a/web/l10n/sv.json b/web/l10n/sv.json
index 7194040d..11d09b33 100644
--- a/web/l10n/sv.json
+++ b/web/l10n/sv.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Polygon",
"mapShapeCircle": "Cirkel",
"mapShapePolyline": "Polyline",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/ta.json b/web/l10n/ta.json
index 06a2f853..46668b43 100644
--- a/web/l10n/ta.json
+++ b/web/l10n/ta.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "பலகோணம்",
"mapShapeCircle": "வட்டம்",
"mapShapePolyline": "பாலிலைன்",
@@ -373,7 +378,6 @@
"alarmJamming": "நெருக்குதல்",
"alarmTemperature": "வெப்ப நிலை",
"alarmParking": "பார்க்கிங்",
- "alarmShock": "அதிர்ச்சி",
"alarmBonnet": "கார் குட்நெட்",
"alarmFootBrake": "கால் பிரேக்",
"alarmFuelLeak": "எரிபொருள் கசிவு",
diff --git a/web/l10n/th.json b/web/l10n/th.json
index 1b8c7e46..860407e2 100644
--- a/web/l10n/th.json
+++ b/web/l10n/th.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "รูปหลายมุม",
"mapShapeCircle": "วงกลม",
"mapShapePolyline": "โพลีไลน์",
@@ -373,7 +378,6 @@
"alarmJamming": "สัญญาณรบกวน",
"alarmTemperature": "อุณหภูมิ",
"alarmParking": "จอด",
- "alarmShock": "สะเทือน",
"alarmBonnet": "ฝาสูบ",
"alarmFootBrake": "เบรคเท้า",
"alarmFuelLeak": "เชื้อเพลิงรั่ว",
diff --git a/web/l10n/tr.json b/web/l10n/tr.json
index b138eba8..e9031c78 100644
--- a/web/l10n/tr.json
+++ b/web/l10n/tr.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Çokgen",
"mapShapeCircle": "Çember",
"mapShapePolyline": "Çizim",
@@ -373,7 +378,6 @@
"alarmJamming": "Sıkışıklık",
"alarmTemperature": "Hararet",
"alarmParking": "Park halinde",
- "alarmShock": "Şok",
"alarmBonnet": "Kaput",
"alarmFootBrake": "Ayak freni",
"alarmFuelLeak": "Yakıt sızıntısı",
diff --git a/web/l10n/uk.json b/web/l10n/uk.json
index 09e207a6..8031b12e 100644
--- a/web/l10n/uk.json
+++ b/web/l10n/uk.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Багатокутник",
"mapShapeCircle": "Коло",
"mapShapePolyline": "Лінія",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/uz.json b/web/l10n/uz.json
index 20d632dd..a54e5be6 100644
--- a/web/l10n/uz.json
+++ b/web/l10n/uz.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Кўпбурчак",
"mapShapeCircle": "Айлана",
"mapShapePolyline": "Чизиқ",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/vi.json b/web/l10n/vi.json
index 24d2cfbb..349714c5 100644
--- a/web/l10n/vi.json
+++ b/web/l10n/vi.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "Đa giác",
"mapShapeCircle": "Vòng tròn",
"mapShapePolyline": "Đường kẻ đa giác",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",
diff --git a/web/l10n/zh.json b/web/l10n/zh.json
index 97765216..8341faff 100644
--- a/web/l10n/zh.json
+++ b/web/l10n/zh.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox街道",
"mapMapboxOutdoors": "Mapbox外景",
"mapMapboxSatellite": "Mapbox卫星",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "多边形",
"mapShapeCircle": "圆形",
"mapShapePolyline": "折线",
@@ -373,7 +378,6 @@
"alarmJamming": "干扰",
"alarmTemperature": "温度",
"alarmParking": "停车中",
- "alarmShock": "震动",
"alarmBonnet": "阀盖",
"alarmFootBrake": "脚踏制动器",
"alarmFuelLeak": "燃料泄漏",
diff --git a/web/l10n/zh_TW.json b/web/l10n/zh_TW.json
index 67012bec..95ac25e1 100644
--- a/web/l10n/zh_TW.json
+++ b/web/l10n/zh_TW.json
@@ -261,6 +261,11 @@
"mapMapboxStreets": "Mapbox Streets",
"mapMapboxOutdoors": "Mapbox Outdoors",
"mapMapboxSatellite": "Mapbox Satellite",
+ "mapMapTilerBasic": "MapTiler Basic",
+ "mapMapTilerHybrid": "MapTiler Hybrid",
+ "mapLocationIqStreets": "LocationIQ Streets",
+ "mapLocationIqEarth": "LocationIQ Earth",
+ "mapLocationIqHybrid": "LocationIQ Hybrid",
"mapShapePolygon": "多邊形",
"mapShapeCircle": "圓形",
"mapShapePolyline": "多邊形",
@@ -373,7 +378,6 @@
"alarmJamming": "Jamming",
"alarmTemperature": "Temperature",
"alarmParking": "Parking",
- "alarmShock": "Shock",
"alarmBonnet": "Bonnet",
"alarmFootBrake": "Foot Brake",
"alarmFuelLeak": "Fuel Leak",