Compare commits
569 Commits
dev
...
v2.7.0-RC1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
680c4a9ec4 | ||
|
|
3887d57fa4 | ||
|
|
d733daed9d | ||
|
|
de8651ab52 | ||
|
|
0ce641d10b | ||
|
|
316224b424 | ||
|
|
cf9bbce284 | ||
|
|
6eae6c046e | ||
|
|
837a430228 | ||
|
|
71431f8fb5 | ||
|
|
0c7cd1f299 | ||
|
|
674682e919 | ||
|
|
a5ca8115af | ||
|
|
d4338fce42 | ||
|
|
14e8135f81 | ||
|
|
e925f07505 | ||
|
|
b792b51bd0 | ||
|
|
fb64813b2a | ||
|
|
b16e0e33ab | ||
|
|
818921e4a2 | ||
|
|
6c437459ca | ||
|
|
b276901874 | ||
|
|
85b92f46f5 | ||
|
|
237b8b5ede | ||
|
|
438d008c34 | ||
|
|
53a3de1ebc | ||
|
|
2d35747e75 | ||
|
|
71feebea6d | ||
|
|
c8c75e7a70 | ||
|
|
7b2263e9a5 | ||
|
|
9cd216bbba | ||
|
|
e032ff4485 | ||
|
|
fbe9ca5dd9 | ||
|
|
4533bb6dd7 | ||
|
|
3320c03603 | ||
|
|
c3574d96d7 | ||
|
|
ebd2419634 | ||
|
|
133c256543 | ||
|
|
98a2a72f33 | ||
|
|
bc12b598ce | ||
|
|
a34f679c43 | ||
|
|
f008fd082e | ||
|
|
d2fd895582 | ||
|
|
746a812ae8 | ||
|
|
b67c69b88b | ||
|
|
f6ee20730a | ||
|
|
2829a96c84 | ||
|
|
37e1a92a89 | ||
|
|
81c4717472 | ||
|
|
94aac686c9 | ||
|
|
b75848515b | ||
|
|
a26cf9a3ff | ||
|
|
a7e4f728d2 | ||
|
|
921d234972 | ||
|
|
6bec9f977f | ||
|
|
6eaa9f8af1 | ||
|
|
5ef189b445 | ||
|
|
9f8283892e | ||
|
|
6ba2dc9601 | ||
|
|
e23512c860 | ||
|
|
32b6fe1625 | ||
|
|
8663b6d108 | ||
|
|
7794aa4c99 | ||
|
|
ba90ea59f4 | ||
|
|
aadb4c44a1 | ||
|
|
467ad39873 | ||
|
|
0a92b2db48 | ||
|
|
60a8f1ea61 | ||
|
|
1063061b47 | ||
|
|
54186575e0 | ||
|
|
114005d572 | ||
|
|
cde59a5ab1 | ||
|
|
e6bb26ce12 | ||
|
|
0cde953d58 | ||
|
|
ce7a804a70 | ||
|
|
67716aedde | ||
|
|
54a98cd6e5 | ||
|
|
31a901bea9 | ||
|
|
f0fdc90226 | ||
|
|
e14f892bc6 | ||
|
|
39158b0d1e | ||
|
|
acc264534e | ||
|
|
48dcb4acbf | ||
|
|
1c40f9eb4c | ||
|
|
9e418eb423 | ||
|
|
e4ff3a87a7 | ||
|
|
e82551c97f | ||
|
|
d877a4aecf | ||
|
|
5c50a40bdb | ||
|
|
9caf0f375c | ||
|
|
1ed8285452 | ||
|
|
16170e613c | ||
|
|
b3fb45dd36 | ||
|
|
54f5912da6 | ||
|
|
8542ded488 | ||
|
|
e6561faf8c | ||
|
|
f291b7b0fc | ||
|
|
d9ea2abf1a | ||
|
|
60a072809b | ||
|
|
9828d6457d | ||
|
|
d6f390d7d4 | ||
|
|
6ddafc8de0 | ||
|
|
ed5c83cf66 | ||
|
|
bf227b5e6f | ||
|
|
8bc1350e2e | ||
|
|
3aa0dd2f51 | ||
|
|
6c1f1e1db7 | ||
|
|
0c615fcb3b | ||
|
|
3ca900af6c | ||
|
|
1481626b1b | ||
|
|
a0ba5aeca4 | ||
|
|
f48a922b4c | ||
|
|
2418273191 | ||
|
|
09a10d7838 | ||
|
|
40ed1dd612 | ||
|
|
2aa38f1117 | ||
|
|
5d81ad9830 | ||
|
|
dffb45e233 | ||
|
|
5606c7b29a | ||
|
|
9d5b4f63d3 | ||
|
|
2c353023ab | ||
|
|
6992cdbaa4 | ||
|
|
9576079bfa | ||
|
|
1e08ccaae3 | ||
|
|
80e07eb53a | ||
|
|
54b7a27e65 | ||
|
|
5dc6100e8e | ||
|
|
a5c1a7122d | ||
|
|
61442462c7 | ||
|
|
917c31bef4 | ||
|
|
989439587f | ||
|
|
e74130733e | ||
|
|
2cce9a4f4c | ||
|
|
b721dfeb71 | ||
|
|
645b9b2c37 | ||
|
|
b419ebfe5d | ||
|
|
96d40a2946 | ||
|
|
e9b40573c7 | ||
|
|
ad316dfeac | ||
|
|
62cbaf3c04 | ||
|
|
cdb7eb3da9 | ||
|
|
671e0bbf71 | ||
|
|
50704b7b6a | ||
|
|
c198d1f593 | ||
|
|
c91cd2eecf | ||
|
|
31e47f4a04 | ||
|
|
470a9c4afa | ||
|
|
98692be3ba | ||
|
|
5c5077d7ec | ||
|
|
8cbecc20bc | ||
|
|
c13cae9ab3 | ||
|
|
74de687b90 | ||
|
|
ed3aca7d0c | ||
|
|
c9467f31c8 | ||
|
|
ad08632809 | ||
|
|
e9562dcf82 | ||
|
|
bea47b2640 | ||
|
|
242078ec15 | ||
|
|
5ca140df46 | ||
|
|
1259212cb2 | ||
|
|
750fa5be5e | ||
|
|
299c43e10d | ||
|
|
969450cad3 | ||
|
|
3da330b637 | ||
|
|
86bd64e887 | ||
|
|
e02f939cb8 | ||
|
|
2deebea6c8 | ||
|
|
fc2b1bb23c | ||
|
|
848d94bad1 | ||
|
|
4bde6e2d1f | ||
|
|
e7694b644f | ||
|
|
07b3ac967a | ||
|
|
c955bd9126 | ||
|
|
ee69783a66 | ||
|
|
b43c86520f | ||
|
|
0952f62bf0 | ||
|
|
44be7ec634 | ||
|
|
cddb0e94fa | ||
|
|
1a9fb77361 | ||
|
|
f7392461ad | ||
|
|
b567dc26f8 | ||
|
|
a08f84f5b3 | ||
|
|
b1277ff2ac | ||
|
|
aea1550a77 | ||
|
|
262c1fe1e2 | ||
|
|
2d1e684c69 | ||
|
|
5c6fb8b9ec | ||
|
|
a6be8b08c3 | ||
|
|
6503c1b84d | ||
|
|
1fc1588303 | ||
|
|
ae03c5c33e | ||
|
|
2d2603ff27 | ||
|
|
55881b0c5e | ||
|
|
adf752db85 | ||
|
|
d211669244 | ||
|
|
99af39db69 | ||
|
|
e707239d12 | ||
|
|
d349e43523 | ||
|
|
d52df89ab3 | ||
|
|
ae48518271 | ||
|
|
d7238881dc | ||
|
|
ebf2d7d5c6 | ||
|
|
259087aa95 | ||
|
|
0d7e2056f0 | ||
|
|
c35178bcbb | ||
|
|
5da3fb6c19 | ||
|
|
1961aa62da | ||
|
|
8678b454e3 | ||
|
|
b26408ade2 | ||
|
|
e60c000aad | ||
|
|
411c618be1 | ||
|
|
04fe9e18b6 | ||
|
|
b5772ce7f4 | ||
|
|
1c3a5232c7 | ||
|
|
35caed4b07 | ||
|
|
6fb6e92382 | ||
|
|
83a4493a61 | ||
|
|
5cedcf1ebf | ||
|
|
2ebc649fdf | ||
|
|
996e9c2e4b | ||
|
|
01f27da4b2 | ||
|
|
6151dcb8ff | ||
|
|
26e4dd9859 | ||
|
|
531b240990 | ||
|
|
3e82403d41 | ||
|
|
3564abfa29 | ||
|
|
cd87fb4500 | ||
|
|
65ffc7a656 | ||
|
|
dab7aa77c9 | ||
|
|
6847b5180a | ||
|
|
e0ba4e4b20 | ||
|
|
955becdb46 | ||
|
|
daba3a3f28 | ||
|
|
33b8d1a1f5 | ||
|
|
0a4a5b392c | ||
|
|
4422d54b74 | ||
|
|
e4883bf588 | ||
|
|
961243eefd | ||
|
|
c9c3e003eb | ||
|
|
0faa9f63d2 | ||
|
|
a44932d4f8 | ||
|
|
5e35c23883 | ||
|
|
550f5ad299 | ||
|
|
dd19ed8bcd | ||
|
|
ff34e1098c | ||
|
|
763922b349 | ||
|
|
757844d3ac | ||
|
|
e5775e548f | ||
|
|
477e686806 | ||
|
|
8d5f912adc | ||
|
|
45f206d947 | ||
|
|
2a271e9dea | ||
|
|
a007903ea2 | ||
|
|
bb55498285 | ||
|
|
39b482bab9 | ||
|
|
8b91d3c7e5 | ||
|
|
f56611b0e1 | ||
|
|
760a6f50b2 | ||
|
|
c5f629d761 | ||
|
|
b754dfff73 | ||
|
|
3d4937144f | ||
|
|
f7f01f4c90 | ||
|
|
8ce89f1621 | ||
|
|
00cdb0bf1e | ||
|
|
3ce188333e | ||
|
|
7ddf82cf1b | ||
|
|
1e17da594d | ||
|
|
299922a38a | ||
|
|
8360644864 | ||
|
|
d445766f01 | ||
|
|
601c369f2d | ||
|
|
818bdd67ba | ||
|
|
967ef64728 | ||
|
|
6607d52539 | ||
|
|
d48925f9ba | ||
|
|
e36c682fb1 | ||
|
|
63c7212685 | ||
|
|
6f5d2170c2 | ||
|
|
a6ba03c33b | ||
|
|
b7c18bd320 | ||
|
|
0ff74497ad | ||
|
|
cc658f0223 | ||
|
|
c634082608 | ||
|
|
8c3b3d8ac1 | ||
|
|
f791e19ae7 | ||
|
|
c19f6cc535 | ||
|
|
b256b941a6 | ||
|
|
6a2501ad81 | ||
|
|
323a9e3f99 | ||
|
|
352891d7d1 | ||
|
|
b094d88770 | ||
|
|
f9a762ffc1 | ||
|
|
3476a235ab | ||
|
|
c978301d23 | ||
|
|
e61475e9ac | ||
|
|
e440d10bce | ||
|
|
b4b74c9949 | ||
|
|
157f32f094 | ||
|
|
1ce58a361f | ||
|
|
d19b7bafd9 | ||
|
|
797caf0e7b | ||
|
|
0e17964204 | ||
|
|
eca61f9418 | ||
|
|
658a4c0f1a | ||
|
|
50fa8d1c1d | ||
|
|
9e7b252700 | ||
|
|
9fc9163453 | ||
|
|
1f01a1b8b6 | ||
|
|
8055b6891c | ||
|
|
6416f24f93 | ||
|
|
7cbf3c0dfa | ||
|
|
28526885f6 | ||
|
|
da50285edf | ||
|
|
3bf4400836 | ||
|
|
d1afb828d4 | ||
|
|
ac0398d8f3 | ||
|
|
671057e507 | ||
|
|
78fe66a155 | ||
|
|
1900a2cc1e | ||
|
|
d202938370 | ||
|
|
6f66d7134d | ||
|
|
a70d363b62 | ||
|
|
3799d6d187 | ||
|
|
1fd56085f2 | ||
|
|
61de7f7abf | ||
|
|
bd37b67ab8 | ||
|
|
6c0a5c0806 | ||
|
|
5be16c47be | ||
|
|
ebe37afa4a | ||
|
|
4ec232f35c | ||
|
|
53e2909690 | ||
|
|
092653c838 | ||
|
|
d204861c56 | ||
|
|
1494dd5ee9 | ||
|
|
4a3e697d78 | ||
|
|
f234ca2985 | ||
|
|
b64bbb4262 | ||
|
|
41f139fdf1 | ||
|
|
386b94c126 | ||
|
|
36d2d31878 | ||
|
|
3e0dc52376 | ||
|
|
aef48107fe | ||
|
|
9fb2c92a15 | ||
|
|
6dbe24e34f | ||
|
|
656d407ade | ||
|
|
133af50067 | ||
|
|
bb03f0d250 | ||
|
|
4d373fb1c7 | ||
|
|
c21453861f | ||
|
|
587a0aac68 | ||
|
|
58a083109e | ||
|
|
97d326ac88 | ||
|
|
909616efbe | ||
|
|
fa566c2101 | ||
|
|
8a7d740c95 | ||
|
|
69e5c2ef48 | ||
|
|
f202cd7327 | ||
|
|
f6861ec122 | ||
|
|
76a10f3dd7 | ||
|
|
6c16125fa4 | ||
|
|
d6b9d445aa | ||
|
|
5403ce690e | ||
|
|
8bb3f64e70 | ||
|
|
bcbdf3441e | ||
|
|
4c355d8a68 | ||
|
|
44c32f364a | ||
|
|
439bb9667e | ||
|
|
d0daf64ae9 | ||
|
|
6e90ed67ad | ||
|
|
ebc44fa1ea | ||
|
|
5ba716a437 | ||
|
|
b7a427fc6f | ||
|
|
6067fcbc9e | ||
|
|
8b767a8aff | ||
|
|
3c6cf48d9f | ||
|
|
c6b77aecb9 | ||
|
|
3119c8f9a6 | ||
|
|
ada2dea463 | ||
|
|
9001214462 | ||
|
|
77bc5eaabd | ||
|
|
c4263299b9 | ||
|
|
633b59f99f | ||
|
|
35f1ddcbae | ||
|
|
7279acff7e | ||
|
|
91dc8f4c92 | ||
|
|
dfba26b76a | ||
|
|
4954f11c93 | ||
|
|
40f752f48f | ||
|
|
5ccf299003 | ||
|
|
b5f8b3c1eb | ||
|
|
cfe2199354 | ||
|
|
074c973aeb | ||
|
|
2166001174 | ||
|
|
98b82b9fc6 | ||
|
|
a56d92e4eb | ||
|
|
283c8361f2 | ||
|
|
3743fc5cfa | ||
|
|
08d2154489 | ||
|
|
449ce0a927 | ||
|
|
5dff6f76d1 | ||
|
|
5ae181cd89 | ||
|
|
09887a439e | ||
|
|
b1d999a42e | ||
|
|
c857796318 | ||
|
|
68b3693531 | ||
|
|
79fb4c550d | ||
|
|
b02e495028 | ||
|
|
acdd51ffdf | ||
|
|
69f3d96be2 | ||
|
|
c7e3c9d8d0 | ||
|
|
d80002afc8 | ||
|
|
5ade42ca7c | ||
|
|
8636215314 | ||
|
|
4f4fe972d3 | ||
|
|
38a39a2aaa | ||
|
|
1d40cef5d5 | ||
|
|
d9160aac2d | ||
|
|
5125be8094 | ||
|
|
cadf862c7b | ||
|
|
13639b3a01 | ||
|
|
f0c8a4053c | ||
|
|
e47d8b02d3 | ||
|
|
de7faed4c3 | ||
|
|
fbd03c1fc5 | ||
|
|
e23b77c400 | ||
|
|
df6ec36515 | ||
|
|
192836dd2c | ||
|
|
3510f6f90b | ||
|
|
db7394d86c | ||
|
|
772e7cd07d | ||
|
|
15403befc0 | ||
|
|
4d0f7f2de2 | ||
|
|
8cdb1865bf | ||
|
|
c5843a55c3 | ||
|
|
54bc4ad403 | ||
|
|
8fe26a08b3 | ||
|
|
75b2dd2e27 | ||
|
|
83b7560d4d | ||
|
|
946fbbc053 | ||
|
|
54174dd4f2 | ||
|
|
017d1719a6 | ||
|
|
efdf5b2b30 | ||
|
|
4a58852ebd | ||
|
|
cf18a96900 | ||
|
|
d1f4e77e6d | ||
|
|
757b09f031 | ||
|
|
6f78768459 | ||
|
|
c3c31ec4ac | ||
|
|
3dce199b79 | ||
|
|
403e8bc185 | ||
|
|
0f15ae7bef | ||
|
|
112b01afff | ||
|
|
4a45ad0025 | ||
|
|
02385c5544 | ||
|
|
a422d5d446 | ||
|
|
5fe05e2890 | ||
|
|
d9f3406ae7 | ||
|
|
28ec0482c8 | ||
|
|
273a91f357 | ||
|
|
2c7df5abd1 | ||
|
|
09232c5640 | ||
|
|
fe84f6bdb1 | ||
|
|
e1727d2f91 | ||
|
|
74cac90696 | ||
|
|
4b2bde3c3a | ||
|
|
c4b19a3b24 | ||
|
|
7384558ad0 | ||
|
|
cc8be05594 | ||
|
|
bff117e45a | ||
|
|
62b1c23b3c | ||
|
|
340d21edac | ||
|
|
73a824330a | ||
|
|
96cc7dc78b | ||
|
|
b71b4cd1a5 | ||
|
|
a54acfd347 | ||
|
|
4d4af822d9 | ||
|
|
3bc028fc3b | ||
|
|
e1e74cb29a | ||
|
|
d9a8a02cd7 | ||
|
|
4c96158f11 | ||
|
|
7162303e62 | ||
|
|
26ef27f251 | ||
|
|
f2f370602f | ||
|
|
2056482179 | ||
|
|
e8960368a5 | ||
|
|
c017fe0774 | ||
|
|
3ea22477ae | ||
|
|
258ba197bb | ||
|
|
908a034433 | ||
|
|
101509edd6 | ||
|
|
ae7200815d | ||
|
|
f42b3d48d3 | ||
|
|
e60a703f19 | ||
|
|
281a84f19c | ||
|
|
563b94765e | ||
|
|
9695a3ba71 | ||
|
|
5b6f0e8f78 | ||
|
|
405e8eb944 | ||
|
|
1d771a2bea | ||
|
|
895301edd3 | ||
|
|
568961c4d9 | ||
|
|
ce5c25f169 | ||
|
|
0b142b0658 | ||
|
|
87b3450221 | ||
|
|
97b3716dc9 | ||
|
|
c83b8eb8aa | ||
|
|
d5244f8626 | ||
|
|
d5156bf000 | ||
|
|
ae36c31dea | ||
|
|
77224477b3 | ||
|
|
80fa5e7d43 | ||
|
|
84de2595b9 | ||
|
|
c0023436e8 | ||
|
|
6593be8bdf | ||
|
|
fb344db120 | ||
|
|
6cf081527f | ||
|
|
dc4dca417b | ||
|
|
be7a55fbc0 | ||
|
|
7b476cf38a | ||
|
|
236e2ced62 | ||
|
|
e99fd9f6b2 | ||
|
|
78eb883fef | ||
|
|
16608c5fcf | ||
|
|
657f61b43e | ||
|
|
3e279aff58 | ||
|
|
6628c69d19 | ||
|
|
cdcd29a47c | ||
|
|
d8ab92531f | ||
|
|
f6876d13fe | ||
|
|
5253009bad | ||
|
|
d74e1f4172 | ||
|
|
0ad81c85f2 | ||
|
|
ec8ea71dcc | ||
|
|
cd4be5c7b1 | ||
|
|
e2433024d7 | ||
|
|
ddc877ee3d | ||
|
|
60b03d49c6 | ||
|
|
853590376b | ||
|
|
cccd7b7cec | ||
|
|
1dfd8d8fb1 | ||
|
|
68f7570720 | ||
|
|
59e1709cff | ||
|
|
39b05192fe | ||
|
|
fa377132a8 | ||
|
|
b3e5cd79ed | ||
|
|
6f7b05649b | ||
|
|
4861a746b4 | ||
|
|
e75c163248 | ||
|
|
d8b501fff0 | ||
|
|
9de6c27c69 | ||
|
|
80811a6071 | ||
|
|
814cb09e44 | ||
|
|
050a4a3b78 | ||
|
|
ced06d1391 | ||
|
|
9876c98628 | ||
|
|
93c57ecfb6 | ||
|
|
666f1a0483 | ||
|
|
1b8abac84b | ||
|
|
3de2ffb1a1 | ||
|
|
419b8c84cb | ||
|
|
c9ef0b9046 | ||
|
|
7dc2ba9264 | ||
|
|
a2fc111d8c | ||
|
|
1b47daced3 | ||
|
|
ad2be40718 | ||
|
|
0f1d251c3a | ||
|
|
1bdb30ef01 | ||
|
|
dcc37a113f | ||
|
|
8d4d90197d |
28
.dockerignore
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
/.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.DS_Store
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
.git
|
||||||
|
.github
|
||||||
|
Dockerfile
|
||||||
|
helm
|
||||||
2
.env
@@ -1,2 +0,0 @@
|
|||||||
REACT_APP_DEFAULT_GATEWAY_URL=https://ucentral.dpaas.arilia.com:16001
|
|
||||||
REACT_APP_ALLOW_GATEWAY_CHANGE=false
|
|
||||||
@@ -1 +1,4 @@
|
|||||||
/src/assets
|
/src/assets
|
||||||
|
/build
|
||||||
|
/node_modules
|
||||||
|
.github
|
||||||
|
|||||||
28
.eslintrc
@@ -1,16 +1,11 @@
|
|||||||
{
|
{
|
||||||
"parser": "babel-eslint",
|
"extends": ["airbnb", "prettier"],
|
||||||
"parserOptions": {
|
"plugins": ["prettier"],
|
||||||
"sourceType": "module",
|
"env": {
|
||||||
"allowImportExportEverywhere": false,
|
|
||||||
"codeFrame": false
|
|
||||||
},
|
|
||||||
"extends": ["airbnb", "prettier"],
|
|
||||||
"env": {
|
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"jest": true
|
"jest": true
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"max-len": ["error", {"code": 150}],
|
"max-len": ["error", {"code": 150}],
|
||||||
"prefer-promise-reject-errors": ["off"],
|
"prefer-promise-reject-errors": ["off"],
|
||||||
"react/jsx-filename-extension": ["off"],
|
"react/jsx-filename-extension": ["off"],
|
||||||
@@ -18,13 +13,22 @@
|
|||||||
"no-return-assign": ["off"],
|
"no-return-assign": ["off"],
|
||||||
"react/jsx-props-no-spreading": ["off"],
|
"react/jsx-props-no-spreading": ["off"],
|
||||||
"react/destructuring-assignment": ["off"],
|
"react/destructuring-assignment": ["off"],
|
||||||
"no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"]
|
"no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"],
|
||||||
|
"react/jsx-one-expression-per-line": "off",
|
||||||
|
"react/jsx-wrap-multilines": "off",
|
||||||
|
"react/jsx-curly-newline": "off"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"import/resolver": {
|
"import/resolver": {
|
||||||
"node": {
|
"node": {
|
||||||
"paths": ["src"]
|
"paths": ["src"]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
"parser": "babel-eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module",
|
||||||
|
"allowImportExportEverywhere": false,
|
||||||
|
"codeFrame": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
72
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
name: Build Docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'release/*'
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'release/*'
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
env:
|
||||||
|
DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io
|
||||||
|
DOCKER_REGISTRY_USERNAME: ucentral
|
||||||
|
steps:
|
||||||
|
- name: Checkout actions repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: Telecominfraproject/.github
|
||||||
|
path: github
|
||||||
|
|
||||||
|
- name: Build and push Docker image
|
||||||
|
uses: ./github/composite-actions/docker-image-build
|
||||||
|
with:
|
||||||
|
image_name: owgw-ui
|
||||||
|
registry: tip-tip-wlan-cloud-ucentral.jfrog.io
|
||||||
|
registry_user: ucentral
|
||||||
|
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Notify on failure via Slack
|
||||||
|
if: failure() && github.ref == 'refs/heads/main'
|
||||||
|
uses: rtCamp/action-slack-notify@v2
|
||||||
|
env:
|
||||||
|
SLACK_USERNAME: GitHub Actions failure notifier
|
||||||
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
||||||
|
SLACK_COLOR: "${{ job.status }}"
|
||||||
|
SLACK_ICON: https://raw.githubusercontent.com/quintessence/slack-icons/master/images/github-logo-slack-icon.png
|
||||||
|
SLACK_TITLE: Docker build failed for OWGW-UI service
|
||||||
|
|
||||||
|
trigger-deploy-to-dev:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/main'
|
||||||
|
needs:
|
||||||
|
- docker
|
||||||
|
steps:
|
||||||
|
- name: Checkout actions repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: Telecominfraproject/.github
|
||||||
|
path: github
|
||||||
|
|
||||||
|
- name: Trigger deployment of the latest version to dev instance and wait for result
|
||||||
|
uses: ./github/composite-actions/trigger-workflow-and-wait
|
||||||
|
with:
|
||||||
|
owner: Telecominfraproject
|
||||||
|
repo: wlan-testing
|
||||||
|
workflow: ucentralgw-dev-deployment.yaml
|
||||||
|
token: ${{ secrets.WLAN_TESTING_PAT }}
|
||||||
|
ref: master
|
||||||
|
inputs: '{"force_latest": "true"}'
|
||||||
26
.github/workflows/cleanup.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
name: Clean up PR Docker images
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- 'release/*'
|
||||||
|
types: [ closed ]
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cleanup:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
|
||||||
|
|
||||||
|
if [[ ! $PR_BRANCH_TAG =~ (main|master|release-*) ]]; then
|
||||||
|
echo "PR branch is $PR_BRANCH_TAG, deleting Docker image"
|
||||||
|
curl -s -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG"
|
||||||
|
else
|
||||||
|
echo "PR branch is $PR_BRANCH_TAG, not deleting Docker image"
|
||||||
|
fi
|
||||||
24
.github/workflows/enforce-jira-issue-key.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
name: Ensure Jira issue is linked
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, edited, reopened, synchronize]
|
||||||
|
branches:
|
||||||
|
- 'release/*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check_for_issue_key:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout actions repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: Telecominfraproject/.github
|
||||||
|
path: github
|
||||||
|
|
||||||
|
- name: Run JIRA check
|
||||||
|
uses: ./github/composite-actions/enforce-jira-issue-key
|
||||||
|
with:
|
||||||
|
jira_base_url: ${{ secrets.TIP_JIRA_URL }}
|
||||||
|
jira_user_email: ${{ secrets.TIP_JIRA_USER_EMAIL }}
|
||||||
|
jira_api_token: ${{ secrets.TIP_JIRA_API_TOKEN }}
|
||||||
46
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
name: Release chart package
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
helm-package:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
env:
|
||||||
|
HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
|
||||||
|
HELM_REPO_USERNAME: ucentral
|
||||||
|
steps:
|
||||||
|
- name: Checkout uCentral assembly chart repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
path: wlan-cloud-ucentralgw-ui
|
||||||
|
|
||||||
|
- name: Build package
|
||||||
|
working-directory: wlan-cloud-ucentralgw-ui/helm
|
||||||
|
run: |
|
||||||
|
helm plugin install https://github.com/aslafy-z/helm-git --version 0.10.0
|
||||||
|
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||||
|
helm repo update
|
||||||
|
helm dependency update
|
||||||
|
mkdir dist
|
||||||
|
helm package . -d dist
|
||||||
|
|
||||||
|
- name: Generate GitHub release body
|
||||||
|
working-directory: wlan-cloud-ucentralgw-ui/helm
|
||||||
|
run: |
|
||||||
|
pip3 install yq -q
|
||||||
|
echo "Docker image - tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui:$GITHUB_REF_NAME" > release.txt
|
||||||
|
echo "Helm charted may be attached to this release" >> release.txt
|
||||||
|
echo "Deployment artifacts may be found in https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy/tree/$GITHUB_REF_NAME" >> release.txt
|
||||||
|
|
||||||
|
- name: Create GitHub release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
body_path: wlan-cloud-ucentralgw-ui/helm/release.txt
|
||||||
|
files: wlan-cloud-ucentralgw-ui/helm/dist/*
|
||||||
2
.gitignore
vendored
@@ -1,4 +1,4 @@
|
|||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
|
|||||||
4
.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
/src/assets
|
||||||
|
build
|
||||||
|
node_modules
|
||||||
|
.github
|
||||||
15
Dockerfile
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
FROM node:18.7.0-alpine3.15 AS build
|
||||||
|
|
||||||
|
COPY package.json package-lock.json /
|
||||||
|
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
FROM nginx:1.22.0-alpine AS runtime
|
||||||
|
|
||||||
|
COPY --from=build /build/ /usr/share/nginx/html/
|
||||||
|
|
||||||
|
COPY --from=build docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh
|
||||||
34
README.md
@@ -4,33 +4,45 @@
|
|||||||
The uCentralGW Client is a user interface that lets you monitor and manage devices connected to the [uCentral gateway](https://github.com/Telecominfraproject/wlan-cloud-ucentralgw). To use the interface,
|
The uCentralGW Client is a user interface that lets you monitor and manage devices connected to the [uCentral gateway](https://github.com/Telecominfraproject/wlan-cloud-ucentralgw). To use the interface,
|
||||||
you either need to run it on your machine for [development](#development) or build it for [production](#production).
|
you either need to run it on your machine for [development](#development) or build it for [production](#production).
|
||||||
|
|
||||||
|
NOTE: This UI will be evolving as micro services are added to the uCentral program most notably with provisioning, base dashboard, firmware, device management
|
||||||
|
|
||||||
## Running the solution
|
## Running the solution
|
||||||
|
|
||||||
### Development
|
### Development
|
||||||
Here are the instructions to run the solution on your machine for development purposes. You need to run these in the root folder of the project and also have npm installed on your machine. Please install `npm` for the platform you are using.
|
You need to run these commands in the root folder of the project and also have npm installed on your machine.
|
||||||
```
|
```
|
||||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
|
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
|
||||||
cd wlan-cloud-ucentralgw-ui
|
cd wlan-cloud-ucentralgw-ui
|
||||||
npm install
|
npm install
|
||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Run these commands if you want to run the solution on your machine while also doing development on the [uCentral UI Library](https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs).
|
||||||
|
```
|
||||||
|
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
|
||||||
|
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs
|
||||||
|
cd wlan-cloud-ucentralgw-ui
|
||||||
|
npm link ../wlan-cloud-ucentral-ui-libs // Add sudo at the start of this command if it fails because of permissions
|
||||||
|
npm start
|
||||||
|
```
|
||||||
|
|
||||||
### Production
|
### Production
|
||||||
Here are the instructions to build the production veresion of the application. You need to run this in the root folder of the project and also have npm installed on your machine.
|
You need to run this in the root folder of the project and also have npm installed on your machine.
|
||||||
```
|
```
|
||||||
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
|
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
|
||||||
cd wlan-cloud-ucentralgw-ui
|
cd wlan-cloud-ucentralgw-ui
|
||||||
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
Once the build is done, you can move the `build` folder on your server.
|
Once the build is done, you can move the `build` folder on your server.
|
||||||
|
|
||||||
### Environment variables
|
### Configuration
|
||||||
There are two environment variables currently used to control the gateway URL and also controlling if the users can modify the gateway URL. You can modify these values in the `.env` file located in the root of the project.
|
You must change the `config.json` file in `public` directory to point to your uCentral Security Service URL (uCentralSec). You may also limit the ability for users to change the default uCentralSec. If you do not allow a uCentralSec change, the uCentralSec URL will not appear on the login screen.
|
||||||
|
|
||||||
During development, you will need to stop and start the project again to see those changes come into effect.
|
Here are the current default values:
|
||||||
```asm
|
```
|
||||||
REACT_APP_DEFAULT_GATEWAY_URL=https://ucentral.dpaas.arilia.com:16001
|
{
|
||||||
REACT_APP_ALLOW_GATEWAY_CHANGE=false
|
"DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
|
||||||
|
"ALLOW_UCENTRALSEC_CHANGE": false
|
||||||
|
}
|
||||||
```
|
```
|
||||||
- `REACT_APP_DEFAULT_GATEWAY_URL` points to the actual uCentral gateway, including the port.
|
|
||||||
- `REACT_APP_ALLOW_GATEWAY_CHANGE` : when set to `true` will allow a user to change the gateway name she wants to use. When set to `false`, will not show a text field for the gateway and will only allow users to go to the gateway speficied in `REACT_APP_DEFAULT_GATEWAY_URL`.
|
|
||||||
|
|
||||||
|
|||||||
25
babel.config.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"@babel/preset-env",
|
||||||
|
{
|
||||||
|
"modules": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"@babel/preset-react"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"production": {
|
||||||
|
"plugins": [
|
||||||
|
"@babel/plugin-transform-react-inline-elements",
|
||||||
|
"@babel/plugin-transform-react-constant-elements",
|
||||||
|
[
|
||||||
|
"transform-react-remove-prop-types",
|
||||||
|
{
|
||||||
|
"removeImport": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
config/paths.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
// Source files
|
||||||
|
src: path.resolve(__dirname, '../src'),
|
||||||
|
|
||||||
|
// Production build files
|
||||||
|
build: path.resolve(__dirname, '../build'),
|
||||||
|
|
||||||
|
// Static files that get copied to build folder
|
||||||
|
public: path.resolve(__dirname, '../public'),
|
||||||
|
};
|
||||||
79
config/webpack.common.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
|
/* eslint-disable prefer-template */
|
||||||
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
|
const webpack = require('webpack');
|
||||||
|
const path = require('path');
|
||||||
|
const paths = require('./paths');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: [paths.src + '/index.js'],
|
||||||
|
output: {
|
||||||
|
path: paths.build,
|
||||||
|
filename: '[name].bundle.js',
|
||||||
|
publicPath: '/',
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
modules: [path.resolve('./node_modules'), path.resolve('./src')],
|
||||||
|
preferRelative: true,
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.VERSION': JSON.stringify(process.env.npm_package_version),
|
||||||
|
}),
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: 'styles/[name].[contenthash].css',
|
||||||
|
chunkFilename: '[id].[contenthash].css',
|
||||||
|
}),
|
||||||
|
new CopyWebpackPlugin({
|
||||||
|
patterns: [
|
||||||
|
{
|
||||||
|
from: paths.src + '/assets',
|
||||||
|
to: 'assets',
|
||||||
|
globOptions: {
|
||||||
|
ignore: ['*.DS_Store'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: paths.public + '/locales',
|
||||||
|
to: 'locales',
|
||||||
|
globOptions: {
|
||||||
|
ignore: ['*.DS_Store'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
from: paths.public + '/config.json',
|
||||||
|
to: 'config.json',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
title: 'uCentralGW',
|
||||||
|
favicon: paths.public + '/favicon.ico',
|
||||||
|
template: paths.public + '/index.html',
|
||||||
|
filename: 'index.html',
|
||||||
|
}),
|
||||||
|
new CleanWebpackPlugin(),
|
||||||
|
],
|
||||||
|
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|jsx)$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(css|scss)$/,
|
||||||
|
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.svg$/,
|
||||||
|
use: ['@svgr/webpack'],
|
||||||
|
},
|
||||||
|
{ test: /\.(?:ico|gif|png|jpg|jpeg)$/i, type: 'asset/resource' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
54
config/webpack.dev.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
|
/* eslint-disable prefer-template */
|
||||||
|
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
|
||||||
|
const { merge } = require('webpack-merge');
|
||||||
|
const path = require('path');
|
||||||
|
const paths = require('./paths');
|
||||||
|
const common = require('./webpack.common');
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
mode: 'development',
|
||||||
|
|
||||||
|
target: 'web',
|
||||||
|
|
||||||
|
devtool: 'inline-source-map',
|
||||||
|
|
||||||
|
devServer: {
|
||||||
|
historyApiFallback: true,
|
||||||
|
contentBase: paths.build,
|
||||||
|
open: true,
|
||||||
|
compress: false,
|
||||||
|
hot: true,
|
||||||
|
port: 3000,
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.[js]sx?$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: require.resolve('babel-loader'),
|
||||||
|
options: {
|
||||||
|
plugins: [require.resolve('react-refresh/babel')],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
modules: [
|
||||||
|
'node_modules',
|
||||||
|
'src',
|
||||||
|
path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
|
||||||
|
],
|
||||||
|
alias: {
|
||||||
|
react: path.resolve(__dirname, '../', 'node_modules', 'react'),
|
||||||
|
'react-router-dom': path.resolve('./node_modules/react-router-dom'),
|
||||||
|
'ucentral-libs': path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
|
||||||
|
graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [new ReactRefreshWebpackPlugin()],
|
||||||
|
});
|
||||||
86
config/webpack.prod.js
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
|
/* eslint-disable prefer-template */
|
||||||
|
const { merge } = require('webpack-merge');
|
||||||
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
|
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
||||||
|
const TerserPlugin = require('terser-webpack-plugin');
|
||||||
|
const CompressionPlugin = require('compression-webpack-plugin');
|
||||||
|
const path = require('path');
|
||||||
|
const paths = require('./paths');
|
||||||
|
const common = require('./webpack.common');
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
mode: 'production',
|
||||||
|
devtool: false,
|
||||||
|
output: {
|
||||||
|
path: paths.build,
|
||||||
|
publicPath: '/',
|
||||||
|
filename: 'js/[name].[contenthash].bundle.js',
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
// new BundleAnalyzerPlugin(),
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: 'styles/[name].[contenthash].css',
|
||||||
|
chunkFilename: '[contenthash].css',
|
||||||
|
}),
|
||||||
|
new CompressionPlugin({
|
||||||
|
filename: '[path]/[name].gz[query]',
|
||||||
|
algorithm: 'gzip',
|
||||||
|
test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
|
||||||
|
threshold: 10240,
|
||||||
|
minRatio: 0.8,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
module: {
|
||||||
|
rules: [],
|
||||||
|
},
|
||||||
|
optimization: {
|
||||||
|
minimize: true,
|
||||||
|
minimizer: [
|
||||||
|
'...',
|
||||||
|
new TerserPlugin({
|
||||||
|
terserOptions: {
|
||||||
|
warnings: false,
|
||||||
|
compress: {
|
||||||
|
comparisons: false,
|
||||||
|
},
|
||||||
|
parse: {},
|
||||||
|
mangle: true,
|
||||||
|
output: {
|
||||||
|
ascii_only: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
parallel: true,
|
||||||
|
}),
|
||||||
|
new CssMinimizerPlugin(),
|
||||||
|
],
|
||||||
|
nodeEnv: 'production',
|
||||||
|
sideEffects: true,
|
||||||
|
runtimeChunk: 'single',
|
||||||
|
splitChunks: {
|
||||||
|
chunks: 'all',
|
||||||
|
maxInitialRequests: 10,
|
||||||
|
minSize: 0,
|
||||||
|
cacheGroups: {
|
||||||
|
vendor: {
|
||||||
|
test: /[\\/]node_modules[\\/]/,
|
||||||
|
name(module) {
|
||||||
|
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
|
||||||
|
return `npm.${packageName.replace('@', '')}`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
modules: [],
|
||||||
|
alias: {
|
||||||
|
graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
performance: {
|
||||||
|
hints: false,
|
||||||
|
maxEntrypointSize: 512000,
|
||||||
|
maxAssetSize: 512000,
|
||||||
|
},
|
||||||
|
});
|
||||||
6
docker-entrypoint.d/40-generate-config.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/ash
|
||||||
|
# Check if variables are set
|
||||||
|
export DEFAULT_OWSEC_URL="${DEFAULT_OWSEC_URL:-https://ucentral.dpaas.arilia.com:16001}"
|
||||||
|
export ALLOW_OWSEC_CHANGE="${ALLOW_OWSEC_CHANGE:-false}"
|
||||||
|
|
||||||
|
echo '{"DEFAULT_UCENTRALSEC_URL": "'$DEFAULT_UCENTRALSEC_URL'","ALLOW_UCENTRALSEC_CHANGE": '$ALLOW_UCENTRALSEC_CHANGE'}' > /usr/share/nginx/html/config.json
|
||||||
1
helm/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.swp
|
||||||
22
helm/.helmignore
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
5
helm/Chart.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
appVersion: "1.0"
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
name: owgwui
|
||||||
|
version: 0.1.0
|
||||||
82
helm/README.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# owgwui
|
||||||
|
|
||||||
|
This Helm chart helps to deploy OpenWIFI Web UI (further on refered as __Web UI__) to the Kubernetes clusters. It is mainly used in [assembly chart](https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy/tree/main/chart) as Web UI requires other services as dependencies that are considered in that Helm chart. This chart is purposed to define deployment logic close to the application code itself and define default values that could be overriden during deployment.
|
||||||
|
|
||||||
|
|
||||||
|
## TL;DR;
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm install .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This chart bootstraps the Web UI on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
|
||||||
|
|
||||||
|
## Installing the Chart
|
||||||
|
|
||||||
|
Currently this chart is not assembled in charts archives, so [helm-git](https://github.com/aslafy-z/helm-git) is required for remote the installation
|
||||||
|
|
||||||
|
To install the chart with the release name `my-release`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm install --name my-release git+https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui@helm/owgwui-0.1.0.tgz?ref=main
|
||||||
|
```
|
||||||
|
|
||||||
|
The command deploys the Web UI on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
|
||||||
|
|
||||||
|
> **Tip**: List all releases using `helm list`
|
||||||
|
|
||||||
|
## Uninstalling the Chart
|
||||||
|
|
||||||
|
To uninstall/delete the `my-release` deployment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm delete my-release
|
||||||
|
```
|
||||||
|
|
||||||
|
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
The following table lists the configurable parameters of the chart and their default values. If Default value is not listed in the table, please refer to the [Values](values.yaml) files for details.
|
||||||
|
|
||||||
|
| Parameter | Type | Description | Default |
|
||||||
|
|-----------|------|-------------|---------|
|
||||||
|
| replicaCount | number | Amount of replicas to be deployed | `1` |
|
||||||
|
| nameOverride | string | Override to be used for application deployment | |
|
||||||
|
| fullnameOverride | string | Override to be used for application deployment (has priority over nameOverride) | |
|
||||||
|
| images.owgwui.repository | string | Docker image repository | |
|
||||||
|
| images.owgwui.tag | string | Docker image tag | `'master'` |
|
||||||
|
| images.owgwui.pullPolicy | string | Docker image pull policy | `'Always'` |
|
||||||
|
| services.owgwui.type | string | OpenWIFI Web UI service type | `'ClusterIP'` |
|
||||||
|
| services.owgwui.ports.http.servicePort | number | Websocket endpoint port to be exposed on service | `80` |
|
||||||
|
| services.owgwui.ports.http.targetPort | number | Websocket endpoint port to be targeted by service | `80` |
|
||||||
|
| services.owgwui.ports.http.protocol | string | Websocket endpoint protocol | `'TCP'` |
|
||||||
|
| checks.owgwui.liveness.httpGet.path | string | Liveness check path to be used | `'/'` |
|
||||||
|
| checks.owgwui.liveness.httpGet.port | number | Liveness check port to be used (should be pointint to ALB endpoint) | `http` |
|
||||||
|
| checks.owgwui.readiness.httpGet.path | string | Readiness check path to be used | `'/'` |
|
||||||
|
| checks.owgwui.readiness.httpGet.port | number | Readiness check port to be used | `http` |
|
||||||
|
| ingresses.default.enabled | boolean | Defines if the Web UI should be exposed via Ingress controller | `False` |
|
||||||
|
| ingresses.default.hosts | array | List of hosts for the exposed Web UI | |
|
||||||
|
| ingresses.default.paths | array | List of paths to be exposed for the Web UI | |
|
||||||
|
| public_env_variables | hash | Defines list of environment variables to be passed to the Web UI (required for application configuration) | |
|
||||||
|
|
||||||
|
|
||||||
|
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm install --name my-release \
|
||||||
|
--set replicaCount=1 \
|
||||||
|
.
|
||||||
|
```
|
||||||
|
|
||||||
|
The above command sets that only 1 instance of your app should be running
|
||||||
|
|
||||||
|
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ helm install --name my-release -f values.yaml .
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Tip**: You can use the default [values.yaml](values.yaml) as a base for customization.
|
||||||
42
helm/templates/_helpers.tpl
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "owgwui.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "owgwui.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "owgwui.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "owgwui.ingress.apiVersion" -}}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
|
||||||
|
{{- print "networking.k8s.io/v1" -}}
|
||||||
|
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
|
||||||
|
{{- print "networking.k8s.io/v1beta1" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- print "extensions/v1beta1" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
93
helm/templates/deployment.yaml
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{{- $root := . -}}
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "owgwui.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" . }}
|
||||||
|
helm.sh/chart: {{ include "owgwui.chart" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- with .Values.services.owgwui.labels }}
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- with .Values.services.owgwui.labels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
|
||||||
|
containers:
|
||||||
|
|
||||||
|
- name: owgwui
|
||||||
|
image: "{{ .Values.images.owgwui.repository }}:{{ .Values.images.owgwui.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.images.owgwui.pullPolicy }}
|
||||||
|
|
||||||
|
env:
|
||||||
|
- name: KUBERNETES_DEPLOYED
|
||||||
|
value: "{{ now }}"
|
||||||
|
{{- range $key, $value := .Values.public_env_variables }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
value: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
ports:
|
||||||
|
{{- range $key, $value := .Values.services.owgwui.ports }}
|
||||||
|
- name: {{ $key }}
|
||||||
|
containerPort: {{ $value.targetPort }}
|
||||||
|
protocol: {{ $value.protocol }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.checks.owgwui.liveness }}
|
||||||
|
livenessProbe:
|
||||||
|
{{- toYaml .Values.checks.owgwui.liveness | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.checks.owgwui.readiness }}
|
||||||
|
readinessProbe:
|
||||||
|
{{- toYaml .Values.checks.owgwui.readiness | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.resources }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml . | nindent 12 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- range $image, $imageValue := .Values.images }}
|
||||||
|
{{- if $imageValue.regcred }}
|
||||||
|
- name: {{ include "owgwui.fullname" $root }}-{{ $image }}-regcred
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
61
helm/templates/ingress.yaml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
{{- $root := . -}}
|
||||||
|
{{- range $ingress, $ingressValue := .Values.ingresses }}
|
||||||
|
{{- if $ingressValue.enabled }}
|
||||||
|
---
|
||||||
|
apiVersion: {{ include "owgwui.ingress.apiVersion" $root }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ include "owgwui.fullname" $root }}-{{ $ingress }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" $root }}
|
||||||
|
helm.sh/chart: {{ include "owgwui.chart" $root }}
|
||||||
|
app.kubernetes.io/instance: {{ $root.Release.Name }}
|
||||||
|
app.kubernetes.io/managed-by: {{ $root.Release.Service }}
|
||||||
|
{{- with $ingressValue.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
|
||||||
|
{{- if $ingressValue.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range $ingressValue.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ tpl .secretName $root }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
rules:
|
||||||
|
{{- range $ingressValue.hosts }}
|
||||||
|
- host: {{ . | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range $ingressValue.paths }}
|
||||||
|
- path: {{ .path }}
|
||||||
|
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
|
||||||
|
pathType: {{ .pathType | default "ImplementationSpecific" }}
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
|
||||||
|
service:
|
||||||
|
name: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
|
||||||
|
port:
|
||||||
|
{{- if kindIs "string" .servicePort }}
|
||||||
|
name: {{ .servicePort }}
|
||||||
|
{{- else }}
|
||||||
|
number: {{ .servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
|
||||||
|
servicePort: {{ .servicePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
21
helm/templates/secret-regcred.yaml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{{- define "imagePullSecret" }}
|
||||||
|
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .registry (printf "%s:%s" .username .password | b64enc) | b64enc }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $root := . -}}
|
||||||
|
{{- range $image, $imageValue := .Values.images }}
|
||||||
|
{{- if $imageValue.regcred }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
type: kubernetes.io/dockerconfigjson
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kuberentes.io/name: {{ include "owgwui.name" $root }}
|
||||||
|
helm.sh/chart: {{ include "owgwui.chart" $root }}
|
||||||
|
app.kubernetes.io/instance: {{ $root.Release.Name }}
|
||||||
|
app.kubernetes.io/managed-by: {{ $root.Release.Service }}
|
||||||
|
name: {{ include "owgwui.fullname" $root }}-{{ $image }}-regcred
|
||||||
|
data:
|
||||||
|
.dockerconfigjson: {{ template "imagePullSecret" $imageValue.regcred }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
48
helm/templates/service.yaml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{{- $root := . -}}
|
||||||
|
{{- range $service, $serviceValue := .Values.services }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "owgwui.fullname" $root }}-{{ $service }}
|
||||||
|
{{- with $serviceValue.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" $root }}
|
||||||
|
helm.sh/chart: {{ include "owgwui.chart" $root }}
|
||||||
|
app.kubernetes.io/instance: {{ $root.Release.Name }}
|
||||||
|
app.kubernetes.io/managed-by: {{ $root.Release.Service }}
|
||||||
|
|
||||||
|
{{- with $serviceValue.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if $serviceValue.serviceMonitor }}
|
||||||
|
|
||||||
|
{{- range $selector, $selectorValue := $serviceValue.serviceMonitor.serviceSelector }}
|
||||||
|
{{ $selector }}: {{ tpl $selectorValue $root }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
type: {{ $serviceValue.type }}
|
||||||
|
ports:
|
||||||
|
|
||||||
|
{{- range $service_service, $service_value := $serviceValue.ports }}
|
||||||
|
- name: {{ $service_service }}
|
||||||
|
targetPort: {{ $service_value.targetPort }}
|
||||||
|
protocol: {{ $service_value.protocol }}
|
||||||
|
port: {{ $service_value.servicePort }}
|
||||||
|
{{- if and (eq "NodePort" $serviceValue.type) $service_value.nodePort }}
|
||||||
|
nodePort: {{ $service_value.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: {{ include "owgwui.name" $root }}
|
||||||
|
app.kubernetes.io/instance: {{ $root.Release.Name }}
|
||||||
|
{{- with $serviceValue.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
79
helm/values.yaml
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# System
|
||||||
|
replicaCount: 1
|
||||||
|
revisionHistoryLimit: 2
|
||||||
|
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
images:
|
||||||
|
owgwui:
|
||||||
|
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui
|
||||||
|
tag: v2.7.0-RC1
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
services:
|
||||||
|
owgwui:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
http:
|
||||||
|
servicePort: 80
|
||||||
|
targetPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
|
||||||
|
checks:
|
||||||
|
owgwui:
|
||||||
|
liveness:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
readiness:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: http
|
||||||
|
|
||||||
|
ingresses:
|
||||||
|
default:
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# kubernetes.io/tls-acme: "true"
|
||||||
|
# tls:
|
||||||
|
# - secretName: '{{ include "owgwui.fullname" . }}-default-tls' # template may be used
|
||||||
|
# cert: |
|
||||||
|
# CERT_HERE_IN_PEM
|
||||||
|
# key: |
|
||||||
|
# KEY_HERE_IN_PEM
|
||||||
|
# hosts:
|
||||||
|
# - chart-example.local
|
||||||
|
hosts:
|
||||||
|
- chart-example.local
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: ImplementationSpecific
|
||||||
|
serviceName: owgwui
|
||||||
|
servicePort: http
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||||
|
# choice for the user. This also increases chances charts run on environments with little
|
||||||
|
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||||
|
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||||
|
# requests:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
# limits:
|
||||||
|
# cpu: 100m
|
||||||
|
# memory: 128Mi
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
tolerations: []
|
||||||
|
|
||||||
|
affinity: {}
|
||||||
|
|
||||||
|
podAnnotations: {}
|
||||||
|
|
||||||
|
# Application
|
||||||
|
public_env_variables:
|
||||||
|
DEFAULT_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001
|
||||||
|
ALLOW_UCENTRALSEC_CHANGE: false
|
||||||
35180
package-lock.json
generated
93
package.json
@@ -1,45 +1,43 @@
|
|||||||
{
|
{
|
||||||
"name": "ucentral-client",
|
"name": "ucentral-client",
|
||||||
"version": "0.9.0",
|
"version": "2.7.0(6)",
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@coreui/coreui": "^3.4.0",
|
"@coreui/coreui": "^3.4.0",
|
||||||
"@coreui/icons": "^2.0.1",
|
"@coreui/icons": "^2.0.1",
|
||||||
"@coreui/icons-react": "^1.1.0",
|
"@coreui/icons-react": "^1.1.0",
|
||||||
"@coreui/react": "^3.4.6",
|
"@coreui/react": "^3.4.6",
|
||||||
"@fortawesome/fontawesome-svg-core": "^1.2.35",
|
"@coreui/react-chartjs": "^1.1.0",
|
||||||
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
|
||||||
"@fortawesome/react-fontawesome": "^0.1.14",
|
|
||||||
"@testing-library/jest-dom": "^5.14.1",
|
|
||||||
"@testing-library/react": "^11.2.7",
|
|
||||||
"@testing-library/user-event": "^13.1.9",
|
|
||||||
"apexcharts": "^3.27.1",
|
"apexcharts": "^3.27.1",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"axios-retry": "^3.1.9",
|
"axios-retry": "^3.1.9",
|
||||||
"http": "^0.0.1-security",
|
"buffer": "^6.0.3",
|
||||||
"https": "^1.0.0",
|
"dagre": "^0.8.5",
|
||||||
"i18next": "^20.3.1",
|
"i18next": "^20.3.1",
|
||||||
"i18next-browser-languagedetector": "^6.1.2",
|
"i18next-browser-languagedetector": "^6.1.2",
|
||||||
"i18next-http-backend": "^1.2.6",
|
"i18next-http-backend": "^1.2.6",
|
||||||
"prop-types": "^15.7.2",
|
"prop-types": "^15.7.2",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-apexcharts": "^1.3.9",
|
"react-apexcharts": "^1.3.9",
|
||||||
|
"react-country-flag": "^3.0.2",
|
||||||
|
"react-csv": "^2.2.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
"react-flow-renderer": "^9.6.6",
|
||||||
"react-i18next": "^11.11.0",
|
"react-i18next": "^11.11.0",
|
||||||
"react-paginate": "^7.1.3",
|
"react-paginate": "^7.1.3",
|
||||||
"react-redux": "^7.2.4",
|
|
||||||
"react-router-dom": "^5.2.0",
|
"react-router-dom": "^5.2.0",
|
||||||
"react-scripts": "^4.0.3",
|
|
||||||
"react-select": "^4.3.1",
|
"react-select": "^4.3.1",
|
||||||
|
"react-tooltip": "^4.2.21",
|
||||||
"react-widgets": "^5.1.1",
|
"react-widgets": "^5.1.1",
|
||||||
"redux": "^4.1.0",
|
"sass": "^1.35.1",
|
||||||
|
"ucentral-libs": "^1.0.61",
|
||||||
"uuid": "^8.3.2"
|
"uuid": "^8.3.2"
|
||||||
},
|
},
|
||||||
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "webpack serve --config config/webpack.dev.js",
|
||||||
"build": "react-scripts build",
|
"build": "webpack --config config/webpack.prod.js",
|
||||||
"test": "react-scripts test",
|
"format": "prettier --write 'src/**/*.js'",
|
||||||
"eject": "react-scripts eject"
|
"eslint-fix": "eslint --fix 'src/**/*.js'"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": "react-app"
|
"extends": "react-app"
|
||||||
@@ -50,12 +48,55 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"src/**/*.{js,jsx}": [
|
"*.{js,jsx}": [
|
||||||
"eslint",
|
"eslint",
|
||||||
"pretty-quick — staged",
|
"prettier --write"
|
||||||
"git add"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.14.6",
|
||||||
|
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
||||||
|
"@babel/plugin-transform-runtime": "^7.14.5",
|
||||||
|
"@babel/polyfill": "^7.12.1",
|
||||||
|
"@babel/preset-env": "^7.14.7",
|
||||||
|
"@babel/preset-react": "^7.14.5",
|
||||||
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
|
||||||
|
"@svgr/webpack": "^5.5.0",
|
||||||
|
"autoprefixer": "^10.2.6",
|
||||||
|
"babel-eslint": "^10.1.0",
|
||||||
|
"babel-loader": "^8.2.2",
|
||||||
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
|
"compression-webpack-plugin": "^8.0.1",
|
||||||
|
"copy-webpack-plugin": "^7.0.0",
|
||||||
|
"css-loader": "^5.2.6",
|
||||||
|
"css-minimizer-webpack-plugin": "^2.0.0",
|
||||||
|
"dotenv-webpack": "^6.0.4",
|
||||||
|
"eslint": "^7.29.0",
|
||||||
|
"eslint-config-airbnb": "^18.2.1",
|
||||||
|
"eslint-config-prettier": "^7.2.0",
|
||||||
|
"eslint-import-resolver-alias": "^1.1.2",
|
||||||
|
"eslint-loader": "^4.0.2",
|
||||||
|
"eslint-plugin-babel": "^5.3.1",
|
||||||
|
"eslint-plugin-import": "^2.23.4",
|
||||||
|
"eslint-plugin-prettier": "^3.4.0",
|
||||||
|
"eslint-plugin-react": "^7.24.0",
|
||||||
|
"eslint-plugin-react-hooks": "^4.2.0",
|
||||||
|
"html-webpack-plugin": "^5.3.2",
|
||||||
|
"husky": "^4.3.8",
|
||||||
|
"lint-staged": "^11.0.0",
|
||||||
|
"mini-css-extract-plugin": "^1.6.1",
|
||||||
|
"path": "^0.12.7",
|
||||||
|
"prettier": "^2.3.2",
|
||||||
|
"react-refresh": "^0.9.0",
|
||||||
|
"sass-loader": "^11.1.1",
|
||||||
|
"style-loader": "^2.0.0",
|
||||||
|
"terser-webpack-plugin": "^5.1.4",
|
||||||
|
"webpack": "^5.40.0",
|
||||||
|
"webpack-bundle-analyzer": "^4.4.2",
|
||||||
|
"webpack-cli": "^4.9.1",
|
||||||
|
"webpack-dev-server": "^3.11.2",
|
||||||
|
"webpack-merge": "^5.8.0"
|
||||||
|
},
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
">0.2%",
|
">0.2%",
|
||||||
@@ -67,17 +108,5 @@
|
|||||||
"last 1 firefox version",
|
"last 1 firefox version",
|
||||||
"last 1 safari version"
|
"last 1 safari version"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"babel-eslint": "^10.1.0",
|
|
||||||
"eslint": "^7.28.0",
|
|
||||||
"eslint-config-airbnb": "^18.2.1",
|
|
||||||
"eslint-config-prettier": "^8.3.0",
|
|
||||||
"eslint-plugin-import": "^2.23.4",
|
|
||||||
"eslint-plugin-react": "^7.24.0",
|
|
||||||
"husky": "^6.0.0",
|
|
||||||
"lint-staged": "^11.0.0",
|
|
||||||
"prettier": "^2.3.1",
|
|
||||||
"pretty-quick": "^3.1.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
public/config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
|
||||||
|
"ALLOW_UCENTRALSEC_CHANGE": false
|
||||||
|
}
|
||||||
@@ -2,42 +2,13 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
<link rel="icon" href="favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<title>Gateway</title>
|
||||||
name="description"
|
|
||||||
content="Web site created using create-react-app"
|
|
||||||
/>
|
|
||||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
|
||||||
<!--
|
|
||||||
manifest.json provides metadata used when your web app is installed on a
|
|
||||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
|
||||||
-->
|
|
||||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
|
||||||
<!--
|
|
||||||
Notice the use of %PUBLIC_URL% in the tags above.
|
|
||||||
It will be replaced with the URL of the `public` folder during the build.
|
|
||||||
Only files inside the `public` folder can be referenced from the HTML.
|
|
||||||
|
|
||||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
|
||||||
work correctly both with client-side routing and a non-root public URL.
|
|
||||||
Learn how to configure a non-root public URL by running `npm run build`.
|
|
||||||
-->
|
|
||||||
<title>uCentralGW</title>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<!--
|
|
||||||
This HTML file is a template.
|
|
||||||
If you open it directly in the browser, you will see an empty page.
|
|
||||||
|
|
||||||
You can add webfonts, meta tags, or analytics to this file.
|
|
||||||
The build step will place the bundled scripts into the <body> tag.
|
|
||||||
|
|
||||||
To begin the development, run `npm start` or `yarn start`.
|
|
||||||
To create a production bundle, use `npm run build` or `yarn build`.
|
|
||||||
-->
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,162 +1,824 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
"blink": "Blinken",
|
"actions": "Aktionen",
|
||||||
|
"blink": "LEDs Blinken",
|
||||||
"configure": "Konfigurieren",
|
"configure": "Konfigurieren",
|
||||||
"connect": "Verbinden",
|
"connect": "Konsole öffnen",
|
||||||
"connecting": "Verbindung wird hergestellt ...",
|
"connecting": "Die Verbindung wird hergestellt ...",
|
||||||
"factory_reset": "Werkseinstellungen zurückgesetzt",
|
"factory_reset": "Auf Werkseinstellungen zurückgesetzt",
|
||||||
"firmware_upgrade": "Firmware-Aktualisierung",
|
"firmware_upgrade": "Firmware Aktualisierung",
|
||||||
"reboot": "Starten Sie neu",
|
"reboot": "Gerät neustarten",
|
||||||
"title": "Geräteaktionen",
|
"request_ie": "Fordern Sie IEs an",
|
||||||
"trace": "Spur",
|
"telemetry": "Telemetrie",
|
||||||
"wifi_scan": "WLAN-Scan"
|
"title": "Geräte Administrations",
|
||||||
|
"trace": "Tcpdump starten",
|
||||||
|
"wifi_scan": "Wi-Fi Scan"
|
||||||
},
|
},
|
||||||
"blink": {
|
"blink": {
|
||||||
"blink": "Blinken",
|
"blink": "LEDs Blinken",
|
||||||
"device_leds": "Geräte-LEDs",
|
"device_leds": "LEDs",
|
||||||
|
"execute_now": "Möchten Sie dieses Muster jetzt einstellen?",
|
||||||
|
"explanation": "Welches Muster möchten Sie auf diesem Gerät für 30 Sekunden einstellen?",
|
||||||
"pattern": "Wählen Sie das Muster, das Sie verwenden möchten:",
|
"pattern": "Wählen Sie das Muster, das Sie verwenden möchten:",
|
||||||
"when_blink_leds": "Wann möchten Sie die Geräte-LEDs blinken lassen?"
|
"set_leds": "LEDs einstellen",
|
||||||
|
"when_blink_leds": "Wann möchten Sie die LEDs blinken lassen?"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
|
"command_success": "Befehl erfolgreich übermittelt",
|
||||||
"error": "Fehler beim Senden des Befehls!",
|
"error": "Fehler beim Senden des Befehls!",
|
||||||
"success": "Befehl erfolgreich übermittelt",
|
"error_delete_log": "Fehler beim Versuch zu löschen: {{error}}",
|
||||||
"title": "Gerätebefehle"
|
"event_queue": "Ereigniswarteschlange",
|
||||||
|
"reboot_start": "Der Neustartvorgang hat begonnen!",
|
||||||
|
"success": "Befehl wurde erfolgreich übermittelt",
|
||||||
|
"title": "Gerätebefehle",
|
||||||
|
"unable_queue": "Anfrage für Ereigniswarteschlange kann nicht abgeschlossen werden: {{error}}"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
"access_policy": "Zugangsrichtlinien",
|
||||||
|
"add": "Hinzufügen",
|
||||||
|
"add_items": "Füge Artikel hinzu",
|
||||||
|
"add_note": "Notiz hinzufügen",
|
||||||
|
"add_note_explanation": "Schreiben Sie unten Ihre neue Notiz und klicken Sie auf die Schaltfläche \"+\", wo Sie fertig sind",
|
||||||
|
"adding_ellipsis": "Hinzufügen ...",
|
||||||
|
"all": "Alles",
|
||||||
"are_you_sure": "Bist du sicher?",
|
"are_you_sure": "Bist du sicher?",
|
||||||
"cancel": "Stornieren",
|
"back_to_login": "Zurück zur Anmeldung",
|
||||||
|
"back_to_start": "Zurück zum Start",
|
||||||
|
"blacklist": "Schwarze Liste",
|
||||||
|
"by": "Durch",
|
||||||
|
"cancel": "Abbrechen",
|
||||||
"certificate": "Zertifikat",
|
"certificate": "Zertifikat",
|
||||||
"clear": "klar",
|
"certificates": "Zertifikate",
|
||||||
|
"claim": "Anspruch",
|
||||||
|
"clear": "Löschen",
|
||||||
"close": "Schließen",
|
"close": "Schließen",
|
||||||
|
"code": "Code",
|
||||||
"command": "Befehl",
|
"command": "Befehl",
|
||||||
|
"commands": "Befehle",
|
||||||
|
"commands_executed": "Ausgeführte Befehle",
|
||||||
"compatible": "kompatibel",
|
"compatible": "kompatibel",
|
||||||
"completed": "Abgeschlossen",
|
"completed": "Abgeschlossen",
|
||||||
"config_id": "Konfig. Ich würde",
|
"concurrent_devices": "Gleichzeitige Geräte",
|
||||||
|
"config_id": "Konfigurations ID",
|
||||||
"confirm": "Bestätigen",
|
"confirm": "Bestätigen",
|
||||||
"connected": "In Verbindung gebracht",
|
"confirm_stop_editing": "Möchten Sie die Bearbeitung wirklich beenden? Dadurch werden alle nicht gespeicherten Änderungen, die Sie vorgenommen haben, verworfen.",
|
||||||
|
"connected": "Verbindung wurde hergestellt",
|
||||||
"copied": "kopiert!",
|
"copied": "kopiert!",
|
||||||
|
"copied_to_clipboard": "In die Zwischenablage kopiert!",
|
||||||
"copy_to_clipboard": "In die Zwischenablage kopieren",
|
"copy_to_clipboard": "In die Zwischenablage kopieren",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"created": "Erstellt",
|
||||||
|
"created_by": "Erstellt von",
|
||||||
|
"creator": "Schöpfer",
|
||||||
|
"current": "Aktuell",
|
||||||
|
"custom_date": "Benutzerdefiniertes Datum",
|
||||||
|
"dashboard": "Instrumententafel",
|
||||||
"date": "Datum",
|
"date": "Datum",
|
||||||
|
"day": "tag",
|
||||||
|
"days": "tage",
|
||||||
|
"default_map": "Standardkarte",
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
|
"delete_device": "Gerät löschen",
|
||||||
"details": "Einzelheiten",
|
"details": "Einzelheiten",
|
||||||
|
"device": "Gerät #{{serialNumber}}",
|
||||||
|
"device_dashboard": "Geräte-Dashboard",
|
||||||
|
"device_delete": "#{{serialNumber}}löschen",
|
||||||
|
"device_deleted": "Gerät erfolgreich gelöscht",
|
||||||
|
"device_health": "Gerätezustand",
|
||||||
"device_list": "Liste der Geräte",
|
"device_list": "Liste der Geräte",
|
||||||
"device_page": "Geräteseite",
|
"device_page": "Aussicht",
|
||||||
|
"device_status": "Gerätestatus",
|
||||||
"devices": "Geräte",
|
"devices": "Geräte",
|
||||||
|
"devices_using_latest": "Geräte mit der neuesten Firmware",
|
||||||
|
"devices_using_unknown": "Geräte mit unbekannter Firmware",
|
||||||
"dismiss": "entlassen",
|
"dismiss": "entlassen",
|
||||||
"do_now": "Jetzt tun!",
|
"do_now": "Sofort",
|
||||||
"download": "Herunterladen",
|
"download": "Herunterladen",
|
||||||
|
"duplicate": "Duplikat",
|
||||||
"duration": "Dauer",
|
"duration": "Dauer",
|
||||||
"error": "Error",
|
"edit": "Bearbeiten",
|
||||||
"executed": "Hingerichtet",
|
"edit_user": "Bearbeiten",
|
||||||
|
"email_address": "E-Mail-Addresse",
|
||||||
|
"endpoint": "Endpunkt",
|
||||||
|
"endpoints": "Endpunkte",
|
||||||
|
"error": "Fehler",
|
||||||
|
"error_adding_note": "Fehler beim Hinzufügen einer Notiz",
|
||||||
|
"error_code": "Fehlercode",
|
||||||
|
"errors": "Fehler",
|
||||||
|
"execute_now": "Möchten Sie diesen Befehl jetzt ausführen?",
|
||||||
|
"executed": "Ausgeführt",
|
||||||
|
"exit": "Ausgang",
|
||||||
"firmware": "Firmware",
|
"firmware": "Firmware",
|
||||||
|
"firmware_dashboard": "Firmware-Dashboard",
|
||||||
|
"firmware_installed": "Firmware installiert",
|
||||||
|
"forgot_password": "Haben Sie Ihr Passwort vergessen?",
|
||||||
|
"forgot_password_title": "Passwort vergessen",
|
||||||
"from": "Von",
|
"from": "Von",
|
||||||
"id": "Ich würde",
|
"general_error": "API-Fehler, wenden Sie sich bitte an Ihren Administrator",
|
||||||
|
"go_back": "Geh zurück",
|
||||||
|
"hide": "verbergen",
|
||||||
|
"hour": "stunde",
|
||||||
|
"hours": "std",
|
||||||
|
"id": "ID",
|
||||||
|
"invalid_credentials": "Ungültiger Benutzername und / oder Passwort",
|
||||||
|
"invalid_date_explanation": "Ungültiges Datum, bitte verwenden Sie den Kalender, auf den Sie über die Schaltfläche rechts zugreifen können",
|
||||||
|
"invalid_file": "Die ausgewählte Datei war ungültig, bitte lesen Sie die Anweisungen und passen Sie Ihre Datei entsprechend an",
|
||||||
|
"invalid_password": "Dieses Passwort entspricht nicht den grundlegenden Passwortregeln. Bitte besuchen Sie unsere Seite Passwortrichtlinien, um mehr zu erfahren",
|
||||||
|
"invalid_pem": "Ihre PEM-Datei ist ungültig. Es sollte mit '-----BEGIN CERTIFICATE-----' ODER '-----BEGIN PRIVATE KEY-----' beginnen und mit '-----END CERTIFICATE--- enden. --' ODER '-----END PRIVATSCHLÜSSEL-----'",
|
||||||
"ip_address": "IP Adresse",
|
"ip_address": "IP Adresse",
|
||||||
"later_tonight": "Heute Abend später",
|
"ips": "IPs",
|
||||||
|
"item": "Artikel",
|
||||||
|
"items": "Artikel",
|
||||||
|
"items_per_page": "Objekte pro Seite:",
|
||||||
|
"key": "Schlüssel",
|
||||||
|
"last_dashboard_refresh": "Letzte Dashboard-Aktualisierung",
|
||||||
|
"later_tonight": "Später am Abend",
|
||||||
|
"latest": "Neueste",
|
||||||
|
"list": "Liste",
|
||||||
"loading_ellipsis": "Wird geladen...",
|
"loading_ellipsis": "Wird geladen...",
|
||||||
"loading_more_ellipsis": "Mehr laden ...",
|
"loading_more_ellipsis": "Mehr laden ...",
|
||||||
"logout": "Ausloggen",
|
"logout": "Ausloggen",
|
||||||
"mac": "MAC-Adresse",
|
"mac": "MAC-Adresse",
|
||||||
|
"main": "Main",
|
||||||
"manufacturer": "Hersteller",
|
"manufacturer": "Hersteller",
|
||||||
"na": "N / A",
|
"memory_used": "Verwendeter Speicher",
|
||||||
|
"min_max": "Min: {{min}}, Max: {{max}}",
|
||||||
|
"minute": "Minute",
|
||||||
|
"minutes": "protokoll",
|
||||||
|
"modified": "Geändert",
|
||||||
|
"na": "(unbekannt)",
|
||||||
"need_date": "Du brauchst ein Datum...",
|
"need_date": "Du brauchst ein Datum...",
|
||||||
|
"no": "Nein",
|
||||||
|
"no_addresses_found": "Keine Adressen gefunden",
|
||||||
|
"no_clients_found": "Keine Kunden gefunden",
|
||||||
|
"no_devices_found": "Keine Geräte gefunden",
|
||||||
|
"no_items": "Keine Gegenstände",
|
||||||
|
"none": "Keiner",
|
||||||
"not_connected": "Nicht verbunden",
|
"not_connected": "Nicht verbunden",
|
||||||
"off": "aus",
|
"of_connected": "% der verbundenen Geräte",
|
||||||
"on": "auf",
|
"off": "Aus",
|
||||||
|
"on": "An",
|
||||||
|
"optional": "Wahlweise",
|
||||||
|
"overall_health": "Allgemeine Gesundheit",
|
||||||
|
"password_policy": "Kennwortrichtlinie",
|
||||||
|
"preferences": "Einstellungen",
|
||||||
|
"preview": "Vorschau",
|
||||||
|
"program": "Programm",
|
||||||
|
"reason": "Grund",
|
||||||
"recorded": "Verzeichnet",
|
"recorded": "Verzeichnet",
|
||||||
"refresh": "Aktualisierung",
|
"refresh": "Aktualisierung",
|
||||||
"refresh_device": "Gerät aktualisieren",
|
"refresh_device": "Gerät aktualisieren",
|
||||||
|
"remove_claim": "Anspruch entfernen",
|
||||||
|
"required": "Erforderlich",
|
||||||
"result": "Ergebnis",
|
"result": "Ergebnis",
|
||||||
|
"save": "Sparen",
|
||||||
|
"saved": "Gerettet!",
|
||||||
|
"saving": "Speichern ...",
|
||||||
"schedule": "Zeitplan",
|
"schedule": "Zeitplan",
|
||||||
"serial_number": "Ordnungsnummer",
|
"search": "Geräte suchen",
|
||||||
|
"second": "zweite",
|
||||||
|
"seconds": "sekunden",
|
||||||
|
"seconds_elapsed": "Sekunden verstrichen",
|
||||||
|
"see_details": "Siehe Einzelheiten",
|
||||||
|
"select": "wählen",
|
||||||
|
"serial_num": "Seriennummer",
|
||||||
|
"serial_number": "Seriennummer",
|
||||||
|
"show_all": "Zeige alles",
|
||||||
|
"socket_connection_closed": "Verbindung geschlossen!",
|
||||||
"start": "Start",
|
"start": "Start",
|
||||||
"submit": "einreichen",
|
"status": "Status",
|
||||||
|
"stop_editing": "Stoppen Sie die Bearbeitung",
|
||||||
|
"submit": "Absenden",
|
||||||
"submitted": "Eingereicht",
|
"submitted": "Eingereicht",
|
||||||
"success": "Erfolg",
|
"success": "Erfolg",
|
||||||
|
"system": "System",
|
||||||
|
"table": "Tabelle",
|
||||||
|
"time_per_device": "Gerät/Sekunde",
|
||||||
|
"timestamp": "Zeit",
|
||||||
"to": "zu",
|
"to": "zu",
|
||||||
|
"type": "Art",
|
||||||
|
"type_for_options": "Geben Sie den Wert ein, den Sie erstellen müssen...",
|
||||||
|
"type_for_options_format": "Geben Sie einen Wert im gültigen Format ein ({{format}})...",
|
||||||
|
"unable_to_connect": "Keine Verbindung zum Gerät möglich",
|
||||||
|
"unable_to_delete": "Löschen nicht möglich",
|
||||||
"unknown": "unbekannte",
|
"unknown": "unbekannte",
|
||||||
|
"up_to_date": "Aktuelle Geräte",
|
||||||
|
"uptimes": "Betriebszeiten",
|
||||||
|
"use_file": "Datei verwenden",
|
||||||
"uuid": "UUID",
|
"uuid": "UUID",
|
||||||
"view_more": "Mehr sehen",
|
"vendors": "Anbieter",
|
||||||
|
"view_more": "Mehr anzeigen",
|
||||||
|
"visibility": "Sichtweite",
|
||||||
|
"waiting_for_update": "Warten auf Aktualisierung",
|
||||||
"yes": "Ja"
|
"yes": "Ja"
|
||||||
},
|
},
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
"add_configuration": "Konfiguration hinzufügen",
|
||||||
|
"add_new_block": "Neuen Konfigurationsblock hinzufügen",
|
||||||
|
"add_or_link": "Verlinken oder hinzufügen",
|
||||||
|
"add_radio": "Radio hinzufügen",
|
||||||
|
"ca_cert_explanation": "Bitte verwenden Sie eine .pem-Datei, die mit \"-----BEGIN CERTIFICATE-----\" beginnt und mit \"-----END CERTIFICATE-----\" endet. Das Ergebnis wird im Feld darunter angezeigt. Sie können das Zertifikat, das Sie verwenden möchten, auch direkt kopieren und einfügen.",
|
||||||
|
"cannot_delete": "Diese Konfiguration kann nicht gelöscht werden, da sie von mindestens einer Entität, einem Veranstaltungsort oder einem Gerät verwendet wird",
|
||||||
|
"choose_radio_band": "Welche Radioband möchten Sie gründen?",
|
||||||
|
"choose_section": "Welchen Abschnitt soll dieser Block enthalten?",
|
||||||
|
"configuration_browser": "Konfigurationsbrowser",
|
||||||
|
"configurations": "Konfigurationen",
|
||||||
|
"create": "Konfiguration erstellen",
|
||||||
|
"create_config": "Neue Konfiguration erstellen",
|
||||||
|
"create_new_configuration": "Neues Konfigurationselement erstellen",
|
||||||
"created": "Erstellt",
|
"created": "Erstellt",
|
||||||
|
"creation_success": "Konfiguration erfolgreich erstellt!",
|
||||||
|
"currently_associated": "Aktuell zugeordnete Konfiguration: {{config}}",
|
||||||
|
"currently_selected_config": "Derzeit ausgewählte Konfiguration: {{config}}",
|
||||||
|
"default_configs": "Standardkonfigurationen",
|
||||||
|
"default_configurations": "Standardkonfigurationen",
|
||||||
|
"delete_config": "Konfiguration löschen",
|
||||||
"details": "Gerätedetails",
|
"details": "Gerätedetails",
|
||||||
"device_password": "Passwort",
|
"device_password": "Passwort",
|
||||||
"last_configuration_change": "Letzte Konfigurationsänderung",
|
"device_type": "Gerätetyp",
|
||||||
|
"device_types": "Gerätetypen",
|
||||||
|
"devices_affected": "Von dieser Konfiguration betroffene Geräte:",
|
||||||
|
"edit_configuration": "Konfiguration bearbeiten",
|
||||||
|
"error_delete": "Fehler beim Versuch zu löschen: {{error}}",
|
||||||
|
"error_delete_blacklist": "Fehler beim Löschen aus der schwarzen Liste: {{error}}",
|
||||||
|
"error_fetching_config": "Fehler beim Abrufen der Konfiguration",
|
||||||
|
"error_trying_delete": "Fehler beim Versuch zu löschen: {{error}}",
|
||||||
|
"error_update": "Fehler: {{error}}",
|
||||||
|
"explanation": "Erläuterung",
|
||||||
|
"key_pem_explanation": "Bitte .pem-Datei auswählen",
|
||||||
|
"last_configuration_change": "Konfigurationsänderung",
|
||||||
"last_configuration_download": "Letzter Konfigurations-Download",
|
"last_configuration_download": "Letzter Konfigurations-Download",
|
||||||
"location": "Ort",
|
"location": "Ort",
|
||||||
|
"need_device_type": "Jede Konfiguration muss mindestens einen Gerätetyp unterstützen",
|
||||||
|
"no_associated_config": "Keine zugehörige Konfiguration",
|
||||||
|
"no_associated_configuration": "Keine zugeordneten Konfigurationen",
|
||||||
|
"note": "Hinweis",
|
||||||
"notes": "Anmerkungen",
|
"notes": "Anmerkungen",
|
||||||
"owner": "Inhaber",
|
"owner": "Inhaber",
|
||||||
|
"select_configuration": "Wählen Sie diese Konfiguration",
|
||||||
|
"success_block_delete": "Konfigurationsblock erfolgreich gelöscht",
|
||||||
|
"success_update": "Konfiguration erfolgreich aktualisiert!",
|
||||||
|
"successful_delete": "Konfiguration gelöscht!",
|
||||||
|
"support_all": "Alle unterstützen",
|
||||||
|
"supported_device_types": "Unterstützte Gerätetypen",
|
||||||
"title": "Gerätekonfiguration",
|
"title": "Gerätekonfiguration",
|
||||||
"type": "Gerätetyp",
|
"type": "Gerätetyp",
|
||||||
"view_json": "Rohes JSON anzeigen"
|
"used_by": "Benutzt von",
|
||||||
|
"used_by_details": "{{entities}} Entitäten, {{venues}} Veranstaltungsorte und {{devices}} Geräte",
|
||||||
|
"uuid": "Konfigurations-ID",
|
||||||
|
"view_affected_devices": "Betroffene Geräte anzeigen",
|
||||||
|
"view_config": "Konfiguration anzeigen",
|
||||||
|
"view_in_use": "In Verwendung anzeigen",
|
||||||
|
"view_json": "Rohe Konfiguration anzeigen"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"choose_file": "Sie müssen eine gültige .json-Datei auswählen:",
|
"choose_file": "Sie müssen eine gültige .json-Datei auswählen:",
|
||||||
"enter_new": "Geben Sie die JSON für die neue Gerätekonfiguration ein:",
|
"enter_new": "Geben Sie die JSON für die neue Gerätekonfiguration ein:",
|
||||||
"placeholder": "JSON konfigurieren",
|
"placeholder": "Konfiguration",
|
||||||
"title": "Gerät konfigurieren",
|
"title": "Gerät konfigurieren",
|
||||||
"valid_json": "Sie müssen gültiges JSON eingeben"
|
"valid_json": "Sie müssen ein gültiges JSON eingeben"
|
||||||
|
},
|
||||||
|
"connect": {
|
||||||
|
"error_trying_to_connect": "Fehler beim Versuch, eine Verbindung zum Gerät herzustellen: {{error}}"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"access_pin": "Zugangs-PIN",
|
||||||
|
"add_contact": "Kontakt hinzufügen",
|
||||||
|
"contact": "Kontakt",
|
||||||
|
"create_contact": "Kontakt erstellen",
|
||||||
|
"currently_selected_contact": "Aktuell ausgewählter Kontakt: {{contact}}",
|
||||||
|
"delete": "Kontakt löschen?",
|
||||||
|
"error_assign": "Fehler beim Versuch, Kontakt zuzuweisen: {{error}}",
|
||||||
|
"error_creation": "Fehler beim Versuch, einen Kontakt zu erstellen: {{error}}",
|
||||||
|
"error_delete": "Fehler beim Versuch, den Kontakt zu löschen: {{error}}",
|
||||||
|
"error_fetching_list": "Fehler beim Abrufen der Kontakte",
|
||||||
|
"error_fetching_single": "Fehler beim Abrufen des Kontakts: {{error}}",
|
||||||
|
"error_unassign": "Fehler beim Versuch, die Zuweisung des Kontakts aufzuheben: {{error}}",
|
||||||
|
"first_name": "Vorname",
|
||||||
|
"identifier": "Identifikator",
|
||||||
|
"initials": "Initialen",
|
||||||
|
"last_name": "Nachname",
|
||||||
|
"no_associated_contact": "Kein zugehöriger Kontakt",
|
||||||
|
"primary_email": "Erste Email",
|
||||||
|
"salutation": "Anrede",
|
||||||
|
"secondary_email": "Alternative Email",
|
||||||
|
"successful_assign": "Kontakt erfolgreich zugewiesen!",
|
||||||
|
"successful_creation": "Kontakt Erstellt!",
|
||||||
|
"successful_delete": "Kontakt erfolgreich gelöscht!",
|
||||||
|
"successful_unassign": "Erfolgreich nicht zugewiesener Kontakt",
|
||||||
|
"successful_update": "Kontakt erfolgreich aktualisiert",
|
||||||
|
"title": "Kontakte",
|
||||||
|
"type": "Art",
|
||||||
|
"update_error": "Fehler beim Aktualisieren des Kontakts: {{error}}",
|
||||||
|
"user_title": "Titel",
|
||||||
|
"visual": "Korrespondenzname"
|
||||||
},
|
},
|
||||||
"delete_command": {
|
"delete_command": {
|
||||||
"explanation": "Möchten Sie diesen Befehl wirklich löschen? Diese Aktion ist nicht umkehrbar.",
|
"explanation": "Möchten Sie diesen Befehl wirklich löschen? Diese Aktion ist nicht umkehrbar.",
|
||||||
"title": "Befehl löschen"
|
"title": "Befehl löschen"
|
||||||
},
|
},
|
||||||
|
"delete_logs": {
|
||||||
|
"date": "Wählen Sie das Datum des ältesten Protokolls aus, das Sie behalten möchten",
|
||||||
|
"device_logs_title": "Geräteprotokolle löschen",
|
||||||
|
"explanation": "Dadurch werden alle {{object}} vor dem von Ihnen gewählten Datum gelöscht. Seien Sie vorsichtig, diese Aktion ist nicht umkehrbar.",
|
||||||
|
"healthchecks_title": "Healthchecks löschen"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"add_to_blacklist": "Gerät zur Blacklist hinzufügen",
|
||||||
|
"all_devices": "Alle Geräte",
|
||||||
|
"already_running_command": "Gerät führt bereits einen Befehl aus, bitte versuchen Sie es später erneut",
|
||||||
|
"blacklisted_on": "Datum",
|
||||||
|
"capabilities": "Fähigkeiten",
|
||||||
|
"certificate_explanation": "Zertifikate der angeschlossenen Geräte",
|
||||||
|
"count_explanation": "Geräte, die auf diese Gateway-Instanz verweisen",
|
||||||
|
"edit_blacklist": "Gerät auf der schwarzen Liste bearbeiten",
|
||||||
|
"error_adding_blacklist": "Fehler beim Hinzufügen des Geräts zur Blacklist: {{error}}",
|
||||||
|
"error_edit_blacklist": "Fehler beim Bearbeiten der schwarzen Liste: {{error}}",
|
||||||
|
"error_fetching_device": "Fehler beim Abrufen der Geräteinformationen: {{error}}",
|
||||||
|
"error_fetching_devices": "Fehler beim Abrufen von Geräten: {{error}}",
|
||||||
|
"firmware_count_explanation": "Dies ist die Gesamtzahl der Geräte, die diesem Firmware-Server hinzugefügt wurden, einschließlich der Geräte, die derzeit nicht auf den zugehörigen Gateway-Server verweisen.",
|
||||||
|
"health_explanation": "Zustand der verbundenen Geräte ((Geräte = 100 % * 100 + Geräte > 90 % * 95 + Geräte > 60 % * 75 + Geräte < 60 % * 35) / Verbundene Geräte)",
|
||||||
|
"mac_not_found": "Seriennummer nicht gefunden, Sie werden zur Seite „Geräte“ weitergeleitet",
|
||||||
|
"memory_explanation": "Anzahl verbundener Geräte mit entsprechendem belegtem Speicher %",
|
||||||
|
"remove_from_blacklist": "Von der schwarzen Liste entfernen",
|
||||||
|
"success_added_blacklist": "Gerät erfolgreich zur Blacklist hinzugefügt!",
|
||||||
|
"success_edit_blacklist": "Blacklist erfolgreich bearbeitet!",
|
||||||
|
"success_removed_blacklist": "Gerät erfolgreich von Blacklist entfernt!",
|
||||||
|
"uptimes_explanation": "Anzahl der verbundenen Geräte basierend auf ihrer Betriebszeit"
|
||||||
|
},
|
||||||
"device_logs": {
|
"device_logs": {
|
||||||
"log": "Log",
|
"log": "Protokoll",
|
||||||
"severity": "Schwere",
|
"severity": "Wichtigkeit",
|
||||||
"title": "Geräteprotokolle"
|
"title": "Geräteprotokolle"
|
||||||
},
|
},
|
||||||
|
"entity": {
|
||||||
|
"add_child": "Untergeordnete Entität zu {{entityName}}hinzufügen",
|
||||||
|
"add_failure": "Fehler, der Server hat zurückgegeben: {{error}}",
|
||||||
|
"add_ips": "IPs verwalten",
|
||||||
|
"add_root": "Root-Entität hinzufügen",
|
||||||
|
"add_success": "Entität erfolgreich erstellt!",
|
||||||
|
"assigned_inventory": "Zugewiesenes Inventar",
|
||||||
|
"cannot_delete": "Entitäten mit untergeordneten Elementen können nicht gelöscht werden. Löschen Sie die untergeordneten Elemente dieser Entität, um sie löschen zu können.",
|
||||||
|
"confirm_map_delete": "Möchten Sie die Karte {{name}}wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden",
|
||||||
|
"currently_selected_entity": "Derzeit ausgewähltes Unternehmen: {{config}}",
|
||||||
|
"currently_selected_venue": "Aktuell ausgewählter Veranstaltungsort: {{config}}",
|
||||||
|
"delete_success": "Entität erfolgreich gelöscht",
|
||||||
|
"delete_warning": "Achtung: Dieser Vorgang kann nicht rückgängig gemacht werden",
|
||||||
|
"duplicate_from_node": "Mit einem bestimmten Root-Knoten duplizieren",
|
||||||
|
"duplicate_map": "Karte duplizieren",
|
||||||
|
"duplicate_with_node": "Dupliziere {{mapName}} mit {{rootName}} als Root-Knoten",
|
||||||
|
"edit_failure": "Aktualisierung fehlgeschlagen : {{error}}",
|
||||||
|
"enter_here": "Geben Sie hier die IP(s) ein, die Sie hinzufügen möchten",
|
||||||
|
"entire_tree": "Netzwerkkarte",
|
||||||
|
"entities": "Entitäten",
|
||||||
|
"entity": "Entität",
|
||||||
|
"error_deleting_map": "Fehler beim Löschen der Karte: {{error}}",
|
||||||
|
"error_fetch_entity": "Fehler beim Abrufen von Entitätsinformationen",
|
||||||
|
"error_fetching": "Fehler beim Abrufen von Entitäten",
|
||||||
|
"error_fetching_map": "Fehler beim Abrufen der Karte: {{error}}",
|
||||||
|
"error_fetching_tree": "Fehler beim Abrufen des Baums: {{error}}",
|
||||||
|
"error_saving": "Fehler beim Speichern der Entität",
|
||||||
|
"error_saving_map": "Fehler beim Speichern der Karte: {{error}}",
|
||||||
|
"higher_priority": "Stellen Sie eine höhere Priorität ein",
|
||||||
|
"ip_detection": "IP-Erkennung",
|
||||||
|
"ip_formats": "Sie können IPv4- oder IPv6-Adressen in den folgenden Formaten hinzufügen:",
|
||||||
|
"lower_priority": "Niedrigere Priorität setzen",
|
||||||
|
"map": "Karte",
|
||||||
|
"map_delete_success": "Karte erfolgreich gelöscht!",
|
||||||
|
"need_select_entity": "sSie müssen eine Entität aus der folgenden Tabelle auswählen",
|
||||||
|
"no_ips": "Keine IPs ausgewählt",
|
||||||
|
"not_assigned": "Nicht zugeordnet",
|
||||||
|
"only_unassigned": "Nur nicht zugewiesen",
|
||||||
|
"select_entity": "Wählen Sie diese Entität aus",
|
||||||
|
"selected_entity": "Ausgewählte Einheit",
|
||||||
|
"selected_map": "Ausgewählte Karte",
|
||||||
|
"tree_saved": "Karte erfolgreich gespeichert!",
|
||||||
|
"update_failure_error": "Fehler beim Versuch, die Entität zu aktualisieren: {{error}}",
|
||||||
|
"valid_serial": "Muss eine gültige Seriennummer sein (12 HEX-Zeichen)",
|
||||||
|
"venues": "Veranstaltungsorte"
|
||||||
|
},
|
||||||
"factory_reset": {
|
"factory_reset": {
|
||||||
"redirector": "Weiterleitung beibehalten:",
|
"redirector": "Gatewaykonfiguration beibehalten:",
|
||||||
|
"reset": "Zurücksetzen",
|
||||||
|
"resetting": "Zurücksetzen...",
|
||||||
"title": "Gerät auf Werkseinstellungen zurücksetzen",
|
"title": "Gerät auf Werkseinstellungen zurücksetzen",
|
||||||
"warning": "Achtung: Nach dem Absenden kann dies nicht rückgängig gemacht werden"
|
"warning": "Achtung: Nach dem Absenden kann dies nicht rückgängig gemacht werden"
|
||||||
},
|
},
|
||||||
|
"firmware": {
|
||||||
|
"age_explanation": "Durchschnittliche Anzahl der Tage für alle Geräte, von denen wir diesen Wert erhalten können",
|
||||||
|
"average_age": "Durchschnittliches Firmware-Alter",
|
||||||
|
"choose_custom": "Wählen",
|
||||||
|
"details_title": "Bild #{{image}} Details",
|
||||||
|
"device_type": "Gerätetyp",
|
||||||
|
"device_types": "Gerätetypen",
|
||||||
|
"downloads": "Downloads",
|
||||||
|
"error_fetching_latest": "Fehler beim Abrufen der neuesten Firmware",
|
||||||
|
"from_release": "Von",
|
||||||
|
"history_title": "Geschichte",
|
||||||
|
"image": "Bild",
|
||||||
|
"image_date": "Bilddatum",
|
||||||
|
"installed_firmware": "Installierte Firmware",
|
||||||
|
"latest_explanation": "Geräte, auf denen erkannte Firmware in der neuesten Version ausgeführt wird",
|
||||||
|
"latest_version_installed": "Neueste Version installiert Version",
|
||||||
|
"newer_firmware_available": "Neuere Versionen verfügbar",
|
||||||
|
"reinstall_latest": "Neu installieren",
|
||||||
|
"release": "Veröffentlichung",
|
||||||
|
"revision": "Revision",
|
||||||
|
"show_dev": "Dev-Releases anzeigen",
|
||||||
|
"size": "Größe",
|
||||||
|
"status": "Firmware-Status",
|
||||||
|
"title": "Firmware",
|
||||||
|
"to_release": "Zu",
|
||||||
|
"unknown_firmware_status": "Unbekannter Firmware-Status",
|
||||||
|
"upgrade": "Aktualisierung",
|
||||||
|
"upgrade_command_submitted": "Aktualisierung läuft...",
|
||||||
|
"upgrade_to_latest": "Neueste",
|
||||||
|
"upgrade_to_version": "Upgrade auf diese Revision",
|
||||||
|
"upgrading": "Upgrade durchführen..."
|
||||||
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"coreui_for_react": "CoreUI für React",
|
"coreui_for_react": "CoreUI für React",
|
||||||
"powered_by": "Unterstützt von",
|
"powered_by": "Unterstützt von",
|
||||||
"version": "Ausführung"
|
"version": "Version"
|
||||||
},
|
},
|
||||||
"health": {
|
"health": {
|
||||||
"sanity": "Gesundheit",
|
"sanity": "Gesundheitzustand",
|
||||||
"title": "Gerätezustand"
|
"title": "Gesundheitzustand"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"add_child": "Untergeordneten Veranstaltungsort hinzufügen",
|
||||||
|
"add_child_venue": "Untergeordneten Veranstaltungsort zu {{entityName}}hinzufügen",
|
||||||
|
"add_tag": "Tag erstellen",
|
||||||
|
"add_tag_to": "Neues Gerät zu {{name}}hinzufügen",
|
||||||
|
"add_venue": "Veranstaltungsort hinzufügen",
|
||||||
|
"assign_ent_ven": "Zu Entität oder Veranstaltungsort zuweisen",
|
||||||
|
"assign_entity_instructions": "Sie können die Entität, der dieses Tag zugewiesen werden soll, entweder über das Menü unten finden oder die UUID der Entität manuell in das Feld oben einfügen.",
|
||||||
|
"assign_error": "Fehler beim Versuch, Tag zuzuweisen",
|
||||||
|
"assign_to_entity": "Zu Entität zuweisen",
|
||||||
|
"bulk_delete_assigned": "Möchten Sie zugewiesene Geräte in Ihrer Datei massenweise löschen?",
|
||||||
|
"bulk_delete_assigned_warning": "Achtung: Diese Aktion ist nicht umkehrbar",
|
||||||
|
"bulk_delete_devices": "Massenlöschgeräte",
|
||||||
|
"bulk_delete_devices_not_found": "{{number}} Geräte nicht gefunden",
|
||||||
|
"bulk_delete_explanation": "Verwenden Sie zum Massenlöschen von Geräten eine CSV-Datei mit einer Spalte namens SerialNumber",
|
||||||
|
"bulk_delete_test": "Datei validieren",
|
||||||
|
"close_entity_menu": "Menü \"Entität bearbeiten\" schließen",
|
||||||
|
"delete_devices": "Geräte löschen",
|
||||||
|
"delete_errors": "{{number}} Gerätefehler löschen",
|
||||||
|
"delete_tag": "Tag löschen",
|
||||||
|
"delete_venue": "Veranstaltungsort endgültig löschen",
|
||||||
|
"deleted_devices": "{{number}} Gelöschte Geräte",
|
||||||
|
"deleting": "Löschen ...",
|
||||||
|
"deletion_failure": "Löschfehler",
|
||||||
|
"devices_assigned": "{{number}} vorhandene Geräte zugewiesen und aktualisiert",
|
||||||
|
"devices_created": "{{number}} Geräte erstellt",
|
||||||
|
"devices_deleted": "Geräte gelöscht",
|
||||||
|
"devices_errors_while_creating": "{{number}} Geräteerstellung fehlgeschlagen",
|
||||||
|
"devices_errors_while_updating": "{{number}} Geräteupdates fehlgeschlagen",
|
||||||
|
"devices_found_assigned": "{{number}} Geräte gefunden und bereits einer Entität oder einem Veranstaltungsort zugewiesen",
|
||||||
|
"devices_found_unassigned": "{{number}} Geräte gefunden, aber nicht zugewiesen",
|
||||||
|
"devices_imported": " Importierte Geräte",
|
||||||
|
"devices_not_found": "{{number}} Geräte ohne Konflikt",
|
||||||
|
"devices_tested": "Getestete Geräte",
|
||||||
|
"duplicate_serial": "Seriennummer bereits in Datei verwendet (Duplikat)",
|
||||||
|
"error_create_venue": "Fehler beim Erstellen des Veranstaltungsortes",
|
||||||
|
"error_delete_tag": "Fehler beim Löschen des Inventar-Tags",
|
||||||
|
"error_get_venue": "Fehler beim Abrufen von Veranstaltungsorten",
|
||||||
|
"error_pushing_config": "Fehler beim Versuch, die Konfiguration auf das Gerät zu übertragen: {{error}}",
|
||||||
|
"error_retrieving": "Beim Abrufen von Inventar-Tags ist ein Fehler aufgetreten",
|
||||||
|
"error_unassign": "Fehler beim Aufheben der Zuweisung",
|
||||||
|
"error_update_venue": "Fehler beim Aktualisieren des Veranstaltungsorts",
|
||||||
|
"error_venue_delete": "Fehler beim Löschen des Veranstaltungsortes",
|
||||||
|
"error_within_file": "{{number}} Geräte mit falschen Informationen in der Datei (werden ignoriert)",
|
||||||
|
"file_error": "Es scheint ein Fehler in Ihrer Datei zu sein. Bitte stellen Sie sicher, dass die Datei im CSV-Format vorliegt und die oben genannten 5 Spalten in der ersten Zeile der Datei enthält",
|
||||||
|
"final_delete_results": "Endgültige Löschergebnisse",
|
||||||
|
"final_import_results": "Endgültige Importergebnisse",
|
||||||
|
"import_assigned_devices": "Möchten Sie sie mit diesem Import neu zuweisen?",
|
||||||
|
"import_assigned_devices_explanation": "Einige Geräte haben Konflikte mit bereits zugewiesenen Geräten. Sie sollten diese Probleme vor dem Importieren beheben.",
|
||||||
|
"import_devices": "Geräte importieren",
|
||||||
|
"import_devices_explanation": "Für den Massenimport von Geräten müssen Sie eine CSV-Datei mit den folgenden Spalten verwenden: SerialNumber,Name,Description,DeviceType,NoteText",
|
||||||
|
"import_devices_to": "Geräte nach {{name}}importieren",
|
||||||
|
"import_existing_devices": "Aktualisieren und zuweisen?",
|
||||||
|
"import_existing_devices_explanation": "Einige Geräte sind bereits im Inventar vorhanden und nicht zugewiesen.",
|
||||||
|
"importing": "Importieren ...",
|
||||||
|
"last_modification": "Letzte Änderung",
|
||||||
|
"no_devices_to_delete": "Keine Geräte zum Löschen",
|
||||||
|
"no_devices_to_import": "Keine gültigen Geräte zum Erstellen oder Aktualisieren!",
|
||||||
|
"note_text": "Text notieren",
|
||||||
|
"passed_tests": "Alle Tests wurden bestanden, Ihre Geräte sind bereit für den Import!",
|
||||||
|
"serial_number_required": "Fehler: Seriennummer fehlt",
|
||||||
|
"showing_top_10": "Hier ist eine Vorschau der Informationen, die wir aus Ihrer Datei abgerufen haben:",
|
||||||
|
"sub_venues": "Unterräume",
|
||||||
|
"subscriber": "Teilnehmer",
|
||||||
|
"successful_assign": "Tag erfolgreich zugewiesen",
|
||||||
|
"successful_tag_delete": "Inventar-Tag erfolgreich gelöscht",
|
||||||
|
"successful_tag_update": "Tag erfolgreich aktualisiert",
|
||||||
|
"successful_unassign": "Vorgang zum Aufheben der Zuweisung war erfolgreich",
|
||||||
|
"successful_venue_create": "Erfolgreich erstellter Veranstaltungsort",
|
||||||
|
"successful_venue_delete": "Veranstaltungsort erfolgreich gelöscht",
|
||||||
|
"successful_venue_update": "Erfolgreich aktualisierter Veranstaltungsort",
|
||||||
|
"tag_created": "Inventar-Tag erfolgreich erstellt",
|
||||||
|
"tag_creation_error": "Fehler beim Versuch, Inventar-Tag zu erstellen",
|
||||||
|
"tag_update_error": "Fehler beim Aktualisieren des Tags",
|
||||||
|
"tags_assigned_to": "Inventar-Tags {{name}}zugewiesen",
|
||||||
|
"test_import": "Importdaten validieren",
|
||||||
|
"test_results": "Testergebnisse",
|
||||||
|
"title": "Inventar",
|
||||||
|
"type_invalid": "Fehler: Ungültiger Gerätetyp",
|
||||||
|
"unassign": "Zuordnung aufheben",
|
||||||
|
"unassign_tag": "Tag von Entität zuweisen",
|
||||||
|
"unassigned_deleted_devices": "{{number}} Geräte gelöscht und nicht zugewiesen",
|
||||||
|
"unassigned_tags": "Nicht zugewiesene Tags",
|
||||||
|
"validating_import_file": "Importdatei und -daten werden validiert...",
|
||||||
|
"venue": "Tagungsort",
|
||||||
|
"view_in_gateway": "Im Gateway anzeigen"
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"add": "Ort hinzufügen",
|
||||||
|
"building_name": "Gebäudename",
|
||||||
|
"city": "Stadt",
|
||||||
|
"country": "Land",
|
||||||
|
"create": "Standort erstellen",
|
||||||
|
"currently_selected": "Aktuell ausgewählter Standort: {{location}}",
|
||||||
|
"delete": "Ort löschen?",
|
||||||
|
"error_assign": "Fehler beim Versuch, den Standort zuzuweisen: {{error}}",
|
||||||
|
"error_creation": "Fehler beim Versuch, Standorte zu erstellen: {{error}}",
|
||||||
|
"error_delete": "Fehler beim Löschen des Standorts: {{error}}",
|
||||||
|
"error_fetching_single": "Fehler beim Versuch, den Standort abzurufen: {{error}}",
|
||||||
|
"geocode": "GeoCode",
|
||||||
|
"mobiles": "MOBILES",
|
||||||
|
"no_associated": "Kein zugeordneter Standort",
|
||||||
|
"phones": "Telefone",
|
||||||
|
"postal": "Postleitzahl",
|
||||||
|
"search": "Suchen Sie nach Standorten, um die Felder unten automatisch auszufüllen",
|
||||||
|
"state": "Zustand",
|
||||||
|
"street_address": "Adresse",
|
||||||
|
"successful_creation": "Standort erfolgreich erstellt!",
|
||||||
|
"successful_delete": "Standort erfolgreich gelöscht!",
|
||||||
|
"successful_update": "Standort erfolgreich aktualisiert!",
|
||||||
|
"successfully_assigned": "Standort erfolgreich zugewiesen!",
|
||||||
|
"title": "Standorte",
|
||||||
|
"update_error": "Fehler beim Aktualisieren des Standorts: {{error}}"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
|
"account_verification": "Bestätigung des Kontos",
|
||||||
|
"authentication_expired": "Authentifizierung abgelaufen, bitte starten Sie den Anmeldevorgang erneut",
|
||||||
|
"change_password": "Ändere das Passwort",
|
||||||
|
"change_password_error": "Fehler beim Ändern des Passworts. Stellen Sie sicher, dass das neue Passwort gültig ist, indem Sie die Seite \"Passwortrichtlinie\" besuchen",
|
||||||
|
"change_password_instructions": "Geben Sie Ihr neues Passwort ein und bestätigen Sie es",
|
||||||
|
"changing_password": "Passwort ändern...",
|
||||||
|
"confirm_new_password": "Bestätige neues Passwort",
|
||||||
|
"different_passwords": "Sie müssen das gleiche Passwort zweimal eingeben",
|
||||||
|
"email_code_validation": "Bitte überprüfen Sie Ihr E-Mail-Postfach und geben Sie den Bestätigungscode, den wir Ihnen gerade gesendet haben, in das Feld unten ein",
|
||||||
|
"forgot_password_error": "Fehler beim Versuch, eine E-Mail mit vergessenem Passwort zu senden. Stellen Sie sicher, dass diese Benutzer-ID mit einem Konto verknüpft ist.",
|
||||||
|
"forgot_password_explanation": "Geben Sie Ihren Benutzernamen ein, um eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts zu erhalten",
|
||||||
|
"forgot_password_success": "Sie sollten in Kürze eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts erhalten. Bitte überprüfen Sie Ihren Spam, wenn Sie die E-Mail nicht finden können",
|
||||||
|
"logging_in": "Einloggen...",
|
||||||
"login": "Anmeldung",
|
"login": "Anmeldung",
|
||||||
"login_error": "Anmeldefehler, bestätigen Sie, dass Ihr Benutzername, Ihr Passwort und Ihre Gateway-URL gültig sind",
|
"login_error": "Anmeldefehler, stellen Sie sicher, dass die von Ihnen angegebenen Informationen gültig sind",
|
||||||
|
"new_password": "Neues Kennwort",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
"please_enter_gateway": "Bitte geben Sie eine Gateway-URL ein",
|
"phone_validation_explanation": "Bitte überprüfen Sie Ihr Mobilgerät und geben Sie den Bestätigungscode, den wir Ihnen gerade gesendet haben, in das Feld unten ein",
|
||||||
|
"please_enter_gateway": "Bitte geben Sie eine uCentralSec-URL ein",
|
||||||
"please_enter_password": "Bitte geben Sie Ihr Passwort ein",
|
"please_enter_password": "Bitte geben Sie Ihr Passwort ein",
|
||||||
"please_enter_username": "Bitte geben Sie Ihren Benutzernamen ein",
|
"please_enter_username": "Bitte geben Sie Ihren Benutzernamen ein",
|
||||||
|
"previously_used": "Passwort wurde zuvor verwendet",
|
||||||
|
"send_forgot": "E-Mail senden",
|
||||||
|
"sending_ellipsis": "Senden…",
|
||||||
"sign_in_to_account": "Melden Sie sich bei Ihrem Konto an",
|
"sign_in_to_account": "Melden Sie sich bei Ihrem Konto an",
|
||||||
"username": "Nutzername"
|
"url": "uCentralSec-URL",
|
||||||
|
"username": "Benutzername",
|
||||||
|
"verification_code": "Geben Sie hier Ihre Bestätigung ein",
|
||||||
|
"wrong_code": "Der eingegebene Bestätigungscode ist ungültig."
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"provisioning": "Bereitstellung"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"directions": "Wann möchten Sie dieses Gerät neu starten?",
|
"directions": "Wann möchten Sie dieses Gerät neu starten?",
|
||||||
|
"now": "Möchten Sie dieses Gerät jetzt neu starten?",
|
||||||
"title": "Gerät neustarten"
|
"title": "Gerät neustarten"
|
||||||
},
|
},
|
||||||
"scan": {
|
"scan": {
|
||||||
"active": "Aktiven Scan aktivieren",
|
"active": "Aktiven Scan aktivieren",
|
||||||
"channel": "Kanal",
|
"channel": "Kanal",
|
||||||
"directions": "Starten Sie einen WLAN-Scan dieses Geräts, der ungefähr 25 Sekunden dauern sollte.",
|
"directions": "Starten Sie einen WiFi-Scan dieses Geräts, der ungefähr 25 Sekunden dauern sollte.",
|
||||||
"results": "Ergebnisse des WLAN-Scans"
|
"re_scan": "Erneut scannen",
|
||||||
|
"result_directions": "Sie können oben rechts auf die Schaltfläche „Scannen“ klicken, um $t(scan.re_scan)",
|
||||||
|
"results": "Ergebnisse des WiFi-Scans",
|
||||||
|
"scan": "Scan",
|
||||||
|
"scanning": "Scannen... ",
|
||||||
|
"waiting_directions": "Bitte warten Sie auf das Scanergebnis. Dies kann bis zu 25 Sekunden dauern. Sie können den Vorgang später beenden und die Ergebnisse aus der Befehlstabelle anzeigen."
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "die Einstellungen"
|
||||||
|
},
|
||||||
|
"simulation": {
|
||||||
|
"add": "Simulation hinzufügen",
|
||||||
|
"cancel": "Stornieren",
|
||||||
|
"cancel_success": "Simulationslauf erfolgreich abgebrochen!",
|
||||||
|
"check_ongoing_sims": "Folge laufender Sim",
|
||||||
|
"client_interval": "Kundenintervall",
|
||||||
|
"delete_simulation": "Sim löschen. {{name}}",
|
||||||
|
"end": "Endete",
|
||||||
|
"error_creating": "Fehler beim Erstellen der Simulation: {{error}}",
|
||||||
|
"error_delete": "Fehler beim Löschen der Simulation: {{error}}",
|
||||||
|
"error_devices": "Fehler Geräte",
|
||||||
|
"error_edit": "Fehler beim Versuch, die Simulation zu speichern: {{error}}",
|
||||||
|
"error_edit_run": "Fehler beim Versuch, den Ausführungsstatus zu ändern: {{error}}",
|
||||||
|
"error_fetching_simulations": "Fehler beim Abrufen der Simulationen: {{error}}",
|
||||||
|
"error_start_run": "Fehler beim Versuch, einen Simulationslauf zu starten: {{error}}",
|
||||||
|
"gateway": "Tor",
|
||||||
|
"healtcheck_interval": "Healthcheck-Intervall",
|
||||||
|
"keep_alive": "Bleib am Leben",
|
||||||
|
"last_refresh": "Letzte Aktualisierung",
|
||||||
|
"length": "Länge",
|
||||||
|
"live_devices": "Live-Geräte",
|
||||||
|
"mac_prefix": "MAC-Präfix",
|
||||||
|
"max_associations": "max. Verbände",
|
||||||
|
"max_clients": "Max. Kunden",
|
||||||
|
"messages_transmitted": "Nachricht TX",
|
||||||
|
"min_associations": "Mindest. Verbände",
|
||||||
|
"min_clients": "Mindest. Kunden",
|
||||||
|
"pause": "Pause",
|
||||||
|
"pause_success": "Lauf pausiert!",
|
||||||
|
"prefix_length": "Erforderlich, muss eine Länge von 6 Zeichen haben",
|
||||||
|
"previous_runs": "Vorherige Läufe",
|
||||||
|
"received": "empfangen",
|
||||||
|
"received_messages": "Nachricht RX",
|
||||||
|
"reconnect_interval": "Wiederverbindungsintervall",
|
||||||
|
"resume": "Fortsetzen",
|
||||||
|
"resume_success": "Lauf wieder aufgenommen!",
|
||||||
|
"run": "Simulationslauf",
|
||||||
|
"run_simulation": "Simulation ausführen",
|
||||||
|
"started": "gestartet",
|
||||||
|
"state_interval": "Zustandsintervall",
|
||||||
|
"stop": "Halt",
|
||||||
|
"stop_success": "Lauf gestoppt!",
|
||||||
|
"success_creating": "Simulation erfolgreich erstellt!",
|
||||||
|
"success_run_start": "Erfolgreich gestarteter Lauf!",
|
||||||
|
"successful_delete": "Simulation erfolgreich gelöscht!",
|
||||||
|
"successful_edit": "Erfolgreich bearbeitete Simulation!",
|
||||||
|
"threads": "Themen",
|
||||||
|
"time_full_devices": "Zeit für volle Geräte",
|
||||||
|
"title": "Simulationen",
|
||||||
|
"transmitted": "Übertragen",
|
||||||
|
"valid_cert": "Gültiges Zertifikat",
|
||||||
|
"valid_key": "Gültiger Schlüssel"
|
||||||
},
|
},
|
||||||
"statistics": {
|
"statistics": {
|
||||||
"data": "Daten (KB)",
|
"data": "Daten (KB)",
|
||||||
"title": "Statistiken"
|
"data_mb": "Daten (MB)",
|
||||||
|
"latest_statistics": "Neueste Statistiken",
|
||||||
|
"lifetime_stats": "Lifetime-Statistik",
|
||||||
|
"memory": "Erinnerung",
|
||||||
|
"no_interfaces": "Keine Statistiken zur Schnittstellenlebensdauer verfügbar",
|
||||||
|
"show_latest": "Letzte Statistik",
|
||||||
|
"title": "Statistiken",
|
||||||
|
"used": "Verwendeter Speicher %"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"connection_status": "Status",
|
||||||
|
"error": "Statusdaten sind nicht verfügbar",
|
||||||
|
"last_contact": "Letzter Kontakt",
|
||||||
|
"load_averages": "Belastung (1/5/15 m.)",
|
||||||
|
"localtime": "Ortszeit",
|
||||||
|
"memory": "Verwendeter Speicher",
|
||||||
|
"percentage_free": "{{percentage}}% von {{total}} kostenlos",
|
||||||
|
"percentage_used": "{{percentage}}% von {{total}} verwendet",
|
||||||
|
"title": "#{{serialNumber}} Status",
|
||||||
|
"total_memory": "Gesamtspeicher",
|
||||||
|
"uptime": "Betriebszeit",
|
||||||
|
"used_total_memory": "{{used}} verwendet / {{total}} insgesamt"
|
||||||
|
},
|
||||||
|
"subscriber": {
|
||||||
|
"add_device_subscriber_explanation": "Um andere Geräte zu reklamieren, kannst du unsere Suchleiste verwenden oder direkt aus der Tabelle reklamieren. Wenn ein Gerät bereits von einem Benutzer beansprucht wurde, müssen Sie zu dessen Details gehen und die Zuweisung aufheben, bevor Sie es beanspruchen.",
|
||||||
|
"create": "Abonnenten erstellen",
|
||||||
|
"devices_one": "{{count}} Gerät",
|
||||||
|
"devices_other": "{{count}} Geräte",
|
||||||
|
"edit": "Abonnent bearbeiten",
|
||||||
|
"error_create": "Fehler beim Erstellen des Abonnenten: {{error}}",
|
||||||
|
"error_delete": "Fehler beim Löschen des Abonnenten: {{error}}",
|
||||||
|
"error_fetching": "Fehler beim Abrufen von Abonnenten: {{error}}",
|
||||||
|
"error_fetching_single": "Fehler beim Abrufen des Abonnenten: {{error}}",
|
||||||
|
"error_update": "Fehler beim Aktualisieren des Abonnenten: {{error}}",
|
||||||
|
"is_already_claimed": "wird bereits beansprucht von",
|
||||||
|
"subscribers": "Abonnenten",
|
||||||
|
"success_create": "Abonnent erfolgreich erstellt!",
|
||||||
|
"success_delete": "Abonnent erfolgreich gelöscht!",
|
||||||
|
"success_update": "Abonnent erfolgreich aktualisiert!"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"error_fetching": "Fehler beim Abrufen von Systeminformationen",
|
||||||
|
"error_reloading": "Fehler beim Neuladen: {{error}}",
|
||||||
|
"hostname": "Hostname",
|
||||||
|
"os": "Betriebssystem",
|
||||||
|
"processors": "Prozessoren",
|
||||||
|
"reload": "Neu laden",
|
||||||
|
"reload_subsystems": "Subsysteme",
|
||||||
|
"subsystems": "Subsysteme",
|
||||||
|
"success_reload": "Reload-Befehl erfolgreich gesendet!"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"connection_failed": "Verbindung konnte nicht hergestellt werden. Fehler: {{error}}",
|
||||||
|
"interval": "Intervall",
|
||||||
|
"last_update": "Letztes Update",
|
||||||
|
"lifetime": "Dauer",
|
||||||
|
"outputmode": "Ausgabemodus",
|
||||||
|
"types": "Typen"
|
||||||
},
|
},
|
||||||
"trace": {
|
"trace": {
|
||||||
"choose_network": "Netzwerk auswählen",
|
"choose_network": "Netzwerk auswählen",
|
||||||
"directions": "Starten Sie eine Fernverfolgung dieses Geräts für eine bestimmte Dauer oder eine Anzahl von Paketen",
|
"directions": "Starten Sie eine Tcpdump auf diesem Geräts für eine bestimmte Dauer oder eine Anzahl von Paketen",
|
||||||
|
"download_trace": "Trace-Datei herunterladen",
|
||||||
"packets": "Pakete",
|
"packets": "Pakete",
|
||||||
"title": "Trace-Gerät"
|
"title": "Tcpdump",
|
||||||
|
"trace": "Spur",
|
||||||
|
"trace_not_successful": "Trace nicht erfolgreich: Gateway hat folgenden Fehler gemeldet: {{error}}",
|
||||||
|
"wait_for_file": "Warten, bis die Trace-Datei fertig ist?",
|
||||||
|
"waiting_directions": "Bitte warten Sie auf die Trace-Datendatei. Dies könnte eine Weile dauern. Sie können das Warten beenden und die Ablaufverfolgungsdatei später aus der Befehlstabelle abrufen.",
|
||||||
|
"waiting_seconds": "Verstrichene Zeit: {{seconds}} Sekunden"
|
||||||
},
|
},
|
||||||
"upgrade": {
|
"upgrade": {
|
||||||
|
"command_submitted": "Befehl gesendet",
|
||||||
|
"device_disconnected": "Gerät getrennt",
|
||||||
|
"device_reconnected": "Gerät wieder verbunden",
|
||||||
|
"device_upgrading_firmware": "Geräte-Firmware-Upgrade",
|
||||||
"directions": "Wählen Sie eine Uhrzeit und eine Firmware-Version für dieses Gerät",
|
"directions": "Wählen Sie eine Uhrzeit und eine Firmware-Version für dieses Gerät",
|
||||||
"firmware_uri": "Firmware-URI:",
|
"firmware_uri": "Firmware-URL:",
|
||||||
"need_uri": "Du brauchst eine URI...",
|
"need_uri": "Sie brauchen eine URL...",
|
||||||
"time": "Zeitpunkt der Aktualisierung:",
|
"new_version": "Neue Version ist",
|
||||||
"title": "Firmware-Aktualisierung"
|
"offline_device": "Diese Option ist gesperrt, da dieses Gerät nicht verbunden ist",
|
||||||
|
"time": "Zeitpunkt für Aktualisierung:",
|
||||||
|
"title": "Firmware Aktualisieren",
|
||||||
|
"upgrade": "Aktualisierung",
|
||||||
|
"wait_for_upgrade": "Möchten Sie warten, bis das Upgrade abgeschlossen ist?",
|
||||||
|
"waiting_for_device": "Warten, bis das Gerät wieder verbunden ist"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_phone_number": "Telefonnummer hinzufügen",
|
||||||
|
"avatar": "Dein Avatar",
|
||||||
|
"avatar_file": "Dein Avatar (max. 2 MB)",
|
||||||
|
"check_phone": "Bitte überprüfen Sie Ihr Telefon auf Ihren Validierungscode",
|
||||||
|
"confirm_new_password": "Bestätige neues Passwort",
|
||||||
|
"create": "Benutzer erstellen",
|
||||||
|
"create_failure": "Fehler beim Erstellen des Benutzers: {{error}}",
|
||||||
|
"create_success": "Benutzer erfolgreich erstellt",
|
||||||
|
"creating": "Benutzer erstellen ...",
|
||||||
|
"delete_avatar": "Avatar löschen",
|
||||||
|
"delete_failure": "Fehler beim Versuch, den Benutzer zu löschen: {{error}}",
|
||||||
|
"delete_success": "Benutzer erfolgreich gelöscht!",
|
||||||
|
"delete_title": "Benutzer löschen",
|
||||||
|
"delete_warning": "Warnung: Sobald Sie einen Benutzer gelöscht haben, können Sie ihn nicht wiederherstellen",
|
||||||
|
"deleting": "Löschen ...",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"edit": "Benutzer bearbeiten",
|
||||||
|
"email_address": "E-Mail-Addresse",
|
||||||
|
"enter_new_phone": "Geben Sie Ihre neue Telefonnummer ein:",
|
||||||
|
"error_fetching_users": "Fehler beim Abrufen der Nutzer: {{error}}",
|
||||||
|
"error_retrieving": "Fehler beim Abrufen des Benutzers",
|
||||||
|
"error_sending_code": "Fehler beim Versuch, den Validierungscode zu senden. Bitte bestätigen Sie, dass Ihre Telefonnummer gültig ist.",
|
||||||
|
"force_password_change": "Passwortänderung bei der Anmeldung erzwingen",
|
||||||
|
"id": "Benutzeridentifikation.",
|
||||||
|
"last_login": "Letzte Anmeldung",
|
||||||
|
"login_id": "Anmelde-ID.",
|
||||||
|
"make_sure_same_password": "Stellen Sie sicher, dass beide Passwörter gleich und gültig sind",
|
||||||
|
"my_profile": "Mein Profil",
|
||||||
|
"name": "Name",
|
||||||
|
"new_code_sent": "Neuer Code gesendet!",
|
||||||
|
"nickname": "Spitzname",
|
||||||
|
"nickname_explanation": "Spitzname (optional)",
|
||||||
|
"not_validated": "Nicht validiert",
|
||||||
|
"note": "Hinweis",
|
||||||
|
"password": "Passwort",
|
||||||
|
"phone_number": "Telefonnummer",
|
||||||
|
"provide_email": "Bitte geben Sie eine gültige E-Mail Adresse an",
|
||||||
|
"provide_password": "Bitte geben Sie ein gültiges Passwort ein",
|
||||||
|
"save_avatar": "Avatar speichern",
|
||||||
|
"send_code": "Code senden",
|
||||||
|
"send_code_again": "Code nochmal senden",
|
||||||
|
"show_hide_password": "Passwort anzeigen/verbergen",
|
||||||
|
"successful_validation": "Telefonnummer bestätigt! Klicken Sie auf die Schaltfläche Speichern, um es mit Ihrem Profil zu verknüpfen",
|
||||||
|
"table_title": "Admin-Benutzer",
|
||||||
|
"update_failure": "Fehler beim Aktualisieren: {{error}}",
|
||||||
|
"update_failure_title": "Update fehlgeschlagen",
|
||||||
|
"update_success": "Benutzer erfolgreich aktualisiert",
|
||||||
|
"update_success_title": "Erfolg",
|
||||||
|
"user_role": "Rolle",
|
||||||
|
"users": "Benutzer",
|
||||||
|
"validate_phone": "Bestätigen",
|
||||||
|
"validated": "Bestätigt",
|
||||||
|
"wrong_validation_code": "Sie haben keinen gültigen Code eingegeben. Bitte versuchen Sie es erneut und vergewissern Sie sich, dass Sie die richtige Telefonnummer eingegeben haben"
|
||||||
|
},
|
||||||
|
"wifi_analysis": {
|
||||||
|
"association": "Verband",
|
||||||
|
"associations": "Verbände",
|
||||||
|
"mode": "Modus",
|
||||||
|
"network_diagram": "Netzwerkdiagramm",
|
||||||
|
"override_dfs": "DFS überschreiben",
|
||||||
|
"radios": "Radios",
|
||||||
|
"scan_warning": "Ihr 5G-Funkgerät befindet sich auf einem Radarkanal, Sie müssen „Override DFS“ aktivieren, um das Scannen aller 5G-Kanäle zu ermöglichen",
|
||||||
|
"title": "WLAN-Analyse",
|
||||||
|
"vendor": "Verkäufer",
|
||||||
|
"waiting_for_data": "Warten auf Empfang von Gerätedaten. Bitte schauen Sie später noch einmal nach"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"actions": "Actions",
|
||||||
"blink": "Blink",
|
"blink": "Blink",
|
||||||
"configure": "Configure",
|
"configure": "Configure",
|
||||||
"connect": "Connect",
|
"connect": "Connect",
|
||||||
@@ -7,112 +8,434 @@
|
|||||||
"factory_reset": "Factory Reset",
|
"factory_reset": "Factory Reset",
|
||||||
"firmware_upgrade": "Firmware Upgrade",
|
"firmware_upgrade": "Firmware Upgrade",
|
||||||
"reboot": "Reboot",
|
"reboot": "Reboot",
|
||||||
"title": "Device Actions",
|
"request_ie": "Request IEs",
|
||||||
|
"telemetry": "Telemetry",
|
||||||
|
"title": "Commands",
|
||||||
"trace": "Trace",
|
"trace": "Trace",
|
||||||
"wifi_scan": "Wifi Scan"
|
"wifi_scan": "Wi-Fi Scan"
|
||||||
},
|
},
|
||||||
"blink": {
|
"blink": {
|
||||||
"blink": "Blink",
|
"blink": "Blink",
|
||||||
"device_leds": "Device LEDs",
|
"device_leds": "Device LEDs",
|
||||||
"pattern": "Choose the pattern you would like to use: ",
|
"execute_now": "Would you like to set this pattern now?",
|
||||||
|
"explanation": "What pattern would you like to set on this device for 30 seconds?",
|
||||||
|
"pattern": "LEDs pattern: ",
|
||||||
|
"set_leds": "Set LEDs",
|
||||||
"when_blink_leds": "When would you like to make the device LEDs blink?"
|
"when_blink_leds": "When would you like to make the device LEDs blink?"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
|
"command_success": "Command Submitted Successfully",
|
||||||
"error": "Error while submitting command!",
|
"error": "Error while submitting command!",
|
||||||
"success": "Command submitted successfully",
|
"error_delete_log": "Error while trying to delete: {{error}}",
|
||||||
"title": "Device Commands"
|
"event_queue": "Event Queue",
|
||||||
|
"reboot_start": "Reboot process has started!",
|
||||||
|
"success": "Command submitted successfully, you can look at the Commands log for the result",
|
||||||
|
"title": "Command History",
|
||||||
|
"unable_queue": "Unable to complete event queue request: {{error}}"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
"access_policy": "Access Policy",
|
||||||
|
"add": "Add",
|
||||||
|
"add_items": "Add Items",
|
||||||
|
"add_note": "Add Note",
|
||||||
|
"add_note_explanation": "Write your new note below and click the '+' button where you are done",
|
||||||
|
"adding_ellipsis": "Adding...",
|
||||||
|
"all": "All",
|
||||||
"are_you_sure": "Are you sure?",
|
"are_you_sure": "Are you sure?",
|
||||||
|
"back_to_login": "Back to Login",
|
||||||
|
"back_to_start": "Back to start",
|
||||||
|
"blacklist": "Blacklist",
|
||||||
|
"by": "By",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"certificate": "Certificate",
|
"certificate": "Certificate",
|
||||||
|
"certificates": "Certificates",
|
||||||
|
"claim": "Claim",
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
"close": "Close",
|
"close": "Close",
|
||||||
|
"code": "Code",
|
||||||
"command": "Command",
|
"command": "Command",
|
||||||
|
"commands": "Commands",
|
||||||
|
"commands_executed": "Commands Executed",
|
||||||
"compatible": "Compatible",
|
"compatible": "Compatible",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
|
"concurrent_devices": "Concurrent Devices",
|
||||||
"config_id": "Config. Id",
|
"config_id": "Config. Id",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
|
"confirm_stop_editing": "Are you sure you want to stop editing? This will cancel any unsaved changes you have made.",
|
||||||
"connected": "Connected",
|
"connected": "Connected",
|
||||||
"copied": "Copied!",
|
"copied": "Copied!",
|
||||||
|
"copied_to_clipboard": "Copied to Clipboard!",
|
||||||
"copy_to_clipboard": "Copy to clipboard",
|
"copy_to_clipboard": "Copy to clipboard",
|
||||||
|
"create": "Create",
|
||||||
|
"created": "Created",
|
||||||
|
"created_by": "Created By",
|
||||||
|
"creator": "Creator",
|
||||||
|
"current": "Current ",
|
||||||
|
"custom_date": "Custom Date",
|
||||||
|
"dashboard": "Dashboard",
|
||||||
"date": "Date",
|
"date": "Date",
|
||||||
|
"day": "day",
|
||||||
|
"days": "days",
|
||||||
|
"default_map": "Default Map",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
|
"delete_device": "Delete Device",
|
||||||
"details": "Details",
|
"details": "Details",
|
||||||
|
"device": "Device #{{serialNumber}}",
|
||||||
|
"device_dashboard": "Device Dashboard",
|
||||||
|
"device_delete": "Delete #{{serialNumber}}",
|
||||||
|
"device_deleted": "Device Successfully Deleted",
|
||||||
|
"device_health": "Device Health",
|
||||||
"device_list": "List of Devices",
|
"device_list": "List of Devices",
|
||||||
"device_page": "Device Page",
|
"device_page": "View",
|
||||||
|
"device_status": "Device Status",
|
||||||
"devices": "Devices",
|
"devices": "Devices",
|
||||||
|
"devices_using_latest": "Devices Using Latest Firmware",
|
||||||
|
"devices_using_unknown": "Devices Using Unknown Firmware",
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
"do_now": "Do Now!",
|
"do_now": "Do Now!",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
|
"duplicate": "Duplicate",
|
||||||
"duration": "Duration",
|
"duration": "Duration",
|
||||||
|
"edit": "Edit",
|
||||||
|
"edit_user": "Edit",
|
||||||
|
"email_address": "Email Address",
|
||||||
|
"endpoint": "Endpoint",
|
||||||
|
"endpoints": "Endpoints",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
|
"error_adding_note": "Error while adding note",
|
||||||
|
"error_code": "Error Code",
|
||||||
|
"errors": "Errors",
|
||||||
|
"execute_now": "Would you like to execute this command now?",
|
||||||
"executed": "Executed",
|
"executed": "Executed",
|
||||||
|
"exit": "Exit",
|
||||||
"firmware": "Firmware",
|
"firmware": "Firmware",
|
||||||
|
"firmware_dashboard": "Firmware Dashboard",
|
||||||
|
"firmware_installed": "Firmware Installed",
|
||||||
|
"forgot_password": "Forgot your Password?",
|
||||||
|
"forgot_password_title": "Forgot Password",
|
||||||
"from": "From",
|
"from": "From",
|
||||||
|
"general_error": "API Error, please consult your administrator",
|
||||||
|
"go_back": "Go Back",
|
||||||
|
"hide": "Hide",
|
||||||
|
"hour": "hour",
|
||||||
|
"hours": "hours",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
"ip_address": "Ip Address",
|
"invalid_credentials": "Invalid username and/or password",
|
||||||
|
"invalid_date_explanation": "Invalid Date, please use the calendar accessible with the button on the right ",
|
||||||
|
"invalid_file": "The chosen file was invalid, please read the instructions and adjust your file accordingly",
|
||||||
|
"invalid_password": "This password does not confirm to basic password rules. Please visit our Password Policy page to learn more",
|
||||||
|
"invalid_pem": "Your .pem file is invalid. It should start with '-----BEGIN CERTIFICATE-----' OR '-----BEGIN PRIVATE KEY-----' and it should end with '-----END CERTIFICATE-----' OR '-----END PRIVATE KEY-----'",
|
||||||
|
"ip_address": "IP Address",
|
||||||
|
"ips": "IPs",
|
||||||
|
"item": "Item",
|
||||||
|
"items": "Items",
|
||||||
|
"items_per_page": "Items per page: ",
|
||||||
|
"key": "Key",
|
||||||
|
"last_dashboard_refresh": "Last Dashboard Refresh",
|
||||||
"later_tonight": "Later tonight",
|
"later_tonight": "Later tonight",
|
||||||
|
"latest": "Latest",
|
||||||
|
"list": "List",
|
||||||
"loading_ellipsis": "Loading...",
|
"loading_ellipsis": "Loading...",
|
||||||
"loading_more_ellipsis": "Loading more...",
|
"loading_more_ellipsis": "Loading more...",
|
||||||
"logout": "Logout",
|
"logout": "Logout",
|
||||||
"mac": "MAC Address",
|
"mac": "MAC Address",
|
||||||
|
"main": "Main",
|
||||||
"manufacturer": "Manufacturer",
|
"manufacturer": "Manufacturer",
|
||||||
|
"memory_used": "Memory Used",
|
||||||
|
"min_max": "Min: {{min}}, Max: {{max}}",
|
||||||
|
"minute": "minute",
|
||||||
|
"minutes": "minutes",
|
||||||
|
"modified": "Modified",
|
||||||
"na": "N/A",
|
"na": "N/A",
|
||||||
"need_date": "You need a date...",
|
"need_date": "You need a date...",
|
||||||
|
"no": "No",
|
||||||
|
"no_addresses_found": "No Addresses Found",
|
||||||
|
"no_clients_found": "No Clients Found",
|
||||||
|
"no_devices_found": "No Devices Found",
|
||||||
|
"no_items": "No Items",
|
||||||
|
"none": "None",
|
||||||
"not_connected": "Not Connected",
|
"not_connected": "Not Connected",
|
||||||
|
"of_connected": "% of connected devices",
|
||||||
"off": "Off",
|
"off": "Off",
|
||||||
"on": "On",
|
"on": "On",
|
||||||
|
"optional": "Optional",
|
||||||
|
"overall_health": "Overall Health",
|
||||||
|
"password_policy": "Password Policy",
|
||||||
|
"preferences": "Preferences",
|
||||||
|
"preview": "Preview",
|
||||||
|
"program": "Program",
|
||||||
|
"reason": "Reason",
|
||||||
"recorded": "Recorded",
|
"recorded": "Recorded",
|
||||||
"refresh": "Refresh",
|
"refresh": "Refresh",
|
||||||
"refresh_device": "Refresh Device",
|
"refresh_device": "Refresh Device",
|
||||||
|
"remove_claim": "Remove Claim",
|
||||||
|
"required": "Required",
|
||||||
"result": "Result",
|
"result": "Result",
|
||||||
|
"save": "Save",
|
||||||
|
"saved": "Saved!",
|
||||||
|
"saving": "Saving... ",
|
||||||
"schedule": "Schedule",
|
"schedule": "Schedule",
|
||||||
|
"search": "Search Devices",
|
||||||
|
"second": "second",
|
||||||
|
"seconds": "seconds",
|
||||||
|
"seconds_elapsed": "Seconds elapsed",
|
||||||
|
"see_details": "See Details",
|
||||||
|
"select": "Select",
|
||||||
|
"serial_num": "Serial #",
|
||||||
"serial_number": "Serial Number",
|
"serial_number": "Serial Number",
|
||||||
|
"show_all": "Show All",
|
||||||
|
"socket_connection_closed": "Connection closed!",
|
||||||
"start": "Start",
|
"start": "Start",
|
||||||
|
"status": "Status",
|
||||||
|
"stop_editing": "Stop Editing",
|
||||||
"submit": "Submit",
|
"submit": "Submit",
|
||||||
"submitted": "Submitted",
|
"submitted": "Submitted",
|
||||||
"success": "Success",
|
"success": "Success",
|
||||||
|
"system": "System",
|
||||||
|
"table": "Table",
|
||||||
|
"time_per_device": "Devices/Second",
|
||||||
|
"timestamp": "Time",
|
||||||
"to": "To",
|
"to": "To",
|
||||||
|
"type": "Type",
|
||||||
|
"type_for_options": "Type the value you need to create...",
|
||||||
|
"type_for_options_format": "Type a value of the valid format ({{format}})...",
|
||||||
|
"unable_to_connect": "Unable to Connect to Device",
|
||||||
|
"unable_to_delete": "Unable to Delete",
|
||||||
"unknown": "Unknown",
|
"unknown": "Unknown",
|
||||||
|
"up_to_date": "Up to Date Devices",
|
||||||
|
"uptimes": "Uptimes",
|
||||||
|
"use_file": "Use File",
|
||||||
"uuid": "UUID",
|
"uuid": "UUID",
|
||||||
|
"vendors": "Vendors",
|
||||||
"view_more": "View more",
|
"view_more": "View more",
|
||||||
|
"visibility": "Visibility",
|
||||||
|
"waiting_for_update": "Waiting for Update",
|
||||||
"yes": "Yes"
|
"yes": "Yes"
|
||||||
},
|
},
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
"add_configuration": "Add Configuration",
|
||||||
|
"add_new_block": "Add new Configuration Block",
|
||||||
|
"add_or_link": "Link or Add",
|
||||||
|
"add_radio": "Add Radio",
|
||||||
|
"ca_cert_explanation": "Please use a .pem file that starts with \"-----BEGIN CERTIFICATE-----\" and ends with \"-----END CERTIFICATE-----\". The result will be shown in the field below. You can also copy and paste the certificate you would like to use directly.",
|
||||||
|
"cannot_delete": "This configuration cannot be deleted because it is being used by at least one entity, venue or device",
|
||||||
|
"choose_radio_band": "What radio band you would like to create?",
|
||||||
|
"choose_section": "Which section you would like this block to contain?",
|
||||||
|
"configuration_browser": "Configuration Browser",
|
||||||
|
"configurations": "Configurations",
|
||||||
|
"create": "Create Configuration",
|
||||||
|
"create_config": "Create New Configuration",
|
||||||
|
"create_new_configuration": "Create New Configuration Element",
|
||||||
"created": "Created",
|
"created": "Created",
|
||||||
"details": "Device Details",
|
"creation_success": "Configuration successfully created!",
|
||||||
|
"currently_associated": "Currently Associated Configuration: {{config}}",
|
||||||
|
"currently_selected_config": "Currently Selected Configuration: {{config}}",
|
||||||
|
"default_configs": "Default Configs",
|
||||||
|
"default_configurations": "Default Configurations",
|
||||||
|
"delete_config": "Delete Config",
|
||||||
|
"details": "Details",
|
||||||
"device_password": "Password",
|
"device_password": "Password",
|
||||||
"last_configuration_change": "Last Configuration Change",
|
"device_type": "Device Type",
|
||||||
|
"device_types": "Device Types",
|
||||||
|
"devices_affected": "Devices affected by this configuration: ",
|
||||||
|
"edit_configuration": "Edit Configuration",
|
||||||
|
"error_delete": "Error while trying to delete: {{error}}",
|
||||||
|
"error_delete_blacklist": "Error deleting from blacklist: {{error}}",
|
||||||
|
"error_fetching_config": "Error while fetching configuration",
|
||||||
|
"error_trying_delete": "Error while trying to delete: {{error}}",
|
||||||
|
"error_update": "Error: {{error}}",
|
||||||
|
"explanation": "Explanation",
|
||||||
|
"key_pem_explanation": "Please select .pem file",
|
||||||
|
"last_configuration_change": "Configuration Change",
|
||||||
"last_configuration_download": "Last Configuration Download",
|
"last_configuration_download": "Last Configuration Download",
|
||||||
"location": "Location",
|
"location": "Location",
|
||||||
|
"need_device_type": "Every configuration needs to support at least one device type",
|
||||||
|
"no_associated_config": "No Associated Configuration",
|
||||||
|
"no_associated_configuration": "No Associated Configurations",
|
||||||
|
"note": "Note",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"owner": "Owner",
|
"owner": "Owner",
|
||||||
"title": "Device Configuration",
|
"select_configuration": "Select this Configuration",
|
||||||
|
"success_block_delete": "Successfully deleted configuration block",
|
||||||
|
"success_update": "Configuration Successfully Updated!",
|
||||||
|
"successful_delete": "Deleted Configuration!",
|
||||||
|
"support_all": "Support All",
|
||||||
|
"supported_device_types": "Supported Device Types",
|
||||||
|
"title": "Configuration",
|
||||||
"type": "Device Type",
|
"type": "Device Type",
|
||||||
|
"used_by": "Used By",
|
||||||
|
"used_by_details": "{{entities}} Entities, {{venues}} Venues and {{devices}} Devices",
|
||||||
|
"uuid": "Config ID",
|
||||||
|
"view_affected_devices": "View Affected Devices",
|
||||||
|
"view_config": "View Configuration",
|
||||||
|
"view_in_use": "View In Use",
|
||||||
"view_json": "View raw JSON"
|
"view_json": "View raw JSON"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"choose_file": "You need to choose a valid .json file: ",
|
"choose_file": "You need to choose a valid .json file: ",
|
||||||
"enter_new": "Enter new device configuration JSON: ",
|
"enter_new": "Enter new device configuration JSON: ",
|
||||||
"placeholder": "Config JSON",
|
"placeholder": "Config JSON",
|
||||||
"title": "Configure Device",
|
"title": "Configure",
|
||||||
"valid_json": "You need to enter valid JSON"
|
"valid_json": "You need to enter valid JSON"
|
||||||
},
|
},
|
||||||
|
"connect": {
|
||||||
|
"error_trying_to_connect": "Error while trying to connect to device: {{error}}"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"access_pin": "Access PIN",
|
||||||
|
"add_contact": "Add Contact",
|
||||||
|
"contact": "Contact",
|
||||||
|
"create_contact": "Create Contact",
|
||||||
|
"currently_selected_contact": "Currently Selected Contact: {{contact}}",
|
||||||
|
"delete": "Delete Contact?",
|
||||||
|
"error_assign": "Error while trying to assign contact: {{error}}",
|
||||||
|
"error_creation": "Error while trying to create contact: {{error}}",
|
||||||
|
"error_delete": "Error trying to delete contact: {{error}}",
|
||||||
|
"error_fetching_list": "Error fetching contacts",
|
||||||
|
"error_fetching_single": "Error fetching contact: {{error}}",
|
||||||
|
"error_unassign": "Error while trying to unassign contact: {{error}}",
|
||||||
|
"first_name": "First Name",
|
||||||
|
"identifier": "Identifier",
|
||||||
|
"initials": "Initials",
|
||||||
|
"last_name": "Last Name",
|
||||||
|
"no_associated_contact": "No Associated Contact",
|
||||||
|
"primary_email": "Primary Email",
|
||||||
|
"salutation": "Salutation",
|
||||||
|
"secondary_email": "Secondary Email",
|
||||||
|
"successful_assign": "Successfully assigned contact!",
|
||||||
|
"successful_creation": "Contact Created!",
|
||||||
|
"successful_delete": "Successfully Deleted Contact!",
|
||||||
|
"successful_unassign": "Successfully Unassigned Contact",
|
||||||
|
"successful_update": "Successfully Updated Contact",
|
||||||
|
"title": "Contacts",
|
||||||
|
"type": "Type",
|
||||||
|
"update_error": "Error updating contact: {{error}}",
|
||||||
|
"user_title": "Title",
|
||||||
|
"visual": "Correspondence Name"
|
||||||
|
},
|
||||||
"delete_command": {
|
"delete_command": {
|
||||||
"explanation": "Are you sure you want to delete this command? This action is not reversible.",
|
"explanation": "Are you sure you want to delete this command? This action is not reversible.",
|
||||||
"title": "Delete Command"
|
"title": "Delete Command"
|
||||||
},
|
},
|
||||||
|
"delete_logs": {
|
||||||
|
"date": "Select the date of the oldest log you would like to keep",
|
||||||
|
"device_logs_title": "Delete Device Logs",
|
||||||
|
"explanation": "This will delete all of the {{object}} before the date you choose. Be careful, this action is not reversible.",
|
||||||
|
"healthchecks_title": "Delete Healthchecks"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"add_to_blacklist": "Add Device To Blacklist",
|
||||||
|
"all_devices": "All Devices",
|
||||||
|
"already_running_command": "Device is already executing a command, please try later",
|
||||||
|
"blacklisted_on": "Date",
|
||||||
|
"capabilities": "Capabilities",
|
||||||
|
"certificate_explanation": "Certificates of connected devices",
|
||||||
|
"count_explanation": "Devices pointing at this gateway instance",
|
||||||
|
"edit_blacklist": "Edit Blacklisted Device",
|
||||||
|
"error_adding_blacklist": "Error adding device to blacklist: {{error}}",
|
||||||
|
"error_edit_blacklist": "Error editing blacklist: {{error}}",
|
||||||
|
"error_fetching_device": "Error fetching device information: {{error}}",
|
||||||
|
"error_fetching_devices": "Error while fetching devices: {{error}}",
|
||||||
|
"firmware_count_explanation": "This is the total amount of devices that were added to this firmware server, including devices not currently pointing at the related gateway server.",
|
||||||
|
"health_explanation": "Health of connected devices ((Devices=100% * 100 + Devices>90% * 95 + Devices>60% * 75 + Devices<60% * 35) / ConnectedDevices)",
|
||||||
|
"mac_not_found": "Serial number not found, redirecting you to the Devices page",
|
||||||
|
"memory_explanation": "Amount of connected devices with corresponding memory used percentage",
|
||||||
|
"remove_from_blacklist": "Remove from blacklist",
|
||||||
|
"success_added_blacklist": "Device successfully added to blacklist!",
|
||||||
|
"success_edit_blacklist": "Successfully edited blacklist!",
|
||||||
|
"success_removed_blacklist": "Successfully removed device from blacklist!",
|
||||||
|
"uptimes_explanation": "Amount of devices connected based on their uptime"
|
||||||
|
},
|
||||||
"device_logs": {
|
"device_logs": {
|
||||||
"log": "Log",
|
"log": "Log",
|
||||||
"severity": "Severity",
|
"severity": "Severity",
|
||||||
"title": "Device Logs"
|
"title": "Logs"
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"add_child": "Add Child Entity to {{entityName}}",
|
||||||
|
"add_failure": "Error, the server returned : {{error}}",
|
||||||
|
"add_ips": "Manage IPs",
|
||||||
|
"add_root": "Add Root Entity",
|
||||||
|
"add_success": "Entity Successfully Created!",
|
||||||
|
"assigned_inventory": "Assigned Inventory",
|
||||||
|
"cannot_delete": "You cannot delete entities which have children. Delete this entity's children to be able to delete it.",
|
||||||
|
"confirm_map_delete": "Are you sure you want to delete the map {{name}}? This action cannot be reverted",
|
||||||
|
"currently_selected_entity": "Currently Selected Entity: {{config}}",
|
||||||
|
"currently_selected_venue": "Currently Selected Venue: {{config}}",
|
||||||
|
"delete_success": "Entity Successfully Deleted",
|
||||||
|
"delete_warning": "Warning: this operation cannot be reverted",
|
||||||
|
"duplicate_from_node": "Duplicate with specific Root Node",
|
||||||
|
"duplicate_map": "Duplicate Map",
|
||||||
|
"duplicate_with_node": "Duplicate {{mapName}} with {{rootName}} as root node",
|
||||||
|
"edit_failure": "Update unsuccessful : {{error}}",
|
||||||
|
"enter_here": "Enter the IP(s) you'd like to add here",
|
||||||
|
"entire_tree": "Network Map",
|
||||||
|
"entities": "Entities",
|
||||||
|
"entity": "Entity",
|
||||||
|
"error_deleting_map": "Error deleting map: {{error}}",
|
||||||
|
"error_fetch_entity": "Error while fetching entity information",
|
||||||
|
"error_fetching": "Error while fetching entities",
|
||||||
|
"error_fetching_map": "Error fetching map: {{error}}",
|
||||||
|
"error_fetching_tree": "Error while fetching tree: {{error}}",
|
||||||
|
"error_saving": "Error while saving entity",
|
||||||
|
"error_saving_map": "Error saving map: {{error}}",
|
||||||
|
"higher_priority": "Make Higher Priority",
|
||||||
|
"ip_detection": "IP Detection",
|
||||||
|
"ip_formats": "You can add IPv4 or IPv6 addresses in the following formats:",
|
||||||
|
"lower_priority": "Make Lower Priority",
|
||||||
|
"map": "Map",
|
||||||
|
"map_delete_success": "Map Successfully Deleted!",
|
||||||
|
"need_select_entity": "You need to select an entity from the table below",
|
||||||
|
"no_ips": "No IPs selected",
|
||||||
|
"not_assigned": "Not Assigned",
|
||||||
|
"only_unassigned": "Only Unassigned",
|
||||||
|
"select_entity": "Select this Entity",
|
||||||
|
"selected_entity": "Selected Entity",
|
||||||
|
"selected_map": "Selected Map",
|
||||||
|
"tree_saved": "Map Successfully Saved!",
|
||||||
|
"update_failure_error": "Error while trying to update entity: {{error}}",
|
||||||
|
"valid_serial": "Needs to be a valid serial number (12 HEX characters)",
|
||||||
|
"venues": "Venues"
|
||||||
},
|
},
|
||||||
"factory_reset": {
|
"factory_reset": {
|
||||||
"redirector": "Keep redirector: ",
|
"redirector": "Keep redirector: ",
|
||||||
"title": "Factory Reset Device",
|
"reset": "Reset",
|
||||||
|
"resetting": "Resetting... ",
|
||||||
|
"title": "Factory Reset",
|
||||||
"warning": "Warning: Once you submit this cannot be reverted"
|
"warning": "Warning: Once you submit this cannot be reverted"
|
||||||
},
|
},
|
||||||
|
"firmware": {
|
||||||
|
"age_explanation": "Average number of days for all devices from which we can obtain that value",
|
||||||
|
"average_age": "Average Firmware Age",
|
||||||
|
"choose_custom": "Choose",
|
||||||
|
"details_title": "Image #{{image}} Details",
|
||||||
|
"device_type": "Device Type",
|
||||||
|
"device_types": "Device Types",
|
||||||
|
"downloads": "Downloads",
|
||||||
|
"error_fetching_latest": "Error while fetching latest firmware",
|
||||||
|
"from_release": "From",
|
||||||
|
"history_title": "History",
|
||||||
|
"image": "Image",
|
||||||
|
"image_date": "Image Date",
|
||||||
|
"installed_firmware": "Installed Firmware",
|
||||||
|
"latest_explanation": "Devices running recognized firmware at its latest version",
|
||||||
|
"latest_version_installed": "Latest Version Installed",
|
||||||
|
"newer_firmware_available": "Newer Revisions Available",
|
||||||
|
"reinstall_latest": "Reinstall ",
|
||||||
|
"release": "Release",
|
||||||
|
"revision": "Revision",
|
||||||
|
"show_dev": "Show Dev Releases",
|
||||||
|
"size": "Size",
|
||||||
|
"status": "Firmware Status",
|
||||||
|
"title": "Firmware",
|
||||||
|
"to_release": "To",
|
||||||
|
"unknown_firmware_status": "Unknown Firmware Status",
|
||||||
|
"upgrade": "Upgrade",
|
||||||
|
"upgrade_command_submitted": "Upgrade in progress...",
|
||||||
|
"upgrade_to_latest": "Latest",
|
||||||
|
"upgrade_to_version": "Upgrade to this Revision",
|
||||||
|
"upgrading": "Upgrading..."
|
||||||
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"coreui_for_react": "CoreUI for React",
|
"coreui_for_react": "CoreUI for React",
|
||||||
"powered_by": "Powered by",
|
"powered_by": "Powered by",
|
||||||
@@ -120,43 +443,382 @@
|
|||||||
},
|
},
|
||||||
"health": {
|
"health": {
|
||||||
"sanity": "Sanity",
|
"sanity": "Sanity",
|
||||||
"title": "Device Health"
|
"title": "Health"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"add_child": "Add Child Venue",
|
||||||
|
"add_child_venue": "Add Child Venue to {{entityName}}",
|
||||||
|
"add_tag": "Create Tag",
|
||||||
|
"add_tag_to": "Add New Device to {{name}}",
|
||||||
|
"add_venue": "Add Venue",
|
||||||
|
"assign_ent_ven": "Assign to Entity or Venue",
|
||||||
|
"assign_entity_instructions": "You can either find the entity you want this tag to be assigned to by using the menu below, or you can manually paste the entity's UUID in the field above.",
|
||||||
|
"assign_error": "Error while trying to assign tag",
|
||||||
|
"assign_to_entity": "Assign to Entity",
|
||||||
|
"bulk_delete_assigned": "Would you like to bulk delete assigned devices within your file?",
|
||||||
|
"bulk_delete_assigned_warning": "Warning: this action is not reversible",
|
||||||
|
"bulk_delete_devices": "Bulk Delete Devices",
|
||||||
|
"bulk_delete_devices_not_found": "{{number}} devices not found",
|
||||||
|
"bulk_delete_explanation": "To bulk delete devices, use a CSV file with one column called SerialNumber",
|
||||||
|
"bulk_delete_test": "Validate File",
|
||||||
|
"close_entity_menu": "Close Edit Entity Menu",
|
||||||
|
"delete_devices": "Delete Devices",
|
||||||
|
"delete_errors": "{{number}} Delete Device Errors",
|
||||||
|
"delete_tag": "Delete Tag",
|
||||||
|
"delete_venue": "Permanently Delete Venue",
|
||||||
|
"deleted_devices": "{{number}} Deleted Devices",
|
||||||
|
"deleting": "Deleting... ",
|
||||||
|
"deletion_failure": "Deletion error",
|
||||||
|
"devices_assigned": "{{number}} existing devices assigned and updated",
|
||||||
|
"devices_created": "{{number}} devices created",
|
||||||
|
"devices_deleted": "Devices Deleted",
|
||||||
|
"devices_errors_while_creating": "{{number}} device creations failed",
|
||||||
|
"devices_errors_while_updating": "{{number}} device updates failed",
|
||||||
|
"devices_found_assigned": "{{number}} devices found and already assigned to an entity or venue",
|
||||||
|
"devices_found_unassigned": "{{number}} devices found, but not assigned",
|
||||||
|
"devices_imported": " Devices Imported",
|
||||||
|
"devices_not_found": "{{number}} devices with no conflict",
|
||||||
|
"devices_tested": "Devices Tested",
|
||||||
|
"duplicate_serial": "Serial Number already used in file (duplicate)",
|
||||||
|
"error_create_venue": "Error while creating venue",
|
||||||
|
"error_delete_tag": "Error while deleting inventory tag",
|
||||||
|
"error_get_venue": "Error while retrieving venues",
|
||||||
|
"error_pushing_config": "Error while trying to push configuration to device: {{error}}",
|
||||||
|
"error_retrieving": "Error occurred while retrieving inventory tags",
|
||||||
|
"error_unassign": "Error during unassign operation",
|
||||||
|
"error_update_venue": "Error while updating venue",
|
||||||
|
"error_venue_delete": "Error while deleting venue",
|
||||||
|
"error_within_file": "{{number}} devices with wrong information in file (will be ignored)",
|
||||||
|
"file_error": "There seems to be a mistake in your file. Please make sure the file is in CSV format and contains the 5 columns mentioned above in the first line of the file",
|
||||||
|
"final_delete_results": "Final Delete Results",
|
||||||
|
"final_import_results": "Final Import Results",
|
||||||
|
"import_assigned_devices": "Do you want to reassign them with this import?",
|
||||||
|
"import_assigned_devices_explanation": "Some devices conflict with already assigned devices. You should resolve those problems before importing. ",
|
||||||
|
"import_devices": "Import Devices",
|
||||||
|
"import_devices_explanation": "To bulk import devices, you need to use a CSV file with the following columns: SerialNumber,Name,Description,DeviceType,NoteText",
|
||||||
|
"import_devices_to": "Import Devices to {{name}}",
|
||||||
|
"import_existing_devices": "Update and assign them?",
|
||||||
|
"import_existing_devices_explanation": "Some devices already exist in the inventory and are unassigned.",
|
||||||
|
"importing": "Importing...",
|
||||||
|
"last_modification": "Last Modification",
|
||||||
|
"no_devices_to_delete": "No Devices to Delete",
|
||||||
|
"no_devices_to_import": "No valid devices to create or update!",
|
||||||
|
"note_text": "Note Text",
|
||||||
|
"passed_tests": "All tests were passed, your devices are ready to import!",
|
||||||
|
"serial_number_required": "Error: Missing Serial Number",
|
||||||
|
"showing_top_10": "Here is a preview of the information we have retrieved from your file:",
|
||||||
|
"sub_venues": "Subvenues",
|
||||||
|
"subscriber": "Subscriber",
|
||||||
|
"successful_assign": "Tag successfully assigned",
|
||||||
|
"successful_tag_delete": "Inventory Tag Successfully Deleted",
|
||||||
|
"successful_tag_update": "Successfully updated tag",
|
||||||
|
"successful_unassign": "Unassign operation was successful",
|
||||||
|
"successful_venue_create": "Successfully Created Venue",
|
||||||
|
"successful_venue_delete": "Venue successfully deleted",
|
||||||
|
"successful_venue_update": "Successfully Updated Venue",
|
||||||
|
"tag_created": "Inventory tag successfully created",
|
||||||
|
"tag_creation_error": "Error while trying to create inventory tag",
|
||||||
|
"tag_update_error": "Error while updating tag",
|
||||||
|
"tags_assigned_to": "Inventory tags assigned to {{name}}",
|
||||||
|
"test_import": "Validate Import Data",
|
||||||
|
"test_results": "Test Results",
|
||||||
|
"title": "Inventory",
|
||||||
|
"type_invalid": "Error: Invalid Device Type",
|
||||||
|
"unassign": "Unassign",
|
||||||
|
"unassign_tag": "Unassign Tag from Entity",
|
||||||
|
"unassigned_deleted_devices": "{{number}} Devices Deleted and Unassigned",
|
||||||
|
"unassigned_tags": "Unassigned tags",
|
||||||
|
"validating_import_file": "Validating import file and data...",
|
||||||
|
"venue": "Venue",
|
||||||
|
"view_in_gateway": "Details in Gateway"
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"add": "Add Location",
|
||||||
|
"building_name": "Building Name",
|
||||||
|
"city": "City",
|
||||||
|
"country": "Country",
|
||||||
|
"create": "Create Location",
|
||||||
|
"currently_selected": "Currently Selected Location: {{location}}",
|
||||||
|
"delete": "Delete Location?",
|
||||||
|
"error_assign": "Error while trying to assign location: {{error}}",
|
||||||
|
"error_creation": "Error while trying to create locations: {{error}}",
|
||||||
|
"error_delete": "Error while deleting location: {{error}}",
|
||||||
|
"error_fetching_single": "Error while trying to fetch location: {{error}}",
|
||||||
|
"geocode": "GeoCode",
|
||||||
|
"mobiles": "Mobiles",
|
||||||
|
"no_associated": "No Associated Location",
|
||||||
|
"phones": "Phones",
|
||||||
|
"postal": "ZIP/Postal Code",
|
||||||
|
"search": "Search locations to auto fill the fields below",
|
||||||
|
"state": "State",
|
||||||
|
"street_address": "Street Address",
|
||||||
|
"successful_creation": "Location Successfully Created!",
|
||||||
|
"successful_delete": "Successfully Deleted Location!",
|
||||||
|
"successful_update": "Successfully updated location!",
|
||||||
|
"successfully_assigned": "Location Successfully Assigned!",
|
||||||
|
"title": "Locations",
|
||||||
|
"update_error": "Error updating location: {{error}}"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
|
"account_verification": "Account Verification",
|
||||||
|
"authentication_expired": "Authentication expired, please start the login process again",
|
||||||
|
"change_password": "Change Password",
|
||||||
|
"change_password_error": "Error while changing password. Make sure the new password is valid by visiting the 'Password Policy' page",
|
||||||
|
"change_password_instructions": "Enter and confirm your new password",
|
||||||
|
"changing_password": "Changing Password... ",
|
||||||
|
"confirm_new_password": "Confirm New Password",
|
||||||
|
"different_passwords": "You need to enter the same password twice",
|
||||||
|
"email_code_validation": "Please check your email box and enter the verification code we have just sent you in the box below",
|
||||||
|
"forgot_password_error": "Error while trying to send Forgot Password email. Please make sure this userId is associated to an account.",
|
||||||
|
"forgot_password_explanation": "Enter your username to receive an email containing the instructions to reset your password",
|
||||||
|
"forgot_password_success": "You should soon receive an email containing the instructions to reset your password. Please make sure to check your spam if you can't find the email",
|
||||||
|
"logging_in": "Logging In... ",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"login_error": "Login error, confirm that your username, password and gateway url are valid",
|
"login_error": "Login error, make sure the information you are providing is valid",
|
||||||
|
"new_password": "New Password",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"please_enter_gateway": "Please enter a gateway URL",
|
"phone_validation_explanation": "Please check your mobile device and enter the verification code we have just sent you in the box below",
|
||||||
|
"please_enter_gateway": "Please enter a uCentralSec URL",
|
||||||
"please_enter_password": "Please enter your password",
|
"please_enter_password": "Please enter your password",
|
||||||
"please_enter_username": "Please enter your username",
|
"please_enter_username": "Please enter your username",
|
||||||
|
"previously_used": "Password was previously used",
|
||||||
|
"send_forgot": "Send Email",
|
||||||
|
"sending_ellipsis": "Sending... ",
|
||||||
"sign_in_to_account": "Sign in to your account",
|
"sign_in_to_account": "Sign in to your account",
|
||||||
"username": "Username"
|
"url": "uCentralSec URL",
|
||||||
|
"username": "Username",
|
||||||
|
"verification_code": "Enter your verification here",
|
||||||
|
"wrong_code": "The verification code that was entered is not valid. "
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"provisioning": "Provisioning"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"directions": "When would you like to reboot this device?",
|
"directions": "When would you like to reboot this device?",
|
||||||
"title": "Reboot Device"
|
"now": "Would you like to reboot this device now?",
|
||||||
|
"title": "Reboot"
|
||||||
},
|
},
|
||||||
"scan": {
|
"scan": {
|
||||||
"active": "Enable active scan",
|
"active": "Enable active scan",
|
||||||
"channel": "Channel",
|
"channel": "Channel",
|
||||||
"directions": "Launch a wifi scan of this device, which should take approximately 25 seconds.",
|
"directions": "Launch a wifi scan of this device, which should take approximately 25 seconds.",
|
||||||
"results": "Wifi Scan Results"
|
"re_scan": "Re-Scan",
|
||||||
|
"result_directions": "You can click the 'Scan' button at the top right to $t(scan.re_scan)",
|
||||||
|
"results": "Wi-Fi Scan Results",
|
||||||
|
"scan": "Scan",
|
||||||
|
"scanning": "Scanning... ",
|
||||||
|
"waiting_directions": "Please wait for the scan result. This may take up to 25 seconds. You can exit and look at the results from the commands table later."
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Settings"
|
||||||
|
},
|
||||||
|
"simulation": {
|
||||||
|
"add": "Add Simulation",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"cancel_success": "Simulation Run Successfully Cancelled!",
|
||||||
|
"check_ongoing_sims": "Follow Ongoing Sim",
|
||||||
|
"client_interval": "Client Interval",
|
||||||
|
"delete_simulation": "Delete Sim. {{name}}",
|
||||||
|
"end": "Ended",
|
||||||
|
"error_creating": "Error creating simulation: {{error}}",
|
||||||
|
"error_delete": "Error while deleting simulation: {{error}}",
|
||||||
|
"error_devices": "Error Devices",
|
||||||
|
"error_edit": "Error while trying to save simulation: {{error}}",
|
||||||
|
"error_edit_run": "Error while trying to change run state: {{error}}",
|
||||||
|
"error_fetching_simulations": "Error fetching simulations: {{error}}",
|
||||||
|
"error_start_run": "Error while trying to start a simulation run: {{error}}",
|
||||||
|
"gateway": "Gateway",
|
||||||
|
"healtcheck_interval": "Healthcheck Interval",
|
||||||
|
"keep_alive": "Keep Alive",
|
||||||
|
"last_refresh": "Last Refresh",
|
||||||
|
"length": "Length",
|
||||||
|
"live_devices": "Live Devices",
|
||||||
|
"mac_prefix": "MAC Prefix",
|
||||||
|
"max_associations": "Max. Associations",
|
||||||
|
"max_clients": "Max. Clients",
|
||||||
|
"messages_transmitted": "Msgs TX",
|
||||||
|
"min_associations": "Min. Associations",
|
||||||
|
"min_clients": "Min. Clients",
|
||||||
|
"pause": "Pause",
|
||||||
|
"pause_success": "Run Paused!",
|
||||||
|
"prefix_length": "Required, needs to be of a length of 6 characters",
|
||||||
|
"previous_runs": "Previous Runs",
|
||||||
|
"received": "Received",
|
||||||
|
"received_messages": "Msgs RX",
|
||||||
|
"reconnect_interval": "Reconnect Interval",
|
||||||
|
"resume": "Resume",
|
||||||
|
"resume_success": "Run Resumed!",
|
||||||
|
"run": "Simulation Run",
|
||||||
|
"run_simulation": "Run Simulation",
|
||||||
|
"started": "Started",
|
||||||
|
"state_interval": "State Interval",
|
||||||
|
"stop": "Stop",
|
||||||
|
"stop_success": "Run Stopped!",
|
||||||
|
"success_creating": "Simulation Successfully Created!",
|
||||||
|
"success_run_start": "Successfully Started Run!",
|
||||||
|
"successful_delete": "Successfully Deleted Simulation!",
|
||||||
|
"successful_edit": "Successfully Edited Simulation!",
|
||||||
|
"threads": "Threads",
|
||||||
|
"time_full_devices": "Time to Full Devices",
|
||||||
|
"title": "Simulations",
|
||||||
|
"transmitted": "Transmitted",
|
||||||
|
"valid_cert": "Valid Certificate",
|
||||||
|
"valid_key": "Valid Key"
|
||||||
},
|
},
|
||||||
"statistics": {
|
"statistics": {
|
||||||
"data": "Data (KB)",
|
"data": "Data (KB)",
|
||||||
"title": "Statistics"
|
"data_mb": "Data (MB)",
|
||||||
|
"latest_statistics": "Latest Statistics",
|
||||||
|
"lifetime_stats": "Lifetime Statistics",
|
||||||
|
"memory": "Memory",
|
||||||
|
"no_interfaces": "No interface lifetime statistics available",
|
||||||
|
"show_latest": "Last Statistics",
|
||||||
|
"title": "Statistics",
|
||||||
|
"used": "Used Memory %"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"connection_status": "Status",
|
||||||
|
"error": "Status data is unavailable",
|
||||||
|
"last_contact": "Last Contact",
|
||||||
|
"load_averages": "Load (1/5/15 m.)",
|
||||||
|
"localtime": "Localtime",
|
||||||
|
"memory": "Memory Used",
|
||||||
|
"percentage_free": "{{percentage}}% of {{total}} free",
|
||||||
|
"percentage_used": "{{percentage}}% of {{total}} used",
|
||||||
|
"title": "#{{serialNumber}} Status",
|
||||||
|
"total_memory": "Total Memory",
|
||||||
|
"uptime": "Uptime",
|
||||||
|
"used_total_memory": "{{used}} used / {{total}} total "
|
||||||
|
},
|
||||||
|
"subscriber": {
|
||||||
|
"add_device_subscriber_explanation": "To claim devices, you can use our search bar or claim directly from the table. If a device was already claimed by a user, you will need to go to to their details and unassign it before claiming it.",
|
||||||
|
"create": "Create Subscriber",
|
||||||
|
"devices_one": "{{count}} Device",
|
||||||
|
"devices_other": "{{count}} Devices",
|
||||||
|
"edit": "Edit Subscriber",
|
||||||
|
"error_create": "Error creating subscriber: {{error}}",
|
||||||
|
"error_delete": "Error deleting subscriber: {{error}}",
|
||||||
|
"error_fetching": "Error fetching subscribers: {{error}}",
|
||||||
|
"error_fetching_single": "Error fetching subscriber: {{error}}",
|
||||||
|
"error_update": "Error updating subscriber: {{error}}",
|
||||||
|
"is_already_claimed": "is already claimed by ",
|
||||||
|
"subscribers": "Subscribers",
|
||||||
|
"success_create": "Subscriber successfully created!",
|
||||||
|
"success_delete": "Subscriber successfully deleted!",
|
||||||
|
"success_update": "Successfully updated subscriber!"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"error_fetching": "Error while fetching system information",
|
||||||
|
"error_reloading": "Error while reloading: {{error}}",
|
||||||
|
"hostname": "Host Name",
|
||||||
|
"os": "Operation System",
|
||||||
|
"processors": "Processors",
|
||||||
|
"reload": "Reload",
|
||||||
|
"reload_subsystems": "Reload",
|
||||||
|
"subsystems": "Subsystems",
|
||||||
|
"success_reload": "Reload command successfully submitted!"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"connection_failed": "Failed to create connection. Error: {{error}}",
|
||||||
|
"interval": "Interval",
|
||||||
|
"last_update": "Last Update",
|
||||||
|
"lifetime": "Duration",
|
||||||
|
"outputmode": "Output Mode",
|
||||||
|
"types": "Types"
|
||||||
},
|
},
|
||||||
"trace": {
|
"trace": {
|
||||||
"choose_network": "Choose network",
|
"choose_network": "Choose network",
|
||||||
"directions": "Launch a remote trace of this device for either a specific duration or a number of packets",
|
"directions": "Launch a remote trace of this device for either a specific duration or a number of packets",
|
||||||
|
"download_trace": "Download Trace File",
|
||||||
"packets": "Packets",
|
"packets": "Packets",
|
||||||
"title": "Trace Device"
|
"title": "Trace",
|
||||||
|
"trace": "Trace",
|
||||||
|
"trace_not_successful": "Trace not successful: gateway reported the following error : {{error}}",
|
||||||
|
"wait_for_file": "Wait until the trace file is ready?",
|
||||||
|
"waiting_directions": "Please wait for the trace data file. This may take some time. You can exit the wait and retrieve the trace file from the commands table later.",
|
||||||
|
"waiting_seconds": "Time Elapsed: {{seconds}} seconds"
|
||||||
},
|
},
|
||||||
"upgrade": {
|
"upgrade": {
|
||||||
|
"command_submitted": "Command submitted",
|
||||||
|
"device_disconnected": "Device disconnected",
|
||||||
|
"device_reconnected": "Device reconnected",
|
||||||
|
"device_upgrading_firmware": "Device upgrading firmware",
|
||||||
"directions": "Choose a time and a firmware version for this device",
|
"directions": "Choose a time and a firmware version for this device",
|
||||||
"firmware_uri": "Firmware URI:",
|
"firmware_uri": "Firmware URI:",
|
||||||
"need_uri": "You need a URI...",
|
"need_uri": "You need a URI...",
|
||||||
|
"new_version": "New version is ",
|
||||||
|
"offline_device": "This option is blocked because this device is not connected",
|
||||||
"time": "Time of upgrade:",
|
"time": "Time of upgrade:",
|
||||||
"title": "Firmware Upgrade"
|
"title": "Firmware Upgrade",
|
||||||
|
"upgrade": "Upgrade",
|
||||||
|
"wait_for_upgrade": "Would you like to wait for the upgrade to finish?",
|
||||||
|
"waiting_for_device": "Waiting for device to reconnect"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_phone_number": "Add Phone Number",
|
||||||
|
"avatar": "Your Avatar",
|
||||||
|
"avatar_file": "Your Avatar (max. of 2 MB)",
|
||||||
|
"check_phone": "Please check your phone for your validation code",
|
||||||
|
"confirm_new_password": "Confirm New Password",
|
||||||
|
"create": "Create User",
|
||||||
|
"create_failure": "Error while creating user: {{error}}",
|
||||||
|
"create_success": "User Created Successfully",
|
||||||
|
"creating": "Creating User...",
|
||||||
|
"delete_avatar": "Delete Avatar",
|
||||||
|
"delete_failure": "Error while trying to delete user: {{error}}",
|
||||||
|
"delete_success": "User successfully deleted!",
|
||||||
|
"delete_title": "Delete User",
|
||||||
|
"delete_warning": "Warning: Once you delete a user you cannot revert",
|
||||||
|
"deleting": "Deleting... ",
|
||||||
|
"description": "Description",
|
||||||
|
"edit": "Edit User",
|
||||||
|
"email_address": "Email Address",
|
||||||
|
"enter_new_phone": "Enter your new phone number: ",
|
||||||
|
"error_fetching_users": "Error fetching users: {{error}}",
|
||||||
|
"error_retrieving": "Error retrieving user",
|
||||||
|
"error_sending_code": "Error while trying to send validation code. Please confirm that your phone number is valid.",
|
||||||
|
"force_password_change": "Force Password Change on Login",
|
||||||
|
"id": "User Id.",
|
||||||
|
"last_login": "Last Login",
|
||||||
|
"login_id": "Login Id.",
|
||||||
|
"make_sure_same_password": "Make sure both passwords are the same and are valid",
|
||||||
|
"my_profile": "My Profile",
|
||||||
|
"name": "Name",
|
||||||
|
"new_code_sent": "New Code Sent!",
|
||||||
|
"nickname": "Nickname",
|
||||||
|
"nickname_explanation": "Nickname (optional)",
|
||||||
|
"not_validated": "Not Validated",
|
||||||
|
"note": "Note",
|
||||||
|
"password": "Password",
|
||||||
|
"phone_number": "Phone Number",
|
||||||
|
"provide_email": "Please provide a valid email address",
|
||||||
|
"provide_password": "Please provide a valid password",
|
||||||
|
"save_avatar": "Save Avatar",
|
||||||
|
"send_code": "Send Code",
|
||||||
|
"send_code_again": "Send Code Again",
|
||||||
|
"show_hide_password": "Show/Hide Password",
|
||||||
|
"successful_validation": "Phone Number Validated! Click the save button to link it to your profile",
|
||||||
|
"table_title": "Admin Users",
|
||||||
|
"update_failure": "Error while trying to update: {{error}}",
|
||||||
|
"update_failure_title": "Update Failed",
|
||||||
|
"update_success": "User Updated Successfully",
|
||||||
|
"update_success_title": "Success",
|
||||||
|
"user_role": "Role",
|
||||||
|
"users": "Users",
|
||||||
|
"validate_phone": "Validate",
|
||||||
|
"validated": "Validated",
|
||||||
|
"wrong_validation_code": "You have not entered a valid code. Please try again and make sure you have entered the right phone number"
|
||||||
|
},
|
||||||
|
"wifi_analysis": {
|
||||||
|
"association": "Association",
|
||||||
|
"associations": "Associations",
|
||||||
|
"mode": "Mode",
|
||||||
|
"network_diagram": "Network Diagram",
|
||||||
|
"override_dfs": "Override DFS",
|
||||||
|
"radios": "Radios",
|
||||||
|
"scan_warning": "Your 5G radio is on a radar channel, you must enable “Override DFS” to allow scanning of all 5G channels",
|
||||||
|
"title": "Wi-Fi Analysis",
|
||||||
|
"vendor": "Vendor",
|
||||||
|
"waiting_for_data": "Waiting to receive device data. Please check again later"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"actions": "Comportamiento",
|
||||||
"blink": "Parpadeo",
|
"blink": "Parpadeo",
|
||||||
"configure": "Configurar",
|
"configure": "Configurar",
|
||||||
"connect": "Conectar",
|
"connect": "Conectar",
|
||||||
@@ -7,112 +8,434 @@
|
|||||||
"factory_reset": "Restablecimiento De Fábrica",
|
"factory_reset": "Restablecimiento De Fábrica",
|
||||||
"firmware_upgrade": "Actualización de firmware",
|
"firmware_upgrade": "Actualización de firmware",
|
||||||
"reboot": "Reiniciar",
|
"reboot": "Reiniciar",
|
||||||
"title": "Acciones del dispositivo",
|
"request_ie": "Solicitar IE",
|
||||||
|
"telemetry": "Telemetria",
|
||||||
|
"title": "Comandos",
|
||||||
"trace": "Rastro",
|
"trace": "Rastro",
|
||||||
"wifi_scan": "Escaneo Wifi"
|
"wifi_scan": "Escaneo Wi-Fi "
|
||||||
},
|
},
|
||||||
"blink": {
|
"blink": {
|
||||||
"blink": "Parpadeo",
|
"blink": "Parpadeo",
|
||||||
"device_leds": "LED de dispositivo",
|
"device_leds": "LED de dispositivo",
|
||||||
|
"execute_now": "¿Le gustaría establecer este patrón ahora?",
|
||||||
|
"explanation": "¿Qué patrón le gustaría establecer en este dispositivo durante 30 segundos?",
|
||||||
"pattern": "Elija el patrón que le gustaría usar:",
|
"pattern": "Elija el patrón que le gustaría usar:",
|
||||||
|
"set_leds": "Establecer LED",
|
||||||
"when_blink_leds": "¿Cuándo desea que los LED del dispositivo parpadeen?"
|
"when_blink_leds": "¿Cuándo desea que los LED del dispositivo parpadeen?"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
|
"command_success": "Comando enviado con éxito",
|
||||||
"error": "¡Error al enviar el comando!",
|
"error": "¡Error al enviar el comando!",
|
||||||
"success": "Comando enviado con éxito",
|
"error_delete_log": "Error al intentar eliminar: {{error}}",
|
||||||
"title": "Comandos del dispositivo"
|
"event_queue": "Cola de eventos",
|
||||||
|
"reboot_start": "¡El proceso de reinicio ha comenzado!",
|
||||||
|
"success": "Comando enviado con éxito, puede consultar el registro de Comandos para ver el resultado",
|
||||||
|
"title": "Historial de Comandos",
|
||||||
|
"unable_queue": "No se pudo completar la solicitud de cola de eventos: {{error}}"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
"access_policy": "Política de acceso",
|
||||||
|
"add": "Añadir",
|
||||||
|
"add_items": "Agregar articulos",
|
||||||
|
"add_note": "Añadir la nota",
|
||||||
|
"add_note_explanation": "Escriba su nueva nota a continuación y haga clic en el botón '+' donde haya terminado",
|
||||||
|
"adding_ellipsis": "Añadiendo ...",
|
||||||
|
"all": "TODOS",
|
||||||
"are_you_sure": "¿Estás seguro?",
|
"are_you_sure": "¿Estás seguro?",
|
||||||
|
"back_to_login": "Atrás para iniciar sesión",
|
||||||
|
"back_to_start": "volver a empezar",
|
||||||
|
"blacklist": "Lista negra",
|
||||||
|
"by": "Por",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"certificate": "Certificado",
|
"certificate": "Certificado",
|
||||||
|
"certificates": "Certificados",
|
||||||
|
"claim": "Reclamación",
|
||||||
"clear": "Claro",
|
"clear": "Claro",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
|
"code": "Código",
|
||||||
"command": "Mando",
|
"command": "Mando",
|
||||||
|
"commands": "comandos",
|
||||||
|
"commands_executed": "Comandos ejecutados",
|
||||||
"compatible": "Compatible",
|
"compatible": "Compatible",
|
||||||
"completed": "terminado",
|
"completed": "terminado",
|
||||||
|
"concurrent_devices": "Dispositivos concurrentes",
|
||||||
"config_id": "Config. Identificación",
|
"config_id": "Config. Identificación",
|
||||||
"confirm": "Confirmar",
|
"confirm": "Confirmar",
|
||||||
|
"confirm_stop_editing": "¿Estás seguro de que quieres dejar de editar? Esto cancelará cualquier cambio no guardado que haya realizado.",
|
||||||
"connected": "Conectado",
|
"connected": "Conectado",
|
||||||
"copied": "Copiado!",
|
"copied": "Copiado!",
|
||||||
|
"copied_to_clipboard": "¡Copiado al portapapeles!",
|
||||||
"copy_to_clipboard": "Copiar al portapapeles",
|
"copy_to_clipboard": "Copiar al portapapeles",
|
||||||
|
"create": "Crear",
|
||||||
|
"created": "creado",
|
||||||
|
"created_by": "Creado por",
|
||||||
|
"creator": "Creador",
|
||||||
|
"current": "Corriente",
|
||||||
|
"custom_date": "Fecha personalizada",
|
||||||
|
"dashboard": "Tablero",
|
||||||
"date": "Fecha",
|
"date": "Fecha",
|
||||||
|
"day": "día",
|
||||||
|
"days": "días",
|
||||||
|
"default_map": "Mapa predeterminado",
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
|
"delete_device": "Eliminar dispositivo",
|
||||||
"details": "Detalles",
|
"details": "Detalles",
|
||||||
|
"device": "Dispositivo n.º{{serialNumber}}",
|
||||||
|
"device_dashboard": "Panel de control del dispositivo",
|
||||||
|
"device_delete": "Eliminar #{{serialNumber}}",
|
||||||
|
"device_deleted": "Dispositivo eliminado correctamente",
|
||||||
|
"device_health": "Salud del dispositivo",
|
||||||
"device_list": "Listado de dispositivos",
|
"device_list": "Listado de dispositivos",
|
||||||
"device_page": "Página del dispositivo",
|
"device_page": "Ver",
|
||||||
|
"device_status": "Estado del dispositivo",
|
||||||
"devices": "Dispositivos",
|
"devices": "Dispositivos",
|
||||||
|
"devices_using_latest": "Dispositivos que utilizan el firmware más reciente",
|
||||||
|
"devices_using_unknown": "Dispositivos que utilizan firmware desconocido",
|
||||||
"dismiss": "Despedir",
|
"dismiss": "Despedir",
|
||||||
"do_now": "¡Hagan ahora!",
|
"do_now": "¡Hagan ahora!",
|
||||||
"download": "Descargar",
|
"download": "Descargar",
|
||||||
|
"duplicate": "Duplicar",
|
||||||
"duration": "Duración",
|
"duration": "Duración",
|
||||||
|
"edit": "Editar",
|
||||||
|
"edit_user": "Editar",
|
||||||
|
"email_address": "Dirección de correo electrónico",
|
||||||
|
"endpoint": "punto final",
|
||||||
|
"endpoints": "Puntos finales",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
|
"error_adding_note": "Error al agregar una nota",
|
||||||
|
"error_code": "código de error",
|
||||||
|
"errors": "Los errores",
|
||||||
|
"execute_now": "¿Le gustaría ejecutar este comando ahora?",
|
||||||
"executed": "ejecutado",
|
"executed": "ejecutado",
|
||||||
|
"exit": "salida",
|
||||||
"firmware": "Firmware",
|
"firmware": "Firmware",
|
||||||
|
"firmware_dashboard": "Panel de firmware",
|
||||||
|
"firmware_installed": "Firmware instalado",
|
||||||
|
"forgot_password": "¿Olvidaste tu contraseña?",
|
||||||
|
"forgot_password_title": "Se te olvidó tu contraseña",
|
||||||
"from": "Desde",
|
"from": "Desde",
|
||||||
|
"general_error": "Error de API, consulte a su administrador",
|
||||||
|
"go_back": "Regresa",
|
||||||
|
"hide": "Esconder",
|
||||||
|
"hour": "hora",
|
||||||
|
"hours": "horas",
|
||||||
"id": "Carné de identidad",
|
"id": "Carné de identidad",
|
||||||
|
"invalid_credentials": "Nombre de usuario y / o contraseña inválido",
|
||||||
|
"invalid_date_explanation": "Fecha no válida, utilice el calendario accesible con el botón de la derecha",
|
||||||
|
"invalid_file": "El archivo elegido no es válido, lea las instrucciones y ajuste su archivo en consecuencia",
|
||||||
|
"invalid_password": "Esta contraseña no confirma las reglas básicas de contraseña. Visite nuestra página de Política de contraseñas para obtener más información.",
|
||||||
|
"invalid_pem": "Su archivo .pem no es válido. Debe comenzar con '----- BEGIN CERTIFICATE -----' O '----- BEGIN PRIVATE KEY -----' y debe terminar con '----- END CERTIFICATE --- - 'O' ----- FIN DE CLAVE PRIVADA ----- '",
|
||||||
"ip_address": "Dirección IP",
|
"ip_address": "Dirección IP",
|
||||||
|
"ips": "IPs",
|
||||||
|
"item": "ít",
|
||||||
|
"items": "artículos",
|
||||||
|
"items_per_page": "Artículos por página:",
|
||||||
|
"key": "Llave",
|
||||||
|
"last_dashboard_refresh": "Última actualización del panel",
|
||||||
"later_tonight": "Más tarde esta noche",
|
"later_tonight": "Más tarde esta noche",
|
||||||
|
"latest": "último",
|
||||||
|
"list": "Lista",
|
||||||
"loading_ellipsis": "Cargando...",
|
"loading_ellipsis": "Cargando...",
|
||||||
"loading_more_ellipsis": "Cargando más ...",
|
"loading_more_ellipsis": "Cargando más ...",
|
||||||
"logout": "Cerrar sesión",
|
"logout": "Cerrar sesión",
|
||||||
"mac": "Dirección MAC",
|
"mac": "Dirección MAC",
|
||||||
|
"main": "Principal",
|
||||||
"manufacturer": "Fabricante",
|
"manufacturer": "Fabricante",
|
||||||
|
"memory_used": "Memoria usada",
|
||||||
|
"min_max": "Mín .: {{min}}, Máx .: {{max}}",
|
||||||
|
"minute": "minuto",
|
||||||
|
"minutes": "minutos",
|
||||||
|
"modified": "Modificado",
|
||||||
"na": "N / A",
|
"na": "N / A",
|
||||||
"need_date": "Necesitas una cita ...",
|
"need_date": "Necesitas una cita ...",
|
||||||
|
"no": "No",
|
||||||
|
"no_addresses_found": "No se encontraron direcciones",
|
||||||
|
"no_clients_found": "No se encontraron clientes",
|
||||||
|
"no_devices_found": "No se encontraron dispositivos",
|
||||||
|
"no_items": "No hay articulos",
|
||||||
|
"none": "Ninguna",
|
||||||
"not_connected": "No conectado",
|
"not_connected": "No conectado",
|
||||||
|
"of_connected": "% de dispositivos conectados",
|
||||||
"off": "Apagado",
|
"off": "Apagado",
|
||||||
"on": "en",
|
"on": "en",
|
||||||
|
"optional": "Opcional",
|
||||||
|
"overall_health": "Salud en general",
|
||||||
|
"password_policy": "Política de contraseñas",
|
||||||
|
"preferences": "Preferencias",
|
||||||
|
"preview": "Avance",
|
||||||
|
"program": "Programa",
|
||||||
|
"reason": "Razón",
|
||||||
"recorded": "Grabado",
|
"recorded": "Grabado",
|
||||||
"refresh": "Refrescar",
|
"refresh": "Refrescar",
|
||||||
"refresh_device": "Actualizar dispositivo",
|
"refresh_device": "Actualizar dispositivo",
|
||||||
|
"remove_claim": "Quitar reclamo",
|
||||||
|
"required": "Necesario",
|
||||||
"result": "Resultado",
|
"result": "Resultado",
|
||||||
|
"save": "Salvar",
|
||||||
|
"saved": "¡Salvado!",
|
||||||
|
"saving": "Ahorro...",
|
||||||
"schedule": "Programar",
|
"schedule": "Programar",
|
||||||
|
"search": "Dispositivos de búsqueda",
|
||||||
|
"second": "segundo",
|
||||||
|
"seconds": "segundos",
|
||||||
|
"seconds_elapsed": "Segundos transcurridos",
|
||||||
|
"see_details": "Ver detalles",
|
||||||
|
"select": "Seleccionar",
|
||||||
|
"serial_num": "Número de serie",
|
||||||
"serial_number": "Número de serie",
|
"serial_number": "Número de serie",
|
||||||
|
"show_all": "Mostrar todo",
|
||||||
|
"socket_connection_closed": "¡Conexión cerrada!",
|
||||||
"start": "comienzo",
|
"start": "comienzo",
|
||||||
|
"status": "Estado",
|
||||||
|
"stop_editing": "Dejar de editar",
|
||||||
"submit": "Enviar",
|
"submit": "Enviar",
|
||||||
"submitted": "Presentado",
|
"submitted": "Presentado",
|
||||||
"success": "Éxito",
|
"success": "Éxito",
|
||||||
|
"system": "Sistema",
|
||||||
|
"table": "Mesa",
|
||||||
|
"time_per_device": "Dispositivo / segundo",
|
||||||
|
"timestamp": "hora",
|
||||||
"to": "a",
|
"to": "a",
|
||||||
|
"type": "Tipo",
|
||||||
|
"type_for_options": "Escriba el valor que necesita crear ...",
|
||||||
|
"type_for_options_format": "Escriba un valor del formato válido ({{format}}) ...",
|
||||||
|
"unable_to_connect": "No se puede conectar al dispositivo",
|
||||||
|
"unable_to_delete": "No se puede eliminar",
|
||||||
"unknown": "Desconocido",
|
"unknown": "Desconocido",
|
||||||
|
"up_to_date": "Dispositivos actualizados",
|
||||||
|
"uptimes": "Tiempos de actividad",
|
||||||
|
"use_file": "Usar archivo",
|
||||||
"uuid": "UUID",
|
"uuid": "UUID",
|
||||||
|
"vendors": "Vendedores",
|
||||||
"view_more": "Ver más",
|
"view_more": "Ver más",
|
||||||
|
"visibility": "Visibilidad",
|
||||||
|
"waiting_for_update": "Esperando actualización",
|
||||||
"yes": "Sí"
|
"yes": "Sí"
|
||||||
},
|
},
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
"add_configuration": "Agregar configuración",
|
||||||
|
"add_new_block": "Agregar nuevo bloque de configuración",
|
||||||
|
"add_or_link": "Vincular o agregar",
|
||||||
|
"add_radio": "Agregar radio",
|
||||||
|
"ca_cert_explanation": "Utilice un archivo .pem que comience con \"----- BEGIN CERTIFICATE -----\" y termine con \"----- END CERTIFICATE -----\". El resultado se mostrará en el campo siguiente. También puede copiar y pegar el certificado que le gustaría usar directamente.",
|
||||||
|
"cannot_delete": "Esta configuración no se puede eliminar porque está siendo utilizada por al menos una entidad, lugar o dispositivo",
|
||||||
|
"choose_radio_band": "¿Qué banda de radio te gustaría crear?",
|
||||||
|
"choose_section": "Qué sección le gustaría que contenga este bloque?",
|
||||||
|
"configuration_browser": "Navegador de configuración",
|
||||||
|
"configurations": "Configuraciones",
|
||||||
|
"create": "Crear Configuración",
|
||||||
|
"create_config": "Crear nueva configuración",
|
||||||
|
"create_new_configuration": "Crear nuevo elemento de configuración",
|
||||||
"created": "creado",
|
"created": "creado",
|
||||||
"details": "Detalles del dispositivo",
|
"creation_success": "¡Configuración creada con éxito!",
|
||||||
|
"currently_associated": "Configuración asociada actual: {{config}}",
|
||||||
|
"currently_selected_config": "Configuración seleccionada actualmente: {{config}}",
|
||||||
|
"default_configs": "Configuraciones predeterminadas",
|
||||||
|
"default_configurations": "Configuraciones predeterminadas",
|
||||||
|
"delete_config": "Eliminar Configuración",
|
||||||
|
"details": "Detalles",
|
||||||
"device_password": "Contraseña",
|
"device_password": "Contraseña",
|
||||||
"last_configuration_change": "Último cambio de configuración",
|
"device_type": "Tipo de dispositivo",
|
||||||
|
"device_types": "Tipos de dispositivos",
|
||||||
|
"devices_affected": "Dispositivos afectados por esta configuración:",
|
||||||
|
"edit_configuration": "Editar configuración",
|
||||||
|
"error_delete": "Error al intentar eliminar: {{error}}",
|
||||||
|
"error_delete_blacklist": "Error al eliminar de la lista negra: {{error}}",
|
||||||
|
"error_fetching_config": "Error al obtener la configuración",
|
||||||
|
"error_trying_delete": "Error al intentar eliminar: {{error}}",
|
||||||
|
"error_update": "Error: {{error}}",
|
||||||
|
"explanation": "Explicación",
|
||||||
|
"key_pem_explanation": "Seleccione el archivo .pem",
|
||||||
|
"last_configuration_change": "CAMBIO DE CONFIGURACIÓN",
|
||||||
"last_configuration_download": "Descarga de la última configuración",
|
"last_configuration_download": "Descarga de la última configuración",
|
||||||
"location": "Ubicación",
|
"location": "Ubicación",
|
||||||
|
"need_device_type": "Cada configuración debe admitir al menos un tipo de dispositivo",
|
||||||
|
"no_associated_config": "Sin configuración asociada",
|
||||||
|
"no_associated_configuration": "Sin configuraciones asociadas",
|
||||||
|
"note": "Nota",
|
||||||
"notes": "Notas",
|
"notes": "Notas",
|
||||||
"owner": "Propietario",
|
"owner": "Propietario",
|
||||||
"title": "Configuración del dispositivo",
|
"select_configuration": "Seleccione esta configuración",
|
||||||
|
"success_block_delete": "Bloque de configuración eliminado con éxito",
|
||||||
|
"success_update": "¡Configuración actualizada con éxito!",
|
||||||
|
"successful_delete": "Configuración eliminada!",
|
||||||
|
"support_all": "Apoyar a todos",
|
||||||
|
"supported_device_types": "Tipos de dispositivos compatibles",
|
||||||
|
"title": "Configuración",
|
||||||
"type": "Tipo de dispositivo",
|
"type": "Tipo de dispositivo",
|
||||||
|
"used_by": "Usado por",
|
||||||
|
"used_by_details": "{{entities}} Entidades, {{venues}} lugares y {{devices}} dispositivos",
|
||||||
|
"uuid": "ID de configuración",
|
||||||
|
"view_affected_devices": "Ver dispositivos afectados",
|
||||||
|
"view_config": "Ver configuración",
|
||||||
|
"view_in_use": "Ver en uso",
|
||||||
"view_json": "Ver JSON sin procesar"
|
"view_json": "Ver JSON sin procesar"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"choose_file": "Debe elegir un archivo .json válido:",
|
"choose_file": "Debe elegir un archivo .json válido:",
|
||||||
"enter_new": "Ingrese la nueva configuración del dispositivo JSON:",
|
"enter_new": "Ingrese la nueva configuración del dispositivo JSON:",
|
||||||
"placeholder": "Configurar JSON",
|
"placeholder": "Configurar JSON",
|
||||||
"title": "Configurar dispositivo",
|
"title": "Configurar",
|
||||||
"valid_json": "Debes ingresar un JSON válido"
|
"valid_json": "Debes ingresar un JSON válido"
|
||||||
},
|
},
|
||||||
|
"connect": {
|
||||||
|
"error_trying_to_connect": "Error al intentar conectarse al dispositivo: {{error}}"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"access_pin": "PIN de acceso",
|
||||||
|
"add_contact": "Agregar contacto",
|
||||||
|
"contact": "Contacto",
|
||||||
|
"create_contact": "Crear contacto",
|
||||||
|
"currently_selected_contact": "Contacto seleccionado actualmente: {{contact}}",
|
||||||
|
"delete": "¿Borrar contacto?",
|
||||||
|
"error_assign": "Error al intentar asignar el contacto: {{error}}",
|
||||||
|
"error_creation": "Error al intentar crear contacto: {{error}}",
|
||||||
|
"error_delete": "Error al intentar eliminar el contacto: {{error}}",
|
||||||
|
"error_fetching_list": "Error al obtener los contactos",
|
||||||
|
"error_fetching_single": "Error al obtener el contacto: {{error}}",
|
||||||
|
"error_unassign": "Error al intentar anular la asignación del contacto: {{error}}",
|
||||||
|
"first_name": "Nombre de pila",
|
||||||
|
"identifier": "Identificador",
|
||||||
|
"initials": "Iniciales",
|
||||||
|
"last_name": "Apellido",
|
||||||
|
"no_associated_contact": "Sin contacto asociado",
|
||||||
|
"primary_email": "Correo electrónico principal",
|
||||||
|
"salutation": "saludo",
|
||||||
|
"secondary_email": "Email secundario",
|
||||||
|
"successful_assign": "¡Contacto asignado correctamente!",
|
||||||
|
"successful_creation": "Contacto Creado!",
|
||||||
|
"successful_delete": "¡Contacto eliminado con éxito!",
|
||||||
|
"successful_unassign": "Contacto no asignado correctamente",
|
||||||
|
"successful_update": "Contacto actualizado con éxito",
|
||||||
|
"title": "Contactos",
|
||||||
|
"type": "Tipo",
|
||||||
|
"update_error": "Error al actualizar el contacto: {{error}}",
|
||||||
|
"user_title": "Título",
|
||||||
|
"visual": "Nombre de correspondencia"
|
||||||
|
},
|
||||||
"delete_command": {
|
"delete_command": {
|
||||||
"explanation": "¿Está seguro de que desea eliminar este comando? Esta acción no es reversible.",
|
"explanation": "¿Está seguro de que desea eliminar este comando? Esta acción no es reversible.",
|
||||||
"title": "Eliminar comando"
|
"title": "Eliminar comando"
|
||||||
},
|
},
|
||||||
|
"delete_logs": {
|
||||||
|
"date": "Seleccione la fecha del registro más antiguo que le gustaría conservar",
|
||||||
|
"device_logs_title": "Eliminar registros de dispositivos",
|
||||||
|
"explanation": "Esto eliminará todos los {{object}} antes de la fecha que elija. Tenga cuidado, esta acción no es reversible.",
|
||||||
|
"healthchecks_title": "Eliminar comprobaciones de estado"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"add_to_blacklist": "Agregar dispositivo a la lista negra",
|
||||||
|
"all_devices": "Todos los dispositivos",
|
||||||
|
"already_running_command": "El dispositivo ya está ejecutando un comando, intente más tarde",
|
||||||
|
"blacklisted_on": "Fecha",
|
||||||
|
"capabilities": "capacidades",
|
||||||
|
"certificate_explanation": "Certificados de dispositivos conectados",
|
||||||
|
"count_explanation": "Dispositivos que apuntan a esta instancia de puerta de enlace",
|
||||||
|
"edit_blacklist": "Editar dispositivo incluido en la lista negra",
|
||||||
|
"error_adding_blacklist": "Error al agregar el dispositivo a la lista negra: {{error}}",
|
||||||
|
"error_edit_blacklist": "Error al editar la lista negra: {{error}}",
|
||||||
|
"error_fetching_device": "Error al obtener la información del dispositivo: {{error}}",
|
||||||
|
"error_fetching_devices": "Error al recuperar dispositivos: {{error}}",
|
||||||
|
"firmware_count_explanation": "Esta es la cantidad total de dispositivos que se agregaron a este servidor de firmware, incluidos los dispositivos que actualmente no apuntan al servidor de puerta de enlace relacionado.",
|
||||||
|
"health_explanation": "Estado de los dispositivos conectados ((Dispositivos = 100% * 100 + Dispositivos> 90% * 95 + Dispositivos> 60% * 75 + Dispositivos <60% * 35) / Dispositivos conectados)",
|
||||||
|
"mac_not_found": "Número de serie no encontrado, lo redirige a la página Dispositivos",
|
||||||
|
"memory_explanation": "Cantidad de dispositivos conectados con la memoria correspondiente utilizada%",
|
||||||
|
"remove_from_blacklist": "ELIMINAR DE LA LISTA NEGRA",
|
||||||
|
"success_added_blacklist": "¡Dispositivo agregado exitosamente a la lista negra!",
|
||||||
|
"success_edit_blacklist": "Lista negra editada con éxito!",
|
||||||
|
"success_removed_blacklist": "¡Dispositivo eliminado con éxito de la lista negra!",
|
||||||
|
"uptimes_explanation": "Cantidad de dispositivos conectados según su tiempo de actividad"
|
||||||
|
},
|
||||||
"device_logs": {
|
"device_logs": {
|
||||||
"log": "Iniciar sesión",
|
"log": "Iniciar sesión",
|
||||||
"severity": "Gravedad",
|
"severity": "Gravedad",
|
||||||
"title": "Registros de dispositivos"
|
"title": "Registros"
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"add_child": "Agregar entidad secundaria a {{entityName}}",
|
||||||
|
"add_failure": "Error, el servidor devolvió: {{error}}",
|
||||||
|
"add_ips": "Administrar direcciones IP",
|
||||||
|
"add_root": "Agregar entidad raíz",
|
||||||
|
"add_success": "¡Entidad creada con éxito!",
|
||||||
|
"assigned_inventory": "Inventario asignado",
|
||||||
|
"cannot_delete": "No puede eliminar entidades que tienen hijos. Elimina los hijos de esta entidad para poder eliminarla.",
|
||||||
|
"confirm_map_delete": "¿Está seguro de que desea eliminar el mapa {{name}}? Esta acción no se puede revertir",
|
||||||
|
"currently_selected_entity": "Entidad seleccionada actualmente: {{config}}",
|
||||||
|
"currently_selected_venue": "Lugar seleccionado actualmente: {{config}}",
|
||||||
|
"delete_success": "Entidad eliminada correctamente",
|
||||||
|
"delete_warning": "Advertencia: esta operación no se puede revertir",
|
||||||
|
"duplicate_from_node": "Duplicar con un nodo raíz específico",
|
||||||
|
"duplicate_map": "Mapa duplicado",
|
||||||
|
"duplicate_with_node": "Duplicar {{mapName}} con {{rootName}} como nodo raíz",
|
||||||
|
"edit_failure": "Actualización fallida: {{error}}",
|
||||||
|
"enter_here": "Ingrese las IP que desea agregar aquí",
|
||||||
|
"entire_tree": "Mapa de red",
|
||||||
|
"entities": "entidades",
|
||||||
|
"entity": "Entidad",
|
||||||
|
"error_deleting_map": "Error al eliminar el mapa: {{error}}",
|
||||||
|
"error_fetch_entity": "Error al obtener la información de la entidad",
|
||||||
|
"error_fetching": "Error al recuperar entidades",
|
||||||
|
"error_fetching_map": "Error al obtener el mapa: {{error}}",
|
||||||
|
"error_fetching_tree": "Error al obtener el árbol: {{error}}",
|
||||||
|
"error_saving": "Error al guardar la entidad",
|
||||||
|
"error_saving_map": "Error al guardar el mapa: {{error}}",
|
||||||
|
"higher_priority": "Dar mayor prioridad",
|
||||||
|
"ip_detection": "Detección de IP",
|
||||||
|
"ip_formats": "Puede agregar direcciones IPv4 o IPv6 en los siguientes formatos:",
|
||||||
|
"lower_priority": "Hacer una prioridad más baja",
|
||||||
|
"map": "Mapa",
|
||||||
|
"map_delete_success": "¡Mapa eliminado correctamente!",
|
||||||
|
"need_select_entity": "Debe seleccionar una entidad de la siguiente tabla",
|
||||||
|
"no_ips": "No se seleccionaron direcciones IP",
|
||||||
|
"not_assigned": "No asignado",
|
||||||
|
"only_unassigned": "Solo sin asignar",
|
||||||
|
"select_entity": "Seleccione esta entidad",
|
||||||
|
"selected_entity": "Entidad seleccionada",
|
||||||
|
"selected_map": "Mapa seleccionado",
|
||||||
|
"tree_saved": "¡Mapa guardado con éxito!",
|
||||||
|
"update_failure_error": "Error al intentar actualizar la entidad: {{error}}",
|
||||||
|
"valid_serial": "Debe ser un número de serie válido (12 caracteres HEX)",
|
||||||
|
"venues": "Sedes"
|
||||||
},
|
},
|
||||||
"factory_reset": {
|
"factory_reset": {
|
||||||
"redirector": "Mantener el redirector:",
|
"redirector": "Mantener el redirector:",
|
||||||
"title": "Dispositivo de restablecimiento de fábrica",
|
"reset": "Reiniciar",
|
||||||
|
"resetting": "Restableciendo…",
|
||||||
|
"title": "Restablecimiento De Fábrica",
|
||||||
"warning": "Advertencia: una vez que envíe, esto no se podrá revertir"
|
"warning": "Advertencia: una vez que envíe, esto no se podrá revertir"
|
||||||
},
|
},
|
||||||
|
"firmware": {
|
||||||
|
"age_explanation": "Número medio de días para todos los dispositivos de los que podemos obtener ese valor",
|
||||||
|
"average_age": "Edad promedio del firmware",
|
||||||
|
"choose_custom": "Escoger",
|
||||||
|
"details_title": "Detalles de la imagen n. °{{image}} ",
|
||||||
|
"device_type": "Tipo de dispositivo",
|
||||||
|
"device_types": "Tipos de dispositivos",
|
||||||
|
"downloads": "Descargas",
|
||||||
|
"error_fetching_latest": "Error al obtener el firmware más reciente",
|
||||||
|
"from_release": "Desde",
|
||||||
|
"history_title": "Historia",
|
||||||
|
"image": "Imagen",
|
||||||
|
"image_date": "Fecha de la imagen",
|
||||||
|
"installed_firmware": "Firmware instalado",
|
||||||
|
"latest_explanation": "Dispositivos que ejecutan firmware reconocido en su última versión",
|
||||||
|
"latest_version_installed": "Última versión instalada",
|
||||||
|
"newer_firmware_available": "Nuevas revisiones disponibles",
|
||||||
|
"reinstall_latest": "Reinstalar",
|
||||||
|
"release": "Lanzamiento",
|
||||||
|
"revision": "Revisión",
|
||||||
|
"show_dev": "Mostrar lanzamientos para desarrolladores",
|
||||||
|
"size": "Tamaño",
|
||||||
|
"status": "Estado del firmware",
|
||||||
|
"title": "Firmware",
|
||||||
|
"to_release": "A",
|
||||||
|
"unknown_firmware_status": "Estado de firmware desconocido",
|
||||||
|
"upgrade": "Mejorar",
|
||||||
|
"upgrade_command_submitted": "Actualización en curso...",
|
||||||
|
"upgrade_to_latest": "último",
|
||||||
|
"upgrade_to_version": "Actualizar a esta revisión",
|
||||||
|
"upgrading": "Actualizando ..."
|
||||||
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"coreui_for_react": "CoreUI para React",
|
"coreui_for_react": "CoreUI para React",
|
||||||
"powered_by": "energizado por",
|
"powered_by": "energizado por",
|
||||||
@@ -120,43 +443,382 @@
|
|||||||
},
|
},
|
||||||
"health": {
|
"health": {
|
||||||
"sanity": "Cordura",
|
"sanity": "Cordura",
|
||||||
"title": "Salud del dispositivo"
|
"title": "Salud"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"add_child": "Agregar lugar secundario",
|
||||||
|
"add_child_venue": "Agregar lugar infantil a {{entityName}}",
|
||||||
|
"add_tag": "Crear etiqueta",
|
||||||
|
"add_tag_to": "Agregar nuevo dispositivo a {{name}}",
|
||||||
|
"add_venue": "Agregar lugar",
|
||||||
|
"assign_ent_ven": "Asignar a entidad o lugar",
|
||||||
|
"assign_entity_instructions": "Puede encontrar la entidad a la que desea que se asigne esta etiqueta utilizando el menú a continuación, o puede pegar manualmente el UUID de la entidad en el campo de arriba.",
|
||||||
|
"assign_error": "Error al intentar asignar la etiqueta",
|
||||||
|
"assign_to_entity": "Asignar a entidad",
|
||||||
|
"bulk_delete_assigned": "¿Le gustaría eliminar de forma masiva los dispositivos asignados dentro de su archivo?",
|
||||||
|
"bulk_delete_assigned_warning": "Advertencia: esta acción no es reversible",
|
||||||
|
"bulk_delete_devices": "Dispositivos de eliminación masiva",
|
||||||
|
"bulk_delete_devices_not_found": "{{number}} dispositivos no encontrados",
|
||||||
|
"bulk_delete_explanation": "Para eliminar dispositivos de forma masiva, use un archivo CSV con una columna llamada SerialNumber",
|
||||||
|
"bulk_delete_test": "Validar archivo",
|
||||||
|
"close_entity_menu": "Cerrar el menú Editar entidad",
|
||||||
|
"delete_devices": "BORRAR DISPOSITIVOS",
|
||||||
|
"delete_errors": "{{number}} Eliminar errores del dispositivo",
|
||||||
|
"delete_tag": "Eliminar etiqueta",
|
||||||
|
"delete_venue": "Eliminar el lugar de forma permanente",
|
||||||
|
"deleted_devices": "{{number}} Dispositivos eliminados",
|
||||||
|
"deleting": "Eliminando ...",
|
||||||
|
"deletion_failure": "Error de borrado",
|
||||||
|
"devices_assigned": "{{number}} dispositivos existentes asignados y actualizados",
|
||||||
|
"devices_created": "{{number}} dispositivos creados",
|
||||||
|
"devices_deleted": "Dispositivos eliminados",
|
||||||
|
"devices_errors_while_creating": "{{number}} fallaron las creaciones del dispositivo",
|
||||||
|
"devices_errors_while_updating": "{{number}} fallaron las actualizaciones del dispositivo",
|
||||||
|
"devices_found_assigned": "{{number}} dispositivos encontrados y ya asignados a una entidad o lugar",
|
||||||
|
"devices_found_unassigned": "{{number}} dispositivos encontrados, pero no asignados",
|
||||||
|
"devices_imported": " Dispositivos importados",
|
||||||
|
"devices_not_found": "{{number}} dispositivos sin conflicto",
|
||||||
|
"devices_tested": "Dispositivos probados",
|
||||||
|
"duplicate_serial": "Número de serie ya utilizado en el archivo (duplicado)",
|
||||||
|
"error_create_venue": "Error al crear el lugar",
|
||||||
|
"error_delete_tag": "Error al eliminar la etiqueta de inventario",
|
||||||
|
"error_get_venue": "Error al recuperar lugares",
|
||||||
|
"error_pushing_config": "Error al intentar enviar la configuración al dispositivo: {{error}}",
|
||||||
|
"error_retrieving": "Se produjo un error al recuperar las etiquetas de inventario",
|
||||||
|
"error_unassign": "Error durante la operación de anulación de asignación",
|
||||||
|
"error_update_venue": "Error al actualizar el lugar",
|
||||||
|
"error_venue_delete": "Error al eliminar el lugar",
|
||||||
|
"error_within_file": "{{number}} dispositivos con información incorrecta en el archivo (se ignorarán)",
|
||||||
|
"file_error": "Parece haber un error en su archivo. Asegúrese de que el archivo esté en formato CSV y contenga las 5 columnas mencionadas anteriormente en la primera línea del archivo",
|
||||||
|
"final_delete_results": "Resultados de eliminación final",
|
||||||
|
"final_import_results": "Resultados finales de importación",
|
||||||
|
"import_assigned_devices": "¿Quieres reasignarlos con esta importación?",
|
||||||
|
"import_assigned_devices_explanation": "Algunos dispositivos entran en conflicto con los dispositivos ya asignados. Debe resolver esos problemas antes de importar.",
|
||||||
|
"import_devices": "Importar dispositivos",
|
||||||
|
"import_devices_explanation": "Para importar dispositivos de forma masiva, debe utilizar un archivo CSV con las siguientes columnas: Número de serie, Nombre, Descripción, Tipo de dispositivo, Texto de nota",
|
||||||
|
"import_devices_to": "Importar dispositivos a {{name}}",
|
||||||
|
"import_existing_devices": "¿Actualizarlos y asignarlos?",
|
||||||
|
"import_existing_devices_explanation": "Algunos dispositivos ya existen en el inventario y no están asignados.",
|
||||||
|
"importing": "Importador...",
|
||||||
|
"last_modification": "Última modificación",
|
||||||
|
"no_devices_to_delete": "No hay dispositivos para eliminar",
|
||||||
|
"no_devices_to_import": "¡No hay dispositivos válidos para crear o actualizar!",
|
||||||
|
"note_text": "Texto de la nota",
|
||||||
|
"passed_tests": "Se aprobaron todas las pruebas, ¡sus dispositivos están listos para importar!",
|
||||||
|
"serial_number_required": "Error: falta el número de serie",
|
||||||
|
"showing_top_10": "Aquí hay una vista previa de la información que hemos recuperado de su archivo:",
|
||||||
|
"sub_venues": "Subvenues",
|
||||||
|
"subscriber": "Abonado",
|
||||||
|
"successful_assign": "Etiqueta asignada correctamente",
|
||||||
|
"successful_tag_delete": "Etiqueta de inventario eliminada correctamente",
|
||||||
|
"successful_tag_update": "Etiqueta actualizada correctamente",
|
||||||
|
"successful_unassign": "La operación de anulación de asignación se realizó correctamente",
|
||||||
|
"successful_venue_create": "Lugar creado con éxito",
|
||||||
|
"successful_venue_delete": "Lugar eliminado correctamente",
|
||||||
|
"successful_venue_update": "Lugar actualizado con éxito",
|
||||||
|
"tag_created": "Etiqueta de inventario creada correctamente",
|
||||||
|
"tag_creation_error": "Error al intentar crear una etiqueta de inventario",
|
||||||
|
"tag_update_error": "Error al actualizar la etiqueta",
|
||||||
|
"tags_assigned_to": "Etiquetas de inventario asignadas a {{name}}",
|
||||||
|
"test_import": "Validar datos de importación",
|
||||||
|
"test_results": "Resultados de la prueba",
|
||||||
|
"title": "Inventario",
|
||||||
|
"type_invalid": "Error: tipo de dispositivo no válido",
|
||||||
|
"unassign": "Anular asignación",
|
||||||
|
"unassign_tag": "Anular asignación de etiqueta de entidad",
|
||||||
|
"unassigned_deleted_devices": "{{number}} Dispositivos eliminados y sin asignar",
|
||||||
|
"unassigned_tags": "Etiquetas sin asignar",
|
||||||
|
"validating_import_file": "Validando archivo y datos de importación ...",
|
||||||
|
"venue": "Lugar de encuentro",
|
||||||
|
"view_in_gateway": "Ver en Gateway"
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"add": "Añade una ubicación",
|
||||||
|
"building_name": "Nombre del edificio",
|
||||||
|
"city": "ciudad",
|
||||||
|
"country": "País",
|
||||||
|
"create": "Crear ubicación",
|
||||||
|
"currently_selected": "Ubicación seleccionada actualmente: {{location}}",
|
||||||
|
"delete": "¿Eliminar ubicación?",
|
||||||
|
"error_assign": "Error al intentar asignar la ubicación: {{error}}",
|
||||||
|
"error_creation": "Error al intentar crear ubicaciones: {{error}}",
|
||||||
|
"error_delete": "Error al eliminar la ubicación: {{error}}",
|
||||||
|
"error_fetching_single": "Error al intentar obtener la ubicación: {{error}}",
|
||||||
|
"geocode": "Geocode",
|
||||||
|
"mobiles": "MOBILES",
|
||||||
|
"no_associated": "Sin ubicación asociada",
|
||||||
|
"phones": "Los telefonos",
|
||||||
|
"postal": "código postal",
|
||||||
|
"search": "Busque ubicaciones para completar automáticamente los campos a continuación",
|
||||||
|
"state": "Estado",
|
||||||
|
"street_address": "Dirección",
|
||||||
|
"successful_creation": "¡Ubicación creada con éxito!",
|
||||||
|
"successful_delete": "¡Ubicación eliminada con éxito!",
|
||||||
|
"successful_update": "¡Ubicación actualizada con éxito!",
|
||||||
|
"successfully_assigned": "¡Ubicación asignada correctamente!",
|
||||||
|
"title": "Ubicaciones",
|
||||||
|
"update_error": "Error al actualizar la ubicación: {{error}}"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
|
"account_verification": "Verificación de la cuenta",
|
||||||
|
"authentication_expired": "Autenticación caducada, vuelva a iniciar el proceso de inicio de sesión",
|
||||||
|
"change_password": "Cambia la contraseña",
|
||||||
|
"change_password_error": "Error al cambiar la contraseña. Asegúrese de que la nueva contraseña sea válida visitando la página 'Política de contraseñas'",
|
||||||
|
"change_password_instructions": "Ingrese y confirme su nueva contraseña",
|
||||||
|
"changing_password": "Cambio de contraseña ...",
|
||||||
|
"confirm_new_password": "confirmar nueva contraseña",
|
||||||
|
"different_passwords": "Debes ingresar la misma contraseña dos veces",
|
||||||
|
"email_code_validation": "Por favor, marque su casilla de correo electrónico e ingrese el código de verificación que le acabamos de enviar en la casilla a continuación.",
|
||||||
|
"forgot_password_error": "Error al intentar enviar el correo electrónico de Olvidé mi contraseña. Asegúrese de que este ID de usuario esté asociado a una cuenta.",
|
||||||
|
"forgot_password_explanation": "Ingrese su nombre de usuario para recibir un correo electrónico con las instrucciones para restablecer su contraseña",
|
||||||
|
"forgot_password_success": "Pronto debería recibir un correo electrónico con las instrucciones para restablecer su contraseña. Asegúrese de verificar su correo no deseado si no puede encontrar el correo electrónico",
|
||||||
|
"logging_in": "Iniciar sesión...",
|
||||||
"login": "Iniciar sesión",
|
"login": "Iniciar sesión",
|
||||||
"login_error": "Error de inicio de sesión, confirme que su nombre de usuario, contraseña y URL de puerta de enlace son válidos",
|
"login_error": "Error de inicio de sesión, asegúrese de que la información que proporciona sea válida",
|
||||||
|
"new_password": "Nueva contraseña",
|
||||||
"password": "Contraseña",
|
"password": "Contraseña",
|
||||||
"please_enter_gateway": "Ingrese una URL de puerta de enlace",
|
"phone_validation_explanation": "Verifique su dispositivo móvil e ingrese el código de verificación que le acabamos de enviar en el cuadro a continuación",
|
||||||
|
"please_enter_gateway": "Ingrese una URL de uCentralSec",
|
||||||
"please_enter_password": "Por favor, introduzca su contraseña",
|
"please_enter_password": "Por favor, introduzca su contraseña",
|
||||||
"please_enter_username": "Por favor, ingrese su nombre de usuario",
|
"please_enter_username": "Por favor, ingrese su nombre de usuario",
|
||||||
|
"previously_used": "La contraseña se usó anteriormente",
|
||||||
|
"send_forgot": "Enviar correo electrónico",
|
||||||
|
"sending_ellipsis": "Enviando...",
|
||||||
"sign_in_to_account": "Iniciar sesión en su cuenta",
|
"sign_in_to_account": "Iniciar sesión en su cuenta",
|
||||||
"username": "Nombre de usuario"
|
"url": "URL de uCentralSec",
|
||||||
|
"username": "Nombre de usuario",
|
||||||
|
"verification_code": "Ingrese su verificación aquí",
|
||||||
|
"wrong_code": "El código de verificación que se ingresó no es válido."
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"provisioning": "Aprovisionamiento"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"directions": "¿Cuándo le gustaría reiniciar este dispositivo?",
|
"directions": "¿Cuándo le gustaría reiniciar este dispositivo?",
|
||||||
"title": "Reiniciar dispositivo"
|
"now": "¿Le gustaría reiniciar este dispositivo ahora?",
|
||||||
|
"title": "Reiniciar"
|
||||||
},
|
},
|
||||||
"scan": {
|
"scan": {
|
||||||
"active": "Habilitar escaneo activo",
|
"active": "Habilitar escaneo activo",
|
||||||
"channel": "Canal",
|
"channel": "Canal",
|
||||||
"directions": "Ejecute un escaneo wifi de este dispositivo, que debería tomar aproximadamente 25 segundos.",
|
"directions": "Ejecute un escaneo wifi de este dispositivo, que debería tomar aproximadamente 25 segundos.",
|
||||||
"results": "Resultados de escaneo Wifi"
|
"re_scan": "Vuelva a escanear",
|
||||||
|
"result_directions": "Puede hacer clic en el botón 'Escanear' en la parte superior derecha para $t(scan.re_scan)",
|
||||||
|
"results": "Resultados de escaneo Wi-Fi",
|
||||||
|
"scan": "Escanear",
|
||||||
|
"scanning": "Exploración... ",
|
||||||
|
"waiting_directions": "Espere el resultado del escaneo. Esto puede tardar hasta 25 segundos. Puede salir y ver los resultados de la tabla de comandos más adelante."
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Ajustes"
|
||||||
|
},
|
||||||
|
"simulation": {
|
||||||
|
"add": "Agregar simulación",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"cancel_success": "¡La ejecución de la simulación se canceló con éxito!",
|
||||||
|
"check_ongoing_sims": "Seguir Sim en curso",
|
||||||
|
"client_interval": "Intervalo de cliente",
|
||||||
|
"delete_simulation": "Eliminar Sim. {{name}}",
|
||||||
|
"end": "Término",
|
||||||
|
"error_creating": "Error al crear la simulación: {{error}}",
|
||||||
|
"error_delete": "Error al eliminar la simulación: {{error}}",
|
||||||
|
"error_devices": "Dispositivos de error",
|
||||||
|
"error_edit": "Error al intentar guardar la simulación: {{error}}",
|
||||||
|
"error_edit_run": "Error al intentar cambiar el estado de ejecución: {{error}}",
|
||||||
|
"error_fetching_simulations": "Error al obtener simulaciones: {{error}}",
|
||||||
|
"error_start_run": "Error al intentar iniciar una ejecución de simulación: {{error}}",
|
||||||
|
"gateway": "Puerta",
|
||||||
|
"healtcheck_interval": "Intervalo de comprobación de estado",
|
||||||
|
"keep_alive": "Mantener viva",
|
||||||
|
"last_refresh": "Última actualización",
|
||||||
|
"length": "Longitud",
|
||||||
|
"live_devices": "Dispositivos en vivo",
|
||||||
|
"mac_prefix": "Prefijo MAC",
|
||||||
|
"max_associations": "Max. Asociaciones",
|
||||||
|
"max_clients": "Max. Clientela",
|
||||||
|
"messages_transmitted": "Mensajes TX",
|
||||||
|
"min_associations": "Min. Asociaciones",
|
||||||
|
"min_clients": "Min. Clientela",
|
||||||
|
"pause": "pausa",
|
||||||
|
"pause_success": "¡Ejecutar en pausa!",
|
||||||
|
"prefix_length": "Obligatorio, debe tener una longitud de 6 caracteres",
|
||||||
|
"previous_runs": "Ejecuciones anteriores",
|
||||||
|
"received": "recibido",
|
||||||
|
"received_messages": "Msgs RX",
|
||||||
|
"reconnect_interval": "Intervalo de reconexión",
|
||||||
|
"resume": "Currículum",
|
||||||
|
"resume_success": "¡Ejecutar reanudado!",
|
||||||
|
"run": "Ejecución de simulación",
|
||||||
|
"run_simulation": "Ejecutar simulación",
|
||||||
|
"started": "Empezado",
|
||||||
|
"state_interval": "Intervalo de estado",
|
||||||
|
"stop": "Detener",
|
||||||
|
"stop_success": "¡Corre, detenido!",
|
||||||
|
"success_creating": "¡Simulación creada con éxito!",
|
||||||
|
"success_run_start": "¡Ejecución iniciada con éxito!",
|
||||||
|
"successful_delete": "¡Simulación eliminada con éxito!",
|
||||||
|
"successful_edit": "¡Simulación editada con éxito!",
|
||||||
|
"threads": "Trapos",
|
||||||
|
"time_full_devices": "Tiempo para dispositivos completos",
|
||||||
|
"title": "Simulaciones",
|
||||||
|
"transmitted": "Transmitido",
|
||||||
|
"valid_cert": "Certificado válido",
|
||||||
|
"valid_key": "Clave válida"
|
||||||
},
|
},
|
||||||
"statistics": {
|
"statistics": {
|
||||||
"data": "Datos (KB)",
|
"data": "Datos (KB)",
|
||||||
"title": "estadística"
|
"data_mb": "Datos (MB)",
|
||||||
|
"latest_statistics": "Últimas estadísticas",
|
||||||
|
"lifetime_stats": "Estadísticas de por vida",
|
||||||
|
"memory": "Memoria",
|
||||||
|
"no_interfaces": "No hay estadísticas de vida útil de la interfaz disponibles",
|
||||||
|
"show_latest": "Últimas estadísticas",
|
||||||
|
"title": "estadística",
|
||||||
|
"used": "Memoria usada %"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"connection_status": "Estado",
|
||||||
|
"error": "Los datos de estado no están disponibles",
|
||||||
|
"last_contact": "Último contacto",
|
||||||
|
"load_averages": "Carga (1/5/15 m.)",
|
||||||
|
"localtime": "Hora local",
|
||||||
|
"memory": "Memoria usada",
|
||||||
|
"percentage_free": "{{percentage}}% de {{total}} gratis",
|
||||||
|
"percentage_used": "{{percentage}}% de {{total}} utilizado",
|
||||||
|
"title": "#{{serialNumber}} Estado",
|
||||||
|
"total_memory": "Memoria total",
|
||||||
|
"uptime": "Tiempo de actividad",
|
||||||
|
"used_total_memory": "{{used}} usado / {{total}} total"
|
||||||
|
},
|
||||||
|
"subscriber": {
|
||||||
|
"add_device_subscriber_explanation": "Para reclamar otros dispositivos, puede usar nuestra barra de búsqueda o reclamar directamente desde la tabla. Si un dispositivo ya fue reclamado por un usuario, deberá ir a sus detalles y anular la asignación antes de reclamarlo.",
|
||||||
|
"create": "Crear suscriptor",
|
||||||
|
"devices_one": "{{count}} dispositivo",
|
||||||
|
"devices_other": "{{count}} dispositivos",
|
||||||
|
"edit": "Editar suscriptor",
|
||||||
|
"error_create": "Error al crear el suscriptor: {{error}}",
|
||||||
|
"error_delete": "Error al eliminar el suscriptor: {{error}}",
|
||||||
|
"error_fetching": "Error al obtener suscriptores: {{error}}",
|
||||||
|
"error_fetching_single": "Error al obtener el suscriptor: {{error}}",
|
||||||
|
"error_update": "Error al actualizar el suscriptor: {{error}}",
|
||||||
|
"is_already_claimed": "ya es reclamado por",
|
||||||
|
"subscribers": "Suscriptores",
|
||||||
|
"success_create": "¡Suscriptor creado correctamente!",
|
||||||
|
"success_delete": "¡Suscriptor eliminado correctamente!",
|
||||||
|
"success_update": "Suscriptor actualizado con éxito!"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"error_fetching": "Error al obtener información del sistema",
|
||||||
|
"error_reloading": "Error al recargar: {{error}}",
|
||||||
|
"hostname": "Nombre de host",
|
||||||
|
"os": "sistema operativo",
|
||||||
|
"processors": "Procesadores",
|
||||||
|
"reload": "Recargar",
|
||||||
|
"reload_subsystems": "Recargar",
|
||||||
|
"subsystems": "Subsistemas",
|
||||||
|
"success_reload": "¡El comando de recarga se envió correctamente!"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"connection_failed": "No se pudo crear la conexión. Error: {{error}}",
|
||||||
|
"interval": "intervalo",
|
||||||
|
"last_update": "Última actualización",
|
||||||
|
"lifetime": "Duración",
|
||||||
|
"outputmode": "Modo salida",
|
||||||
|
"types": "Los tipos"
|
||||||
},
|
},
|
||||||
"trace": {
|
"trace": {
|
||||||
"choose_network": "Elija la red",
|
"choose_network": "Elija la red",
|
||||||
"directions": "Lanzar un rastreo remoto de este dispositivo por una duración específica o por una cantidad de paquetes",
|
"directions": "Lanzar un rastreo remoto de este dispositivo por una duración específica o por una cantidad de paquetes",
|
||||||
|
"download_trace": "Descargar archivo de seguimiento",
|
||||||
"packets": "Paquetes",
|
"packets": "Paquetes",
|
||||||
"title": "Dispositivo de seguimiento"
|
"title": "Rastro",
|
||||||
|
"trace": "Rastro",
|
||||||
|
"trace_not_successful": "Seguimiento fallido: la puerta de enlace informó el siguiente error: {{error}}",
|
||||||
|
"wait_for_file": "¿Esperar hasta que el archivo de rastreo esté listo?",
|
||||||
|
"waiting_directions": "Espere el archivo de datos de seguimiento. Esto puede tomar algo de tiempo. Puede salir de la espera y recuperar el archivo de seguimiento de la tabla de comandos más tarde.",
|
||||||
|
"waiting_seconds": "Tiempo transcurrido: {{seconds}} segundos"
|
||||||
},
|
},
|
||||||
"upgrade": {
|
"upgrade": {
|
||||||
|
"command_submitted": "Comando enviado",
|
||||||
|
"device_disconnected": "Dispositivo desconectado",
|
||||||
|
"device_reconnected": "Dispositivo reconectado",
|
||||||
|
"device_upgrading_firmware": "Firmware de actualización del dispositivo",
|
||||||
"directions": "Elija una hora y una versión de firmware para este dispositivo",
|
"directions": "Elija una hora y una versión de firmware para este dispositivo",
|
||||||
"firmware_uri": "URI de firmware:",
|
"firmware_uri": "URI de firmware:",
|
||||||
"need_uri": "Necesitas un URI ...",
|
"need_uri": "Necesitas un URI ...",
|
||||||
|
"new_version": "La nueva versión es",
|
||||||
|
"offline_device": "Esta opción está bloqueada porque este dispositivo no está conectado",
|
||||||
"time": "Hora de actualización:",
|
"time": "Hora de actualización:",
|
||||||
"title": "Actualización de firmware"
|
"title": "Actualización de firmware",
|
||||||
|
"upgrade": "Mejorar",
|
||||||
|
"wait_for_upgrade": "¿Le gustaría esperar a que finalice la actualización?",
|
||||||
|
"waiting_for_device": "Esperando que el dispositivo se vuelva a conectar"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_phone_number": "Agregar el número de teléfono",
|
||||||
|
"avatar": "Tu avatar",
|
||||||
|
"avatar_file": "Tu avatar (máx. De 2 MB)",
|
||||||
|
"check_phone": "Por favor revise su teléfono para su código de validación",
|
||||||
|
"confirm_new_password": "confirmar nueva contraseña",
|
||||||
|
"create": "Crear usuario",
|
||||||
|
"create_failure": "Error al crear el usuario: {{error}}",
|
||||||
|
"create_success": "Usuario creado con éxito",
|
||||||
|
"creating": "Creando usuario ...",
|
||||||
|
"delete_avatar": "Eliminar avatar",
|
||||||
|
"delete_failure": "Error al intentar eliminar al usuario: {{error}}",
|
||||||
|
"delete_success": "¡Usuario eliminado correctamente!",
|
||||||
|
"delete_title": "Borrar usuario",
|
||||||
|
"delete_warning": "Advertencia: una vez que elimina un usuario, no puede revertir",
|
||||||
|
"deleting": "Eliminando ...",
|
||||||
|
"description": "Descripción",
|
||||||
|
"edit": "editar usuario",
|
||||||
|
"email_address": "Dirección de correo electrónico",
|
||||||
|
"enter_new_phone": "Ingrese su nuevo número de teléfono:",
|
||||||
|
"error_fetching_users": "Error al obtener usuarios: {{error}}",
|
||||||
|
"error_retrieving": "Error al recuperar usuario",
|
||||||
|
"error_sending_code": "Error al intentar enviar el código de validación. Confirma que tu número de teléfono es válido.",
|
||||||
|
"force_password_change": "Forzar cambio de contraseña al iniciar sesión",
|
||||||
|
"id": "Id. De usuario",
|
||||||
|
"last_login": "Último acceso",
|
||||||
|
"login_id": "Ingresar identificación.",
|
||||||
|
"make_sure_same_password": "Asegúrese de que ambas contraseñas sean iguales y válidas",
|
||||||
|
"my_profile": "Mi perfil",
|
||||||
|
"name": "Nombre",
|
||||||
|
"new_code_sent": "¡Nuevo código enviado!",
|
||||||
|
"nickname": "Apodo",
|
||||||
|
"nickname_explanation": "Apodo (opcional)",
|
||||||
|
"not_validated": "No validado",
|
||||||
|
"note": "Nota",
|
||||||
|
"password": "Contraseña",
|
||||||
|
"phone_number": "Número de teléfono",
|
||||||
|
"provide_email": "Por favor ingrese su dirección de correo electrónico válida",
|
||||||
|
"provide_password": "Proporcione una contraseña válida",
|
||||||
|
"save_avatar": "Guardar avatar",
|
||||||
|
"send_code": "Enviar código",
|
||||||
|
"send_code_again": "Enviar Código De nuevo",
|
||||||
|
"show_hide_password": "Mostrar / Ocultar contraseña",
|
||||||
|
"successful_validation": "¡Número de teléfono validado! Haga clic en el botón guardar para vincularlo a su perfil",
|
||||||
|
"table_title": "Usuarios administrativos",
|
||||||
|
"update_failure": "Error al intentar actualizar: {{error}}",
|
||||||
|
"update_failure_title": "Actualización fallida",
|
||||||
|
"update_success": "Usuario actualizado con éxito",
|
||||||
|
"update_success_title": "Éxito",
|
||||||
|
"user_role": "papel",
|
||||||
|
"users": "Usuarios",
|
||||||
|
"validate_phone": "validar",
|
||||||
|
"validated": "Validado",
|
||||||
|
"wrong_validation_code": "No ha introducido un código válido. Vuelve a intentarlo y asegúrate de haber ingresado el número de teléfono correcto."
|
||||||
|
},
|
||||||
|
"wifi_analysis": {
|
||||||
|
"association": "Asociación",
|
||||||
|
"associations": "Asociaciones",
|
||||||
|
"mode": "Modo",
|
||||||
|
"network_diagram": "Diagrama de Red",
|
||||||
|
"override_dfs": "Anular DFS",
|
||||||
|
"radios": "Radios",
|
||||||
|
"scan_warning": "Su radio 5G está en un canal de radar, debe habilitar \"Anular DFS\" para permitir el escaneo de todos los canales 5G",
|
||||||
|
"title": "Análisis de Wi-Fi",
|
||||||
|
"vendor": "Vendedor",
|
||||||
|
"waiting_for_data": "Esperando recibir datos del dispositivo. Vuelva a consultar más tarde"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"actions": "actes",
|
||||||
"blink": "Cligner",
|
"blink": "Cligner",
|
||||||
"configure": "Configurer",
|
"configure": "Configurer",
|
||||||
"connect": "Relier",
|
"connect": "Relier",
|
||||||
@@ -7,112 +8,434 @@
|
|||||||
"factory_reset": "Retour aux paramètres d'usine",
|
"factory_reset": "Retour aux paramètres d'usine",
|
||||||
"firmware_upgrade": "Mise à jour du firmware",
|
"firmware_upgrade": "Mise à jour du firmware",
|
||||||
"reboot": "Redémarrer",
|
"reboot": "Redémarrer",
|
||||||
"title": "Actions de l'appareil",
|
"request_ie": "Demander des IE",
|
||||||
|
"telemetry": "Télémétrie",
|
||||||
|
"title": "Les commandes",
|
||||||
"trace": "Trace",
|
"trace": "Trace",
|
||||||
"wifi_scan": "Balayage Wi-Fi"
|
"wifi_scan": "Balayage Wi-Fi"
|
||||||
},
|
},
|
||||||
"blink": {
|
"blink": {
|
||||||
"blink": "Cligner",
|
"blink": "Cligner",
|
||||||
"device_leds": "LED de l'appareil",
|
"device_leds": "LED de l'appareil",
|
||||||
|
"execute_now": "Souhaitez-vous définir ce modèle maintenant ?",
|
||||||
|
"explanation": "Quel modèle souhaitez-vous définir sur cet appareil pendant 30 secondes ?",
|
||||||
"pattern": "Choisissez le modèle que vous souhaitez utiliser :",
|
"pattern": "Choisissez le modèle que vous souhaitez utiliser :",
|
||||||
|
"set_leds": "Définir les LED",
|
||||||
"when_blink_leds": "Quand souhaitez-vous faire clignoter les LED de l'appareil ?"
|
"when_blink_leds": "Quand souhaitez-vous faire clignoter les LED de l'appareil ?"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
|
"command_success": "Commande soumise avec succès",
|
||||||
"error": "Erreur lors de la soumission de la commande !",
|
"error": "Erreur lors de la soumission de la commande !",
|
||||||
"success": "Commande soumise avec succès",
|
"error_delete_log": "Erreur lors de la tentative de suppression : {{error}}",
|
||||||
"title": "Commandes de l'appareil"
|
"event_queue": "File d'attente d'événements",
|
||||||
|
"reboot_start": "Le processus de redémarrage a commencé !",
|
||||||
|
"success": "Commande soumise avec succès, vous pouvez consulter le journal des commandes pour le résultat",
|
||||||
|
"title": "Historique des commandes",
|
||||||
|
"unable_queue": "Impossible de terminer la demande de file d'attente d'événements: {{error}}"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
"access_policy": "Politique d'accès",
|
||||||
|
"add": "Ajouter",
|
||||||
|
"add_items": "Ajouter des articles",
|
||||||
|
"add_note": "Ajouter une note",
|
||||||
|
"add_note_explanation": "Écrivez votre nouvelle note ci-dessous et cliquez sur le bouton '+' où vous avez terminé",
|
||||||
|
"adding_ellipsis": "Ajouter...",
|
||||||
|
"all": "Tout",
|
||||||
"are_you_sure": "Êtes-vous sûr?",
|
"are_you_sure": "Êtes-vous sûr?",
|
||||||
|
"back_to_login": "Retour connexion",
|
||||||
|
"back_to_start": "Retour au début",
|
||||||
|
"blacklist": "Liste noire",
|
||||||
|
"by": "Par",
|
||||||
"cancel": "annuler",
|
"cancel": "annuler",
|
||||||
"certificate": "Certificat",
|
"certificate": "Certificat",
|
||||||
|
"certificates": "Certificats",
|
||||||
|
"claim": "Prétendre",
|
||||||
"clear": "Clair",
|
"clear": "Clair",
|
||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
|
"code": "Code",
|
||||||
"command": "Commander",
|
"command": "Commander",
|
||||||
|
"commands": "Les commandes",
|
||||||
|
"commands_executed": "commandes exécutées",
|
||||||
"compatible": "Compatible",
|
"compatible": "Compatible",
|
||||||
"completed": "Terminé",
|
"completed": "Terminé",
|
||||||
|
"concurrent_devices": "Périphériques simultanés",
|
||||||
"config_id": "Config. Identifiant",
|
"config_id": "Config. Identifiant",
|
||||||
"confirm": "Confirmer",
|
"confirm": "Confirmer",
|
||||||
|
"confirm_stop_editing": "Voulez-vous vraiment arrêter la modification ? Cela annulera toutes les modifications non enregistrées que vous avez apportées.",
|
||||||
"connected": "Connecté",
|
"connected": "Connecté",
|
||||||
"copied": "Copié!",
|
"copied": "Copié!",
|
||||||
|
"copied_to_clipboard": "Copié dans le presse-papier!",
|
||||||
"copy_to_clipboard": "Copier dans le presse-papier",
|
"copy_to_clipboard": "Copier dans le presse-papier",
|
||||||
|
"create": "Créer",
|
||||||
|
"created": "Créé",
|
||||||
|
"created_by": "Créé par",
|
||||||
|
"creator": "Créateur",
|
||||||
|
"current": "Actuel",
|
||||||
|
"custom_date": "Date personnalisée",
|
||||||
|
"dashboard": "Tableau de bord",
|
||||||
"date": "Rendez-vous amoureux",
|
"date": "Rendez-vous amoureux",
|
||||||
|
"day": "journée",
|
||||||
|
"days": "journées",
|
||||||
|
"default_map": "Carte par défaut",
|
||||||
"delete": "Effacer",
|
"delete": "Effacer",
|
||||||
|
"delete_device": "Supprimer le périphérique",
|
||||||
"details": "Détails",
|
"details": "Détails",
|
||||||
|
"device": "N° d'appareil{{serialNumber}}",
|
||||||
|
"device_dashboard": "Tableau de bord de l'appareil",
|
||||||
|
"device_delete": "Supprimer #{{serialNumber}}",
|
||||||
|
"device_deleted": "Appareil supprimé avec succès",
|
||||||
|
"device_health": "Santé de l'appareil",
|
||||||
"device_list": "Liste des appareils",
|
"device_list": "Liste des appareils",
|
||||||
"device_page": "Page de l'appareil",
|
"device_page": "Vue",
|
||||||
|
"device_status": "Statut du périphérique",
|
||||||
"devices": "Dispositifs",
|
"devices": "Dispositifs",
|
||||||
|
"devices_using_latest": "Appareils utilisant le dernier micrologiciel",
|
||||||
|
"devices_using_unknown": "Périphériques utilisant un micrologiciel inconnu",
|
||||||
"dismiss": "Rejeter",
|
"dismiss": "Rejeter",
|
||||||
"do_now": "Faire maintenant!",
|
"do_now": "Faire maintenant!",
|
||||||
"download": "Télécharger",
|
"download": "Télécharger",
|
||||||
|
"duplicate": "Dupliquer",
|
||||||
"duration": "Durée",
|
"duration": "Durée",
|
||||||
"error": "erreur",
|
"edit": "modifier",
|
||||||
|
"edit_user": "Modifier",
|
||||||
|
"email_address": "Adresse électronique",
|
||||||
|
"endpoint": "Point final",
|
||||||
|
"endpoints": "Points de terminaison",
|
||||||
|
"error": "Erreur",
|
||||||
|
"error_adding_note": "Erreur lors de l'ajout de la note",
|
||||||
|
"error_code": "Code d'erreur",
|
||||||
|
"errors": "les erreurs",
|
||||||
|
"execute_now": "Souhaitez-vous exécuter cette commande maintenant ?",
|
||||||
"executed": "réalisé",
|
"executed": "réalisé",
|
||||||
|
"exit": "Sortie",
|
||||||
"firmware": "Micrologiciel",
|
"firmware": "Micrologiciel",
|
||||||
|
"firmware_dashboard": "Tableau de bord du micrologiciel",
|
||||||
|
"firmware_installed": "Micrologiciel installé",
|
||||||
|
"forgot_password": "Mot de passe oublié?",
|
||||||
|
"forgot_password_title": "Mot de passe oublié",
|
||||||
"from": "De",
|
"from": "De",
|
||||||
|
"general_error": "Erreur API, veuillez consulter votre administrateur",
|
||||||
|
"go_back": "Retourner",
|
||||||
|
"hide": "Cacher",
|
||||||
|
"hour": "heure",
|
||||||
|
"hours": "heures",
|
||||||
"id": "Id",
|
"id": "Id",
|
||||||
|
"invalid_credentials": "Nom d'utilisateur et / ou mot de passe incorrect",
|
||||||
|
"invalid_date_explanation": "Date invalide, merci d'utiliser le calendrier accessible avec le bouton à droite",
|
||||||
|
"invalid_file": "Le fichier choisi n'était pas valide, veuillez lire les instructions et ajuster votre fichier en conséquence",
|
||||||
|
"invalid_password": "Ce mot de passe ne confirme pas les règles de base des mots de passe. Veuillez visiter notre page Politique de mot de passe pour en savoir plus",
|
||||||
|
"invalid_pem": "Votre fichier .pem n'est pas valide. Il doit commencer par '-----BEGIN CERTIFICATE-----' OU '-----BEGIN PRIVATE KEY-----' et il doit se terminer par '-----END CERTIFICATE--- --' OU '-----FIN CLÉ PRIVÉE-----'",
|
||||||
"ip_address": "Adresse IP",
|
"ip_address": "Adresse IP",
|
||||||
|
"ips": "IPS",
|
||||||
|
"item": "article",
|
||||||
|
"items": "Articles",
|
||||||
|
"items_per_page": "Objets par page:",
|
||||||
|
"key": "Clé",
|
||||||
|
"last_dashboard_refresh": "Dernière actualisation du tableau de bord",
|
||||||
"later_tonight": "Plus tard ce soir",
|
"later_tonight": "Plus tard ce soir",
|
||||||
|
"latest": "Dernier",
|
||||||
|
"list": "liste",
|
||||||
"loading_ellipsis": "Chargement...",
|
"loading_ellipsis": "Chargement...",
|
||||||
"loading_more_ellipsis": "Chargement plus ...",
|
"loading_more_ellipsis": "Chargement plus ...",
|
||||||
"logout": "Connectez - Out",
|
"logout": "Connectez - Out",
|
||||||
"mac": "ADRESSE MAC",
|
"mac": "ADRESSE MAC",
|
||||||
|
"main": "Principale",
|
||||||
"manufacturer": "fabricant",
|
"manufacturer": "fabricant",
|
||||||
|
"memory_used": "Mémoire utilisée",
|
||||||
|
"min_max": "Min : {{min}}, Max : {{max}}",
|
||||||
|
"minute": "minute",
|
||||||
|
"minutes": "minutes",
|
||||||
|
"modified": "Modifié",
|
||||||
"na": "N / A",
|
"na": "N / A",
|
||||||
"need_date": "Vous avez besoin d'un rendez-vous...",
|
"need_date": "Vous avez besoin d'un rendez-vous...",
|
||||||
|
"no": "Non",
|
||||||
|
"no_addresses_found": "Aucune adresse trouvée",
|
||||||
|
"no_clients_found": "Aucun client trouvé",
|
||||||
|
"no_devices_found": "Aucun périphérique trouvé",
|
||||||
|
"no_items": "Pas d'objet",
|
||||||
|
"none": "Aucun",
|
||||||
"not_connected": "Pas connecté",
|
"not_connected": "Pas connecté",
|
||||||
|
"of_connected": "% d'appareils connectés",
|
||||||
"off": "De",
|
"off": "De",
|
||||||
"on": "sur",
|
"on": "sur",
|
||||||
|
"optional": "Optionnel",
|
||||||
|
"overall_health": "Santé globale",
|
||||||
|
"password_policy": "Politique de mot de passe",
|
||||||
|
"preferences": "Préférences",
|
||||||
|
"preview": "Aperçu",
|
||||||
|
"program": "Programme",
|
||||||
|
"reason": "raison",
|
||||||
"recorded": "Enregistré",
|
"recorded": "Enregistré",
|
||||||
"refresh": "Rafraîchir",
|
"refresh": "Rafraîchir",
|
||||||
"refresh_device": "Actualiser l'appareil",
|
"refresh_device": "Actualiser l'appareil",
|
||||||
|
"remove_claim": "Supprimer la réclamation",
|
||||||
|
"required": "Champs obligatoires",
|
||||||
"result": "Résultat",
|
"result": "Résultat",
|
||||||
|
"save": "Sauvegarder",
|
||||||
|
"saved": "Enregistré!",
|
||||||
|
"saving": "Économie...",
|
||||||
"schedule": "Programme",
|
"schedule": "Programme",
|
||||||
|
"search": "Rechercher des appareils",
|
||||||
|
"second": "seconde",
|
||||||
|
"seconds": "secondes",
|
||||||
|
"seconds_elapsed": "Secondes écoulées",
|
||||||
|
"see_details": "Voir les détails",
|
||||||
|
"select": "sélectionner",
|
||||||
|
"serial_num": "Numéro de série",
|
||||||
"serial_number": "Numéro de série",
|
"serial_number": "Numéro de série",
|
||||||
|
"show_all": "Montre tout",
|
||||||
|
"socket_connection_closed": "Connexion fermée !",
|
||||||
"start": "Début",
|
"start": "Début",
|
||||||
|
"status": "Statut",
|
||||||
|
"stop_editing": "Arrêter la modification",
|
||||||
"submit": "Soumettre",
|
"submit": "Soumettre",
|
||||||
"submitted": "Soumis",
|
"submitted": "Soumis",
|
||||||
"success": "Succès",
|
"success": "Succès",
|
||||||
|
"system": "Système",
|
||||||
|
"table": "Table",
|
||||||
|
"time_per_device": "Appareils/Seconde",
|
||||||
|
"timestamp": "Temps",
|
||||||
"to": "à",
|
"to": "à",
|
||||||
|
"type": "Type",
|
||||||
|
"type_for_options": "Tapez la valeur que vous devez créer...",
|
||||||
|
"type_for_options_format": "Saisissez une valeur au format valide ({{format}})...",
|
||||||
|
"unable_to_connect": "Impossible de se connecter à l'appareil",
|
||||||
|
"unable_to_delete": "Impossible de supprimer",
|
||||||
"unknown": "Inconnu",
|
"unknown": "Inconnu",
|
||||||
|
"up_to_date": "Appareils à jour",
|
||||||
|
"uptimes": "Disponibilités",
|
||||||
|
"use_file": "Utiliser le fichier",
|
||||||
"uuid": "UUID",
|
"uuid": "UUID",
|
||||||
|
"vendors": "Vendeurs",
|
||||||
"view_more": "Afficher plus",
|
"view_more": "Afficher plus",
|
||||||
|
"visibility": "Visibilité",
|
||||||
|
"waiting_for_update": "En attente de mise à jour",
|
||||||
"yes": "Oui"
|
"yes": "Oui"
|
||||||
},
|
},
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
"add_configuration": "Ajouter une configuration",
|
||||||
|
"add_new_block": "Ajouter un nouveau bloc de configuration",
|
||||||
|
"add_or_link": "Lier ou ajouter",
|
||||||
|
"add_radio": "Ajouter une radio",
|
||||||
|
"ca_cert_explanation": "Veuillez utiliser un fichier .pem qui commence par \"-----BEGIN CERTIFICATE-----\" et se termine par \"-----END CERTIFICATE-----\". Le résultat sera affiché dans le champ ci-dessous. Vous pouvez également copier et coller le certificat que vous souhaitez utiliser directement.",
|
||||||
|
"cannot_delete": "Cette configuration ne peut pas être supprimée car elle est utilisée par au moins une entité, un lieu ou un appareil",
|
||||||
|
"choose_radio_band": "Quelle bande de radio voudriez-vous créer ?",
|
||||||
|
"choose_section": "Quelle section souhaitez-vous que ce bloc contienne?",
|
||||||
|
"configuration_browser": "Navigateur de configuration",
|
||||||
|
"configurations": "Les configurations",
|
||||||
|
"create": "Créer une configuration",
|
||||||
|
"create_config": "Créer une nouvelle configuration",
|
||||||
|
"create_new_configuration": "Créer un nouvel élément de configuration",
|
||||||
"created": "Créé",
|
"created": "Créé",
|
||||||
"details": "Détails de l'appareil",
|
"creation_success": "Configuration créée avec succès !",
|
||||||
|
"currently_associated": "Configuration associée actuelle : {{config}}",
|
||||||
|
"currently_selected_config": "Configuration actuellement sélectionnée : {{config}}",
|
||||||
|
"default_configs": "Configurations par défaut",
|
||||||
|
"default_configurations": "Configurations par défaut",
|
||||||
|
"delete_config": "Supprimer la configuration",
|
||||||
|
"details": "Détails",
|
||||||
"device_password": "Mot de passe",
|
"device_password": "Mot de passe",
|
||||||
"last_configuration_change": "Dernière modification de configuration",
|
"device_type": "Type d'appareil",
|
||||||
|
"device_types": "Types d'appareils",
|
||||||
|
"devices_affected": "Appareils concernés par cette configuration :",
|
||||||
|
"edit_configuration": "Modifier la configuration",
|
||||||
|
"error_delete": "Erreur lors de la tentative de suppression : {{error}}",
|
||||||
|
"error_delete_blacklist": "Erreur lors de la suppression de la liste noire : {{error}}",
|
||||||
|
"error_fetching_config": "Erreur lors de la récupération de la configuration",
|
||||||
|
"error_trying_delete": "Erreur lors de la tentative de suppression : {{error}}",
|
||||||
|
"error_update": "Erreur: {{error}}",
|
||||||
|
"explanation": "Explication",
|
||||||
|
"key_pem_explanation": "Veuillez sélectionner le fichier .pem",
|
||||||
|
"last_configuration_change": "Changement de configuration",
|
||||||
"last_configuration_download": "Téléchargement de la dernière configuration",
|
"last_configuration_download": "Téléchargement de la dernière configuration",
|
||||||
"location": "Emplacement",
|
"location": "Emplacement",
|
||||||
|
"need_device_type": "Chaque configuration doit prendre en charge au moins un type d'appareil",
|
||||||
|
"no_associated_config": "Aucune configuration associée",
|
||||||
|
"no_associated_configuration": "Aucune configuration associée",
|
||||||
|
"note": "Remarque",
|
||||||
"notes": "Remarques",
|
"notes": "Remarques",
|
||||||
"owner": "Propriétaire",
|
"owner": "Propriétaire",
|
||||||
"title": "Configuration de l'appareil",
|
"select_configuration": "Sélectionnez cette configuration",
|
||||||
|
"success_block_delete": "Bloc de configuration supprimé avec succès",
|
||||||
|
"success_update": "Configuration mise à jour avec succès !",
|
||||||
|
"successful_delete": "Configuration supprimée !",
|
||||||
|
"support_all": "Soutenir tous",
|
||||||
|
"supported_device_types": "Types d'appareils pris en charge",
|
||||||
|
"title": "Configuration",
|
||||||
"type": "Type d'appareil",
|
"type": "Type d'appareil",
|
||||||
|
"used_by": "Utilisé par",
|
||||||
|
"used_by_details": "{{entities}} Entités, {{venues}} Lieux et {{devices}} Appareils",
|
||||||
|
"uuid": "Identifiant de configuration",
|
||||||
|
"view_affected_devices": "Afficher les appareils concernés",
|
||||||
|
"view_config": "Afficher la configuration",
|
||||||
|
"view_in_use": "Afficher en cours d'utilisation",
|
||||||
"view_json": "Afficher le JSON brut"
|
"view_json": "Afficher le JSON brut"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"choose_file": "Vous devez choisir un fichier .json valide :",
|
"choose_file": "Vous devez choisir un fichier .json valide :",
|
||||||
"enter_new": "Entrez la nouvelle configuration de l'appareil JSON :",
|
"enter_new": "Entrez la nouvelle configuration de l'appareil JSON :",
|
||||||
"placeholder": "Configurer JSON",
|
"placeholder": "Configurer JSON",
|
||||||
"title": "Configurer l'appareil",
|
"title": "Configurer",
|
||||||
"valid_json": "Vous devez entrer un JSON valide"
|
"valid_json": "Vous devez entrer un JSON valide"
|
||||||
},
|
},
|
||||||
|
"connect": {
|
||||||
|
"error_trying_to_connect": "Erreur lors de la tentative de connexion à l'appareil : {{error}}"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"access_pin": "NIP d'accès",
|
||||||
|
"add_contact": "Ajouter le contact",
|
||||||
|
"contact": "Contact",
|
||||||
|
"create_contact": "Créer un contact",
|
||||||
|
"currently_selected_contact": "Contact actuellement sélectionné : {{contact}}",
|
||||||
|
"delete": "Effacer le contact?",
|
||||||
|
"error_assign": "Erreur lors de la tentative d'attribution du contact : {{error}}",
|
||||||
|
"error_creation": "Erreur lors de la tentative de création du contact : {{error}}",
|
||||||
|
"error_delete": "Erreur lors de la tentative de suppression du contact : {{error}}",
|
||||||
|
"error_fetching_list": "Erreur lors de la récupération des contacts",
|
||||||
|
"error_fetching_single": "Erreur lors de la récupération du contact : {{error}}",
|
||||||
|
"error_unassign": "Erreur lors de la tentative de désattribution du contact : {{error}}",
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"identifier": "Identifiant",
|
||||||
|
"initials": "Initiales",
|
||||||
|
"last_name": "Nom de famille",
|
||||||
|
"no_associated_contact": "Aucun contact associé",
|
||||||
|
"primary_email": "Email primaire",
|
||||||
|
"salutation": "salutation",
|
||||||
|
"secondary_email": "Email secondaire",
|
||||||
|
"successful_assign": "Contact attribué avec succès !",
|
||||||
|
"successful_creation": "Contact créé!",
|
||||||
|
"successful_delete": "Contact supprimé avec succès !",
|
||||||
|
"successful_unassign": "Contact non attribué avec succès",
|
||||||
|
"successful_update": "Contact mis à jour avec succès",
|
||||||
|
"title": "Contacts",
|
||||||
|
"type": "Type",
|
||||||
|
"update_error": "Erreur lors de la mise à jour du contact : {{error}}",
|
||||||
|
"user_title": "Titre",
|
||||||
|
"visual": "Nom de la correspondance"
|
||||||
|
},
|
||||||
"delete_command": {
|
"delete_command": {
|
||||||
"explanation": "Êtes-vous sûr de vouloir supprimer cette commande ? Cette action n'est pas réversible.",
|
"explanation": "Êtes-vous sûr de vouloir supprimer cette commande ? Cette action n'est pas réversible.",
|
||||||
"title": "Supprimer la commande"
|
"title": "Supprimer la commande"
|
||||||
},
|
},
|
||||||
|
"delete_logs": {
|
||||||
|
"date": "Sélectionnez la date du plus ancien journal que vous souhaitez conserver",
|
||||||
|
"device_logs_title": "Supprimer les journaux de l'appareil",
|
||||||
|
"explanation": "Cela supprimera tous les {{object}} avant la date que vous choisissez. Attention, cette action n'est pas réversible.",
|
||||||
|
"healthchecks_title": "Supprimer les vérifications d'état"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"add_to_blacklist": "Ajouter un appareil à la liste noire",
|
||||||
|
"all_devices": "Tous les dispositifs",
|
||||||
|
"already_running_command": "L'appareil exécute déjà une commande, veuillez réessayer plus tard",
|
||||||
|
"blacklisted_on": "Rendez-vous amoureux",
|
||||||
|
"capabilities": "Capacités",
|
||||||
|
"certificate_explanation": "Certificats des appareils connectés",
|
||||||
|
"count_explanation": "Périphériques pointant vers cette instance de passerelle",
|
||||||
|
"edit_blacklist": "Modifier l'appareil sur liste noire",
|
||||||
|
"error_adding_blacklist": "Erreur lors de l'ajout de l'appareil à la liste noire : {{error}}",
|
||||||
|
"error_edit_blacklist": "Erreur lors de la modification de la liste noire : {{error}}",
|
||||||
|
"error_fetching_device": "Erreur lors de la récupération des informations sur l'appareil : {{error}}",
|
||||||
|
"error_fetching_devices": "Erreur lors de la récupération des appareils : {{error}}",
|
||||||
|
"firmware_count_explanation": "Il s'agit du nombre total d'appareils qui ont été ajoutés à ce serveur de micrologiciel, y compris les appareils qui ne pointent pas actuellement vers le serveur de passerelle associé.",
|
||||||
|
"health_explanation": "Santé des appareils connectés ((Appareils = 100 % * 100 + Appareils> 90 % * 95 + Appareils> 60 % * 75 + Appareils < 60 % * 35) / Appareils connectés)",
|
||||||
|
"mac_not_found": "Numéro de série introuvable, vous redirigeant vers la page Appareils",
|
||||||
|
"memory_explanation": "Nombre d'appareils connectés avec la mémoire correspondante utilisée %",
|
||||||
|
"remove_from_blacklist": "Supprimer de la liste noire",
|
||||||
|
"success_added_blacklist": "Appareil ajouté avec succès à la liste noire !",
|
||||||
|
"success_edit_blacklist": "Liste noire modifiée avec succès !",
|
||||||
|
"success_removed_blacklist": "Appareil supprimé de la liste noire !",
|
||||||
|
"uptimes_explanation": "Nombre d'appareils connectés en fonction de leur disponibilité"
|
||||||
|
},
|
||||||
"device_logs": {
|
"device_logs": {
|
||||||
"log": "Bûche",
|
"log": "Bûche",
|
||||||
"severity": "Gravité",
|
"severity": "Gravité",
|
||||||
"title": "Journaux de l'appareil"
|
"title": "Journaux"
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"add_child": "Ajouter une entité enfant à {{entityName}}",
|
||||||
|
"add_failure": "Erreur, le serveur a renvoyé : {{error}}",
|
||||||
|
"add_ips": "Gérer les IP",
|
||||||
|
"add_root": "Ajouter une entité racine",
|
||||||
|
"add_success": "Entité créée avec succès !",
|
||||||
|
"assigned_inventory": "Inventaire assigné",
|
||||||
|
"cannot_delete": "Vous ne pouvez pas supprimer des entités qui ont des enfants. Supprimez les enfants de cette entité pour pouvoir la supprimer.",
|
||||||
|
"confirm_map_delete": "Êtes-vous sûr de vouloir supprimer la carte {{name}}? Cette action ne peut pas être annulée",
|
||||||
|
"currently_selected_entity": "Entité actuellement sélectionnée : {{config}}",
|
||||||
|
"currently_selected_venue": "Lieu actuellement sélectionné : {{config}}",
|
||||||
|
"delete_success": "Entité supprimée avec succès",
|
||||||
|
"delete_warning": "Attention : cette opération ne peut pas être annulée",
|
||||||
|
"duplicate_from_node": "Dupliquer avec un nœud racine spécifique",
|
||||||
|
"duplicate_map": "Carte en double",
|
||||||
|
"duplicate_with_node": "Dupliquer {{mapName}} avec {{rootName}} comme nœud racine",
|
||||||
|
"edit_failure": "Échec de la mise à jour : {{error}}",
|
||||||
|
"enter_here": "Entrez les IP que vous souhaitez ajouter ici",
|
||||||
|
"entire_tree": "Carte du réseau",
|
||||||
|
"entities": "Entités",
|
||||||
|
"entity": "Entité",
|
||||||
|
"error_deleting_map": "Erreur lors de la suppression de la carte : {{error}}",
|
||||||
|
"error_fetch_entity": "Erreur lors de la récupération des informations sur l'entité",
|
||||||
|
"error_fetching": "Erreur lors de la récupération des entités",
|
||||||
|
"error_fetching_map": "Erreur lors de la récupération de la carte : {{error}}",
|
||||||
|
"error_fetching_tree": "Erreur lors de la récupération de l'arborescence : {{error}}",
|
||||||
|
"error_saving": "Erreur lors de l'enregistrement de l'entité",
|
||||||
|
"error_saving_map": "Erreur lors de l'enregistrement de la carte : {{error}}",
|
||||||
|
"higher_priority": "Faire une priorité plus élevée",
|
||||||
|
"ip_detection": "Détection IP",
|
||||||
|
"ip_formats": "Vous pouvez ajouter des adresses IPv4 ou IPv6 aux formats suivants :",
|
||||||
|
"lower_priority": "Faire une priorité inférieure",
|
||||||
|
"map": "Carte",
|
||||||
|
"map_delete_success": "Carte supprimée avec succès !",
|
||||||
|
"need_select_entity": "Vous devez sélectionner une entité dans le tableau ci-dessous",
|
||||||
|
"no_ips": "Aucune adresse IP sélectionnée",
|
||||||
|
"not_assigned": "Non attribué",
|
||||||
|
"only_unassigned": "Uniquement non attribué",
|
||||||
|
"select_entity": "Sélectionnez cette entité",
|
||||||
|
"selected_entity": "Entité sélectionnée",
|
||||||
|
"selected_map": "Carte sélectionnée",
|
||||||
|
"tree_saved": "Carte enregistrée avec succès !",
|
||||||
|
"update_failure_error": "Erreur lors de la tentative de mise à jour de l'entité : {{error}}",
|
||||||
|
"valid_serial": "Doit être un numéro de série valide (12 caractères HEX)",
|
||||||
|
"venues": "Les lieux"
|
||||||
},
|
},
|
||||||
"factory_reset": {
|
"factory_reset": {
|
||||||
"redirector": "Conserver le redirecteur :",
|
"redirector": "Conserver le redirecteur :",
|
||||||
"title": "Dispositif de réinitialisation d'usine",
|
"reset": "Réinitialiser",
|
||||||
|
"resetting": "Réinitialisation…",
|
||||||
|
"title": "Retour aux paramètres d'usine",
|
||||||
"warning": "Avertissement : Une fois que vous avez soumis, cela ne peut pas être annulé"
|
"warning": "Avertissement : Une fois que vous avez soumis, cela ne peut pas être annulé"
|
||||||
},
|
},
|
||||||
|
"firmware": {
|
||||||
|
"age_explanation": "Nombre moyen de jours pour tous les appareils à partir desquels nous pouvons obtenir cette valeur",
|
||||||
|
"average_age": "Âge moyen du micrologiciel",
|
||||||
|
"choose_custom": "Choisir",
|
||||||
|
"details_title": "Image #{{image}} Détails",
|
||||||
|
"device_type": "Type d'appareil",
|
||||||
|
"device_types": "Types d'appareils",
|
||||||
|
"downloads": "Téléchargements",
|
||||||
|
"error_fetching_latest": "Erreur lors de la récupération du dernier firmware",
|
||||||
|
"from_release": "De",
|
||||||
|
"history_title": "Historique",
|
||||||
|
"image": "Image",
|
||||||
|
"image_date": "Date de l'image",
|
||||||
|
"installed_firmware": "Micrologiciel installé",
|
||||||
|
"latest_explanation": "Appareils exécutant un firmware reconnu dans sa dernière version",
|
||||||
|
"latest_version_installed": "Dernière version installée",
|
||||||
|
"newer_firmware_available": "Révisions plus récentes disponibles",
|
||||||
|
"reinstall_latest": "Réinstaller",
|
||||||
|
"release": "libération",
|
||||||
|
"revision": "Révision",
|
||||||
|
"show_dev": "Afficher les versions des développeurs",
|
||||||
|
"size": "Taille",
|
||||||
|
"status": "État du micrologiciel",
|
||||||
|
"title": "Micrologiciel",
|
||||||
|
"to_release": "à",
|
||||||
|
"unknown_firmware_status": "État du micrologiciel inconnu",
|
||||||
|
"upgrade": "Améliorer",
|
||||||
|
"upgrade_command_submitted": "Mise à jour en cours...",
|
||||||
|
"upgrade_to_latest": "Dernier",
|
||||||
|
"upgrade_to_version": "Mettre à niveau vers cette révision",
|
||||||
|
"upgrading": "Mise à niveau..."
|
||||||
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"coreui_for_react": "CoreUI pour React",
|
"coreui_for_react": "CoreUI pour React",
|
||||||
"powered_by": "Alimenté par",
|
"powered_by": "Alimenté par",
|
||||||
@@ -120,43 +443,382 @@
|
|||||||
},
|
},
|
||||||
"health": {
|
"health": {
|
||||||
"sanity": "Santé mentale",
|
"sanity": "Santé mentale",
|
||||||
"title": "Santé de l'appareil"
|
"title": "Santé"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"add_child": "Ajouter un lieu enfant",
|
||||||
|
"add_child_venue": "Ajouter un lieu enfant à {{entityName}}",
|
||||||
|
"add_tag": "Créer un tag",
|
||||||
|
"add_tag_to": "Ajouter un nouvel appareil à {{name}}",
|
||||||
|
"add_venue": "Ajouter un lieu",
|
||||||
|
"assign_ent_ven": "Attribuer à une entité ou à un lieu",
|
||||||
|
"assign_entity_instructions": "Vous pouvez soit trouver l'entité à laquelle vous souhaitez que cette balise soit attribuée en utilisant le menu ci-dessous, soit coller manuellement l'UUID de l'entité dans le champ ci-dessus.",
|
||||||
|
"assign_error": "Erreur lors de la tentative d'attribution de balise",
|
||||||
|
"assign_to_entity": "Affecter à l'entité",
|
||||||
|
"bulk_delete_assigned": "Souhaitez-vous supprimer en bloc les appareils attribués dans votre fichier ?",
|
||||||
|
"bulk_delete_assigned_warning": "Attention : cette action n'est pas réversible",
|
||||||
|
"bulk_delete_devices": "Supprimer en bloc des appareils",
|
||||||
|
"bulk_delete_devices_not_found": "{{number}} appareils introuvables",
|
||||||
|
"bulk_delete_explanation": "Pour supprimer en bloc des appareils, utilisez un fichier CSV avec une colonne appelée SerialNumber",
|
||||||
|
"bulk_delete_test": "Valider le fichier",
|
||||||
|
"close_entity_menu": "Fermer le menu Modifier l'entité",
|
||||||
|
"delete_devices": "Supprimer des appareils",
|
||||||
|
"delete_errors": "{{number}} Supprimer les erreurs de périphérique",
|
||||||
|
"delete_tag": "Supprimer la balise",
|
||||||
|
"delete_venue": "Supprimer définitivement le lieu",
|
||||||
|
"deleted_devices": "{{number}} appareils supprimés",
|
||||||
|
"deleting": "Suppression ...",
|
||||||
|
"deletion_failure": "Erreur de suppression",
|
||||||
|
"devices_assigned": "{{number}} appareils existants attribués et mis à jour",
|
||||||
|
"devices_created": "{{number}} appareils créés",
|
||||||
|
"devices_deleted": "Appareils supprimés",
|
||||||
|
"devices_errors_while_creating": "{{number}} créations d'appareils ont échoué",
|
||||||
|
"devices_errors_while_updating": "{{number}} mises à jour de l'appareil ont échoué",
|
||||||
|
"devices_found_assigned": "{{number}} appareils trouvés et déjà attribués à une entité ou à un lieu",
|
||||||
|
"devices_found_unassigned": "{{number}} appareils trouvés, mais non attribués",
|
||||||
|
"devices_imported": " Périphériques importés",
|
||||||
|
"devices_not_found": "{{number}} appareils sans conflit",
|
||||||
|
"devices_tested": "Appareils testés",
|
||||||
|
"duplicate_serial": "Numéro de série déjà utilisé dans le fichier (duplicata)",
|
||||||
|
"error_create_venue": "Erreur lors de la création du lieu",
|
||||||
|
"error_delete_tag": "Erreur lors de la suppression de la balise d'inventaire",
|
||||||
|
"error_get_venue": "Erreur lors de la récupération des lieux",
|
||||||
|
"error_pushing_config": "Erreur lors de la tentative d'envoi de la configuration sur l'appareil : {{error}}",
|
||||||
|
"error_retrieving": "Une erreur s'est produite lors de la récupération des balises d'inventaire",
|
||||||
|
"error_unassign": "Erreur lors de l'opération de désaffectation",
|
||||||
|
"error_update_venue": "Erreur lors de la mise à jour du lieu",
|
||||||
|
"error_venue_delete": "Erreur lors de la suppression du lieu",
|
||||||
|
"error_within_file": "{{number}} appareils avec des informations erronées dans le fichier (sera ignoré)",
|
||||||
|
"file_error": "Il semble y avoir une erreur dans votre fichier. Veuillez vous assurer que le fichier est au format CSV et contient les 5 colonnes mentionnées ci-dessus dans la première ligne du fichier",
|
||||||
|
"final_delete_results": "Résultats de la suppression finale",
|
||||||
|
"final_import_results": "Résultats d'importation finaux",
|
||||||
|
"import_assigned_devices": "Voulez-vous les réaffecter avec cette importation ?",
|
||||||
|
"import_assigned_devices_explanation": "Certains appareils sont en conflit avec des appareils déjà attribués. Vous devez résoudre ces problèmes avant d'importer.",
|
||||||
|
"import_devices": "Importer des appareils",
|
||||||
|
"import_devices_explanation": "Pour importer des appareils en bloc, vous devez utiliser un fichier CSV avec les colonnes suivantes : SerialNumber,Name,Description,DeviceType,NoteText",
|
||||||
|
"import_devices_to": "Importer des appareils dans {{name}}",
|
||||||
|
"import_existing_devices": "Mettre à jour et les attribuer ?",
|
||||||
|
"import_existing_devices_explanation": "Certains appareils existent déjà dans l'inventaire et ne sont pas affectés.",
|
||||||
|
"importing": "Importation ...",
|
||||||
|
"last_modification": "dernière modification",
|
||||||
|
"no_devices_to_delete": "Aucun appareil à supprimer",
|
||||||
|
"no_devices_to_import": "Aucun appareil valide à créer ou à mettre à jour !",
|
||||||
|
"note_text": "Texte de note",
|
||||||
|
"passed_tests": "Tous les tests ont été passés, vos appareils sont prêts à être importés !",
|
||||||
|
"serial_number_required": "Erreur : Numéro de série manquant",
|
||||||
|
"showing_top_10": "Voici un aperçu des informations que nous avons récupérées dans votre dossier :",
|
||||||
|
"sub_venues": "Sous-sites",
|
||||||
|
"subscriber": "Abonné",
|
||||||
|
"successful_assign": "Tag attribué avec succès",
|
||||||
|
"successful_tag_delete": "Balise d'inventaire supprimée avec succès",
|
||||||
|
"successful_tag_update": "Balise mise à jour avec succès",
|
||||||
|
"successful_unassign": "L'opération de désaffectation a réussi",
|
||||||
|
"successful_venue_create": "Lieu créé avec succès",
|
||||||
|
"successful_venue_delete": "Lieu supprimé avec succès",
|
||||||
|
"successful_venue_update": "Lieu mis à jour avec succès",
|
||||||
|
"tag_created": "Tag d'inventaire créé avec succès",
|
||||||
|
"tag_creation_error": "Erreur lors de la tentative de création d'une balise d'inventaire",
|
||||||
|
"tag_update_error": "Erreur lors de la mise à jour de la balise",
|
||||||
|
"tags_assigned_to": "Balises d'inventaire attribuées à {{name}}",
|
||||||
|
"test_import": "Valider les données d'importation",
|
||||||
|
"test_results": "Résultats de test",
|
||||||
|
"title": "Inventaire",
|
||||||
|
"type_invalid": "Erreur : Type de périphérique non valide",
|
||||||
|
"unassign": "Annuler l'attribution",
|
||||||
|
"unassign_tag": "Désaffecter la balise de l'entité",
|
||||||
|
"unassigned_deleted_devices": "{{number}} appareils supprimés et non attribués",
|
||||||
|
"unassigned_tags": "Balises non attribuées",
|
||||||
|
"validating_import_file": "Validation du fichier d'importation et des données...",
|
||||||
|
"venue": "Lieu",
|
||||||
|
"view_in_gateway": "Afficher dans la passerelle"
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"add": "Ajouter un emplacement",
|
||||||
|
"building_name": "Nom du bâtiment",
|
||||||
|
"city": "Ville",
|
||||||
|
"country": "Pays",
|
||||||
|
"create": "Créer un lieu",
|
||||||
|
"currently_selected": "Emplacement actuellement sélectionné : {{location}}",
|
||||||
|
"delete": "Supprimer le lieu?",
|
||||||
|
"error_assign": "Erreur lors de la tentative d'attribution de l'emplacement : {{error}}",
|
||||||
|
"error_creation": "Erreur lors de la tentative de création d'établissements : {{error}}",
|
||||||
|
"error_delete": "Erreur lors de la suppression de l'emplacement : {{error}}",
|
||||||
|
"error_fetching_single": "Erreur lors de la tentative de récupération de l'emplacement : {{error}}",
|
||||||
|
"geocode": "Géocode",
|
||||||
|
"mobiles": "MOBILES",
|
||||||
|
"no_associated": "Aucun emplacement associé",
|
||||||
|
"phones": "Téléphones",
|
||||||
|
"postal": "Zip / code postal",
|
||||||
|
"search": "Recherchez des emplacements pour remplir automatiquement les champs ci-dessous",
|
||||||
|
"state": "Etat",
|
||||||
|
"street_address": "Adresse de rue",
|
||||||
|
"successful_creation": "Emplacement créé avec succès !",
|
||||||
|
"successful_delete": "Emplacement supprimé avec succès !",
|
||||||
|
"successful_update": "Emplacement mis à jour avec succès !",
|
||||||
|
"successfully_assigned": "Emplacement attribué avec succès !",
|
||||||
|
"title": "Emplacements",
|
||||||
|
"update_error": "Erreur lors de la mise à jour de l'emplacement : {{error}}"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
|
"account_verification": "Vérification de compte",
|
||||||
|
"authentication_expired": "Authentification expirée, veuillez recommencer le processus de connexion",
|
||||||
|
"change_password": "Changer le mot de passe",
|
||||||
|
"change_password_error": "Erreur lors du changement de mot de passe. Assurez-vous que le nouveau mot de passe est valide en visitant la page « Politique de mot de passe »",
|
||||||
|
"change_password_instructions": "Saisissez et confirmez votre nouveau mot de passe",
|
||||||
|
"changing_password": "Modification du mot de passe...",
|
||||||
|
"confirm_new_password": "Confirmer le nouveau mot de passe",
|
||||||
|
"different_passwords": "Vous devez saisir deux fois le même mot de passe",
|
||||||
|
"email_code_validation": "Veuillez vérifier votre boîte e-mail et entrer le code de vérification que nous venons de vous envoyer dans la case ci-dessous",
|
||||||
|
"forgot_password_error": "Erreur lors de la tentative d'envoi de l'e-mail Mot de passe oublié. Veuillez vous assurer que cet identifiant est associé à un compte.",
|
||||||
|
"forgot_password_explanation": "Entrez votre nom d'utilisateur pour recevoir un e-mail contenant les instructions pour réinitialiser votre mot de passe",
|
||||||
|
"forgot_password_success": "Vous devriez bientôt recevoir un e-mail contenant les instructions pour réinitialiser votre mot de passe. S'il vous plaît assurez-vous de vérifier vos spams si vous ne trouvez pas l'e-mail",
|
||||||
|
"logging_in": "Se connecter...",
|
||||||
"login": "S'identifier",
|
"login": "S'identifier",
|
||||||
"login_error": "Erreur de connexion, confirmez que votre nom d'utilisateur, mot de passe et URL de passerelle sont valides",
|
"login_error": "Erreur de connexion, assurez-vous que les informations que vous fournissez sont valides",
|
||||||
|
"new_password": "Nouveau mot de passe",
|
||||||
"password": "Mot de passe",
|
"password": "Mot de passe",
|
||||||
"please_enter_gateway": "Veuillez saisir une URL de passerelle",
|
"phone_validation_explanation": "Veuillez vérifier votre appareil mobile et entrer le code de vérification que nous venons de vous envoyer dans la case ci-dessous",
|
||||||
|
"please_enter_gateway": "Veuillez saisir une URL uCentralSec",
|
||||||
"please_enter_password": "s'il vous plait entrez votre mot de passe",
|
"please_enter_password": "s'il vous plait entrez votre mot de passe",
|
||||||
"please_enter_username": "s'il vous plaît entrez votre nom d'utilisateur",
|
"please_enter_username": "s'il vous plaît entrez votre nom d'utilisateur",
|
||||||
|
"previously_used": "Le mot de passe a déjà été utilisé",
|
||||||
|
"send_forgot": "Envoyer un email",
|
||||||
|
"sending_ellipsis": "Envoi...",
|
||||||
"sign_in_to_account": "Connectez-vous à votre compte",
|
"sign_in_to_account": "Connectez-vous à votre compte",
|
||||||
"username": "Nom d'utilisateur"
|
"url": "URL uCentralSec",
|
||||||
|
"username": "Nom d'utilisateur",
|
||||||
|
"verification_code": "Entrez votre vérification ici",
|
||||||
|
"wrong_code": "Le code de vérification saisi n'est pas valide."
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"provisioning": "Provisioning"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"directions": "Quand souhaitez-vous redémarrer cet appareil ?",
|
"directions": "Quand souhaitez-vous redémarrer cet appareil ?",
|
||||||
"title": "Redémarrez l'appareil"
|
"now": "Souhaitez-vous redémarrer cet appareil maintenant ?",
|
||||||
|
"title": "Redémarrer"
|
||||||
},
|
},
|
||||||
"scan": {
|
"scan": {
|
||||||
"active": "Activer l'analyse active",
|
"active": "Activer l'analyse active",
|
||||||
"channel": "Canal",
|
"channel": "Canal",
|
||||||
"directions": "Lancez une analyse wifi de cet appareil, ce qui devrait prendre environ 25 secondes.",
|
"directions": "Lancez une analyse wifi de cet appareil, ce qui devrait prendre environ 25 secondes.",
|
||||||
"results": "Résultats de l'analyse Wi-Fi"
|
"re_scan": "Nouvelle analyse",
|
||||||
|
"result_directions": "Vous pouvez cliquer sur le bouton 'Scan' en haut à droite pour $t(scan.re_scan)",
|
||||||
|
"results": "Résultats de l'analyse Wi-Fi",
|
||||||
|
"scan": "Balayage",
|
||||||
|
"scanning": "Balayage... ",
|
||||||
|
"waiting_directions": "Veuillez attendre le résultat de l'analyse. Cela peut prendre jusqu'à 25 secondes. Vous pouvez quitter et consulter les résultats du tableau des commandes plus tard."
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Réglages"
|
||||||
|
},
|
||||||
|
"simulation": {
|
||||||
|
"add": "Ajouter une simulation",
|
||||||
|
"cancel": "annuler",
|
||||||
|
"cancel_success": "Exécution de la simulation annulée avec succès !",
|
||||||
|
"check_ongoing_sims": "Suivre le Sim en cours",
|
||||||
|
"client_interval": "Intervalle client",
|
||||||
|
"delete_simulation": "Supprimer Sim. {{name}}",
|
||||||
|
"end": "Terminé",
|
||||||
|
"error_creating": "Erreur lors de la création de la simulation : {{error}}",
|
||||||
|
"error_delete": "Erreur lors de la suppression de la simulation : {{error}}",
|
||||||
|
"error_devices": "Périphériques d'erreur",
|
||||||
|
"error_edit": "Erreur lors de la tentative d'enregistrement de la simulation : {{error}}",
|
||||||
|
"error_edit_run": "Erreur lors de la tentative de modification de l'état d'exécution : {{error}}",
|
||||||
|
"error_fetching_simulations": "Erreur lors de la récupération des simulations : {{error}}",
|
||||||
|
"error_start_run": "Erreur lors de la tentative de démarrage d'une simulation : {{error}}",
|
||||||
|
"gateway": "passerelle",
|
||||||
|
"healtcheck_interval": "Intervalle de vérification de l'état",
|
||||||
|
"keep_alive": "Rester en vie",
|
||||||
|
"last_refresh": "Dernier rafraîchissement",
|
||||||
|
"length": "Longueur",
|
||||||
|
"live_devices": "Appareils en direct",
|
||||||
|
"mac_prefix": "Préfixe MAC",
|
||||||
|
"max_associations": "Max. Les associations",
|
||||||
|
"max_clients": "Max. Clients",
|
||||||
|
"messages_transmitted": "Émission de messages",
|
||||||
|
"min_associations": "Min. Les associations",
|
||||||
|
"min_clients": "Min. Clients",
|
||||||
|
"pause": "Pause",
|
||||||
|
"pause_success": "Exécuter en pause !",
|
||||||
|
"prefix_length": "Obligatoire, doit être d'une longueur de 6 caractères",
|
||||||
|
"previous_runs": "Courses précédentes",
|
||||||
|
"received": "reçu",
|
||||||
|
"received_messages": "Réception des messages",
|
||||||
|
"reconnect_interval": "Intervalle de reconnexion",
|
||||||
|
"resume": "CV",
|
||||||
|
"resume_success": "Exécution reprise !",
|
||||||
|
"run": "Exécution de simulation",
|
||||||
|
"run_simulation": "Exécuter la simulation",
|
||||||
|
"started": "commencé",
|
||||||
|
"state_interval": "Intervalle d'état",
|
||||||
|
"stop": "Arrêtez",
|
||||||
|
"stop_success": "Exécution arrêtée !",
|
||||||
|
"success_creating": "Simulation créée avec succès !",
|
||||||
|
"success_run_start": "Exécution démarrée avec succès !",
|
||||||
|
"successful_delete": "Simulation supprimée avec succès !",
|
||||||
|
"successful_edit": "Simulation éditée avec succès !",
|
||||||
|
"threads": "Fils",
|
||||||
|
"time_full_devices": "Temps pour les appareils pleins",
|
||||||
|
"title": "Simulations",
|
||||||
|
"transmitted": "Transmis",
|
||||||
|
"valid_cert": "Certificat valide",
|
||||||
|
"valid_key": "Clé valide"
|
||||||
},
|
},
|
||||||
"statistics": {
|
"statistics": {
|
||||||
"data": "Données (Ko)",
|
"data": "Données (Ko)",
|
||||||
"title": "statistiques"
|
"data_mb": "Données (Mo)",
|
||||||
|
"latest_statistics": "Dernières statistiques",
|
||||||
|
"lifetime_stats": "Statistiques à vie",
|
||||||
|
"memory": "mémoire",
|
||||||
|
"no_interfaces": "Aucune statistique de durée de vie de l'interface disponible",
|
||||||
|
"show_latest": "Dernières statistiques",
|
||||||
|
"title": "statistiques",
|
||||||
|
"used": "Mémoire utilisée %"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"connection_status": "Statut",
|
||||||
|
"error": "Les données d'état ne sont pas disponibles",
|
||||||
|
"last_contact": "Dernier contact",
|
||||||
|
"load_averages": "Charge (1/5/15 m.)",
|
||||||
|
"localtime": "heure locale",
|
||||||
|
"memory": "Mémoire utilisée",
|
||||||
|
"percentage_free": "{{percentage}}% de {{total}} gratuit",
|
||||||
|
"percentage_used": "{{percentage}}% de {{total}} utilisé",
|
||||||
|
"title": "#{{serialNumber}} état",
|
||||||
|
"total_memory": "Mémoire totale",
|
||||||
|
"uptime": "La disponibilité",
|
||||||
|
"used_total_memory": "{{used}} utilisé / {{total}} total"
|
||||||
|
},
|
||||||
|
"subscriber": {
|
||||||
|
"add_device_subscriber_explanation": "Pour réclamer d'autres appareils, vous pouvez utiliser notre barre de recherche ou réclamer directement à partir du tableau. Si un appareil a déjà été réclamé par un utilisateur, vous devrez accéder à ses détails et le désaffecter avant de le réclamer.",
|
||||||
|
"create": "Créer un abonné",
|
||||||
|
"devices_one": "{{count}} Appareil",
|
||||||
|
"devices_other": "{{count}} appareils",
|
||||||
|
"edit": "Modifier l'abonné",
|
||||||
|
"error_create": "Erreur lors de la création de l'abonné : {{error}}",
|
||||||
|
"error_delete": "Erreur lors de la suppression de l'abonné : {{error}}",
|
||||||
|
"error_fetching": "Erreur lors de la récupération des abonnés : {{error}}",
|
||||||
|
"error_fetching_single": "Erreur lors de la récupération de l'abonné : {{error}}",
|
||||||
|
"error_update": "Erreur lors de la mise à jour de l'abonné : {{error}}",
|
||||||
|
"is_already_claimed": "est déjà réclamé par",
|
||||||
|
"subscribers": "Les abonnés",
|
||||||
|
"success_create": "Abonné créé avec succès !",
|
||||||
|
"success_delete": "Abonné supprimé avec succès !",
|
||||||
|
"success_update": "Abonné mis à jour avec succès !"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"error_fetching": "Erreur lors de la récupération des informations système",
|
||||||
|
"error_reloading": "Erreur lors du rechargement : {{error}}",
|
||||||
|
"hostname": "nom d'hôte",
|
||||||
|
"os": "le système d'exploitation",
|
||||||
|
"processors": "Processeurs",
|
||||||
|
"reload": "Recharger",
|
||||||
|
"reload_subsystems": "Recharger",
|
||||||
|
"subsystems": "Sous-systèmes",
|
||||||
|
"success_reload": "Recharger la commande soumise avec succès !"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"connection_failed": "Échec de la création de la connexion. Erreur : {{error}}",
|
||||||
|
"interval": "Intervalle",
|
||||||
|
"last_update": "Dernière mise à jour",
|
||||||
|
"lifetime": "Durée",
|
||||||
|
"outputmode": "Mode de sortie",
|
||||||
|
"types": "Les types"
|
||||||
},
|
},
|
||||||
"trace": {
|
"trace": {
|
||||||
"choose_network": "Choisir le réseau",
|
"choose_network": "Choisir le réseau",
|
||||||
"directions": "Lancer une trace à distance de cet appareil pour une durée spécifique ou un nombre de paquets",
|
"directions": "Lancer une trace à distance de cet appareil pour une durée spécifique ou un nombre de paquets",
|
||||||
|
"download_trace": "Télécharger le fichier de trace",
|
||||||
"packets": "Paquets",
|
"packets": "Paquets",
|
||||||
"title": "Dispositif de traçage"
|
"title": "Trace",
|
||||||
|
"trace": "Trace",
|
||||||
|
"trace_not_successful": "Trace non réussie : la passerelle a signalé l'erreur suivante : {{error}}",
|
||||||
|
"wait_for_file": "Attendre que le fichier de trace soit prêt ?",
|
||||||
|
"waiting_directions": "Veuillez attendre le fichier de données de trace. Cela peut prendre un certain temps. Vous pouvez quitter l'attente et récupérer le fichier de trace de la table des commandes plus tard.",
|
||||||
|
"waiting_seconds": "Temps écoulé : {{seconds}} secondes"
|
||||||
},
|
},
|
||||||
"upgrade": {
|
"upgrade": {
|
||||||
|
"command_submitted": "Commande soumise",
|
||||||
|
"device_disconnected": "Appareil déconnecté",
|
||||||
|
"device_reconnected": "Appareil reconnecté",
|
||||||
|
"device_upgrading_firmware": "Mise à niveau du micrologiciel de l'appareil",
|
||||||
"directions": "Choisissez une heure et une version de firmware pour cet appareil",
|
"directions": "Choisissez une heure et une version de firmware pour cet appareil",
|
||||||
"firmware_uri": "URI du micrologiciel :",
|
"firmware_uri": "URI du micrologiciel :",
|
||||||
"need_uri": "Vous avez besoin d'un URI...",
|
"need_uri": "Vous avez besoin d'un URI...",
|
||||||
|
"new_version": "La nouvelle version est",
|
||||||
|
"offline_device": "Cette option est bloquée car cet appareil n'est pas connecté",
|
||||||
"time": "Heure de la mise à niveau :",
|
"time": "Heure de la mise à niveau :",
|
||||||
"title": "Mise à jour du firmware"
|
"title": "Mise à jour du firmware",
|
||||||
|
"upgrade": "Améliorer",
|
||||||
|
"wait_for_upgrade": "Souhaitez-vous attendre la fin de la mise à niveau ?",
|
||||||
|
"waiting_for_device": "En attente de la reconnexion de l'appareil"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_phone_number": "Ajouter un numéro de téléphone",
|
||||||
|
"avatar": "Votre avatar",
|
||||||
|
"avatar_file": "Votre Avatar (max. de 2 Mo)",
|
||||||
|
"check_phone": "Veuillez vérifier votre téléphone pour votre code de validation",
|
||||||
|
"confirm_new_password": "Confirmer le nouveau mot de passe",
|
||||||
|
"create": "Créer un utilisateur",
|
||||||
|
"create_failure": "Erreur lors de la création de l'utilisateur : {{error}}",
|
||||||
|
"create_success": "L'utilisateur a été créé avec succès",
|
||||||
|
"creating": "Création de l'utilisateur...",
|
||||||
|
"delete_avatar": "Supprimer l'avatar",
|
||||||
|
"delete_failure": "Erreur lors de la tentative de suppression de l'utilisateur: {{error}}",
|
||||||
|
"delete_success": "Utilisateur supprimé avec succès !",
|
||||||
|
"delete_title": "Supprimer l'utilisateur",
|
||||||
|
"delete_warning": "Avertissement : Une fois que vous avez supprimé un utilisateur, vous ne pouvez plus revenir en arrière",
|
||||||
|
"deleting": "Suppression ...",
|
||||||
|
"description": "La description",
|
||||||
|
"edit": "Modifier l'utilisateur",
|
||||||
|
"email_address": "Adresse électronique",
|
||||||
|
"enter_new_phone": "Saisissez votre nouveau numéro de téléphone :",
|
||||||
|
"error_fetching_users": "Erreur lors de la récupération des utilisateurs : {{error}}",
|
||||||
|
"error_retrieving": "Erreur lors de la récupération de l'utilisateur",
|
||||||
|
"error_sending_code": "Erreur lors de la tentative d'envoi du code de validation. Veuillez confirmer que votre numéro de téléphone est valide.",
|
||||||
|
"force_password_change": "Forcer le changement de mot de passe lors de la connexion",
|
||||||
|
"id": "Identifiant d'utilisateur.",
|
||||||
|
"last_login": "Dernière connexion",
|
||||||
|
"login_id": "Identifiant de connexion.",
|
||||||
|
"make_sure_same_password": "Assurez-vous que les deux mots de passe sont identiques et valides",
|
||||||
|
"my_profile": "Mon profil",
|
||||||
|
"name": "Prénom",
|
||||||
|
"new_code_sent": "Nouveau code envoyé !",
|
||||||
|
"nickname": "Surnom",
|
||||||
|
"nickname_explanation": "Surnom (optionnel)",
|
||||||
|
"not_validated": "Pas valide",
|
||||||
|
"note": "Remarque",
|
||||||
|
"password": "Mot de passe",
|
||||||
|
"phone_number": "Numéro de téléphone",
|
||||||
|
"provide_email": "Veuillez fournir une adresse email valide",
|
||||||
|
"provide_password": "Veuillez fournir un mot de passe valide",
|
||||||
|
"save_avatar": "Enregistrer l'avatar",
|
||||||
|
"send_code": "Envoyer le code",
|
||||||
|
"send_code_again": "Envoyer code à nouveau",
|
||||||
|
"show_hide_password": "Afficher/Masquer le mot de passe",
|
||||||
|
"successful_validation": "Numéro de téléphone validé ! Cliquez sur le bouton Enregistrer pour le lier à votre profil",
|
||||||
|
"table_title": "Utilisateurs administrateurs",
|
||||||
|
"update_failure": "Erreur lors de la tentative de mise à jour : {{error}}",
|
||||||
|
"update_failure_title": "mise à jour a échoué",
|
||||||
|
"update_success": "L'utilisateur a bien été mis à jour",
|
||||||
|
"update_success_title": "Succès",
|
||||||
|
"user_role": "Rôle",
|
||||||
|
"users": "Utilisateurs",
|
||||||
|
"validate_phone": "Valider",
|
||||||
|
"validated": "Validé",
|
||||||
|
"wrong_validation_code": "Vous n'avez pas entré de code valide. Veuillez réessayer et assurez-vous d'avoir entré le bon numéro de téléphone"
|
||||||
|
},
|
||||||
|
"wifi_analysis": {
|
||||||
|
"association": "Association",
|
||||||
|
"associations": "Les associations",
|
||||||
|
"mode": "Mode",
|
||||||
|
"network_diagram": "Diagramme de réseau",
|
||||||
|
"override_dfs": "Remplacer DFS",
|
||||||
|
"radios": "Radios",
|
||||||
|
"scan_warning": "Votre radio 5G est sur un canal radar, vous devez activer \"Override DFS\" pour permettre le balayage de tous les canaux 5G",
|
||||||
|
"title": "Analyse Wi-Fi",
|
||||||
|
"vendor": "vendeur",
|
||||||
|
"waiting_for_data": "En attente de réception des données de l'appareil. Veuillez revérifier plus tard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": {
|
"actions": {
|
||||||
|
"actions": "Ações",
|
||||||
"blink": "Piscar",
|
"blink": "Piscar",
|
||||||
"configure": "Configurar",
|
"configure": "Configurar",
|
||||||
"connect": "Conectar",
|
"connect": "Conectar",
|
||||||
@@ -7,112 +8,434 @@
|
|||||||
"factory_reset": "Restauração de fábrica",
|
"factory_reset": "Restauração de fábrica",
|
||||||
"firmware_upgrade": "Atualização de firmware",
|
"firmware_upgrade": "Atualização de firmware",
|
||||||
"reboot": "Reiniciar",
|
"reboot": "Reiniciar",
|
||||||
"title": "Ações do dispositivo",
|
"request_ie": "Solicitar IEs",
|
||||||
|
"telemetry": "Telemetria",
|
||||||
|
"title": "Comandos",
|
||||||
"trace": "Vestígio",
|
"trace": "Vestígio",
|
||||||
"wifi_scan": "Wifi Scan"
|
"wifi_scan": "Wi-Fi Scan"
|
||||||
},
|
},
|
||||||
"blink": {
|
"blink": {
|
||||||
"blink": "Piscar",
|
"blink": "Piscar",
|
||||||
"device_leds": "LEDs do dispositivo",
|
"device_leds": "LEDs do dispositivo",
|
||||||
|
"execute_now": "Você gostaria de definir este padrão agora?",
|
||||||
|
"explanation": "Que padrão você gostaria de definir neste dispositivo por 30 segundos?",
|
||||||
"pattern": "Escolha o padrão que deseja usar:",
|
"pattern": "Escolha o padrão que deseja usar:",
|
||||||
|
"set_leds": "Definir LEDs",
|
||||||
"when_blink_leds": "Quando você gostaria de fazer os LEDs do dispositivo piscarem?"
|
"when_blink_leds": "Quando você gostaria de fazer os LEDs do dispositivo piscarem?"
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
|
"command_success": "Comando enviado com sucesso",
|
||||||
"error": "Erro ao enviar comando!",
|
"error": "Erro ao enviar comando!",
|
||||||
"success": "Comando enviado com sucesso",
|
"error_delete_log": "Erro ao tentar excluir: {{error}}",
|
||||||
"title": "Comandos de dispositivo"
|
"event_queue": "Fila de Eventos",
|
||||||
|
"reboot_start": "O processo de reinicialização foi iniciado!",
|
||||||
|
"success": "Comando enviado com sucesso, você pode consultar o log de Comandos para ver o resultado",
|
||||||
|
"title": "Histórico de Comandos",
|
||||||
|
"unable_queue": "Incapaz de completar o pedido de fila de eventos: {{error}}"
|
||||||
},
|
},
|
||||||
"common": {
|
"common": {
|
||||||
|
"access_policy": "Política de Acesso",
|
||||||
|
"add": "Adicionar",
|
||||||
|
"add_items": "Adicionar itens",
|
||||||
|
"add_note": "Adicionar nota",
|
||||||
|
"add_note_explanation": "Escreva sua nova nota abaixo e clique no botão '+' quando terminar",
|
||||||
|
"adding_ellipsis": "Adicionando ...",
|
||||||
|
"all": "Todos",
|
||||||
"are_you_sure": "Você tem certeza?",
|
"are_you_sure": "Você tem certeza?",
|
||||||
|
"back_to_login": "Volte ao login",
|
||||||
|
"back_to_start": "Voltar ao Início",
|
||||||
|
"blacklist": "Lista negra",
|
||||||
|
"by": "Por",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"certificate": "Certificado",
|
"certificate": "Certificado",
|
||||||
|
"certificates": "Certificados",
|
||||||
|
"claim": "Afirmação",
|
||||||
"clear": "Claro",
|
"clear": "Claro",
|
||||||
"close": "Perto",
|
"close": "Perto",
|
||||||
|
"code": "Código",
|
||||||
"command": "Comando",
|
"command": "Comando",
|
||||||
|
"commands": "comandos",
|
||||||
|
"commands_executed": "Comandos Executados",
|
||||||
"compatible": "Compatível",
|
"compatible": "Compatível",
|
||||||
"completed": "Concluído",
|
"completed": "Concluído",
|
||||||
|
"concurrent_devices": "Dispositivos Simultâneos",
|
||||||
"config_id": "Config. Identidade",
|
"config_id": "Config. Identidade",
|
||||||
"confirm": "confirme",
|
"confirm": "confirme",
|
||||||
|
"confirm_stop_editing": "Tem certeza que deseja parar de editar? Isso cancelará todas as alterações não salvas que você fez.",
|
||||||
"connected": "Conectado",
|
"connected": "Conectado",
|
||||||
"copied": "Copiado!",
|
"copied": "Copiado!",
|
||||||
|
"copied_to_clipboard": "Copiado para a área de transferência!",
|
||||||
"copy_to_clipboard": "Copiar para área de transferência",
|
"copy_to_clipboard": "Copiar para área de transferência",
|
||||||
|
"create": "Crio",
|
||||||
|
"created": "Criado",
|
||||||
|
"created_by": "Criado Por",
|
||||||
|
"creator": "O Criador",
|
||||||
|
"current": "Atual",
|
||||||
|
"custom_date": "Data personalizada",
|
||||||
|
"dashboard": "painel de controle",
|
||||||
"date": "Encontro",
|
"date": "Encontro",
|
||||||
|
"day": "dia",
|
||||||
|
"days": "dias",
|
||||||
|
"default_map": "Mapa Padrão",
|
||||||
"delete": "Excluir",
|
"delete": "Excluir",
|
||||||
|
"delete_device": "Apagar dispositivo",
|
||||||
"details": "Detalhes",
|
"details": "Detalhes",
|
||||||
|
"device": "Dispositivo nº{{serialNumber}}",
|
||||||
|
"device_dashboard": "Painel do dispositivo",
|
||||||
|
"device_delete": "Excluir #{{serialNumber}}",
|
||||||
|
"device_deleted": "Dispositivo excluído com sucesso",
|
||||||
|
"device_health": "Saúde do Dispositivo",
|
||||||
"device_list": "Lista de Dispositivos",
|
"device_list": "Lista de Dispositivos",
|
||||||
"device_page": "Página do dispositivo",
|
"device_page": "Visão",
|
||||||
|
"device_status": "Status do dispositivo",
|
||||||
"devices": "Devices",
|
"devices": "Devices",
|
||||||
|
"devices_using_latest": "Dispositivos que usam o firmware mais recente",
|
||||||
|
"devices_using_unknown": "Dispositivos que usam firmware desconhecido",
|
||||||
"dismiss": "Dispensar",
|
"dismiss": "Dispensar",
|
||||||
"do_now": "Faça agora!",
|
"do_now": "Faça agora!",
|
||||||
"download": "Baixar",
|
"download": "Baixar",
|
||||||
|
"duplicate": "Duplicado",
|
||||||
"duration": "Duração",
|
"duration": "Duração",
|
||||||
|
"edit": "Editar",
|
||||||
|
"edit_user": "Editar",
|
||||||
|
"email_address": "Endereço de e-mail",
|
||||||
|
"endpoint": "Ponto final",
|
||||||
|
"endpoints": "Pontos finais",
|
||||||
"error": "Erro",
|
"error": "Erro",
|
||||||
|
"error_adding_note": "Erro ao adicionar nota",
|
||||||
|
"error_code": "Erro de código",
|
||||||
|
"errors": "Erros",
|
||||||
|
"execute_now": "Você gostaria de executar este comando agora?",
|
||||||
"executed": "Executado",
|
"executed": "Executado",
|
||||||
|
"exit": "Saída",
|
||||||
"firmware": "Firmware",
|
"firmware": "Firmware",
|
||||||
|
"firmware_dashboard": "Painel de Firmware",
|
||||||
|
"firmware_installed": "Firmware Instalado",
|
||||||
|
"forgot_password": "Esqueceu sua senha?",
|
||||||
|
"forgot_password_title": "Esqueceu a senha",
|
||||||
"from": "De",
|
"from": "De",
|
||||||
|
"general_error": "Erro de API, consulte o seu administrador",
|
||||||
|
"go_back": "Volte",
|
||||||
|
"hide": "Ocultar",
|
||||||
|
"hour": "hora",
|
||||||
|
"hours": "horas",
|
||||||
"id": "identidade",
|
"id": "identidade",
|
||||||
|
"invalid_credentials": "Nome de usuário e / ou senha inválidos",
|
||||||
|
"invalid_date_explanation": "Data inválida, use o calendário acessível com o botão à direita",
|
||||||
|
"invalid_file": "O arquivo escolhido era inválido, por favor, leia as instruções e ajuste seu arquivo de acordo",
|
||||||
|
"invalid_password": "Esta senha não está de acordo com as regras básicas de senha. Visite nossa página de Política de Senha para saber mais",
|
||||||
|
"invalid_pem": "Seu arquivo .pem é inválido. Deve começar com '----- BEGIN CERTIFICATE -----' OU '----- BEGIN PRIVATE KEY -----' e deve terminar com '----- END CERTIFICATE --- - 'OU' ----- END PRIVATE KEY ----- '",
|
||||||
"ip_address": "Endereço de IP",
|
"ip_address": "Endereço de IP",
|
||||||
|
"ips": "IPs",
|
||||||
|
"item": "Item",
|
||||||
|
"items": "Unid",
|
||||||
|
"items_per_page": "Itens por página:",
|
||||||
|
"key": "Chave",
|
||||||
|
"last_dashboard_refresh": "Última atualização do painel",
|
||||||
"later_tonight": "Logo à noite",
|
"later_tonight": "Logo à noite",
|
||||||
|
"latest": "Mais recentes",
|
||||||
|
"list": "Lista",
|
||||||
"loading_ellipsis": "Carregando...",
|
"loading_ellipsis": "Carregando...",
|
||||||
"loading_more_ellipsis": "Carregando mais ...",
|
"loading_more_ellipsis": "Carregando mais ...",
|
||||||
"logout": "Sair",
|
"logout": "Sair",
|
||||||
"mac": "Endereço MAC",
|
"mac": "Endereço MAC",
|
||||||
|
"main": "a Principal",
|
||||||
"manufacturer": "Fabricante",
|
"manufacturer": "Fabricante",
|
||||||
|
"memory_used": "Memória Usada",
|
||||||
|
"min_max": "Mín: {{min}}, Máx: {{max}}",
|
||||||
|
"minute": "minuto",
|
||||||
|
"minutes": "minutos",
|
||||||
|
"modified": "Modificado",
|
||||||
"na": "N / D",
|
"na": "N / D",
|
||||||
"need_date": "Você precisa de um encontro ...",
|
"need_date": "Você precisa de um encontro ...",
|
||||||
|
"no": "Não",
|
||||||
|
"no_addresses_found": "Nenhum endereço encontrado",
|
||||||
|
"no_clients_found": "Nenhum cliente encontrado",
|
||||||
|
"no_devices_found": "Nenhum dispositivo encontrado",
|
||||||
|
"no_items": "Nenhum item",
|
||||||
|
"none": "Nenhum",
|
||||||
"not_connected": "Não conectado",
|
"not_connected": "Não conectado",
|
||||||
|
"of_connected": "% de dispositivos conectados",
|
||||||
"off": "Fora",
|
"off": "Fora",
|
||||||
"on": "em",
|
"on": "em",
|
||||||
|
"optional": "Opcional",
|
||||||
|
"overall_health": "Saúde geral",
|
||||||
|
"password_policy": "Política de Senha",
|
||||||
|
"preferences": "Preferências",
|
||||||
|
"preview": "Visualizar",
|
||||||
|
"program": "Programa",
|
||||||
|
"reason": "RAZÃO",
|
||||||
"recorded": "Gravado",
|
"recorded": "Gravado",
|
||||||
"refresh": "REFRESH",
|
"refresh": "REFRESH",
|
||||||
"refresh_device": "Atualizar dispositivo",
|
"refresh_device": "Atualizar dispositivo",
|
||||||
|
"remove_claim": "Remover reivindicação",
|
||||||
|
"required": "Requeridos",
|
||||||
"result": "Resultado",
|
"result": "Resultado",
|
||||||
|
"save": "Salve",
|
||||||
|
"saved": "Salvou!",
|
||||||
|
"saving": "Salvando ...",
|
||||||
"schedule": "Cronograma",
|
"schedule": "Cronograma",
|
||||||
|
"search": "Dispositivos de pesquisa",
|
||||||
|
"second": "segundo",
|
||||||
|
"seconds": "segundos",
|
||||||
|
"seconds_elapsed": "Segundos decorridos",
|
||||||
|
"see_details": "Veja detalhes",
|
||||||
|
"select": "Selecione",
|
||||||
|
"serial_num": "Nº de série",
|
||||||
"serial_number": "Número de série",
|
"serial_number": "Número de série",
|
||||||
|
"show_all": "mostre tudo",
|
||||||
|
"socket_connection_closed": "Conexão fechada!",
|
||||||
"start": "Começar",
|
"start": "Começar",
|
||||||
|
"status": "Status",
|
||||||
|
"stop_editing": "Pare de editar",
|
||||||
"submit": "Enviar",
|
"submit": "Enviar",
|
||||||
"submitted": "Submetido",
|
"submitted": "Submetido",
|
||||||
"success": "Sucesso",
|
"success": "Sucesso",
|
||||||
|
"system": "Sistema",
|
||||||
|
"table": "Mesa",
|
||||||
|
"time_per_device": "Dispositivo / segundo",
|
||||||
|
"timestamp": "tempo",
|
||||||
"to": "Para",
|
"to": "Para",
|
||||||
|
"type": "Tipo",
|
||||||
|
"type_for_options": "Digite o valor que você precisa criar ...",
|
||||||
|
"type_for_options_format": "Digite um valor no formato válido ({{format}}) ...",
|
||||||
|
"unable_to_connect": "Incapaz de conectar ao dispositivo",
|
||||||
|
"unable_to_delete": "Incapaz de deletar",
|
||||||
"unknown": "Desconhecido",
|
"unknown": "Desconhecido",
|
||||||
|
"up_to_date": "Dispositivos atualizados",
|
||||||
|
"uptimes": "Uptimes",
|
||||||
|
"use_file": "Usar arquivo",
|
||||||
"uuid": "UUID",
|
"uuid": "UUID",
|
||||||
|
"vendors": "Vendedores",
|
||||||
"view_more": "Veja mais",
|
"view_more": "Veja mais",
|
||||||
|
"visibility": "visibilidade",
|
||||||
|
"waiting_for_update": "Aguardando atualização",
|
||||||
"yes": "sim"
|
"yes": "sim"
|
||||||
},
|
},
|
||||||
"configuration": {
|
"configuration": {
|
||||||
|
"add_configuration": "Adicionar configuração",
|
||||||
|
"add_new_block": "Adicionar novo bloco de configuração",
|
||||||
|
"add_or_link": "Link ou adicionar",
|
||||||
|
"add_radio": "Adicionar rádio",
|
||||||
|
"ca_cert_explanation": "Use um arquivo .pem que comece com \"----- BEGIN CERTIFICATE -----\" e termine com \"----- END CERTIFICATE -----\". O resultado será mostrado no campo abaixo. Você também pode copiar e colar o certificado que deseja usar diretamente.",
|
||||||
|
"cannot_delete": "Esta configuração não pode ser excluída porque está sendo usada por pelo menos uma entidade, local ou dispositivo",
|
||||||
|
"choose_radio_band": "Que banda de rádio você gostaria de criar?",
|
||||||
|
"choose_section": "Qual seção você gostaria que este bloco contivesse?",
|
||||||
|
"configuration_browser": "Navegador de configuração",
|
||||||
|
"configurations": "configurações",
|
||||||
|
"create": "Criar configuração",
|
||||||
|
"create_config": "Criar Nova Configuração",
|
||||||
|
"create_new_configuration": "Criar Novo Elemento de Configuração",
|
||||||
"created": "Criado",
|
"created": "Criado",
|
||||||
"details": "Detalhes do dispositivo",
|
"creation_success": "Configuração criada com sucesso!",
|
||||||
|
"currently_associated": "Configuração atual associada: {{config}}",
|
||||||
|
"currently_selected_config": "Configuração atualmente selecionada: {{config}}",
|
||||||
|
"default_configs": "Configurações padrão",
|
||||||
|
"default_configurations": "Configurações padrão",
|
||||||
|
"delete_config": "Excluir configuração",
|
||||||
|
"details": "Detalhes",
|
||||||
"device_password": "Senha",
|
"device_password": "Senha",
|
||||||
"last_configuration_change": "Última Mudança de Configuração",
|
"device_type": "Tipo de dispositivo",
|
||||||
|
"device_types": "Tipos de dispositivos",
|
||||||
|
"devices_affected": "Dispositivos afetados por esta configuração:",
|
||||||
|
"edit_configuration": "Editar configuração",
|
||||||
|
"error_delete": "Erro ao tentar excluir: {{error}}",
|
||||||
|
"error_delete_blacklist": "Erro ao excluir da lista negra: {{error}}",
|
||||||
|
"error_fetching_config": "Erro ao buscar configuração",
|
||||||
|
"error_trying_delete": "Erro ao tentar excluir: {{error}}",
|
||||||
|
"error_update": "Erro: {{error}}",
|
||||||
|
"explanation": "Explicação",
|
||||||
|
"key_pem_explanation": "Selecione o arquivo .pem",
|
||||||
|
"last_configuration_change": "Mudança de configuração",
|
||||||
"last_configuration_download": "Último download da configuração",
|
"last_configuration_download": "Último download da configuração",
|
||||||
"location": "Localização",
|
"location": "Localização",
|
||||||
|
"need_device_type": "Cada configuração deve suportar pelo menos um tipo de dispositivo",
|
||||||
|
"no_associated_config": "Sem configuração associada",
|
||||||
|
"no_associated_configuration": "Sem configurações associadas",
|
||||||
|
"note": "Nota",
|
||||||
"notes": "notas",
|
"notes": "notas",
|
||||||
"owner": "Proprietário",
|
"owner": "Proprietário",
|
||||||
"title": "Configuração do dispositivo",
|
"select_configuration": "Selecione esta configuração",
|
||||||
|
"success_block_delete": "Bloco de configuração excluído com sucesso",
|
||||||
|
"success_update": "Configuração atualizada com sucesso!",
|
||||||
|
"successful_delete": "Configuração excluída!",
|
||||||
|
"support_all": "Apoie todos",
|
||||||
|
"supported_device_types": "Tipos de dispositivos suportados",
|
||||||
|
"title": "Configuração",
|
||||||
"type": "Tipo de dispositivo",
|
"type": "Tipo de dispositivo",
|
||||||
|
"used_by": "Usado por",
|
||||||
|
"used_by_details": "{{entities}} Entidades, {{venues}} Locais e {{devices}} Dispositivos",
|
||||||
|
"uuid": "ID de configuração",
|
||||||
|
"view_affected_devices": "Exibir dispositivos afetados",
|
||||||
|
"view_config": "Ver configuração",
|
||||||
|
"view_in_use": "Visualização em uso",
|
||||||
"view_json": "Exibir JSON bruto"
|
"view_json": "Exibir JSON bruto"
|
||||||
},
|
},
|
||||||
"configure": {
|
"configure": {
|
||||||
"choose_file": "Você precisa escolher um arquivo .json válido:",
|
"choose_file": "Você precisa escolher um arquivo .json válido:",
|
||||||
"enter_new": "Insira a nova configuração do dispositivo JSON:",
|
"enter_new": "Insira a nova configuração do dispositivo JSON:",
|
||||||
"placeholder": "Config JSON",
|
"placeholder": "Config JSON",
|
||||||
"title": "Configurar dispositivo",
|
"title": "Configurar",
|
||||||
"valid_json": "Você precisa inserir um JSON válido"
|
"valid_json": "Você precisa inserir um JSON válido"
|
||||||
},
|
},
|
||||||
|
"connect": {
|
||||||
|
"error_trying_to_connect": "Erro ao tentar conectar ao dispositivo: {{error}}"
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"access_pin": "PIN de acesso",
|
||||||
|
"add_contact": "Adicionar contato",
|
||||||
|
"contact": "Contato",
|
||||||
|
"create_contact": "Criar Contato",
|
||||||
|
"currently_selected_contact": "Contato atualmente selecionado: {{contact}}",
|
||||||
|
"delete": "Excluir contato?",
|
||||||
|
"error_assign": "Erro ao tentar atribuir contato: {{error}}",
|
||||||
|
"error_creation": "Erro ao tentar criar contato: {{error}}",
|
||||||
|
"error_delete": "Erro ao tentar excluir contato: {{error}}",
|
||||||
|
"error_fetching_list": "Erro ao buscar contatos",
|
||||||
|
"error_fetching_single": "Erro ao buscar contato: {{error}}",
|
||||||
|
"error_unassign": "Erro ao tentar cancelar a atribuição do contato: {{error}}",
|
||||||
|
"first_name": "Primeiro nome",
|
||||||
|
"identifier": "Identificador",
|
||||||
|
"initials": "Iniciais",
|
||||||
|
"last_name": "Último nome",
|
||||||
|
"no_associated_contact": "Nenhum contato associado",
|
||||||
|
"primary_email": "e-mail primário",
|
||||||
|
"salutation": "Saudação",
|
||||||
|
"secondary_email": "Email secundário",
|
||||||
|
"successful_assign": "Contato atribuído com sucesso!",
|
||||||
|
"successful_creation": "Contato criado!",
|
||||||
|
"successful_delete": "Contato excluído com sucesso!",
|
||||||
|
"successful_unassign": "Contato não atribuído com sucesso",
|
||||||
|
"successful_update": "Contato atualizado com sucesso",
|
||||||
|
"title": "Contatos",
|
||||||
|
"type": "Tipo",
|
||||||
|
"update_error": "Erro ao atualizar contato: {{error}}",
|
||||||
|
"user_title": "Título",
|
||||||
|
"visual": "Nome para Correspondência"
|
||||||
|
},
|
||||||
"delete_command": {
|
"delete_command": {
|
||||||
"explanation": "Tem certeza de que deseja excluir este comando? esta ação não é reversível.",
|
"explanation": "Tem certeza de que deseja excluir este comando? esta ação não é reversível.",
|
||||||
"title": "Apagar Comando"
|
"title": "Apagar Comando"
|
||||||
},
|
},
|
||||||
|
"delete_logs": {
|
||||||
|
"date": "Selecione a data do registro mais antigo que você gostaria de manter",
|
||||||
|
"device_logs_title": "Excluir registros do dispositivo",
|
||||||
|
"explanation": "Isso excluirá todos os {{object}} antes da data que você escolheu. Cuidado, esta ação não é reversível.",
|
||||||
|
"healthchecks_title": "Excluir verificações de saúde"
|
||||||
|
},
|
||||||
|
"device": {
|
||||||
|
"add_to_blacklist": "Adicionar dispositivo à lista negra",
|
||||||
|
"all_devices": "Todos os dispositivos",
|
||||||
|
"already_running_command": "O dispositivo já está executando um comando, tente mais tarde",
|
||||||
|
"blacklisted_on": "Encontro",
|
||||||
|
"capabilities": "Recursos",
|
||||||
|
"certificate_explanation": "Certificados de dispositivos conectados",
|
||||||
|
"count_explanation": "Dispositivos apontando para esta instância de gateway",
|
||||||
|
"edit_blacklist": "Editar dispositivo na lista negra",
|
||||||
|
"error_adding_blacklist": "Erro ao adicionar dispositivo à lista negra: {{error}}",
|
||||||
|
"error_edit_blacklist": "Erro ao editar a lista negra: {{error}}",
|
||||||
|
"error_fetching_device": "Erro ao buscar informações do dispositivo: {{error}}",
|
||||||
|
"error_fetching_devices": "Erro ao buscar dispositivos: {{error}}",
|
||||||
|
"firmware_count_explanation": "Esta é a quantidade total de dispositivos que foram adicionados a este servidor de firmware, incluindo dispositivos que não estão apontando para o servidor de gateway relacionado.",
|
||||||
|
"health_explanation": "Integridade dos dispositivos conectados ((Dispositivos = 100% * 100 + Dispositivos> 90% * 95 + Dispositivos> 60% * 75 + Dispositivos <60% * 35) / Dispositivos Conectados)",
|
||||||
|
"mac_not_found": "Número de série não encontrado, redirecionando você para a página Dispositivos",
|
||||||
|
"memory_explanation": "Quantidade de dispositivos conectados com a memória correspondente usada%",
|
||||||
|
"remove_from_blacklist": "Remover da lista negra",
|
||||||
|
"success_added_blacklist": "Dispositivo adicionado à lista negra com sucesso!",
|
||||||
|
"success_edit_blacklist": "Lista negra editada com sucesso!",
|
||||||
|
"success_removed_blacklist": "Dispositivo removido com sucesso da lista negra!",
|
||||||
|
"uptimes_explanation": "Quantidade de dispositivos conectados com base em seu tempo de atividade"
|
||||||
|
},
|
||||||
"device_logs": {
|
"device_logs": {
|
||||||
"log": "Registro",
|
"log": "Registro",
|
||||||
"severity": "Gravidade",
|
"severity": "Gravidade",
|
||||||
"title": "Registros de dispositivos"
|
"title": "Toras"
|
||||||
|
},
|
||||||
|
"entity": {
|
||||||
|
"add_child": "Adicionar Entidade Filha a {{entityName}}",
|
||||||
|
"add_failure": "Erro, o servidor retornou: {{error}}",
|
||||||
|
"add_ips": "Gerenciar IPs",
|
||||||
|
"add_root": "Adicionar Entidade Raiz",
|
||||||
|
"add_success": "Entidade criada com sucesso!",
|
||||||
|
"assigned_inventory": "Estoque Atribuído",
|
||||||
|
"cannot_delete": "Você não pode excluir entidades que têm filhos. Exclua os filhos desta entidade para poder excluí-la.",
|
||||||
|
"confirm_map_delete": "Tem certeza que deseja excluir o mapa {{name}}? Esta ação não pode ser revertida",
|
||||||
|
"currently_selected_entity": "Entidade atualmente selecionada: {{config}}",
|
||||||
|
"currently_selected_venue": "Local selecionado atualmente: {{config}}",
|
||||||
|
"delete_success": "Entidade excluída com sucesso",
|
||||||
|
"delete_warning": "Aviso: esta operação não pode ser revertida",
|
||||||
|
"duplicate_from_node": "Duplicar com nó raiz específico",
|
||||||
|
"duplicate_map": "Mapa duplicado",
|
||||||
|
"duplicate_with_node": "Duplicar {{mapName}} com {{rootName}} como nó raiz",
|
||||||
|
"edit_failure": "Atualização malsucedida: {{error}}",
|
||||||
|
"enter_here": "Digite o (s) IP (s) que deseja adicionar aqui",
|
||||||
|
"entire_tree": "Mapa de Rede",
|
||||||
|
"entities": "Entidades",
|
||||||
|
"entity": "Entidade",
|
||||||
|
"error_deleting_map": "Erro ao excluir mapa: {{error}}",
|
||||||
|
"error_fetch_entity": "Erro ao buscar informações da entidade",
|
||||||
|
"error_fetching": "Erro ao buscar entidades",
|
||||||
|
"error_fetching_map": "Erro ao buscar mapa: {{error}}",
|
||||||
|
"error_fetching_tree": "Erro ao buscar árvore: {{error}}",
|
||||||
|
"error_saving": "Erro ao salvar entidade",
|
||||||
|
"error_saving_map": "Erro ao salvar o mapa: {{error}}",
|
||||||
|
"higher_priority": "Dê maior prioridade",
|
||||||
|
"ip_detection": "Detecção de IP",
|
||||||
|
"ip_formats": "Você pode adicionar endereços IPv4 ou IPv6 nos seguintes formatos:",
|
||||||
|
"lower_priority": "Faça menor prioridade",
|
||||||
|
"map": "Mapa",
|
||||||
|
"map_delete_success": "Mapa excluído com sucesso!",
|
||||||
|
"need_select_entity": "Você precisa selecionar uma entidade da tabela abaixo",
|
||||||
|
"no_ips": "Nenhum IP selecionado",
|
||||||
|
"not_assigned": "Não atribuído",
|
||||||
|
"only_unassigned": "Apenas não atribuídos",
|
||||||
|
"select_entity": "Selecione esta Entidade",
|
||||||
|
"selected_entity": "Entidade Selecionada",
|
||||||
|
"selected_map": "Mapa Selecionado",
|
||||||
|
"tree_saved": "Mapa salvo com sucesso!",
|
||||||
|
"update_failure_error": "Erro ao tentar atualizar a entidade: {{error}}",
|
||||||
|
"valid_serial": "Precisa ser um número de série válido (12 caracteres HEX)",
|
||||||
|
"venues": "Locais"
|
||||||
},
|
},
|
||||||
"factory_reset": {
|
"factory_reset": {
|
||||||
"redirector": "Manter redirecionador:",
|
"redirector": "Manter redirecionador:",
|
||||||
"title": "Dispositivo de redefinição de fábrica",
|
"reset": "Restabelecer",
|
||||||
|
"resetting": "Reiniciando ...",
|
||||||
|
"title": "Restauração de fábrica",
|
||||||
"warning": "Aviso: depois de enviar, isso não pode ser revertido"
|
"warning": "Aviso: depois de enviar, isso não pode ser revertido"
|
||||||
},
|
},
|
||||||
|
"firmware": {
|
||||||
|
"age_explanation": "Número médio de dias para todos os dispositivos dos quais podemos obter esse valor",
|
||||||
|
"average_age": "Idade Média do Firmware",
|
||||||
|
"choose_custom": "Escolher",
|
||||||
|
"details_title": "Detalhes da imagem #{{image}} ",
|
||||||
|
"device_type": "Tipo de dispositivo",
|
||||||
|
"device_types": "Tipos de dispositivos",
|
||||||
|
"downloads": "Transferências",
|
||||||
|
"error_fetching_latest": "Erro ao buscar o firmware mais recente",
|
||||||
|
"from_release": "De",
|
||||||
|
"history_title": "História",
|
||||||
|
"image": "Imagem",
|
||||||
|
"image_date": "Data da Imagem",
|
||||||
|
"installed_firmware": "Firmware Instalado",
|
||||||
|
"latest_explanation": "Dispositivos executando firmware reconhecido em sua versão mais recente",
|
||||||
|
"latest_version_installed": "Última versão instalada",
|
||||||
|
"newer_firmware_available": "Novas revisões disponíveis",
|
||||||
|
"reinstall_latest": "Reinstalar",
|
||||||
|
"release": "LANÇAMENTO",
|
||||||
|
"revision": "Revisão",
|
||||||
|
"show_dev": "Mostrar lançamentos de desenvolvimento",
|
||||||
|
"size": "Tamanho",
|
||||||
|
"status": "Status do firmware",
|
||||||
|
"title": "Firmware",
|
||||||
|
"to_release": "Para",
|
||||||
|
"unknown_firmware_status": "Status de firmware desconhecido",
|
||||||
|
"upgrade": "Melhorar",
|
||||||
|
"upgrade_command_submitted": "Atualização em andamento...",
|
||||||
|
"upgrade_to_latest": "Mais recentes",
|
||||||
|
"upgrade_to_version": "Atualize para esta revisão",
|
||||||
|
"upgrading": "Atualizando ..."
|
||||||
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"coreui_for_react": "CoreUI para React",
|
"coreui_for_react": "CoreUI para React",
|
||||||
"powered_by": "Distribuído por",
|
"powered_by": "Distribuído por",
|
||||||
@@ -120,43 +443,382 @@
|
|||||||
},
|
},
|
||||||
"health": {
|
"health": {
|
||||||
"sanity": "Sanidade",
|
"sanity": "Sanidade",
|
||||||
"title": "Saúde do Dispositivo"
|
"title": "Saúde"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"add_child": "Adicionar local infantil",
|
||||||
|
"add_child_venue": "Adicionar Local Infantil a {{entityName}}",
|
||||||
|
"add_tag": "Criar tag",
|
||||||
|
"add_tag_to": "Adicionar novo dispositivo a {{name}}",
|
||||||
|
"add_venue": "Adicionar Local",
|
||||||
|
"assign_ent_ven": "Atribuir à Entidade ou Local",
|
||||||
|
"assign_entity_instructions": "Você pode encontrar a entidade à qual deseja que esta tag seja atribuída usando o menu abaixo ou pode colar manualmente o UUID da entidade no campo acima.",
|
||||||
|
"assign_error": "Erro ao tentar atribuir tag",
|
||||||
|
"assign_to_entity": "Atribuir à Entidade",
|
||||||
|
"bulk_delete_assigned": "Gostaria de excluir em massa os dispositivos atribuídos em seu arquivo?",
|
||||||
|
"bulk_delete_assigned_warning": "Aviso: esta ação não é reversível",
|
||||||
|
"bulk_delete_devices": "Dispositivos de exclusão em massa",
|
||||||
|
"bulk_delete_devices_not_found": "{{number}} dispositivos não encontrados",
|
||||||
|
"bulk_delete_explanation": "Para excluir dispositivos em massa, use um arquivo CSV com uma coluna chamada SerialNumber",
|
||||||
|
"bulk_delete_test": "Validar Arquivo",
|
||||||
|
"close_entity_menu": "Fechar Menu Editar Entidade",
|
||||||
|
"delete_devices": "Apagar dispositivos",
|
||||||
|
"delete_errors": "{{number}} Excluir erros do dispositivo",
|
||||||
|
"delete_tag": "Excluir tag",
|
||||||
|
"delete_venue": "Excluir local permanentemente",
|
||||||
|
"deleted_devices": "{{number}} Dispositivos Excluídos",
|
||||||
|
"deleting": "Excluindo ...",
|
||||||
|
"deletion_failure": "Erro de exclusão",
|
||||||
|
"devices_assigned": "{{number}} dispositivos existentes atribuídos e atualizados",
|
||||||
|
"devices_created": "{{number}} dispositivos criados",
|
||||||
|
"devices_deleted": "Dispositivos Excluídos",
|
||||||
|
"devices_errors_while_creating": "{{number}} criações de dispositivos falharam",
|
||||||
|
"devices_errors_while_updating": "{{number}} atualizações do dispositivo falharam",
|
||||||
|
"devices_found_assigned": "{{number}} dispositivos encontrados e já atribuídos a uma entidade ou local",
|
||||||
|
"devices_found_unassigned": "{{number}} dispositivos encontrados, mas não atribuídos",
|
||||||
|
"devices_imported": " Dispositivos importados",
|
||||||
|
"devices_not_found": "{{number}} dispositivos sem conflito",
|
||||||
|
"devices_tested": "Dispositivos Testados",
|
||||||
|
"duplicate_serial": "Número de série já usado no arquivo (duplicado)",
|
||||||
|
"error_create_venue": "Erro ao criar local",
|
||||||
|
"error_delete_tag": "Erro ao excluir tag de inventário",
|
||||||
|
"error_get_venue": "Erro ao recuperar locais",
|
||||||
|
"error_pushing_config": "Erro ao tentar enviar a configuração para o dispositivo: {{error}}",
|
||||||
|
"error_retrieving": "Ocorreu um erro ao recuperar as tags de inventário",
|
||||||
|
"error_unassign": "Erro durante operação de cancelamento de atribuição",
|
||||||
|
"error_update_venue": "Erro ao atualizar o local",
|
||||||
|
"error_venue_delete": "Erro ao excluir local",
|
||||||
|
"error_within_file": "{{number}} dispositivos com informações erradas no arquivo (serão ignorados)",
|
||||||
|
"file_error": "Parece haver um erro em seu arquivo. Certifique-se de que o arquivo esteja no formato CSV e contenha as 5 colunas mencionadas acima na primeira linha do arquivo",
|
||||||
|
"final_delete_results": "Resultados de exclusão final",
|
||||||
|
"final_import_results": "Resultados finais de importação",
|
||||||
|
"import_assigned_devices": "Quer reatribuí-los com esta importação?",
|
||||||
|
"import_assigned_devices_explanation": "Alguns dispositivos entram em conflito com dispositivos já atribuídos. Você deve resolver esses problemas antes de importar.",
|
||||||
|
"import_devices": "Dispositivos de importação",
|
||||||
|
"import_devices_explanation": "Para importar dispositivos em massa, você precisa usar um arquivo CSV com as seguintes colunas: SerialNumber, Name, Description, DeviceType, NoteText",
|
||||||
|
"import_devices_to": "Importar dispositivos para {{name}}",
|
||||||
|
"import_existing_devices": "Atualizar e atribuí-los?",
|
||||||
|
"import_existing_devices_explanation": "Alguns dispositivos já existem no inventário e não foram atribuídos.",
|
||||||
|
"importing": "A importar ...",
|
||||||
|
"last_modification": "Última modificação",
|
||||||
|
"no_devices_to_delete": "Nenhum dispositivo para excluir",
|
||||||
|
"no_devices_to_import": "Nenhum dispositivo válido para criar ou atualizar!",
|
||||||
|
"note_text": "Texto da Nota",
|
||||||
|
"passed_tests": "Todos os testes foram aprovados, seus dispositivos estão prontos para importar!",
|
||||||
|
"serial_number_required": "Erro: Número de série ausente",
|
||||||
|
"showing_top_10": "Aqui está uma prévia das informações que recuperamos de seu arquivo:",
|
||||||
|
"sub_venues": "Subvenues",
|
||||||
|
"subscriber": "Assinante",
|
||||||
|
"successful_assign": "Tag atribuída com sucesso",
|
||||||
|
"successful_tag_delete": "Tag de inventário excluída com sucesso",
|
||||||
|
"successful_tag_update": "Tag atualizada com sucesso",
|
||||||
|
"successful_unassign": "A operação de cancelamento da atribuição foi bem-sucedida",
|
||||||
|
"successful_venue_create": "Local criado com sucesso",
|
||||||
|
"successful_venue_delete": "Local excluído com sucesso",
|
||||||
|
"successful_venue_update": "Local atualizado com sucesso",
|
||||||
|
"tag_created": "Tag de inventário criada com sucesso",
|
||||||
|
"tag_creation_error": "Erro ao tentar criar etiqueta de inventário",
|
||||||
|
"tag_update_error": "Erro ao atualizar tag",
|
||||||
|
"tags_assigned_to": "Tags de inventário atribuídas a {{name}}",
|
||||||
|
"test_import": "Validar dados de importação",
|
||||||
|
"test_results": "Resultado dos testes",
|
||||||
|
"title": "Inventário",
|
||||||
|
"type_invalid": "Erro: Tipo de dispositivo inválido",
|
||||||
|
"unassign": "Cancelar atribuição",
|
||||||
|
"unassign_tag": "Cancelar a atribuição de tag da entidade",
|
||||||
|
"unassigned_deleted_devices": "{{number}} Dispositivos excluídos e não atribuídos",
|
||||||
|
"unassigned_tags": "Tags não atribuídas",
|
||||||
|
"validating_import_file": "Validando arquivo de importação e dados ...",
|
||||||
|
"venue": "Local",
|
||||||
|
"view_in_gateway": "Ver no Gateway"
|
||||||
|
},
|
||||||
|
"location": {
|
||||||
|
"add": "Adicionar Local",
|
||||||
|
"building_name": "nome do edifício",
|
||||||
|
"city": "Cidade",
|
||||||
|
"country": "País",
|
||||||
|
"create": "Criar local",
|
||||||
|
"currently_selected": "Local selecionado atualmente: {{location}}",
|
||||||
|
"delete": "Excluir localização?",
|
||||||
|
"error_assign": "Erro ao tentar atribuir local: {{error}}",
|
||||||
|
"error_creation": "Erro ao tentar criar locais: {{error}}",
|
||||||
|
"error_delete": "Erro ao excluir localização: {{error}}",
|
||||||
|
"error_fetching_single": "Erro ao tentar buscar localização: {{error}}",
|
||||||
|
"geocode": "GeoCode",
|
||||||
|
"mobiles": "Móbiles",
|
||||||
|
"no_associated": "Sem localização associada",
|
||||||
|
"phones": "Telefones",
|
||||||
|
"postal": "CEP / Código Postal",
|
||||||
|
"search": "Pesquise locais para preencher automaticamente os campos abaixo",
|
||||||
|
"state": "Estado",
|
||||||
|
"street_address": "Endereço",
|
||||||
|
"successful_creation": "Local criado com sucesso!",
|
||||||
|
"successful_delete": "Local excluído com sucesso!",
|
||||||
|
"successful_update": "Local atualizado com sucesso!",
|
||||||
|
"successfully_assigned": "Local atribuído com sucesso!",
|
||||||
|
"title": "Localizações",
|
||||||
|
"update_error": "Erro ao atualizar local: {{error}}"
|
||||||
},
|
},
|
||||||
"login": {
|
"login": {
|
||||||
|
"account_verification": "Verificação de conta",
|
||||||
|
"authentication_expired": "Autenticação expirada, reinicie o processo de login",
|
||||||
|
"change_password": "Mudar senha",
|
||||||
|
"change_password_error": "Erro ao alterar a senha. Certifique-se de que a nova senha é válida visitando a página 'Política de senha'",
|
||||||
|
"change_password_instructions": "Digite e confirme sua nova senha",
|
||||||
|
"changing_password": "Alterando senha ...",
|
||||||
|
"confirm_new_password": "confirme a nova senha",
|
||||||
|
"different_passwords": "Você precisa inserir a mesma senha duas vezes",
|
||||||
|
"email_code_validation": "Verifique sua caixa de e-mail e insira o código de verificação que acabamos de enviar na caixa abaixo",
|
||||||
|
"forgot_password_error": "Erro ao tentar enviar e-mail Esqueci a senha. Certifique-se de que este userId esteja associado a uma conta.",
|
||||||
|
"forgot_password_explanation": "Digite seu nome de usuário para receber um e-mail contendo as instruções para redefinir sua senha",
|
||||||
|
"forgot_password_success": "Em breve, você receberá um e-mail com as instruções para redefinir sua senha. Certifique-se de verificar o seu spam se você não conseguir encontrar o e-mail",
|
||||||
|
"logging_in": "Fazendo login ...",
|
||||||
"login": "Entrar",
|
"login": "Entrar",
|
||||||
"login_error": "Erro de login, confirme se seu nome de usuário, senha e url de gateway são válidos",
|
"login_error": "Erro de login, certifique-se de que as informações que você está fornecendo são válidas",
|
||||||
|
"new_password": "Nova senha",
|
||||||
"password": "Senha",
|
"password": "Senha",
|
||||||
"please_enter_gateway": "Insira um URL de gateway",
|
"phone_validation_explanation": "Verifique seu dispositivo móvel e insira o código de verificação que acabamos de enviar na caixa abaixo",
|
||||||
|
"please_enter_gateway": "Insira um URL uCentralSec",
|
||||||
"please_enter_password": "Por favor, insira sua senha",
|
"please_enter_password": "Por favor, insira sua senha",
|
||||||
"please_enter_username": "Por favor insira seu nome de usuário",
|
"please_enter_username": "Por favor insira seu nome de usuário",
|
||||||
|
"previously_used": "A senha foi usada anteriormente",
|
||||||
|
"send_forgot": "ENVIAR EMAIL",
|
||||||
|
"sending_ellipsis": "Enviando ...",
|
||||||
"sign_in_to_account": "Faça login em sua conta",
|
"sign_in_to_account": "Faça login em sua conta",
|
||||||
"username": "Nome de usuário"
|
"url": "URL uCentralSec",
|
||||||
|
"username": "Nome de usuário",
|
||||||
|
"verification_code": "Insira sua verificação aqui",
|
||||||
|
"wrong_code": "O código de verificação inserido não é válido."
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"provisioning": "Provisioning"
|
||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"directions": "Quando você gostaria de reinicializar este dispositivo?",
|
"directions": "Quando você gostaria de reinicializar este dispositivo?",
|
||||||
"title": "Reiniciar dispositivo"
|
"now": "Você gostaria de reiniciar este dispositivo agora?",
|
||||||
|
"title": "Reiniciar"
|
||||||
},
|
},
|
||||||
"scan": {
|
"scan": {
|
||||||
"active": "Habilitar varredura ativa",
|
"active": "Habilitar varredura ativa",
|
||||||
"channel": "Canal",
|
"channel": "Canal",
|
||||||
"directions": "Inicie uma verificação de wi-fi deste dispositivo, o que deve levar aproximadamente 25 segundos.",
|
"directions": "Inicie uma verificação de wi-fi deste dispositivo, o que deve levar aproximadamente 25 segundos.",
|
||||||
"results": "Resultados da verificação de wi-fi"
|
"re_scan": "Verificar novamente",
|
||||||
|
"result_directions": "Você pode clicar no botão 'Scan' no canto superior direito para $t(scan.re_scan)",
|
||||||
|
"results": "Resultados da verificação de Wi-Fi",
|
||||||
|
"scan": "Varredura",
|
||||||
|
"scanning": "Scanning... ",
|
||||||
|
"waiting_directions": "Por favor, aguarde o resultado da verificação. Isso pode levar até 25 segundos. Você pode sair e ver os resultados da tabela de comandos mais tarde."
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Definições"
|
||||||
|
},
|
||||||
|
"simulation": {
|
||||||
|
"add": "Adicionar Simulação",
|
||||||
|
"cancel": "Cancelar",
|
||||||
|
"cancel_success": "Simulação cancelada com sucesso!",
|
||||||
|
"check_ongoing_sims": "Seguir Sim em Curso",
|
||||||
|
"client_interval": "Intervalo do Cliente",
|
||||||
|
"delete_simulation": "Excluir Sim. {{name}}",
|
||||||
|
"end": "Terminado",
|
||||||
|
"error_creating": "Erro ao criar simulação: {{error}}",
|
||||||
|
"error_delete": "Erro ao excluir simulação: {{error}}",
|
||||||
|
"error_devices": "Dispositivos de Erro",
|
||||||
|
"error_edit": "Erro ao tentar salvar a simulação: {{error}}",
|
||||||
|
"error_edit_run": "Erro ao tentar alterar o estado de execução: {{error}}",
|
||||||
|
"error_fetching_simulations": "Erro ao buscar simulações: {{error}}",
|
||||||
|
"error_start_run": "Erro ao tentar iniciar uma simulação: {{error}}",
|
||||||
|
"gateway": "Gateway",
|
||||||
|
"healtcheck_interval": "Intervalo de verificação de saúde",
|
||||||
|
"keep_alive": "Mantenha vivo",
|
||||||
|
"last_refresh": "Última atualização",
|
||||||
|
"length": "Comprimento",
|
||||||
|
"live_devices": "Dispositivos Live",
|
||||||
|
"mac_prefix": "Prefixo MAC",
|
||||||
|
"max_associations": "Máx. Associações",
|
||||||
|
"max_clients": "Máx. Clientes",
|
||||||
|
"messages_transmitted": "Msgs TX",
|
||||||
|
"min_associations": "Min. Associações",
|
||||||
|
"min_clients": "Min. Clientes",
|
||||||
|
"pause": "pausa",
|
||||||
|
"pause_success": "Executar em pausa!",
|
||||||
|
"prefix_length": "Obrigatório, deve ter 6 caracteres",
|
||||||
|
"previous_runs": "Execuções anteriores",
|
||||||
|
"received": "recebido",
|
||||||
|
"received_messages": "Msgs RX",
|
||||||
|
"reconnect_interval": "Intervalo de reconexão",
|
||||||
|
"resume": "Currículo",
|
||||||
|
"resume_success": "Executar retomado!",
|
||||||
|
"run": "Simulação Rodada",
|
||||||
|
"run_simulation": "Executar Simulação",
|
||||||
|
"started": "Começado",
|
||||||
|
"state_interval": "Intervalo de estado",
|
||||||
|
"stop": "Pare",
|
||||||
|
"stop_success": "Run Stopped!",
|
||||||
|
"success_creating": "Simulação criada com sucesso!",
|
||||||
|
"success_run_start": "Execução iniciada com sucesso!",
|
||||||
|
"successful_delete": "Simulação excluída com sucesso!",
|
||||||
|
"successful_edit": "Simulação editada com sucesso!",
|
||||||
|
"threads": "Tópicos",
|
||||||
|
"time_full_devices": "Tempo para dispositivos completos",
|
||||||
|
"title": "Simulações",
|
||||||
|
"transmitted": "Transmitido",
|
||||||
|
"valid_cert": "Certificado Válido",
|
||||||
|
"valid_key": "Chave Válida"
|
||||||
},
|
},
|
||||||
"statistics": {
|
"statistics": {
|
||||||
"data": "Dados (KB)",
|
"data": "Dados (KB)",
|
||||||
"title": "Estatisticas"
|
"data_mb": "Dados (MB)",
|
||||||
|
"latest_statistics": "Estatísticas mais recentes",
|
||||||
|
"lifetime_stats": "Estatísticas de vida",
|
||||||
|
"memory": "Memória",
|
||||||
|
"no_interfaces": "Nenhuma estatística de tempo de vida da interface disponível",
|
||||||
|
"show_latest": "Últimas estatísticas",
|
||||||
|
"title": "Estatisticas",
|
||||||
|
"used": "Memoria usada %"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"connection_status": "Status",
|
||||||
|
"error": "Dados de status indisponíveis",
|
||||||
|
"last_contact": "Último contato",
|
||||||
|
"load_averages": "Carga (1/5/15 m.)",
|
||||||
|
"localtime": "Horário local",
|
||||||
|
"memory": "Memória Usada",
|
||||||
|
"percentage_free": "{{percentage}}% de {{total}} grátis",
|
||||||
|
"percentage_used": "{{percentage}}% de {{total}} usado",
|
||||||
|
"title": "#{{serialNumber}} status",
|
||||||
|
"total_memory": "Memória total",
|
||||||
|
"uptime": "Tempo de atividade",
|
||||||
|
"used_total_memory": "{{used}} usado / {{total}} total"
|
||||||
|
},
|
||||||
|
"subscriber": {
|
||||||
|
"add_device_subscriber_explanation": "Para reivindicar outros dispositivos, você pode usar nossa barra de pesquisa ou reivindicar diretamente na tabela. Se um dispositivo já foi reivindicado por um usuário, você precisará acessar os detalhes dele e cancelar a atribuição antes de reivindicá-lo.",
|
||||||
|
"create": "Criar assinante",
|
||||||
|
"devices_one": "{{count}} Dispositivo",
|
||||||
|
"devices_other": "{{count}} dispositivos",
|
||||||
|
"edit": "Editar Assinante",
|
||||||
|
"error_create": "Erro ao criar assinante: {{error}}",
|
||||||
|
"error_delete": "Erro ao excluir assinante: {{error}}",
|
||||||
|
"error_fetching": "Erro ao buscar assinantes: {{error}}",
|
||||||
|
"error_fetching_single": "Erro ao buscar assinante: {{error}}",
|
||||||
|
"error_update": "Erro ao atualizar assinante: {{error}}",
|
||||||
|
"is_already_claimed": "já é reivindicado por",
|
||||||
|
"subscribers": "Inscritos",
|
||||||
|
"success_create": "Assinante criado com sucesso!",
|
||||||
|
"success_delete": "Assinante excluído com sucesso!",
|
||||||
|
"success_update": "Assinante atualizado com sucesso!"
|
||||||
|
},
|
||||||
|
"system": {
|
||||||
|
"error_fetching": "Erro ao buscar informações do sistema",
|
||||||
|
"error_reloading": "Erro ao recarregar: {{error}}",
|
||||||
|
"hostname": "Nome de anfitrião",
|
||||||
|
"os": "Sistema Operacional",
|
||||||
|
"processors": "Processadores",
|
||||||
|
"reload": "Recarregar",
|
||||||
|
"reload_subsystems": "Recarregar",
|
||||||
|
"subsystems": "Subsistemas",
|
||||||
|
"success_reload": "Comando de recarregamento enviado com sucesso!"
|
||||||
|
},
|
||||||
|
"telemetry": {
|
||||||
|
"connection_failed": "Falha ao criar conexão. Erro: {{error}}",
|
||||||
|
"interval": "intervalo",
|
||||||
|
"last_update": "Última atualização",
|
||||||
|
"lifetime": "Duração",
|
||||||
|
"outputmode": "Modo saída",
|
||||||
|
"types": "Tipos"
|
||||||
},
|
},
|
||||||
"trace": {
|
"trace": {
|
||||||
"choose_network": "Escolha a rede",
|
"choose_network": "Escolha a rede",
|
||||||
"directions": "Lançar um rastreamento remoto deste dispositivo para uma duração específica ou um número de pacotes",
|
"directions": "Lançar um rastreamento remoto deste dispositivo para uma duração específica ou um número de pacotes",
|
||||||
|
"download_trace": "Baixar arquivo de rastreamento",
|
||||||
"packets": "Pacotes",
|
"packets": "Pacotes",
|
||||||
"title": "Dispositivo de rastreamento"
|
"title": "Vestígio",
|
||||||
|
"trace": "Vestígio",
|
||||||
|
"trace_not_successful": "O rastreamento não foi bem-sucedido: o gateway relatou o seguinte erro: {{error}}",
|
||||||
|
"wait_for_file": "Esperar até que o arquivo de rastreamento esteja pronto?",
|
||||||
|
"waiting_directions": "Aguarde o arquivo de dados de rastreamento. Isto pode tomar algum tempo. Você pode sair da espera e recuperar o arquivo de rastreamento da tabela de comandos mais tarde.",
|
||||||
|
"waiting_seconds": "Tempo decorrido: {{seconds}} segundos"
|
||||||
},
|
},
|
||||||
"upgrade": {
|
"upgrade": {
|
||||||
|
"command_submitted": "Comando enviado",
|
||||||
|
"device_disconnected": "Dispositivo desconectado",
|
||||||
|
"device_reconnected": "Dispositivo reconectado",
|
||||||
|
"device_upgrading_firmware": "Firmware de atualização de dispositivo",
|
||||||
"directions": "Escolha um horário e uma versão de firmware para este dispositivo",
|
"directions": "Escolha um horário e uma versão de firmware para este dispositivo",
|
||||||
"firmware_uri": "URI de firmware:",
|
"firmware_uri": "URI de firmware:",
|
||||||
"need_uri": "Você precisa de um URI ...",
|
"need_uri": "Você precisa de um URI ...",
|
||||||
|
"new_version": "Nova versão é",
|
||||||
|
"offline_device": "Esta opção está bloqueada porque este dispositivo não está conectado",
|
||||||
"time": "Tempo de atualização:",
|
"time": "Tempo de atualização:",
|
||||||
"title": "Atualização de firmware"
|
"title": "Atualização de firmware",
|
||||||
|
"upgrade": "Melhorar",
|
||||||
|
"wait_for_upgrade": "Você gostaria de esperar a conclusão da atualização?",
|
||||||
|
"waiting_for_device": "Esperando que o dispositivo se reconecte"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"add_phone_number": "ADICIONAR NÚMERO DE TELEFONE",
|
||||||
|
"avatar": "Seu avatar",
|
||||||
|
"avatar_file": "Seu avatar (máx. De 2 MB)",
|
||||||
|
"check_phone": "Por favor, verifique o seu telefone para o seu código de validação",
|
||||||
|
"confirm_new_password": "confirme a nova senha",
|
||||||
|
"create": "Criar usuário",
|
||||||
|
"create_failure": "Erro ao criar usuário: {{error}}",
|
||||||
|
"create_success": "Usuário criado com sucesso",
|
||||||
|
"creating": "Criando usuário ...",
|
||||||
|
"delete_avatar": "Apagar Avatar",
|
||||||
|
"delete_failure": "Erro ao tentar excluir usuário: {{error}}",
|
||||||
|
"delete_success": "Usuário excluído com sucesso!",
|
||||||
|
"delete_title": "Deletar usuário",
|
||||||
|
"delete_warning": "Aviso: depois de excluir um usuário, você não pode reverter",
|
||||||
|
"deleting": "Excluindo ...",
|
||||||
|
"description": "Descrição",
|
||||||
|
"edit": "Editar usuário",
|
||||||
|
"email_address": "Endereço de e-mail",
|
||||||
|
"enter_new_phone": "Insira seu novo número de telefone:",
|
||||||
|
"error_fetching_users": "Erro ao buscar usuários: {{error}}",
|
||||||
|
"error_retrieving": "Erro ao recuperar usuário",
|
||||||
|
"error_sending_code": "Erro ao tentar enviar o código de validação. Por favor, confirme se o seu número de telefone é válido.",
|
||||||
|
"force_password_change": "Forçar mudança de senha no login",
|
||||||
|
"id": "ID do usuário.",
|
||||||
|
"last_login": "Último login",
|
||||||
|
"login_id": "Identificação de usuário.",
|
||||||
|
"make_sure_same_password": "Certifique-se de que ambas as senhas são iguais e válidas",
|
||||||
|
"my_profile": "Meu perfil",
|
||||||
|
"name": "Nome",
|
||||||
|
"new_code_sent": "Novo código enviado!",
|
||||||
|
"nickname": "Apelido",
|
||||||
|
"nickname_explanation": "Apelido (opcional)",
|
||||||
|
"not_validated": "Não validado",
|
||||||
|
"note": "Nota",
|
||||||
|
"password": "Senha",
|
||||||
|
"phone_number": "Número de telefone",
|
||||||
|
"provide_email": "Por favor, forneça um endereço de e-mail válido",
|
||||||
|
"provide_password": "Forneça uma senha válida",
|
||||||
|
"save_avatar": "Salvar Avatar",
|
||||||
|
"send_code": "Enviar código",
|
||||||
|
"send_code_again": "Envie o Código Novamente",
|
||||||
|
"show_hide_password": "Mostrar / ocultar senha",
|
||||||
|
"successful_validation": "Número de telefone validado! Clique no botão Salvar para vinculá-lo ao seu perfil",
|
||||||
|
"table_title": "Usuários administrativos",
|
||||||
|
"update_failure": "Erro ao tentar atualizar: {{error}}",
|
||||||
|
"update_failure_title": "Atualização falhou",
|
||||||
|
"update_success": "Usuário atualizado com sucesso",
|
||||||
|
"update_success_title": "Sucesso",
|
||||||
|
"user_role": "Função",
|
||||||
|
"users": "Comercial",
|
||||||
|
"validate_phone": "validar",
|
||||||
|
"validated": "Validado",
|
||||||
|
"wrong_validation_code": "Você não digitou um código válido. Por favor, tente novamente e certifique-se de ter inserido o número de telefone correto"
|
||||||
|
},
|
||||||
|
"wifi_analysis": {
|
||||||
|
"association": "Associação",
|
||||||
|
"associations": "Associações",
|
||||||
|
"mode": "Modo",
|
||||||
|
"network_diagram": "Diagrama de rede",
|
||||||
|
"override_dfs": "Substituir DFS",
|
||||||
|
"radios": "Rádios",
|
||||||
|
"scan_warning": "Seu rádio 5G está em um canal de radar, você deve habilitar “Override DFS” para permitir a varredura de todos os canais 5G",
|
||||||
|
"title": "Análise de Wi-Fi",
|
||||||
|
"vendor": "fornecedor",
|
||||||
|
"waiting_for_data": "Aguardando para receber dados do dispositivo. Verifique novamente mais tarde"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 12 KiB |
@@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"short_name": "React App",
|
|
||||||
"name": "Create React App Sample",
|
|
||||||
"icons": [
|
|
||||||
{
|
|
||||||
"src": "favicon.ico",
|
|
||||||
"sizes": "64x64 32x32 24x24 16x16",
|
|
||||||
"type": "image/x-icon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "favicon.svg",
|
|
||||||
"type": "image/svg",
|
|
||||||
"sizes": "192x192"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "favicon.svg",
|
|
||||||
"type": "image/svg",
|
|
||||||
"sizes": "512x512"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"start_url": ".",
|
|
||||||
"display": "standalone",
|
|
||||||
"theme_color": "#000000",
|
|
||||||
"background_color": "#ffffff"
|
|
||||||
}
|
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
|
|
||||||
<style type="text/css">
|
|
||||||
.st0{fill:#414141;}
|
|
||||||
.st1{fill:#FFFFFF;}
|
|
||||||
.st2{fill:#FED206;}
|
|
||||||
.st3{fill:#EB6F53;}
|
|
||||||
.st4{fill:#3BA9B6;}
|
|
||||||
</style>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
|
|
||||||
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
|
|
||||||
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
|
|
||||||
C60,166.3,59.1,165.5,59.1,164.2z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
|
|
||||||
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
|
|
||||||
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
|
|
||||||
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
|
|
||||||
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
|
|
||||||
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
|
|
||||||
C105.7,166,106.3,165.2,106.3,164.2z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
|
|
||||||
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
|
|
||||||
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
|
|
||||||
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
|
|
||||||
<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
|
|
||||||
<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
|
|
||||||
<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
|
|
||||||
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
|
|
||||||
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
|
|
||||||
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
|
|
||||||
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
|
|
||||||
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
|
|
||||||
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
|
|
||||||
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
|
|
||||||
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
|
|
||||||
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
|
|
||||||
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
|
|
||||||
<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
|
|
||||||
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
|
|
||||||
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
|
|
||||||
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
|
|
||||||
<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
|
|
||||||
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
|
|
||||||
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
|
|
||||||
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
|
|
||||||
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
|
|
||||||
<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
|
|
||||||
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
|
|
||||||
<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
|
|
||||||
<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
|
|
||||||
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
|
|
||||||
v10.8h-3.1V133z"/>
|
|
||||||
<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
|
|
||||||
<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
|
|
||||||
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
|
|
||||||
v10.8h-3.1V133z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 8.0 KiB |
@@ -1,2 +0,0 @@
|
|||||||
# https://www.robotstxt.org/robotstxt.html
|
|
||||||
User-agent: *
|
|
||||||
38
src/App.js
@@ -1,7 +1,11 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React from 'react';
|
||||||
import { HashRouter, Route, Switch } from 'react-router-dom';
|
import { HashRouter, Switch } from 'react-router-dom';
|
||||||
import 'scss/style.scss';
|
import 'scss/style.scss';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import Router from 'router';
|
||||||
|
import { AuthProvider } from 'ucentral-libs';
|
||||||
|
import { checkIfJson } from 'utils/helper';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
import { getItem } from 'utils/localStorageHelper';
|
||||||
|
|
||||||
const loading = (
|
const loading = (
|
||||||
<div className="pt-3 text-center">
|
<div className="pt-3 text-center">
|
||||||
@@ -9,32 +13,26 @@ const loading = (
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
const TheLayout = React.lazy(() => import('layout'));
|
|
||||||
const Login = React.lazy(() => import('pages/LoginPage'));
|
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const isLoggedIn = useSelector((state) => state.connected);
|
const storageToken = getItem('access_token');
|
||||||
const dispatch = useDispatch();
|
const apiEndpoints = checkIfJson(getItem('gateway_endpoints'))
|
||||||
|
? JSON.parse(getItem('gateway_endpoints'))
|
||||||
useEffect(() => {
|
: {};
|
||||||
const token = sessionStorage.getItem('access_token');
|
|
||||||
if (token !== undefined && token !== null) {
|
|
||||||
dispatch({ type: 'set', connected: true });
|
|
||||||
}
|
|
||||||
}, [dispatch]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<AuthProvider
|
||||||
|
axiosInstance={axiosInstance}
|
||||||
|
token={storageToken ?? ''}
|
||||||
|
apiEndpoints={apiEndpoints}
|
||||||
|
>
|
||||||
<HashRouter>
|
<HashRouter>
|
||||||
<React.Suspense fallback={loading}>
|
<React.Suspense fallback={loading}>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route
|
<Router />
|
||||||
path="/"
|
|
||||||
name="Devices"
|
|
||||||
render={(props) => (isLoggedIn ? <TheLayout {...props} /> : <Login {...props} />)}
|
|
||||||
/>
|
|
||||||
</Switch>
|
</Switch>
|
||||||
</React.Suspense>
|
</React.Suspense>
|
||||||
</HashRouter>
|
</HashRouter>
|
||||||
|
</AuthProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
BIN
src/assets/NotFound.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/devices/cig_wf160d.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
src/assets/devices/cig_wf188.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
src/assets/devices/cig_wf188n.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
src/assets/devices/cig_wf194c.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
src/assets/devices/cig_wf194c4.png
Normal file
|
After Width: | Height: | Size: 75 KiB |
BIN
src/assets/devices/cig_wf808.png
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
src/assets/devices/cig_wf809.png
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
src/assets/devices/edgecore_eap101.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
src/assets/devices/edgecore_eap102.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
src/assets/devices/edgecore_ecs4100-12ph.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
src/assets/devices/edgecore_ecw5211.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
src/assets/devices/edgecore_ecw5410.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
src/assets/devices/edgecore_oap100.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
src/assets/devices/edgecore_spw2ac1200-lan-poe.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
src/assets/devices/edgecore_spw2ac1200.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
src/assets/devices/edgecore_ssw2ac2600.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
src/assets/devices/hfcl_ion4.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
src/assets/devices/hfcl_ion4.yml.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
src/assets/devices/indio_um-305ac.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
src/assets/devices/linksys_e8450-ubi.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
src/assets/devices/linksys_ea6350-v4.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
src/assets/devices/linksys_ea6350.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
src/assets/devices/linksys_ea8300.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
src/assets/devices/tp-link_ec420-g1.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
src/assets/devices/tplink_ec420.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
src/assets/devices/tplink_ex227.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
src/assets/devices/tplink_ex228.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
src/assets/devices/tplink_ex447.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
src/assets/devices/wallys_dr40x9.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
src/assets/devices/wallys_dr6018.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
src/assets/devices/wallys_dr6018_v4.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 24 KiB |
@@ -1,28 +1,4 @@
|
|||||||
import {
|
import {
|
||||||
cibSkype,
|
|
||||||
cibFacebook,
|
|
||||||
cibTwitter,
|
|
||||||
cibLinkedin,
|
|
||||||
cibFlickr,
|
|
||||||
cibTumblr,
|
|
||||||
cibXing,
|
|
||||||
cibGithub,
|
|
||||||
cibStackoverflow,
|
|
||||||
cibYoutube,
|
|
||||||
cibDribbble,
|
|
||||||
cibInstagram,
|
|
||||||
cibPinterest,
|
|
||||||
cibVk,
|
|
||||||
cibYahoo,
|
|
||||||
cibBehance,
|
|
||||||
cibReddit,
|
|
||||||
cibVimeo,
|
|
||||||
cibCcMastercard,
|
|
||||||
cibCcVisa,
|
|
||||||
cibStripe,
|
|
||||||
cibPaypal,
|
|
||||||
cibGooglePay,
|
|
||||||
cibCcAmex,
|
|
||||||
cifUs,
|
cifUs,
|
||||||
cifBr,
|
cifBr,
|
||||||
cifIn,
|
cifIn,
|
||||||
@@ -37,6 +13,7 @@ import {
|
|||||||
cilArrowTop,
|
cilArrowTop,
|
||||||
cilAsterisk,
|
cilAsterisk,
|
||||||
cilBan,
|
cilBan,
|
||||||
|
cilBarcode,
|
||||||
cilBasket,
|
cilBasket,
|
||||||
cilBell,
|
cilBell,
|
||||||
cilBold,
|
cilBold,
|
||||||
@@ -122,14 +99,8 @@ import {
|
|||||||
cilXCircle,
|
cilXCircle,
|
||||||
cilWarning,
|
cilWarning,
|
||||||
} from '@coreui/icons';
|
} from '@coreui/icons';
|
||||||
import { sygnet } from './sygnet';
|
|
||||||
import { logo } from './logo';
|
|
||||||
import { logoNegative } from './logo-negative';
|
|
||||||
|
|
||||||
export const icons = {
|
export const icons = {
|
||||||
sygnet,
|
|
||||||
logo,
|
|
||||||
logoNegative,
|
|
||||||
cilAlignCenter,
|
cilAlignCenter,
|
||||||
cilAlignLeft,
|
cilAlignLeft,
|
||||||
cilAlignRight,
|
cilAlignRight,
|
||||||
@@ -138,6 +109,7 @@ export const icons = {
|
|||||||
cilArrowTop,
|
cilArrowTop,
|
||||||
cilAsterisk,
|
cilAsterisk,
|
||||||
cilBan,
|
cilBan,
|
||||||
|
cilBarcode,
|
||||||
cilBasket,
|
cilBasket,
|
||||||
cilBell,
|
cilBell,
|
||||||
cilBold,
|
cilBold,
|
||||||
@@ -228,28 +200,4 @@ export const icons = {
|
|||||||
cifFr,
|
cifFr,
|
||||||
cifEs,
|
cifEs,
|
||||||
cifPl,
|
cifPl,
|
||||||
cibSkype,
|
|
||||||
cibFacebook,
|
|
||||||
cibTwitter,
|
|
||||||
cibLinkedin,
|
|
||||||
cibFlickr,
|
|
||||||
cibTumblr,
|
|
||||||
cibXing,
|
|
||||||
cibGithub,
|
|
||||||
cibStackoverflow,
|
|
||||||
cibYoutube,
|
|
||||||
cibDribbble,
|
|
||||||
cibInstagram,
|
|
||||||
cibPinterest,
|
|
||||||
cibVk,
|
|
||||||
cibYahoo,
|
|
||||||
cibBehance,
|
|
||||||
cibReddit,
|
|
||||||
cibVimeo,
|
|
||||||
cibCcMastercard,
|
|
||||||
cibCcVisa,
|
|
||||||
cibStripe,
|
|
||||||
cibPaypal,
|
|
||||||
cibGooglePay,
|
|
||||||
cibCcAmex,
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
export const logoNegative = [
|
|
||||||
'608 134',
|
|
||||||
`
|
|
||||||
<title>coreui react pro logo</title>
|
|
||||||
<g>
|
|
||||||
<g style="fill:#80d0ff;">
|
|
||||||
<path d="M362.0177,90.1512,353.25,69.4149a.2507.2507,0,0,0-.2559-.1914H343.01a.2263.2263,0,0,0-.2559.2559V90.0233a.5657.5657,0,0,1-.64.64h-1.2163a.5652.5652,0,0,1-.64-.64V46.5028a.5655.5655,0,0,1,.64-.64H353.442a9.9792,9.9792,0,0,1,7.7437,3.2324A12.2,12.2,0,0,1,364.13,57.64a12.4389,12.4389,0,0,1-2.24,7.584,9.37,9.37,0,0,1-6.08,3.7441c-.1709.086-.2139.1915-.128.3194l8.7041,20.6084.064.2558q0,.5127-.5757.5118h-1.1523A.703.703,0,0,1,362.0177,90.1512ZM342.754,48.3593v18.496a.2259.2259,0,0,0,.2559.2559h10.3037a7.6713,7.6713,0,0,0,6.0166-2.5918,9.8807,9.8807,0,0,0,2.3037-6.8164,10.2875,10.2875,0,0,0-2.272-6.9756,7.6033,7.6033,0,0,0-6.0483-2.624H343.01A.2263.2263,0,0,0,342.754,48.3593Z"/>
|
|
||||||
<path d="M401.3263,48.1034H381.2945a.2262.2262,0,0,0-.2558.2559v18.496a.2259.2259,0,0,0,.2558.2559h13.8238a.5664.5664,0,0,1,.6406.64v.96a.5663.5663,0,0,1-.6406.6406H381.2945a.2263.2263,0,0,0-.2558.2559v18.56a.2258.2258,0,0,0,.2558.2558h20.0318a.5671.5671,0,0,1,.6406.6407v.96a.566.566,0,0,1-.6406.64H379.1827a.5653.5653,0,0,1-.64-.64V46.5028a.5656.5656,0,0,1,.64-.64h22.1436a.5664.5664,0,0,1,.6406.64v.96A.5663.5663,0,0,1,401.3263,48.1034Z"/>
|
|
||||||
<path d="M439.047,90.1512l-2.4317-8.832a.2971.2971,0,0,0-.32-.1924H419.5274a.2957.2957,0,0,0-.32.1924l-2.3681,8.7676a.6577.6577,0,0,1-.7036.5762H414.919a.5385.5385,0,0,1-.5756-.7041l12.0317-43.584a.6436.6436,0,0,1,.7041-.5117h1.6a.6442.6442,0,0,1,.7041.5117l12.16,43.584.0644.1923q0,.5127-.64.5118h-1.2163A.6428.6428,0,0,1,439.047,90.1512ZM419.9435,78.9188a.3031.3031,0,0,0,.2236.0967h15.4883a.3048.3048,0,0,0,.2236-.0967c.0645-.0635.0742-.1162.0322-.1592l-7.872-28.9287c-.043-.0849-.086-.1279-.128-.1279s-.0859.043-.1279.1279L419.9112,78.76C419.8683,78.8026,419.879,78.8553,419.9435,78.9188Z"/>
|
|
||||||
<path d="M456.6017,87.911a11.6372,11.6372,0,0,1-3.3277-8.7041V57.1913a11.4158,11.4158,0,0,1,3.36-8.5762,12.0941,12.0941,0,0,1,8.8-3.2637,12.2566,12.2566,0,0,1,8.8643,3.2315,11.3927,11.3927,0,0,1,3.36,8.6084v.64a.5663.5663,0,0,1-.6406.6407l-1.28.0634q-.6408,0-.64-.5761v-.8321a9.289,9.289,0,0,0-2.6558-6.9121,10.6734,10.6734,0,0,0-14.0161,0,9.2854,9.2854,0,0,0-2.6563,6.9121V79.3993a9.2808,9.2808,0,0,0,2.6563,6.9121,10.67,10.67,0,0,0,14.0161,0,9.2843,9.2843,0,0,0,2.6558-6.9121v-.7686q0-.5757.64-.5752l1.28.0635a.5667.5667,0,0,1,.6406.6406v.5118a11.4952,11.4952,0,0,1-3.36,8.64,13.6227,13.6227,0,0,1-17.6963,0Z"/>
|
|
||||||
<path d="M514.4376,46.5028v.96a.5658.5658,0,0,1-.64.6406H503.046a.2263.2263,0,0,0-.2559.2559v41.664a.566.566,0,0,1-.6406.64h-1.2158a.5652.5652,0,0,1-.64-.64V48.3593a.2266.2266,0,0,0-.2558-.2559H489.8619a.5656.5656,0,0,1-.64-.6406v-.96a.5656.5656,0,0,1,.64-.64H513.798A.5658.5658,0,0,1,514.4376,46.5028Z"/>
|
|
||||||
<path d="M522.0665,89.5116a2.8385,2.8385,0,0,1-.8-2.0488,2.9194,2.9194,0,0,1,.8-2.1114,2.7544,2.7544,0,0,1,2.08-.832,2.8465,2.8465,0,0,1,2.9438,2.9434,2.7541,2.7541,0,0,1-.832,2.08,2.9221,2.9221,0,0,1-2.1118.8008A2.754,2.754,0,0,1,522.0665,89.5116Z"/>
|
|
||||||
<path d="M542.4054,88.0077a11.3123,11.3123,0,0,1-3.2-8.416v-5.44a.5656.5656,0,0,1,.64-.64h1.2158a.5661.5661,0,0,1,.64.64v5.5039a9.1424,9.1424,0,0,0,2.5283,6.72,8.9745,8.9745,0,0,0,6.6875,2.5605,8.7908,8.7908,0,0,0,9.28-9.28V46.5028a.5655.5655,0,0,1,.64-.64h1.2163a.566.566,0,0,1,.64.64V79.5917a11.2545,11.2545,0,0,1-3.2325,8.416,13.0618,13.0618,0,0,1-17.0556,0Z"/>
|
|
||||||
<path d="M580.35,88.1034a10.4859,10.4859,0,0,1-3.36-8.1279v-1.792a.5663.5663,0,0,1,.64-.6407h1.0884a.5668.5668,0,0,1,.64.6407v1.6a8.5459,8.5459,0,0,0,2.752,6.6562,10.5353,10.5353,0,0,0,7.36,2.4961,9.8719,9.8719,0,0,0,6.9761-2.3681,8.2161,8.2161,0,0,0,2.56-6.336,8.4,8.4,0,0,0-1.12-4.416,11.3812,11.3812,0,0,0-3.3281-3.3926,71.6714,71.6714,0,0,0-6.1763-3.7119,71.0479,71.0479,0,0,1-6.24-3.84,12.1711,12.1711,0,0,1-3.4238-3.68,10.2614,10.2614,0,0,1-1.28-5.3438,9.8579,9.8579,0,0,1,3.0718-7.7441,12.0122,12.0122,0,0,1,8.32-2.752q5.6954,0,8.96,3.1036a10.8251,10.8251,0,0,1,3.2642,8.2246v1.6a.5658.5658,0,0,1-.64.64h-1.1519a.5652.5652,0,0,1-.64-.64V56.8075a8.8647,8.8647,0,0,0-2.624-6.6885,9.9933,9.9933,0,0,0-7.232-2.5273,9.37,9.37,0,0,0-6.5278,2.1435,7.8224,7.8224,0,0,0-2.3682,6.1123,7.8006,7.8006,0,0,0,1.0244,4.16,10.387,10.387,0,0,0,3.0078,3.0391,62.8714,62.8714,0,0,0,5.9522,3.4882,71.0575,71.0575,0,0,1,6.72,4.2559,13.4674,13.4674,0,0,1,3.648,3.9365,10.049,10.049,0,0,1,1.28,5.1836,10.7177,10.7177,0,0,1-3.2637,8.1924q-3.2637,3.0717-8.832,3.0723Q583.71,91.1757,580.35,88.1034Z"/>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g style="fill:#fff;">
|
|
||||||
<g>
|
|
||||||
<path d="M99.835,36.0577l-39-22.5167a12,12,0,0,0-12,0l-39,22.5166a12.0339,12.0339,0,0,0-6,10.3924V91.4833a12.0333,12.0333,0,0,0,6,10.3923l39,22.5167a12,12,0,0,0,12,0l39-22.5167a12.0331,12.0331,0,0,0,6-10.3923V46.45A12.0334,12.0334,0,0,0,99.835,36.0577Zm-2,55.4256a4,4,0,0,1-2,3.4641l-39,22.5167a4.0006,4.0006,0,0,1-4,0l-39-22.5167a4,4,0,0,1-2-3.4641V46.45a4,4,0,0,1,2-3.4642l39-22.5166a4,4,0,0,1,4,0l39,22.5166a4,4,0,0,1,2,3.4642Z"/>
|
|
||||||
<path d="M77.8567,82.0046h-2.866a4,4,0,0,0-1.9247.4934L55.7852,91.9833,35.835,80.4648V57.4872l19.95-11.5185,17.2893,9.4549a3.9993,3.9993,0,0,0,1.9192.4906h2.8632a2,2,0,0,0,2-2V51.2024a2,2,0,0,0-1.04-1.7547L59.628,38.9521a8.0391,8.0391,0,0,0-7.8428.09L31.8346,50.56a8.0246,8.0246,0,0,0-4,6.9287v22.976a8,8,0,0,0,4,6.9283l19.95,11.5186a8.0429,8.0429,0,0,0,7.8433.0879l19.19-10.5312a2,2,0,0,0,1.0378-1.7533v-2.71A2,2,0,0,0,77.8567,82.0046Z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path d="M172.58,45.3618a15.0166,15.0166,0,0,0-15,14.9995V77.6387a15,15,0,0,0,30,0V60.3613A15.0166,15.0166,0,0,0,172.58,45.3618Zm7,32.2769a7,7,0,0,1-14,0V60.3613a7,7,0,0,1,14,0Z"/>
|
|
||||||
<path d="M135.9138,53.4211a7.01,7.01,0,0,1,7.8681,6.0752.9894.9894,0,0,0,.9843.865h6.03a1.0108,1.0108,0,0,0,.9987-1.0971,15.0182,15.0182,0,0,0-15.7162-13.8837,15.2881,15.2881,0,0,0-14.2441,15.4163V77.2037A15.288,15.288,0,0,0,136.0792,92.62a15.0183,15.0183,0,0,0,15.7162-13.8842,1.0107,1.0107,0,0,0-.9987-1.0971h-6.03a.9894.9894,0,0,0-.9843.865,7.01,7.01,0,0,1-7.8679,6.0757,7.1642,7.1642,0,0,1-6.0789-7.1849V60.6057A7.1638,7.1638,0,0,1,135.9138,53.4211Z"/>
|
|
||||||
<path d="M218.7572,72.9277a12.1585,12.1585,0,0,0,7.1843-11.0771V58.1494A12.1494,12.1494,0,0,0,213.7921,46H196.835a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h6a1,1,0,0,0,1-1V74h6.6216l7.9154,17.4138a1,1,0,0,0,.91.5862h6.5911a1,1,0,0,0,.91-1.4138Zm-.8157-11.0771A4.1538,4.1538,0,0,1,213.7926,66h-9.8511V54h9.8511a4.1538,4.1538,0,0,1,4.1489,4.1494Z"/>
|
|
||||||
<path d="M260.835,46h-26a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h26a1,1,0,0,0,1-1V85a1,1,0,0,0-1-1h-19V72h13a1,1,0,0,0,1-1V65a1,1,0,0,0-1-1h-13V54h19a1,1,0,0,0,1-1V47A1,1,0,0,0,260.835,46Z"/>
|
|
||||||
<path d="M298.835,46h-6a1,1,0,0,0-1,1V69.6475a7.0066,7.0066,0,1,1-14,0V47a1,1,0,0,0-1-1h-6a1,1,0,0,0-1,1V69.6475a15.0031,15.0031,0,1,0,30,0V47A1,1,0,0,0,298.835,46Z"/>
|
|
||||||
<rect x="307.835" y="46" width="8" height="38" rx="1"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
`,
|
|
||||||
];
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
export const logo = [
|
|
||||||
'608 134',
|
|
||||||
`
|
|
||||||
<title>coreui react pro</title>
|
|
||||||
<g>
|
|
||||||
<g style="fill:#00a1ff">
|
|
||||||
<path d="M362.0177,90.1512,353.25,69.4149a.2507.2507,0,0,0-.2559-.1914H343.01a.2263.2263,0,0,0-.2559.2559V90.0233a.5657.5657,0,0,1-.64.64h-1.2163a.5652.5652,0,0,1-.64-.64V46.5028a.5655.5655,0,0,1,.64-.64H353.442a9.9792,9.9792,0,0,1,7.7437,3.2324A12.2,12.2,0,0,1,364.13,57.64a12.4389,12.4389,0,0,1-2.24,7.584,9.37,9.37,0,0,1-6.08,3.7441c-.1709.086-.2139.1915-.128.3194l8.7041,20.6084.064.2558q0,.5127-.5757.5118h-1.1523A.703.703,0,0,1,362.0177,90.1512ZM342.754,48.3593v18.496a.2259.2259,0,0,0,.2559.2559h10.3037a7.6713,7.6713,0,0,0,6.0166-2.5918,9.8807,9.8807,0,0,0,2.3037-6.8164,10.2875,10.2875,0,0,0-2.272-6.9756,7.6033,7.6033,0,0,0-6.0483-2.624H343.01A.2263.2263,0,0,0,342.754,48.3593Z"/>
|
|
||||||
<path d="M401.3263,48.1034H381.2945a.2262.2262,0,0,0-.2558.2559v18.496a.2259.2259,0,0,0,.2558.2559h13.8238a.5664.5664,0,0,1,.6406.64v.96a.5663.5663,0,0,1-.6406.6406H381.2945a.2263.2263,0,0,0-.2558.2559v18.56a.2258.2258,0,0,0,.2558.2558h20.0318a.5671.5671,0,0,1,.6406.6407v.96a.566.566,0,0,1-.6406.64H379.1827a.5653.5653,0,0,1-.64-.64V46.5028a.5656.5656,0,0,1,.64-.64h22.1436a.5664.5664,0,0,1,.6406.64v.96A.5663.5663,0,0,1,401.3263,48.1034Z"/>
|
|
||||||
<path d="M439.047,90.1512l-2.4317-8.832a.2971.2971,0,0,0-.32-.1924H419.5274a.2957.2957,0,0,0-.32.1924l-2.3681,8.7676a.6577.6577,0,0,1-.7036.5762H414.919a.5385.5385,0,0,1-.5756-.7041l12.0317-43.584a.6436.6436,0,0,1,.7041-.5117h1.6a.6442.6442,0,0,1,.7041.5117l12.16,43.584.0644.1923q0,.5127-.64.5118h-1.2163A.6428.6428,0,0,1,439.047,90.1512ZM419.9435,78.9188a.3031.3031,0,0,0,.2236.0967h15.4883a.3048.3048,0,0,0,.2236-.0967c.0645-.0635.0742-.1162.0322-.1592l-7.872-28.9287c-.043-.0849-.086-.1279-.128-.1279s-.0859.043-.1279.1279L419.9112,78.76C419.8683,78.8026,419.879,78.8553,419.9435,78.9188Z"/>
|
|
||||||
<path d="M456.6017,87.911a11.6372,11.6372,0,0,1-3.3277-8.7041V57.1913a11.4158,11.4158,0,0,1,3.36-8.5762,12.0941,12.0941,0,0,1,8.8-3.2637,12.2566,12.2566,0,0,1,8.8643,3.2315,11.3927,11.3927,0,0,1,3.36,8.6084v.64a.5663.5663,0,0,1-.6406.6407l-1.28.0634q-.6408,0-.64-.5761v-.8321a9.289,9.289,0,0,0-2.6558-6.9121,10.6734,10.6734,0,0,0-14.0161,0,9.2854,9.2854,0,0,0-2.6563,6.9121V79.3993a9.2808,9.2808,0,0,0,2.6563,6.9121,10.67,10.67,0,0,0,14.0161,0,9.2843,9.2843,0,0,0,2.6558-6.9121v-.7686q0-.5757.64-.5752l1.28.0635a.5667.5667,0,0,1,.6406.6406v.5118a11.4952,11.4952,0,0,1-3.36,8.64,13.6227,13.6227,0,0,1-17.6963,0Z"/>
|
|
||||||
<path d="M514.4376,46.5028v.96a.5658.5658,0,0,1-.64.6406H503.046a.2263.2263,0,0,0-.2559.2559v41.664a.566.566,0,0,1-.6406.64h-1.2158a.5652.5652,0,0,1-.64-.64V48.3593a.2266.2266,0,0,0-.2558-.2559H489.8619a.5656.5656,0,0,1-.64-.6406v-.96a.5656.5656,0,0,1,.64-.64H513.798A.5658.5658,0,0,1,514.4376,46.5028Z"/>
|
|
||||||
<path d="M522.0665,89.5116a2.8385,2.8385,0,0,1-.8-2.0488,2.9194,2.9194,0,0,1,.8-2.1114,2.7544,2.7544,0,0,1,2.08-.832,2.8465,2.8465,0,0,1,2.9438,2.9434,2.7541,2.7541,0,0,1-.832,2.08,2.9221,2.9221,0,0,1-2.1118.8008A2.754,2.754,0,0,1,522.0665,89.5116Z"/>
|
|
||||||
<path d="M542.4054,88.0077a11.3123,11.3123,0,0,1-3.2-8.416v-5.44a.5656.5656,0,0,1,.64-.64h1.2158a.5661.5661,0,0,1,.64.64v5.5039a9.1424,9.1424,0,0,0,2.5283,6.72,8.9745,8.9745,0,0,0,6.6875,2.5605,8.7908,8.7908,0,0,0,9.28-9.28V46.5028a.5655.5655,0,0,1,.64-.64h1.2163a.566.566,0,0,1,.64.64V79.5917a11.2545,11.2545,0,0,1-3.2325,8.416,13.0618,13.0618,0,0,1-17.0556,0Z"/>
|
|
||||||
<path d="M580.35,88.1034a10.4859,10.4859,0,0,1-3.36-8.1279v-1.792a.5663.5663,0,0,1,.64-.6407h1.0884a.5668.5668,0,0,1,.64.6407v1.6a8.5459,8.5459,0,0,0,2.752,6.6562,10.5353,10.5353,0,0,0,7.36,2.4961,9.8719,9.8719,0,0,0,6.9761-2.3681,8.2161,8.2161,0,0,0,2.56-6.336,8.4,8.4,0,0,0-1.12-4.416,11.3812,11.3812,0,0,0-3.3281-3.3926,71.6714,71.6714,0,0,0-6.1763-3.7119,71.0479,71.0479,0,0,1-6.24-3.84,12.1711,12.1711,0,0,1-3.4238-3.68,10.2614,10.2614,0,0,1-1.28-5.3438,9.8579,9.8579,0,0,1,3.0718-7.7441,12.0122,12.0122,0,0,1,8.32-2.752q5.6954,0,8.96,3.1036a10.8251,10.8251,0,0,1,3.2642,8.2246v1.6a.5658.5658,0,0,1-.64.64h-1.1519a.5652.5652,0,0,1-.64-.64V56.8075a8.8647,8.8647,0,0,0-2.624-6.6885,9.9933,9.9933,0,0,0-7.232-2.5273,9.37,9.37,0,0,0-6.5278,2.1435,7.8224,7.8224,0,0,0-2.3682,6.1123,7.8006,7.8006,0,0,0,1.0244,4.16,10.387,10.387,0,0,0,3.0078,3.0391,62.8714,62.8714,0,0,0,5.9522,3.4882,71.0575,71.0575,0,0,1,6.72,4.2559,13.4674,13.4674,0,0,1,3.648,3.9365,10.049,10.049,0,0,1,1.28,5.1836,10.7177,10.7177,0,0,1-3.2637,8.1924q-3.2637,3.0717-8.832,3.0723Q583.71,91.1757,580.35,88.1034Z"/>
|
|
||||||
</g>
|
|
||||||
<g style="fill:#3c4b64">
|
|
||||||
<g>
|
|
||||||
<path d="M99.835,36.0577l-39-22.5167a12,12,0,0,0-12,0l-39,22.5166a12.0339,12.0339,0,0,0-6,10.3924V91.4833a12.0333,12.0333,0,0,0,6,10.3923l39,22.5167a12,12,0,0,0,12,0l39-22.5167a12.0331,12.0331,0,0,0,6-10.3923V46.45A12.0334,12.0334,0,0,0,99.835,36.0577Zm-2,55.4256a4,4,0,0,1-2,3.4641l-39,22.5167a4.0006,4.0006,0,0,1-4,0l-39-22.5167a4,4,0,0,1-2-3.4641V46.45a4,4,0,0,1,2-3.4642l39-22.5166a4,4,0,0,1,4,0l39,22.5166a4,4,0,0,1,2,3.4642Z"/>
|
|
||||||
<path d="M77.8567,82.0046h-2.866a4,4,0,0,0-1.9247.4934L55.7852,91.9833,35.835,80.4648V57.4872l19.95-11.5185,17.2893,9.4549a3.9993,3.9993,0,0,0,1.9192.4906h2.8632a2,2,0,0,0,2-2V51.2024a2,2,0,0,0-1.04-1.7547L59.628,38.9521a8.0391,8.0391,0,0,0-7.8428.09L31.8346,50.56a8.0246,8.0246,0,0,0-4,6.9287v22.976a8,8,0,0,0,4,6.9283l19.95,11.5186a8.0429,8.0429,0,0,0,7.8433.0879l19.19-10.5312a2,2,0,0,0,1.0378-1.7533v-2.71A2,2,0,0,0,77.8567,82.0046Z"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path d="M172.58,45.3618a15.0166,15.0166,0,0,0-15,14.9995V77.6387a15,15,0,0,0,30,0V60.3613A15.0166,15.0166,0,0,0,172.58,45.3618Zm7,32.2769a7,7,0,0,1-14,0V60.3613a7,7,0,0,1,14,0Z"/>
|
|
||||||
<path d="M135.9138,53.4211a7.01,7.01,0,0,1,7.8681,6.0752.9894.9894,0,0,0,.9843.865h6.03a1.0108,1.0108,0,0,0,.9987-1.0971,15.0182,15.0182,0,0,0-15.7162-13.8837,15.2881,15.2881,0,0,0-14.2441,15.4163V77.2037A15.288,15.288,0,0,0,136.0792,92.62a15.0183,15.0183,0,0,0,15.7162-13.8842,1.0107,1.0107,0,0,0-.9987-1.0971h-6.03a.9894.9894,0,0,0-.9843.865,7.01,7.01,0,0,1-7.8679,6.0757,7.1642,7.1642,0,0,1-6.0789-7.1849V60.6057A7.1638,7.1638,0,0,1,135.9138,53.4211Z"/>
|
|
||||||
<path d="M218.7572,72.9277a12.1585,12.1585,0,0,0,7.1843-11.0771V58.1494A12.1494,12.1494,0,0,0,213.7921,46H196.835a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h6a1,1,0,0,0,1-1V74h6.6216l7.9154,17.4138a1,1,0,0,0,.91.5862h6.5911a1,1,0,0,0,.91-1.4138Zm-.8157-11.0771A4.1538,4.1538,0,0,1,213.7926,66h-9.8511V54h9.8511a4.1538,4.1538,0,0,1,4.1489,4.1494Z"/>
|
|
||||||
<path d="M260.835,46h-26a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h26a1,1,0,0,0,1-1V85a1,1,0,0,0-1-1h-19V72h13a1,1,0,0,0,1-1V65a1,1,0,0,0-1-1h-13V54h19a1,1,0,0,0,1-1V47A1,1,0,0,0,260.835,46Z"/>
|
|
||||||
<path d="M298.835,46h-6a1,1,0,0,0-1,1V69.6475a7.0066,7.0066,0,1,1-14,0V47a1,1,0,0,0-1-1h-6a1,1,0,0,0-1,1V69.6475a15.0031,15.0031,0,1,0,30,0V47A1,1,0,0,0,298.835,46Z"/>
|
|
||||||
<rect x="307.835" y="46" width="8" height="38" rx="1"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
`,
|
|
||||||
];
|
|
||||||
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -1,12 +0,0 @@
|
|||||||
export const sygnet = [
|
|
||||||
'160 160',
|
|
||||||
`
|
|
||||||
<title>coreui logo</title>
|
|
||||||
<g>
|
|
||||||
<g style="fill:#fff;">
|
|
||||||
<path d="M125,47.091,86,24.5743a12,12,0,0,0-12,0L35,47.091a12.0336,12.0336,0,0,0-6,10.3923v45.0334a12.0335,12.0335,0,0,0,6,10.3923l39,22.5166a11.9993,11.9993,0,0,0,12,0l39-22.5166a12.0335,12.0335,0,0,0,6-10.3923V57.4833A12.0336,12.0336,0,0,0,125,47.091Zm-2,55.4257a4,4,0,0,1-2,3.464L82,128.4974a4,4,0,0,1-4,0L39,105.9807a4,4,0,0,1-2-3.464V57.4833a4,4,0,0,1,2-3.4641L78,31.5025a4,4,0,0,1,4,0l39,22.5167a4,4,0,0,1,2,3.4641Z"/>
|
|
||||||
<path d="M103.0216,93.0379h-2.866a4,4,0,0,0-1.9246.4935L80.95,103.0167,61,91.4981V68.5206L80.95,57.002l17.2894,9.455a4,4,0,0,0,1.9192.4905h2.8632a2,2,0,0,0,2-2V62.2357a2,2,0,0,0-1.04-1.7547L84.793,49.9854a8.0391,8.0391,0,0,0-7.8428.09L57,61.5929A8.0243,8.0243,0,0,0,53,68.5216v22.976a8,8,0,0,0,4,6.9283l19.95,11.5185a8.0422,8.0422,0,0,0,7.8433.0879l19.19-10.5311a2,2,0,0,0,1.0378-1.7534v-2.71A2,2,0,0,0,103.0216,93.0379Z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
`,
|
|
||||||
];
|
|
||||||
163
src/components/AddConfigurationModal/Form.js
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import Select from 'react-select';
|
||||||
|
import {
|
||||||
|
CForm,
|
||||||
|
CInput,
|
||||||
|
CLabel,
|
||||||
|
CCol,
|
||||||
|
CFormGroup,
|
||||||
|
CInvalidFeedback,
|
||||||
|
CFormText,
|
||||||
|
CRow,
|
||||||
|
CTextarea,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import { CopyToClipboardButton } from 'ucentral-libs';
|
||||||
|
|
||||||
|
const AddDefaultConfigurationForm = ({
|
||||||
|
t,
|
||||||
|
disable,
|
||||||
|
fields,
|
||||||
|
updateField,
|
||||||
|
updateFieldWithKey,
|
||||||
|
deviceTypes,
|
||||||
|
}) => {
|
||||||
|
const [typeOptions, setTypeOptions] = useState([]);
|
||||||
|
const [chosenTypes, setChosenTypes] = useState([]);
|
||||||
|
|
||||||
|
const parseOptions = () => {
|
||||||
|
const options = [{ value: '*', label: 'All' }];
|
||||||
|
const newOptions = deviceTypes.map((option) => ({
|
||||||
|
value: option,
|
||||||
|
label: option,
|
||||||
|
}));
|
||||||
|
options.push(...newOptions);
|
||||||
|
setTypeOptions(options);
|
||||||
|
setChosenTypes([]);
|
||||||
|
};
|
||||||
|
|
||||||
|
const typeOnChange = (chosenArray) => {
|
||||||
|
const allIndex = chosenArray.findIndex((el) => el.value === '*');
|
||||||
|
|
||||||
|
// If the All option was chosen before, we take it out of the array
|
||||||
|
if (allIndex === 0 && chosenTypes.length > 0) {
|
||||||
|
const newResults = chosenArray.slice(1);
|
||||||
|
setChosenTypes(newResults);
|
||||||
|
updateFieldWithKey('deviceTypes', {
|
||||||
|
value: newResults.map((el) => el.value),
|
||||||
|
error: false,
|
||||||
|
notEmpty: true,
|
||||||
|
});
|
||||||
|
} else if (allIndex > 0) {
|
||||||
|
setChosenTypes([{ value: '*', label: 'All' }]);
|
||||||
|
updateFieldWithKey('deviceTypes', { value: ['*'], error: false, notEmpty: true });
|
||||||
|
} else if (chosenArray.length > 0) {
|
||||||
|
setChosenTypes(chosenArray);
|
||||||
|
updateFieldWithKey('deviceTypes', {
|
||||||
|
value: chosenArray.map((el) => el.value),
|
||||||
|
error: false,
|
||||||
|
notEmpty: true,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setChosenTypes([]);
|
||||||
|
updateFieldWithKey('deviceTypes', { value: [], error: false, notEmpty: true });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
parseOptions();
|
||||||
|
}, [deviceTypes]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CForm>
|
||||||
|
<CFormGroup row className="pb-3">
|
||||||
|
<CLabel col htmlFor="name">
|
||||||
|
{t('user.name')}
|
||||||
|
</CLabel>
|
||||||
|
<CCol sm="7">
|
||||||
|
<CInput
|
||||||
|
id="name"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
value={fields.name.value}
|
||||||
|
onChange={updateField}
|
||||||
|
invalid={fields.name.error}
|
||||||
|
disabled={disable}
|
||||||
|
maxLength="50"
|
||||||
|
/>
|
||||||
|
<CInvalidFeedback>{t('common.required')}</CInvalidFeedback>
|
||||||
|
</CCol>
|
||||||
|
</CFormGroup>
|
||||||
|
<CFormGroup row className="pb-3">
|
||||||
|
<CLabel col htmlFor="description">
|
||||||
|
{t('user.description')}
|
||||||
|
</CLabel>
|
||||||
|
<CCol sm="7">
|
||||||
|
<CInput
|
||||||
|
id="description"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
value={fields.description.value}
|
||||||
|
onChange={updateField}
|
||||||
|
invalid={fields.description.error}
|
||||||
|
disabled={disable}
|
||||||
|
maxLength="50"
|
||||||
|
/>
|
||||||
|
<CInvalidFeedback>{t('common.required')}</CInvalidFeedback>
|
||||||
|
</CCol>
|
||||||
|
</CFormGroup>
|
||||||
|
<CRow className="pb-3">
|
||||||
|
<CLabel col htmlFor="deviceTypes">
|
||||||
|
<div>{t('configuration.supported_device_types')}:</div>
|
||||||
|
</CLabel>
|
||||||
|
<CCol sm="7">
|
||||||
|
<Select
|
||||||
|
isMulti
|
||||||
|
closeMenuOnSelect={false}
|
||||||
|
id="deviceTypes"
|
||||||
|
options={typeOptions}
|
||||||
|
onChange={typeOnChange}
|
||||||
|
value={chosenTypes}
|
||||||
|
className={`basic-multi-select ${fields.deviceTypes.error ? 'border-danger' : ''}`}
|
||||||
|
classNamePrefix="select"
|
||||||
|
/>
|
||||||
|
<CFormText hidden={!fields.deviceTypes.error} color="danger">
|
||||||
|
{t('configuration.need_device_type')}
|
||||||
|
</CFormText>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
<div className="pb-3">
|
||||||
|
{t('configure.enter_new')}
|
||||||
|
<CopyToClipboardButton t={t} size="sm" content={fields.configuration.value} />
|
||||||
|
</div>
|
||||||
|
<CRow className="pb-3">
|
||||||
|
<CCol>
|
||||||
|
<CTextarea
|
||||||
|
style={{ overflowY: 'scroll', height: '500px' }}
|
||||||
|
id="configuration"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
value={fields.configuration.value}
|
||||||
|
onChange={updateField}
|
||||||
|
invalid={fields.configuration.error}
|
||||||
|
disabled={disable}
|
||||||
|
/>
|
||||||
|
<CFormText hidden={!fields.configuration.error} color="danger">
|
||||||
|
{t('configure.valid_json')}
|
||||||
|
</CFormText>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
</CForm>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
AddDefaultConfigurationForm.propTypes = {
|
||||||
|
t: PropTypes.func.isRequired,
|
||||||
|
disable: PropTypes.bool.isRequired,
|
||||||
|
fields: PropTypes.instanceOf(Object).isRequired,
|
||||||
|
updateField: PropTypes.func.isRequired,
|
||||||
|
updateFieldWithKey: PropTypes.func.isRequired,
|
||||||
|
deviceTypes: PropTypes.instanceOf(Array).isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AddDefaultConfigurationForm;
|
||||||
183
src/components/AddConfigurationModal/index.js
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { CModal, CModalHeader, CModalTitle, CModalBody, CButton, CPopover } from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilX, cilSave } from '@coreui/icons';
|
||||||
|
import { useToast, useFormFields, useAuth } from 'ucentral-libs';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { checkIfJson } from 'utils/helper';
|
||||||
|
import Form from './Form';
|
||||||
|
|
||||||
|
const initialForm = {
|
||||||
|
name: {
|
||||||
|
value: '',
|
||||||
|
error: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
value: '',
|
||||||
|
error: false,
|
||||||
|
},
|
||||||
|
deviceTypes: {
|
||||||
|
value: [],
|
||||||
|
error: false,
|
||||||
|
notEmpty: true,
|
||||||
|
},
|
||||||
|
configuration: {
|
||||||
|
value: '',
|
||||||
|
error: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const AddConfigurationModal = ({ show, toggle, refresh }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { addToast } = useToast();
|
||||||
|
const { currentToken, endpoints } = useAuth();
|
||||||
|
const [fields, updateFieldWithId, updateField, setFormFields] = useFormFields(initialForm);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const [deviceTypes, setDeviceTypes] = useState([]);
|
||||||
|
|
||||||
|
const getDeviceTypes = () => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(`${endpoints.owfms}/api/v1/firmwares?deviceSet=true`, {
|
||||||
|
headers,
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
setDeviceTypes([...response.data.deviceTypes]);
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const validation = () => {
|
||||||
|
let success = true;
|
||||||
|
|
||||||
|
for (const [key, field] of Object.entries(fields)) {
|
||||||
|
if (field.required && field.value === '') {
|
||||||
|
updateField(key, { error: true });
|
||||||
|
success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (field.notEmpty && field.value.length === 0) {
|
||||||
|
updateField(key, { error: true, notEmpty: true });
|
||||||
|
success = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!checkIfJson(fields.configuration.value)) {
|
||||||
|
updateField('configuration', { error: true });
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
};
|
||||||
|
|
||||||
|
const addConfiguration = () => {
|
||||||
|
if (validation()) {
|
||||||
|
setLoading(true);
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const parameters = {
|
||||||
|
name: fields.name.value,
|
||||||
|
description: fields.description.value,
|
||||||
|
modelIds: fields.deviceTypes.value,
|
||||||
|
configuration: fields.configuration.value,
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.post(
|
||||||
|
`${endpoints.owgw}/api/v1/default_configuration/${fields.name.value}`,
|
||||||
|
parameters,
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
if (refresh !== null) refresh();
|
||||||
|
toggle();
|
||||||
|
addToast({
|
||||||
|
title: t('common.success'),
|
||||||
|
body: t('configuration.creation_success'),
|
||||||
|
color: 'success',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('entity.add_failure', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (show) {
|
||||||
|
getDeviceTypes();
|
||||||
|
setFormFields(initialForm);
|
||||||
|
}
|
||||||
|
}, [show]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CModal className="text-dark" size="lg" show={show} onClose={toggle}>
|
||||||
|
<CModalHeader className="p-1">
|
||||||
|
<CModalTitle className="pl-1 pt-1">{t('configuration.create')}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.add')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={addConfiguration}>
|
||||||
|
<CIcon content={cilSave} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
</CModalHeader>
|
||||||
|
<CModalBody className="px-5">
|
||||||
|
<Form
|
||||||
|
t={t}
|
||||||
|
disable={loading}
|
||||||
|
fields={fields}
|
||||||
|
updateField={updateFieldWithId}
|
||||||
|
updateFieldWithKey={updateField}
|
||||||
|
deviceTypes={deviceTypes}
|
||||||
|
show={show}
|
||||||
|
/>
|
||||||
|
</CModalBody>
|
||||||
|
</CModal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
AddConfigurationModal.propTypes = {
|
||||||
|
show: PropTypes.bool.isRequired,
|
||||||
|
toggle: PropTypes.func.isRequired,
|
||||||
|
refresh: PropTypes.func,
|
||||||
|
};
|
||||||
|
|
||||||
|
AddConfigurationModal.defaultProps = {
|
||||||
|
refresh: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AddConfigurationModal;
|
||||||
158
src/components/AddToBlacklistModal/index.js
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import {
|
||||||
|
CButton,
|
||||||
|
CModal,
|
||||||
|
CModalHeader,
|
||||||
|
CModalTitle,
|
||||||
|
CModalBody,
|
||||||
|
CPopover,
|
||||||
|
CRow,
|
||||||
|
CCol,
|
||||||
|
CLabel,
|
||||||
|
CTextarea,
|
||||||
|
CInput,
|
||||||
|
CInvalidFeedback,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { useAuth, useToast } from 'ucentral-libs';
|
||||||
|
import { cilPlus, cilX } from '@coreui/icons';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
|
||||||
|
const AddToBlacklistModal = ({ show, toggle, serialNumber, refresh }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const { addToast } = useToast();
|
||||||
|
const { endpoints, currentToken } = useAuth();
|
||||||
|
const [chosenSerialNumber, setChosenSerialNumber] = useState('');
|
||||||
|
const [reason, setReason] = useState('');
|
||||||
|
|
||||||
|
const addToBlacklist = () => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const parameters = {
|
||||||
|
serialNumber: chosenSerialNumber,
|
||||||
|
reason,
|
||||||
|
};
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.post(`${endpoints.owgw}/api/v1/blacklist/${chosenSerialNumber}`, parameters, { headers })
|
||||||
|
.then(() => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.success'),
|
||||||
|
body: t('device.success_added_blacklist'),
|
||||||
|
color: 'success',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
toggle();
|
||||||
|
if (refresh) refresh();
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_adding_blacklist', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (show) {
|
||||||
|
if (serialNumber) setChosenSerialNumber(serialNumber);
|
||||||
|
else setChosenSerialNumber('');
|
||||||
|
}
|
||||||
|
}, [show, serialNumber]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CModal className="text-dark" size="lg" show={show} onClose={toggle}>
|
||||||
|
<CModalHeader className="p-1">
|
||||||
|
<CModalTitle className="pl-1 pt-1">{t('device.add_to_blacklist')}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.add')}>
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
className="ml-2"
|
||||||
|
onClick={addToBlacklist}
|
||||||
|
disabled={
|
||||||
|
chosenSerialNumber.length !== 12 ||
|
||||||
|
!chosenSerialNumber.match('^[a-fA-F0-9]+$') ||
|
||||||
|
reason === '' ||
|
||||||
|
loading
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<CIcon content={cilPlus} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
</CModalHeader>
|
||||||
|
<CModalBody>
|
||||||
|
<CRow>
|
||||||
|
<CLabel col sm="3">
|
||||||
|
{t('common.serial_number')}
|
||||||
|
</CLabel>
|
||||||
|
<CCol sm="9" className="pt-1">
|
||||||
|
<CInput
|
||||||
|
id="description"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
value={chosenSerialNumber}
|
||||||
|
onChange={(e) => setChosenSerialNumber(e.target.value)}
|
||||||
|
invalid={
|
||||||
|
chosenSerialNumber.length !== 12 && chosenSerialNumber.match('^[a-fA-F0-9]+$')
|
||||||
|
}
|
||||||
|
disabled={loading}
|
||||||
|
maxLength="50"
|
||||||
|
/>
|
||||||
|
<CInvalidFeedback>{t('entity.valid_serial')}</CInvalidFeedback>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
<CRow>
|
||||||
|
<CLabel col sm="3">
|
||||||
|
{t('common.reason')}
|
||||||
|
</CLabel>
|
||||||
|
<CCol sm="9" className="pt-2">
|
||||||
|
<CTextarea
|
||||||
|
name="reason"
|
||||||
|
id="reason"
|
||||||
|
rows="3"
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
value={reason}
|
||||||
|
onChange={(e) => setReason(e.target.value)}
|
||||||
|
/>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
</CModalBody>
|
||||||
|
</CModal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
AddToBlacklistModal.propTypes = {
|
||||||
|
show: PropTypes.bool.isRequired,
|
||||||
|
toggle: PropTypes.func.isRequired,
|
||||||
|
serialNumber: PropTypes.string,
|
||||||
|
refresh: PropTypes.func,
|
||||||
|
};
|
||||||
|
|
||||||
|
AddToBlacklistModal.defaultProps = {
|
||||||
|
serialNumber: '',
|
||||||
|
refresh: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default AddToBlacklistModal;
|
||||||
210
src/components/BlacklistTable/Table/index.js
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
import React, { useEffect } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import ReactPaginate from 'react-paginate';
|
||||||
|
import {
|
||||||
|
CCardBody,
|
||||||
|
CDataTable,
|
||||||
|
CButton,
|
||||||
|
CLink,
|
||||||
|
CCard,
|
||||||
|
CCardHeader,
|
||||||
|
CPopover,
|
||||||
|
CSelect,
|
||||||
|
CButtonToolbar,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import { cilSearch, cilPencil, cilPlus, cilTrash } from '@coreui/icons';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import ReactTooltip from 'react-tooltip';
|
||||||
|
import { FormattedDate } from 'ucentral-libs';
|
||||||
|
|
||||||
|
const BlacklistTable = ({
|
||||||
|
currentPage,
|
||||||
|
devices,
|
||||||
|
toggleAddBlacklist,
|
||||||
|
toggleEditModal,
|
||||||
|
devicesPerPage,
|
||||||
|
loading,
|
||||||
|
removeFromBlacklist,
|
||||||
|
updateDevicesPerPage,
|
||||||
|
pageCount,
|
||||||
|
updatePage,
|
||||||
|
t,
|
||||||
|
}) => {
|
||||||
|
const columns = [
|
||||||
|
{ key: 'serialNumber', label: t('common.serial_number'), _style: { width: '6%' } },
|
||||||
|
{ key: 'created', label: t('device.blacklisted_on'), _style: { width: '1%' } },
|
||||||
|
{ key: 'author', label: t('common.by'), filter: false, _style: { width: '15%' } },
|
||||||
|
{ key: 'reason', label: t('common.reason'), filter: false },
|
||||||
|
{ key: 'actions', label: t('actions.actions'), _style: { width: '1%' } },
|
||||||
|
];
|
||||||
|
|
||||||
|
const hideTooltips = () => ReactTooltip.hide();
|
||||||
|
|
||||||
|
const escFunction = (event) => {
|
||||||
|
if (event.keyCode === 27) {
|
||||||
|
hideTooltips();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.addEventListener('keydown', escFunction, false);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener('keydown', escFunction, false);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<CCard className="m-0 p-0">
|
||||||
|
<CCardHeader className="p-0 text-right">
|
||||||
|
<CPopover content={t('device.add_to_blacklist')}>
|
||||||
|
<CButton size="sm" color="primary" onClick={toggleAddBlacklist}>
|
||||||
|
<CIcon content={cilPlus} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody className="p-0">
|
||||||
|
<CDataTable
|
||||||
|
addTableClasses="ignore-overflow table-sm"
|
||||||
|
items={devices ?? []}
|
||||||
|
fields={columns}
|
||||||
|
hover
|
||||||
|
border
|
||||||
|
loading={loading}
|
||||||
|
scopedSlots={{
|
||||||
|
serialNumber: (item) => (
|
||||||
|
<td className="text-center align-middle">
|
||||||
|
<CLink
|
||||||
|
className="c-subheader-nav-link"
|
||||||
|
aria-current="page"
|
||||||
|
to={() => `/devices/${item.serialNumber}`}
|
||||||
|
>
|
||||||
|
{item.serialNumber}
|
||||||
|
</CLink>
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
created: (item) => (
|
||||||
|
<td className="text-left align-middle">
|
||||||
|
<div style={{ width: '130px' }}>
|
||||||
|
<FormattedDate date={item.created} />
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
author: (item) => <td className="align-middle">{item.author}</td>,
|
||||||
|
reason: (item) => <td className="align-middle">{item.reason}</td>,
|
||||||
|
actions: (item) => (
|
||||||
|
<td className="text-center align-middle">
|
||||||
|
<CButtonToolbar
|
||||||
|
role="group"
|
||||||
|
className="justify-content-center"
|
||||||
|
style={{ width: '130px' }}
|
||||||
|
>
|
||||||
|
<CPopover content={t('configuration.details')}>
|
||||||
|
<CLink
|
||||||
|
className="c-subheader-nav-link"
|
||||||
|
aria-current="page"
|
||||||
|
to={() => `/devices/${item.serialNumber}`}
|
||||||
|
>
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-1"
|
||||||
|
style={{ width: '33px', height: '30px' }}
|
||||||
|
>
|
||||||
|
<CIcon name="cil-search" content={cilSearch} size="sm" />
|
||||||
|
</CButton>
|
||||||
|
</CLink>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('device.remove_from_blacklist')}>
|
||||||
|
<CButton
|
||||||
|
onClick={() => removeFromBlacklist(item.serialNumber)}
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-1"
|
||||||
|
style={{ width: '33px', height: '30px' }}
|
||||||
|
>
|
||||||
|
<CIcon content={cilTrash} size="sm" />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('common.edit')}>
|
||||||
|
<CButton
|
||||||
|
onClick={() => toggleEditModal(item.serialNumber)}
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-1"
|
||||||
|
style={{ width: '33px', height: '30px' }}
|
||||||
|
>
|
||||||
|
<CIcon content={cilPencil} size="sm" />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</CButtonToolbar>
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div className="d-flex flex-row pl-3">
|
||||||
|
<div className="pr-3">
|
||||||
|
<ReactPaginate
|
||||||
|
previousLabel="← Previous"
|
||||||
|
nextLabel="Next →"
|
||||||
|
pageCount={pageCount}
|
||||||
|
onPageChange={updatePage}
|
||||||
|
forcePage={Number(currentPage)}
|
||||||
|
breakClassName="page-item"
|
||||||
|
breakLinkClassName="page-link"
|
||||||
|
containerClassName="pagination"
|
||||||
|
pageClassName="page-item"
|
||||||
|
pageLinkClassName="page-link"
|
||||||
|
previousClassName="page-item"
|
||||||
|
previousLinkClassName="page-link"
|
||||||
|
nextClassName="page-item"
|
||||||
|
nextLinkClassName="page-link"
|
||||||
|
activeClassName="active"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<p className="pr-2 mt-1">{t('common.items_per_page')}</p>
|
||||||
|
<div style={{ width: '100px' }} className="px-2">
|
||||||
|
<CSelect
|
||||||
|
custom
|
||||||
|
defaultValue={devicesPerPage}
|
||||||
|
onChange={(e) => updateDevicesPerPage(e.target.value)}
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
<option value="10">10</option>
|
||||||
|
<option value="25">25</option>
|
||||||
|
<option value="50">50</option>
|
||||||
|
</CSelect>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
BlacklistTable.propTypes = {
|
||||||
|
currentPage: PropTypes.string,
|
||||||
|
devices: PropTypes.instanceOf(Array).isRequired,
|
||||||
|
toggleAddBlacklist: PropTypes.func.isRequired,
|
||||||
|
toggleEditModal: PropTypes.func.isRequired,
|
||||||
|
updateDevicesPerPage: PropTypes.func.isRequired,
|
||||||
|
pageCount: PropTypes.number.isRequired,
|
||||||
|
updatePage: PropTypes.func.isRequired,
|
||||||
|
devicesPerPage: PropTypes.string.isRequired,
|
||||||
|
removeFromBlacklist: PropTypes.func.isRequired,
|
||||||
|
t: PropTypes.func.isRequired,
|
||||||
|
loading: PropTypes.bool.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
BlacklistTable.defaultProps = {
|
||||||
|
currentPage: '0',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default React.memo(BlacklistTable);
|
||||||
30
src/components/BlacklistTable/Table/index.module.scss
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.firmwareTooltip {
|
||||||
|
opacity: 1 !important;
|
||||||
|
padding: 0px 0px 0px 0px !important;
|
||||||
|
border-radius: 1rem !important;
|
||||||
|
background-color: #fff !important;
|
||||||
|
border-color: #321fdb !important;
|
||||||
|
font-size: 0.875rem !important;
|
||||||
|
font-weight: 400 !important;
|
||||||
|
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2) !important;
|
||||||
|
width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deleteTooltip {
|
||||||
|
opacity: 1 !important;
|
||||||
|
padding: 0px 0px 0px 0px !important;
|
||||||
|
border-radius: 1rem !important;
|
||||||
|
background-color: #fff !important;
|
||||||
|
border-color: #321fdb !important;
|
||||||
|
font-size: 0.875rem !important;
|
||||||
|
font-weight: 400 !important;
|
||||||
|
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2) !important;
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltipHeader {
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 10px;
|
||||||
|
border-top-left-radius: 1rem !important;
|
||||||
|
border-top-right-radius: 1rem !important;
|
||||||
|
}
|
||||||
244
src/components/BlacklistTable/index.js
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { useHistory } from 'react-router-dom';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
import { getItem, setItem } from 'utils/localStorageHelper';
|
||||||
|
import { useAuth, useToast, useToggle } from 'ucentral-libs';
|
||||||
|
import AddToBlacklistModal from 'components/AddToBlacklistModal';
|
||||||
|
import EditBlacklistModal from 'components/EditBlacklistModal';
|
||||||
|
import Table from './Table';
|
||||||
|
|
||||||
|
const BlacklistTable = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { addToast } = useToast();
|
||||||
|
const history = useHistory();
|
||||||
|
const [page, setPage] = useState(parseInt(sessionStorage.getItem('deviceTable') ?? 0, 10));
|
||||||
|
const { currentToken, endpoints } = useAuth();
|
||||||
|
const [deviceCount, setDeviceCount] = useState(0);
|
||||||
|
const [pageCount, setPageCount] = useState(0);
|
||||||
|
const [devicesPerPage, setDevicesPerPage] = useState(getItem('devicesPerPage') || '10');
|
||||||
|
const [devices, setDevices] = useState([]);
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [editSerial, setEditSerial] = useState('');
|
||||||
|
const [showEditModal, setShowEditModal] = useState(false);
|
||||||
|
const [showAddModal, toggleAddModal] = useToggle(false);
|
||||||
|
|
||||||
|
const toggleEditModal = (serialNumber) => {
|
||||||
|
if (serialNumber) setEditSerial(serialNumber);
|
||||||
|
setShowEditModal(!showEditModal);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getDeviceInformation = (selectedPage = page, devicePerPage = devicesPerPage) => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(
|
||||||
|
`${endpoints.owgw}/api/v1/blacklist?limit=${devicePerPage}&offset=${
|
||||||
|
devicePerPage * selectedPage
|
||||||
|
}`,
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
setDevices(response.data.devices);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_fetching_devices', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const getCount = () => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(`${endpoints.owgw}/api/v1/blacklist?countOnly=true`, {
|
||||||
|
headers,
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
const devicesCount = response.data.count;
|
||||||
|
const pagesCount = Math.ceil(devicesCount / devicesPerPage);
|
||||||
|
setPageCount(pagesCount);
|
||||||
|
setDeviceCount(devicesCount);
|
||||||
|
|
||||||
|
let selectedPage = page;
|
||||||
|
|
||||||
|
if (page >= pagesCount) {
|
||||||
|
history.push(`/devices?page=${pagesCount - 1}`);
|
||||||
|
selectedPage = pagesCount - 1;
|
||||||
|
}
|
||||||
|
getDeviceInformation(selectedPage);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_fetching_devices', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const refreshDevice = (serialNumber) => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let newDevice;
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(
|
||||||
|
`${endpoints.owgw}/api/v1/blacklist?deviceWithStatus=true&select=${encodeURIComponent(
|
||||||
|
serialNumber,
|
||||||
|
)}`,
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
.then(
|
||||||
|
({
|
||||||
|
data: {
|
||||||
|
devicesWithStatus: [device],
|
||||||
|
},
|
||||||
|
}) => {
|
||||||
|
newDevice = device;
|
||||||
|
|
||||||
|
return axiosInstance.get(
|
||||||
|
`${endpoints.owfms}/api/v1/firmwareAge?select=${serialNumber}`,
|
||||||
|
options,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
newDevice.firmwareInfo = {
|
||||||
|
age: response.data.ages[0].age,
|
||||||
|
latest: response.data.ages[0].latest,
|
||||||
|
};
|
||||||
|
const foundIndex = devices.findIndex((obj) => obj.serialNumber === serialNumber);
|
||||||
|
const newList = devices;
|
||||||
|
newList[foundIndex] = newDevice;
|
||||||
|
setDevices(newList);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_fetching_devices', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateDevicesPerPage = (value) => {
|
||||||
|
setItem('devicesPerPage', value);
|
||||||
|
setDevicesPerPage(value);
|
||||||
|
|
||||||
|
const newPageCount = Math.ceil(deviceCount / value);
|
||||||
|
setPageCount(newPageCount);
|
||||||
|
|
||||||
|
let selectedPage = page;
|
||||||
|
|
||||||
|
if (page >= newPageCount) {
|
||||||
|
history.push(`/blacklist?page=${newPageCount - 1}`);
|
||||||
|
selectedPage = newPageCount - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
getDeviceInformation(selectedPage, value);
|
||||||
|
};
|
||||||
|
|
||||||
|
const updatePageCount = ({ selected: selectedPage }) => {
|
||||||
|
sessionStorage.setItem('deviceTable', selectedPage);
|
||||||
|
setPage(selectedPage);
|
||||||
|
getDeviceInformation(selectedPage);
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeFromBlacklist = (serialNumber) => {
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.delete(`${endpoints.owgw}/api/v1/blacklist/${serialNumber}`, { headers })
|
||||||
|
.then(() => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.success'),
|
||||||
|
body: t('device.success_removed_blacklist'),
|
||||||
|
color: 'success',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
getCount();
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_adding_blacklist', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getCount();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Table
|
||||||
|
currentPage={page}
|
||||||
|
t={t}
|
||||||
|
devices={devices}
|
||||||
|
loading={loading}
|
||||||
|
toggleAddBlacklist={toggleAddModal}
|
||||||
|
toggleEditModal={toggleEditModal}
|
||||||
|
updateDevicesPerPage={updateDevicesPerPage}
|
||||||
|
devicesPerPage={devicesPerPage}
|
||||||
|
pageCount={pageCount}
|
||||||
|
updatePage={updatePageCount}
|
||||||
|
pageRangeDisplayed={5}
|
||||||
|
refreshDevice={refreshDevice}
|
||||||
|
removeFromBlacklist={removeFromBlacklist}
|
||||||
|
/>
|
||||||
|
{showAddModal ? (
|
||||||
|
<AddToBlacklistModal show={showAddModal} toggle={toggleAddModal} refresh={getCount} />
|
||||||
|
) : null}
|
||||||
|
<EditBlacklistModal
|
||||||
|
show={showEditModal}
|
||||||
|
toggle={toggleEditModal}
|
||||||
|
refresh={getCount}
|
||||||
|
serialNumber={editSerial}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BlacklistTable;
|
||||||
@@ -5,102 +5,88 @@ import {
|
|||||||
CModalTitle,
|
CModalTitle,
|
||||||
CModalBody,
|
CModalBody,
|
||||||
CModalFooter,
|
CModalFooter,
|
||||||
CSpinner,
|
|
||||||
CCol,
|
CCol,
|
||||||
CRow,
|
|
||||||
CForm,
|
|
||||||
CFormGroup,
|
CFormGroup,
|
||||||
CInputRadio,
|
CInputRadio,
|
||||||
CLabel,
|
CLabel,
|
||||||
|
CPopover,
|
||||||
|
CRow,
|
||||||
} from '@coreui/react';
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilX } from '@coreui/icons';
|
||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import DatePicker from 'react-widgets/DatePicker';
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import { convertDateFromUtc, convertDateToUtc, dateToUnix } from 'utils/helper';
|
|
||||||
import 'react-widgets/styles.css';
|
import 'react-widgets/styles.css';
|
||||||
import { getToken } from 'utils/authHelper';
|
|
||||||
import axiosInstance from 'utils/axiosInstance';
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
import eventBus from 'utils/eventBus';
|
import eventBus from 'utils/eventBus';
|
||||||
import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody';
|
import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody';
|
||||||
import LoadingButton from 'components/LoadingButton';
|
import { LoadingButton, useAuth, useDevice, useToast } from 'ucentral-libs';
|
||||||
|
|
||||||
import styles from './index.module.scss';
|
|
||||||
|
|
||||||
const BlinkModal = ({ show, toggleModal }) => {
|
const BlinkModal = ({ show, toggleModal }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [hadSuccess, setHadSuccess] = useState(false);
|
const { currentToken, endpoints } = useAuth();
|
||||||
const [hadFailure, setHadFailure] = useState(false);
|
const { deviceSerialNumber } = useDevice();
|
||||||
const [doingNow, setDoingNow] = useState(false);
|
const { addToast } = useToast();
|
||||||
const [waiting, setWaiting] = useState(false);
|
const [waiting, setWaiting] = useState(false);
|
||||||
const [chosenDate, setChosenDate] = useState(new Date().toString());
|
const [chosenPattern, setPattern] = useState('blink');
|
||||||
const [chosenPattern, setPattern] = useState('on');
|
const [result, setResult] = useState(null);
|
||||||
const [responseBody, setResponseBody] = useState('');
|
|
||||||
const selectedDeviceId = useSelector((state) => state.selectedDeviceId);
|
|
||||||
|
|
||||||
const setDateToLate = () => {
|
|
||||||
const date = convertDateToUtc(new Date());
|
|
||||||
if (date.getHours() >= 3) {
|
|
||||||
date.setDate(date.getDate() + 1);
|
|
||||||
}
|
|
||||||
date.setHours(3);
|
|
||||||
date.setMinutes(0);
|
|
||||||
|
|
||||||
setChosenDate(convertDateFromUtc(date).toString());
|
|
||||||
};
|
|
||||||
|
|
||||||
const setDate = (date) => {
|
|
||||||
if (date) {
|
|
||||||
setChosenDate(date.toString());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (show) {
|
if (show) {
|
||||||
setWaiting(false);
|
setWaiting(false);
|
||||||
setChosenDate(new Date().toString());
|
setPattern('blink');
|
||||||
setResponseBody('');
|
setResult(null);
|
||||||
setPattern('on');
|
|
||||||
setDoingNow(false);
|
|
||||||
setHadSuccess(false);
|
|
||||||
setHadFailure(false);
|
|
||||||
}
|
}
|
||||||
}, [show]);
|
}, [show]);
|
||||||
|
|
||||||
const doAction = (isNow) => {
|
const doAction = () => {
|
||||||
if (isNow !== undefined) setDoingNow(isNow);
|
|
||||||
setHadFailure(false);
|
|
||||||
setHadSuccess(false);
|
|
||||||
setWaiting(true);
|
setWaiting(true);
|
||||||
|
|
||||||
const token = getToken();
|
|
||||||
const utcDate = new Date(chosenDate);
|
|
||||||
const utcDateString = utcDate.toISOString();
|
|
||||||
|
|
||||||
const parameters = {
|
const parameters = {
|
||||||
serialNumber: selectedDeviceId,
|
serialNumber: deviceSerialNumber,
|
||||||
when: isNow ? 0 : dateToUnix(utcDateString),
|
when: 0,
|
||||||
pattern: chosenPattern,
|
pattern: chosenPattern,
|
||||||
duration: 30,
|
duration: 30,
|
||||||
};
|
};
|
||||||
|
|
||||||
const headers = {
|
const headers = {
|
||||||
Accept: 'application/json',
|
Accept: 'application/json',
|
||||||
Authorization: `Bearer ${token}`,
|
Authorization: `Bearer ${currentToken}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
axiosInstance
|
axiosInstance
|
||||||
.post(`/device/${encodeURIComponent(selectedDeviceId)}/leds`, parameters, { headers })
|
.post(
|
||||||
|
`${endpoints.owgw}/api/v1/device/${encodeURIComponent(deviceSerialNumber)}/leds`,
|
||||||
|
parameters,
|
||||||
|
{ headers },
|
||||||
|
)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
setHadSuccess(true);
|
if (chosenPattern !== 'blink') {
|
||||||
|
addToast({
|
||||||
|
title: t('common.success'),
|
||||||
|
body: t('commands.command_success'),
|
||||||
|
color: 'success',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
toggleModal();
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch((e) => {
|
||||||
setResponseBody('Error while submitting command!');
|
if (e.response?.data?.ErrorDescription !== undefined) {
|
||||||
setHadFailure(true);
|
const split = e.response?.data?.ErrorDescription.split(':');
|
||||||
|
if (split !== undefined && split.length >= 2) {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: split[1],
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setResult('error');
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
setDoingNow(false);
|
|
||||||
setWaiting(false);
|
setWaiting(false);
|
||||||
eventBus.dispatch('actionCompleted', { message: 'An action has been completed' });
|
eventBus.dispatch('actionCompleted', { message: 'An action has been completed' });
|
||||||
});
|
});
|
||||||
@@ -108,102 +94,76 @@ const BlinkModal = ({ show, toggleModal }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<CModal show={show} onClose={toggleModal}>
|
<CModal show={show} onClose={toggleModal}>
|
||||||
<CModalHeader closeButton>
|
<CModalHeader className="p-1">
|
||||||
<CModalTitle>{t('blink.device_leds')}</CModalTitle>
|
<CModalTitle className="pl-1 pt-1">{t('blink.device_leds')}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggleModal}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
</CModalHeader>
|
</CModalHeader>
|
||||||
{hadSuccess ? (
|
{result === 'success' ? (
|
||||||
<SuccessfulActionModalBody toggleModal={toggleModal} />
|
<SuccessfulActionModalBody toggleModal={toggleModal} />
|
||||||
) : (
|
) : (
|
||||||
<div>
|
<div>
|
||||||
<CModalBody>
|
<CModalBody>
|
||||||
<h6>{t('blink.when_blink_leds')}</h6>
|
<CRow className="mb-3">
|
||||||
<CRow className={styles.spacedRow}>
|
<CCol>{t('blink.explanation')}</CCol>
|
||||||
<CCol>
|
|
||||||
<CButton onClick={() => doAction(true)} disabled={waiting} block color="primary">
|
|
||||||
{waiting && doingNow ? t('common.loading_ellipsis') : t('common.do_now')}
|
|
||||||
<CSpinner
|
|
||||||
color="light"
|
|
||||||
hidden={!waiting || !doingNow}
|
|
||||||
component="span"
|
|
||||||
size="sm"
|
|
||||||
/>
|
|
||||||
</CButton>
|
|
||||||
</CCol>
|
|
||||||
<CCol>
|
|
||||||
<CButton disabled={waiting} block color="primary" onClick={setDateToLate}>
|
|
||||||
{t('common.later_tonight')}
|
|
||||||
</CButton>
|
|
||||||
</CCol>
|
|
||||||
</CRow>
|
</CRow>
|
||||||
<CRow className={styles.spacedRow}>
|
<CFormGroup row className="mb-0">
|
||||||
<CCol md="4" className={styles.spacedDate}>
|
<CCol md="3">
|
||||||
<p>{t('common.date')}</p>
|
<CLabel>{t('blink.pattern')}</CLabel>
|
||||||
</CCol>
|
</CCol>
|
||||||
<CCol xs="12" md="8">
|
|
||||||
<DatePicker
|
|
||||||
selected={new Date(chosenDate)}
|
|
||||||
includeTime
|
|
||||||
value={new Date(chosenDate)}
|
|
||||||
placeholder="Select custom date"
|
|
||||||
disabled={waiting}
|
|
||||||
onChange={(date) => setDate(date)}
|
|
||||||
min={convertDateToUtc(new Date())}
|
|
||||||
/>
|
|
||||||
</CCol>
|
|
||||||
</CRow>
|
|
||||||
<CRow className={styles.spacedRow}>
|
|
||||||
<CCol md="7">{t('blink.pattern')}</CCol>
|
|
||||||
<CCol>
|
<CCol>
|
||||||
<CForm>
|
<CFormGroup variant="custom-radio" onClick={() => setPattern('blink')} inline>
|
||||||
<CFormGroup variant="checkbox" onClick={() => setPattern('on')}>
|
|
||||||
<CInputRadio
|
|
||||||
defaultChecked={chosenPattern === 'on'}
|
|
||||||
id="radio1"
|
|
||||||
name="radios"
|
|
||||||
value="option1"
|
|
||||||
/>
|
|
||||||
<CLabel variant="checkbox" htmlFor="radio1">
|
|
||||||
{t('common.on')}
|
|
||||||
</CLabel>
|
|
||||||
</CFormGroup>
|
|
||||||
<CFormGroup variant="checkbox" onClick={() => setPattern('off')}>
|
|
||||||
<CInputRadio
|
|
||||||
defaultChecked={chosenPattern === 'off'}
|
|
||||||
id="radio2"
|
|
||||||
name="radios"
|
|
||||||
value="option2"
|
|
||||||
/>
|
|
||||||
<CLabel variant="checkbox" htmlFor="radio2">
|
|
||||||
{t('common.off')}
|
|
||||||
</CLabel>
|
|
||||||
</CFormGroup>
|
|
||||||
<CFormGroup variant="checkbox" onClick={() => setPattern('blink')}>
|
|
||||||
<CInputRadio
|
<CInputRadio
|
||||||
|
custom
|
||||||
defaultChecked={chosenPattern === 'blink'}
|
defaultChecked={chosenPattern === 'blink'}
|
||||||
id="radio3"
|
id="radio3"
|
||||||
name="radios"
|
name="radios"
|
||||||
value="option3"
|
value="option3"
|
||||||
/>
|
/>
|
||||||
<CLabel variant="checkbox" htmlFor="radio3">
|
<CLabel variant="custom-checkbox" htmlFor="radio3">
|
||||||
{t('blink.blink')}
|
{t('blink.blink')}
|
||||||
</CLabel>
|
</CLabel>
|
||||||
</CFormGroup>
|
</CFormGroup>
|
||||||
</CForm>
|
<CFormGroup variant="custom-radio" onClick={() => setPattern('on')} inline>
|
||||||
|
<CInputRadio
|
||||||
|
custom
|
||||||
|
defaultChecked={chosenPattern === 'on'}
|
||||||
|
id="radio1"
|
||||||
|
name="radios"
|
||||||
|
value="option1"
|
||||||
|
/>
|
||||||
|
<CLabel variant="custom-checkbox" htmlFor="radio1">
|
||||||
|
{t('common.on')}
|
||||||
|
</CLabel>
|
||||||
|
</CFormGroup>
|
||||||
|
<CFormGroup variant="custom-radio" onClick={() => setPattern('off')} inline>
|
||||||
|
<CInputRadio
|
||||||
|
custom
|
||||||
|
defaultChecked={chosenPattern === 'off'}
|
||||||
|
id="radio2"
|
||||||
|
name="radios"
|
||||||
|
value="option2"
|
||||||
|
/>
|
||||||
|
<CLabel variant="custom-checkbox" htmlFor="radio2">
|
||||||
|
{t('common.off')}
|
||||||
|
</CLabel>
|
||||||
|
</CFormGroup>
|
||||||
</CCol>
|
</CCol>
|
||||||
</CRow>
|
</CFormGroup>
|
||||||
<div hidden={!hadSuccess && !hadFailure}>
|
|
||||||
<div>
|
|
||||||
<pre className="ignore">{responseBody}</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CModalBody>
|
</CModalBody>
|
||||||
<CModalFooter>
|
<CModalFooter>
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
label={t('common.schedule')}
|
label={t('common.submit')}
|
||||||
isLoadingLabel={t('common.loading_ellipsis')}
|
isLoadingLabel={
|
||||||
isLoading={waiting && !doingNow}
|
chosenPattern === 'blink' ? 'LEDs are blinking... ' : t('common.loading_ellipsis')
|
||||||
|
}
|
||||||
|
isLoading={waiting}
|
||||||
action={doAction}
|
action={doAction}
|
||||||
variant="outline"
|
|
||||||
block={false}
|
block={false}
|
||||||
disabled={waiting}
|
disabled={waiting}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
.spacedRow {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spacedDate {
|
|
||||||
margin-top: 7px;
|
|
||||||
}
|
|
||||||
100
src/components/CapabilitiesDisplay/index.js
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import {
|
||||||
|
CRow,
|
||||||
|
CCol,
|
||||||
|
CCard,
|
||||||
|
CCardBody,
|
||||||
|
CCardHeader,
|
||||||
|
CLabel,
|
||||||
|
CPopover,
|
||||||
|
CSpinner,
|
||||||
|
CButton,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilSync } from '@coreui/icons';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { CopyToClipboardButton, useAuth, useToast, FormattedDate } from 'ucentral-libs';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
|
||||||
|
const CapabilitiesDisplay = ({ serialNumber }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { currentToken, endpoints } = useAuth();
|
||||||
|
const [capabilities, setCapabilities] = useState({});
|
||||||
|
const { addToast } = useToast();
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
const getCapabilities = () => {
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(
|
||||||
|
`${endpoints.owgw}/api/v1/device/${encodeURIComponent(serialNumber)}/capabilities`,
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
setCapabilities(response.data);
|
||||||
|
})
|
||||||
|
.catch((e) => {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: t('device.error_fetching_device', { error: e.response?.data?.ErrorDescription }),
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getCapabilities();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CCard className="m-0">
|
||||||
|
<CCardHeader className="dark-header">
|
||||||
|
<div className="d-flex flex-row-reverse align-items-center">
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.refresh')}>
|
||||||
|
<CButton size="sm" color="info" onClick={getCapabilities}>
|
||||||
|
<CIcon content={cilSync} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody>
|
||||||
|
<h5>
|
||||||
|
{t('device.capabilities')}
|
||||||
|
<CopyToClipboardButton
|
||||||
|
t={t}
|
||||||
|
size="sm"
|
||||||
|
content={JSON.stringify(capabilities?.capabilities ?? {})}
|
||||||
|
/>
|
||||||
|
</h5>
|
||||||
|
<CRow>
|
||||||
|
<CCol>
|
||||||
|
<CLabel>
|
||||||
|
{t('inventory.last_modification')}: <FormattedDate date={capabilities?.lastUpdate} />
|
||||||
|
</CLabel>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
{loading ? <CSpinner /> : null}
|
||||||
|
<pre className="ignore">{JSON.stringify(capabilities?.capabilities ?? {}, null, 4)}</pre>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
CapabilitiesDisplay.propTypes = {
|
||||||
|
serialNumber: PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CapabilitiesDisplay;
|
||||||
33
src/components/CommandHistory/DetailsModal.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { CButton, CModal, CModalHeader, CModalBody, CModalTitle, CPopover } from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilX } from '@coreui/icons';
|
||||||
|
|
||||||
|
const DetailsModal = ({ t, show, toggle, details, commandUuid }) => (
|
||||||
|
<CModal size="lg" show={show} onClose={toggle}>
|
||||||
|
<CModalHeader className="p-1">
|
||||||
|
<CModalTitle className="text-dark">{commandUuid}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
</CModalHeader>
|
||||||
|
<CModalBody>
|
||||||
|
<pre className="ignore">{JSON.stringify(details, null, 2)}</pre>
|
||||||
|
</CModalBody>
|
||||||
|
</CModal>
|
||||||
|
);
|
||||||
|
|
||||||
|
DetailsModal.propTypes = {
|
||||||
|
t: PropTypes.func.isRequired,
|
||||||
|
show: PropTypes.bool.isRequired,
|
||||||
|
toggle: PropTypes.func.isRequired,
|
||||||
|
details: PropTypes.instanceOf(Object).isRequired,
|
||||||
|
commandUuid: PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DetailsModal;
|
||||||
439
src/components/CommandHistory/index.js
Normal file
@@ -0,0 +1,439 @@
|
|||||||
|
/* eslint-disable-rule prefer-destructuring */
|
||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import {
|
||||||
|
CCardHeader,
|
||||||
|
CCardBody,
|
||||||
|
CButton,
|
||||||
|
CDataTable,
|
||||||
|
CCard,
|
||||||
|
CPopover,
|
||||||
|
CButtonToolbar,
|
||||||
|
CFormText,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import DatePicker from 'react-widgets/DatePicker';
|
||||||
|
import { cilCloudDownload, cilSync, cilCalendarCheck } from '@coreui/icons';
|
||||||
|
import { dateToUnix } from 'utils/helper';
|
||||||
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
|
import eventBus from 'utils/eventBus';
|
||||||
|
import ConfirmModal from 'components/ConfirmModal';
|
||||||
|
import { LoadingButton, useAuth, useDevice, FormattedDate } from 'ucentral-libs';
|
||||||
|
import WifiScanResultModalWidget from 'components/WifiScanResultModal';
|
||||||
|
import DetailsModal from './DetailsModal';
|
||||||
|
|
||||||
|
const DeviceCommands = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { currentToken, endpoints } = useAuth();
|
||||||
|
const { deviceSerialNumber } = useDevice();
|
||||||
|
// Wifiscan result related
|
||||||
|
const [chosenWifiScan, setChosenWifiScan] = useState(null);
|
||||||
|
const [showScanModal, setShowScanModal] = useState(false);
|
||||||
|
const [chosenWifiScanDate, setChosenWifiScanDate] = useState('');
|
||||||
|
// Delete modal related
|
||||||
|
const [showConfirmModal, setShowConfirmModal] = useState(false);
|
||||||
|
const [uuidDelete, setUuidDelete] = useState('');
|
||||||
|
// Details modal related
|
||||||
|
const [showDetailsModal, setShowDetailsModal] = useState(false);
|
||||||
|
const [detailsUuid, setDetailsUuid] = useState('');
|
||||||
|
const [modalDetails, setModalDetails] = useState({});
|
||||||
|
// General states
|
||||||
|
const [commands, setCommands] = useState([]);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
const [start, setStart] = useState('');
|
||||||
|
const [startError, setStartError] = useState(false);
|
||||||
|
const [end, setEnd] = useState('');
|
||||||
|
const [endError, setEndError] = useState(false);
|
||||||
|
const [commandLimit, setCommandLimit] = useState(25);
|
||||||
|
// Load more button related
|
||||||
|
const [loadingMore, setLoadingMore] = useState(false);
|
||||||
|
const [showLoadingMore, setShowLoadingMore] = useState(true);
|
||||||
|
|
||||||
|
const toggleScanModal = () => {
|
||||||
|
setShowScanModal(!showScanModal);
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleConfirmModal = (uuid) => {
|
||||||
|
setUuidDelete(uuid);
|
||||||
|
setShowConfirmModal(!showConfirmModal);
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleDetailsModal = () => {
|
||||||
|
setShowDetailsModal(!showDetailsModal);
|
||||||
|
};
|
||||||
|
|
||||||
|
const showMoreCommands = () => {
|
||||||
|
setCommandLimit(commandLimit + 50);
|
||||||
|
};
|
||||||
|
|
||||||
|
const modifyStart = (value) => {
|
||||||
|
try {
|
||||||
|
new Date(value).toISOString();
|
||||||
|
setStartError(false);
|
||||||
|
setStart(value);
|
||||||
|
} catch (e) {
|
||||||
|
setStart('');
|
||||||
|
setStartError(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const modifyEnd = (value) => {
|
||||||
|
try {
|
||||||
|
new Date(value).toISOString();
|
||||||
|
setEndError(false);
|
||||||
|
setEnd(value);
|
||||||
|
} catch (e) {
|
||||||
|
setEnd('');
|
||||||
|
setEndError(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteCommandFromList = (commandUuid) => {
|
||||||
|
const indexToDelete = commands.map((e) => e.UUID).indexOf(commandUuid);
|
||||||
|
const newCommands = commands;
|
||||||
|
newCommands.splice(indexToDelete, 1);
|
||||||
|
setCommands(newCommands);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getCommands = () => {
|
||||||
|
if (loading) return;
|
||||||
|
setLoadingMore(true);
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
limit: commandLimit,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let extraParams = '&newest=true';
|
||||||
|
if (start !== '' && end !== '') {
|
||||||
|
const utcStart = new Date(start).toISOString();
|
||||||
|
const utcEnd = new Date(end).toISOString();
|
||||||
|
options.params.startDate = dateToUnix(utcStart);
|
||||||
|
options.params.endDate = dateToUnix(utcEnd);
|
||||||
|
extraParams = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(
|
||||||
|
`${endpoints.owgw}/api/v1/commands?serialNumber=${encodeURIComponent(
|
||||||
|
deviceSerialNumber,
|
||||||
|
)}${extraParams}`,
|
||||||
|
options,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
setCommands(response.data.commands);
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
setLoadingMore(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const downloadTrace = (uuid) => {
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/octet-stream',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
responseType: 'arraybuffer',
|
||||||
|
};
|
||||||
|
|
||||||
|
axiosInstance
|
||||||
|
.get(`${endpoints.owgw}/api/v1/file/${uuid}?serialNumber=${deviceSerialNumber}`, options)
|
||||||
|
.then((response) => {
|
||||||
|
const blob = new Blob([response.data], { type: 'application/octet-stream' });
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = window.URL.createObjectURL(blob);
|
||||||
|
link.download = `Trace_${uuid}.pcap`;
|
||||||
|
link.click();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteCommand = async () => {
|
||||||
|
if (uuidDelete === '') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const options = {
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
Authorization: `Bearer ${currentToken}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return axiosInstance
|
||||||
|
.delete(`${endpoints.owgw}/api/v1/command/${uuidDelete}`, options)
|
||||||
|
.then(() => {
|
||||||
|
deleteCommandFromList(uuidDelete);
|
||||||
|
setUuidDelete('');
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setUuidDelete('');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleDetails = (item) => {
|
||||||
|
if (item.command === 'wifiscan') {
|
||||||
|
setChosenWifiScan(item.results.status.scan);
|
||||||
|
setChosenWifiScanDate(item.completed);
|
||||||
|
setShowScanModal(true);
|
||||||
|
} else if (item.command === 'trace' && item.waitingForFile === 0) {
|
||||||
|
downloadTrace(item.UUID);
|
||||||
|
} else {
|
||||||
|
setModalDetails(item.results ?? item);
|
||||||
|
setDetailsUuid(item.UUID);
|
||||||
|
toggleDetailsModal();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleResponse = (item) => {
|
||||||
|
setModalDetails(item);
|
||||||
|
setDetailsUuid(item.UUID);
|
||||||
|
toggleDetailsModal();
|
||||||
|
};
|
||||||
|
|
||||||
|
const refreshCommands = () => {
|
||||||
|
getCommands();
|
||||||
|
};
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ key: 'submitted', label: t('common.submitted'), filter: false, _style: { width: '20%' } },
|
||||||
|
{ key: 'command', label: t('common.command'), _style: { width: '15%' } },
|
||||||
|
{ key: 'executed', label: t('common.executed'), filter: false, _style: { width: '16%' } },
|
||||||
|
{ key: 'completed', label: t('common.completed'), filter: false, _style: { width: '16%' } },
|
||||||
|
{ key: 'errorCode', label: t('common.error_code'), filter: false, _style: { width: '8%' } },
|
||||||
|
{
|
||||||
|
key: 'show_buttons',
|
||||||
|
label: '',
|
||||||
|
sorter: false,
|
||||||
|
filter: false,
|
||||||
|
_style: { width: '1%' },
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (deviceSerialNumber && start !== '' && end !== '') {
|
||||||
|
getCommands();
|
||||||
|
} else if (deviceSerialNumber && start === '' && end === '') {
|
||||||
|
getCommands();
|
||||||
|
}
|
||||||
|
}, [deviceSerialNumber, start, end]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
eventBus.on('actionCompleted', () => refreshCommands());
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
eventBus.remove('actionCompleted');
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (deviceSerialNumber) {
|
||||||
|
setCommandLimit(25);
|
||||||
|
setLoadingMore(false);
|
||||||
|
setShowLoadingMore(true);
|
||||||
|
setStart('');
|
||||||
|
setEnd('');
|
||||||
|
getCommands();
|
||||||
|
}
|
||||||
|
}, [deviceSerialNumber]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (commandLimit !== 25) {
|
||||||
|
getCommands();
|
||||||
|
}
|
||||||
|
}, [commandLimit]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (commands.length === 0 || (commands.length > 0 && commands.length < commandLimit)) {
|
||||||
|
setShowLoadingMore(false);
|
||||||
|
} else {
|
||||||
|
setShowLoadingMore(true);
|
||||||
|
}
|
||||||
|
}, [commands]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<CCard className="m-0">
|
||||||
|
<CCardHeader className="dark-header">
|
||||||
|
<div className="d-flex flex-row-reverse align-items-center">
|
||||||
|
<div className="pl-2">
|
||||||
|
<CPopover content={t('common.refresh')}>
|
||||||
|
<CButton
|
||||||
|
size="sm"
|
||||||
|
color="info"
|
||||||
|
onClick={getCommands}
|
||||||
|
disabled={startError || endError}
|
||||||
|
>
|
||||||
|
<CIcon content={cilSync} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
<div className="pl-2">
|
||||||
|
<DatePicker
|
||||||
|
includeTime
|
||||||
|
onChange={(date) => modifyEnd(date)}
|
||||||
|
value={end ? new Date(end) : undefined}
|
||||||
|
/>
|
||||||
|
<CFormText color="danger" hidden={!endError}>
|
||||||
|
{t('common.invalid_date_explanation')}
|
||||||
|
</CFormText>
|
||||||
|
</div>
|
||||||
|
To:
|
||||||
|
<div className="pl-2">
|
||||||
|
<DatePicker
|
||||||
|
includeTime
|
||||||
|
onChange={(date) => modifyStart(date)}
|
||||||
|
value={start ? new Date(start) : undefined}
|
||||||
|
/>
|
||||||
|
<CFormText color="danger" hidden={!startError}>
|
||||||
|
{t('common.invalid_date_explanation')}
|
||||||
|
</CFormText>
|
||||||
|
</div>
|
||||||
|
From:
|
||||||
|
</div>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody className="p-1">
|
||||||
|
<div className="overflow-auto" style={{ height: 'calc(100vh - 620px)' }}>
|
||||||
|
<CDataTable
|
||||||
|
addTableClasses="ignore-overflow table-sm"
|
||||||
|
border
|
||||||
|
loading={loading}
|
||||||
|
items={commands ?? []}
|
||||||
|
fields={columns}
|
||||||
|
className="text-white"
|
||||||
|
sorterValue={{ column: 'created', desc: 'true' }}
|
||||||
|
scopedSlots={{
|
||||||
|
command: (item) => <td className="align-middle">{item.command}</td>,
|
||||||
|
completed: (item) => (
|
||||||
|
<td className="align-middle">
|
||||||
|
{item.completed && item.completed !== 0 ? (
|
||||||
|
<FormattedDate date={item.completed} />
|
||||||
|
) : (
|
||||||
|
'Pending'
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
executed: (item) => (
|
||||||
|
<td className="align-middle">
|
||||||
|
{item.executed && item.executed !== 0 ? (
|
||||||
|
<FormattedDate date={item.executed} />
|
||||||
|
) : (
|
||||||
|
'Pending'
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
submitted: (item) => (
|
||||||
|
<td className="align-middle">
|
||||||
|
{item.submitted && item.submitted !== '' ? (
|
||||||
|
<FormattedDate date={item.submitted} />
|
||||||
|
) : (
|
||||||
|
'Pending'
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
errorCode: (item) => <td className="align-middle">{item.errorCode}</td>,
|
||||||
|
show_buttons: (item, index) => (
|
||||||
|
<td className="align-middle">
|
||||||
|
<CButtonToolbar
|
||||||
|
role="group"
|
||||||
|
className="justify-content-flex-end"
|
||||||
|
style={{ width: '160px' }}
|
||||||
|
>
|
||||||
|
<CPopover
|
||||||
|
content={
|
||||||
|
item.command === 'trace' ? t('common.download') : t('common.result')
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-2"
|
||||||
|
disabled={item.completed === 0}
|
||||||
|
onClick={() => {
|
||||||
|
toggleDetails(item);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{item.command === 'trace' ? (
|
||||||
|
<CIcon name="cil-cloud-download" content={cilCloudDownload} />
|
||||||
|
) : (
|
||||||
|
<CIcon name="cil-calendar-check" content={cilCalendarCheck} />
|
||||||
|
)}
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('common.details')}>
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-2"
|
||||||
|
onClick={() => {
|
||||||
|
toggleResponse(item);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<CIcon name="cilList" />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
<CPopover content={t('common.delete')}>
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-2"
|
||||||
|
onClick={() => {
|
||||||
|
toggleConfirmModal(item.UUID, index);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<CIcon name="cilTrash" />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</CButtonToolbar>
|
||||||
|
</td>
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{showLoadingMore && (
|
||||||
|
<div className="mb-3">
|
||||||
|
<LoadingButton
|
||||||
|
label={t('common.view_more')}
|
||||||
|
isLoadingLabel={t('common.loading_more_ellipsis')}
|
||||||
|
isLoading={loadingMore}
|
||||||
|
action={showMoreCommands}
|
||||||
|
variant="outline"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
<WifiScanResultModalWidget
|
||||||
|
show={showScanModal}
|
||||||
|
toggle={toggleScanModal}
|
||||||
|
scanResults={chosenWifiScan}
|
||||||
|
date={chosenWifiScanDate}
|
||||||
|
/>
|
||||||
|
<ConfirmModal show={showConfirmModal} toggle={toggleConfirmModal} action={deleteCommand} />
|
||||||
|
<DetailsModal
|
||||||
|
t={t}
|
||||||
|
show={showDetailsModal}
|
||||||
|
toggle={toggleDetailsModal}
|
||||||
|
details={modalDetails}
|
||||||
|
commandUuid={detailsUuid}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeviceCommands;
|
||||||
66
src/components/ConfigurationDisplay/index.js
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import {
|
||||||
|
CRow,
|
||||||
|
CCol,
|
||||||
|
CCard,
|
||||||
|
CCardBody,
|
||||||
|
CCardHeader,
|
||||||
|
CLabel,
|
||||||
|
CPopover,
|
||||||
|
CButton,
|
||||||
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilSync } from '@coreui/icons';
|
||||||
|
import { prettyDate } from 'utils/helper';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { CopyToClipboardButton } from 'ucentral-libs';
|
||||||
|
|
||||||
|
const ConfigurationDisplay = ({ getData, deviceConfig }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
return (
|
||||||
|
<CCard className="m-0">
|
||||||
|
<CCardHeader className="dark-header">
|
||||||
|
<div className="d-flex flex-row-reverse align-items-center">
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.refresh')}>
|
||||||
|
<CButton size="sm" color="info" onClick={getData}>
|
||||||
|
<CIcon content={cilSync} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody>
|
||||||
|
<h5>
|
||||||
|
{t('configuration.title')}
|
||||||
|
<CopyToClipboardButton
|
||||||
|
t={t}
|
||||||
|
size="sm"
|
||||||
|
content={JSON.stringify(deviceConfig?.configuration ?? {}, null, 4)}
|
||||||
|
/>
|
||||||
|
</h5>
|
||||||
|
<CRow>
|
||||||
|
<CCol>
|
||||||
|
<CLabel>
|
||||||
|
{t('configuration.last_configuration_change')}:{' '}
|
||||||
|
{prettyDate(deviceConfig?.lastConfigurationChange)}
|
||||||
|
</CLabel>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
<pre className="ignore">{JSON.stringify(deviceConfig?.configuration ?? {}, null, 4)}</pre>
|
||||||
|
</CCardBody>
|
||||||
|
</CCard>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfigurationDisplay.propTypes = {
|
||||||
|
getData: PropTypes.func.isRequired,
|
||||||
|
deviceConfig: PropTypes.instanceOf(Object),
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfigurationDisplay.defaultProps = {
|
||||||
|
deviceConfig: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ConfigurationDisplay;
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
|
CAlert,
|
||||||
CButton,
|
CButton,
|
||||||
CModal,
|
CModal,
|
||||||
CModalHeader,
|
CModalHeader,
|
||||||
@@ -12,21 +13,25 @@ import {
|
|||||||
CTextarea,
|
CTextarea,
|
||||||
CInvalidFeedback,
|
CInvalidFeedback,
|
||||||
CInputFile,
|
CInputFile,
|
||||||
|
CPopover,
|
||||||
} from '@coreui/react';
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilX } from '@coreui/icons';
|
||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import 'react-widgets/styles.css';
|
import 'react-widgets/styles.css';
|
||||||
import { getToken } from 'utils/authHelper';
|
import { useAuth, useDevice, useToast } from 'ucentral-libs';
|
||||||
import { checkIfJson } from 'utils/helper';
|
import { checkIfJson } from 'utils/helper';
|
||||||
import axiosInstance from 'utils/axiosInstance';
|
import axiosInstance from 'utils/axiosInstance';
|
||||||
import eventBus from 'utils/eventBus';
|
import eventBus from 'utils/eventBus';
|
||||||
import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody';
|
import SuccessfulActionModalBody from 'components/SuccessfulActionModalBody';
|
||||||
import styles from './index.module.scss';
|
|
||||||
|
|
||||||
const ConfigureModal = ({ show, toggleModal }) => {
|
const ConfigureModal = ({ show, toggleModal }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const { currentToken, endpoints } = useAuth();
|
||||||
|
const { addToast } = useToast();
|
||||||
|
const { deviceSerialNumber } = useDevice();
|
||||||
const [hadSuccess, setHadSuccess] = useState(false);
|
const [hadSuccess, setHadSuccess] = useState(false);
|
||||||
const [hadFailure, setHadFailure] = useState(false);
|
const [hadFailure, setHadFailure] = useState(false);
|
||||||
const [doingNow, setDoingNow] = useState(false);
|
const [doingNow, setDoingNow] = useState(false);
|
||||||
@@ -36,7 +41,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
const [checkingIfSure, setCheckingIfSure] = useState(false);
|
const [checkingIfSure, setCheckingIfSure] = useState(false);
|
||||||
const [errorJson, setErrorJson] = useState(false);
|
const [errorJson, setErrorJson] = useState(false);
|
||||||
const [inputKey, setInputKey] = useState(0);
|
const [inputKey, setInputKey] = useState(0);
|
||||||
const selectedDeviceId = useSelector((state) => state.selectedDeviceId);
|
|
||||||
let fileReader;
|
let fileReader;
|
||||||
|
|
||||||
const confirmingIfSure = () => {
|
const confirmingIfSure = () => {
|
||||||
@@ -69,10 +74,8 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
setHadSuccess(false);
|
setHadSuccess(false);
|
||||||
setWaiting(true);
|
setWaiting(true);
|
||||||
|
|
||||||
const token = getToken();
|
|
||||||
|
|
||||||
const parameters = {
|
const parameters = {
|
||||||
serialNumber: selectedDeviceId,
|
serialNumber: deviceSerialNumber,
|
||||||
when: 0,
|
when: 0,
|
||||||
UUID: 1,
|
UUID: 1,
|
||||||
configuration: JSON.parse(newConfig),
|
configuration: JSON.parse(newConfig),
|
||||||
@@ -80,16 +83,37 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
|
|
||||||
const headers = {
|
const headers = {
|
||||||
Accept: 'application/json',
|
Accept: 'application/json',
|
||||||
Authorization: `Bearer ${token}`,
|
Authorization: `Bearer ${currentToken}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
axiosInstance
|
axiosInstance
|
||||||
.post(`/device/${encodeURIComponent(selectedDeviceId)}/configure`, parameters, { headers })
|
.post(
|
||||||
|
`${endpoints.owgw}/api/v1/device/${encodeURIComponent(deviceSerialNumber)}/configure`,
|
||||||
|
parameters,
|
||||||
|
{ headers },
|
||||||
|
)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
setHadSuccess(true);
|
addToast({
|
||||||
|
title: t('common.success'),
|
||||||
|
body: t('commands.command_success'),
|
||||||
|
color: 'success',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
toggleModal();
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch((e) => {
|
||||||
setResponseBody('Error while submitting command!');
|
setResponseBody('Error while submitting command!');
|
||||||
|
if (e.response?.data?.ErrorDescription !== undefined) {
|
||||||
|
const split = e.response?.data?.ErrorDescription.split(':');
|
||||||
|
if (split !== undefined && split.length >= 2) {
|
||||||
|
addToast({
|
||||||
|
title: t('common.error'),
|
||||||
|
body: split[1],
|
||||||
|
color: 'danger',
|
||||||
|
autohide: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
setHadFailure(true);
|
setHadFailure(true);
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
@@ -122,9 +146,16 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CModal show={show} onClose={toggleModal}>
|
<CModal show={show} onClose={toggleModal} size="lg">
|
||||||
<CModalHeader closeButton>
|
<CModalHeader className="p-1">
|
||||||
<CModalTitle>{t('configure.title')}</CModalTitle>
|
<CModalTitle className="pl-1 pt-1">{t('configure.title')}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggleModal}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
</CModalHeader>
|
</CModalHeader>
|
||||||
{hadSuccess ? (
|
{hadSuccess ? (
|
||||||
<SuccessfulActionModalBody toggleModal={toggleModal} />
|
<SuccessfulActionModalBody toggleModal={toggleModal} />
|
||||||
@@ -132,7 +163,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
<div>
|
<div>
|
||||||
<CModalBody>
|
<CModalBody>
|
||||||
<CRow>
|
<CRow>
|
||||||
<CCol md="10" className={styles.spacedColumn}>
|
<CCol md="10" className="mt-1">
|
||||||
<h6>{t('configure.enter_new')}</h6>
|
<h6>{t('configure.enter_new')}</h6>
|
||||||
</CCol>
|
</CCol>
|
||||||
<CCol>
|
<CCol>
|
||||||
@@ -147,7 +178,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
</CButton>
|
</CButton>
|
||||||
</CCol>
|
</CCol>
|
||||||
</CRow>
|
</CRow>
|
||||||
<CRow className={styles.spacedRow}>
|
<CRow className="mt-4">
|
||||||
<CCol>
|
<CCol>
|
||||||
<CForm>
|
<CForm>
|
||||||
<CTextarea
|
<CTextarea
|
||||||
@@ -165,7 +196,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
</CForm>
|
</CForm>
|
||||||
</CCol>
|
</CCol>
|
||||||
</CRow>
|
</CRow>
|
||||||
<CRow className={styles.spacedRow}>
|
<CRow className="mt-4">
|
||||||
<CCol>{t('configure.choose_file')}</CCol>
|
<CCol>{t('configure.choose_file')}</CCol>
|
||||||
<CCol>
|
<CCol>
|
||||||
<CInputFile
|
<CInputFile
|
||||||
@@ -177,11 +208,9 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
/>
|
/>
|
||||||
</CCol>
|
</CCol>
|
||||||
</CRow>
|
</CRow>
|
||||||
<div hidden={!hadSuccess && !hadFailure}>
|
<CAlert color="danger" hidden={!hadSuccess && !hadFailure}>
|
||||||
<div>
|
{responseBody}
|
||||||
<pre className="ignore">{responseBody}</pre>
|
</CAlert>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</CModalBody>
|
</CModalBody>
|
||||||
<CModalFooter>
|
<CModalFooter>
|
||||||
<div hidden={!checkingIfSure}>Are you sure?</div>
|
<div hidden={!checkingIfSure}>Are you sure?</div>
|
||||||
@@ -191,7 +220,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
color="primary"
|
color="primary"
|
||||||
onClick={confirmingIfSure}
|
onClick={confirmingIfSure}
|
||||||
>
|
>
|
||||||
{t('common.submit')}
|
{t('common.save')}
|
||||||
</CButton>
|
</CButton>
|
||||||
<CButton
|
<CButton
|
||||||
hidden={!checkingIfSure}
|
hidden={!checkingIfSure}
|
||||||
@@ -199,7 +228,7 @@ const ConfigureModal = ({ show, toggleModal }) => {
|
|||||||
color="primary"
|
color="primary"
|
||||||
onClick={() => doAction(false)}
|
onClick={() => doAction(false)}
|
||||||
>
|
>
|
||||||
{waiting && !doingNow ? 'Loading...' : 'Yes'} {' '}
|
{waiting && !doingNow ? t('common.saving') : t('common.yes')} {' '}
|
||||||
<CSpinner color="light" hidden={!waiting || doingNow} component="span" size="sm" />
|
<CSpinner color="light" hidden={!waiting || doingNow} component="span" size="sm" />
|
||||||
</CButton>
|
</CButton>
|
||||||
<CButton color="secondary" onClick={toggleModal}>
|
<CButton color="secondary" onClick={toggleModal}>
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
.spacedRow {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spacedColumn {
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
64
src/components/ConfirmFooter/index.js
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { CButton, CSpinner, CModalFooter } from '@coreui/react';
|
||||||
|
|
||||||
|
const ConfirmFooter = ({ isShown, isLoading, action, color, variant, block, toggleParent }) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [askingIfSure, setAskingIfSure] = useState(false);
|
||||||
|
|
||||||
|
const confirmingIfSure = () => {
|
||||||
|
setAskingIfSure(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setAskingIfSure(false);
|
||||||
|
}, [isShown]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CModalFooter>
|
||||||
|
<div hidden={!askingIfSure}>{t('common.are_you_sure')}</div>
|
||||||
|
<CButton
|
||||||
|
disabled={isLoading}
|
||||||
|
hidden={askingIfSure}
|
||||||
|
color={color}
|
||||||
|
variant={variant}
|
||||||
|
onClick={() => confirmingIfSure()}
|
||||||
|
block={block}
|
||||||
|
>
|
||||||
|
{t('common.submit')}
|
||||||
|
</CButton>
|
||||||
|
<CButton
|
||||||
|
disabled={isLoading}
|
||||||
|
hidden={!askingIfSure}
|
||||||
|
color={color}
|
||||||
|
onClick={() => action()}
|
||||||
|
block={block}
|
||||||
|
>
|
||||||
|
{isLoading ? t('common.loading_ellipsis') : t('common.yes')}
|
||||||
|
<CSpinner color="light" hidden={!isLoading} component="span" size="sm" />
|
||||||
|
</CButton>
|
||||||
|
<CButton color="secondary" onClick={toggleParent}>
|
||||||
|
{t('common.cancel')}
|
||||||
|
</CButton>
|
||||||
|
</CModalFooter>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfirmFooter.propTypes = {
|
||||||
|
isLoading: PropTypes.bool.isRequired,
|
||||||
|
block: PropTypes.bool,
|
||||||
|
action: PropTypes.func.isRequired,
|
||||||
|
color: PropTypes.string,
|
||||||
|
variant: PropTypes.string,
|
||||||
|
toggleParent: PropTypes.func.isRequired,
|
||||||
|
isShown: PropTypes.bool.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
ConfirmFooter.defaultProps = {
|
||||||
|
color: 'primary',
|
||||||
|
variant: '',
|
||||||
|
block: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ConfirmFooter;
|
||||||
@@ -9,9 +9,11 @@ import {
|
|||||||
CModalFooter,
|
CModalFooter,
|
||||||
CSpinner,
|
CSpinner,
|
||||||
CBadge,
|
CBadge,
|
||||||
|
CPopover,
|
||||||
} from '@coreui/react';
|
} from '@coreui/react';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { cilX } from '@coreui/icons';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import styles from './index.module.scss';
|
|
||||||
|
|
||||||
const ConfirmModal = ({ show, toggle, action }) => {
|
const ConfirmModal = ({ show, toggle, action }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
@@ -63,9 +65,16 @@ const ConfirmModal = ({ show, toggle, action }) => {
|
|||||||
}, [show]);
|
}, [show]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CModal className={styles.modal} show={show} onClose={toggle}>
|
<CModal className="text-dark" show={show} onClose={toggle}>
|
||||||
<CModalHeader closeButton>
|
<CModalHeader className="p-1">
|
||||||
<CModalTitle>{t('delete_command.title')}</CModalTitle>
|
<CModalTitle className="pl-1 pt-1">{t('delete_command.title')}</CModalTitle>
|
||||||
|
<div className="text-right">
|
||||||
|
<CPopover content={t('common.close')}>
|
||||||
|
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
|
||||||
|
<CIcon content={cilX} />
|
||||||
|
</CButton>
|
||||||
|
</CPopover>
|
||||||
|
</div>
|
||||||
</CModalHeader>
|
</CModalHeader>
|
||||||
<CModalBody>
|
<CModalBody>
|
||||||
<h6>{t('delete_command.explanation')}</h6>
|
<h6>{t('delete_command.explanation')}</h6>
|
||||||
@@ -74,9 +83,6 @@ const ConfirmModal = ({ show, toggle, action }) => {
|
|||||||
<CButton disabled={loading} color="primary" onClick={() => doAction()}>
|
<CButton disabled={loading} color="primary" onClick={() => doAction()}>
|
||||||
{getButtonContent()}
|
{getButtonContent()}
|
||||||
</CButton>
|
</CButton>
|
||||||
<CButton color="secondary" onClick={toggle}>
|
|
||||||
{t('common.cancel')}
|
|
||||||
</CButton>
|
|
||||||
</CModalFooter>
|
</CModalFooter>
|
||||||
</CModal>
|
</CModal>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
.modal {
|
|
||||||
color: #3c4b64;
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import ReactTooltip from 'react-tooltip';
|
||||||
|
import { v4 as createUuid } from 'uuid';
|
||||||
|
import { CButton, CCardBody, CCardHeader, CRow, CCol, CPopover, CButtonClose } from '@coreui/react';
|
||||||
|
import { cilTrash } from '@coreui/icons';
|
||||||
|
import CIcon from '@coreui/icons-react';
|
||||||
|
import { LoadingButton } from 'ucentral-libs';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
|
import styles from './index.module.scss';
|
||||||
|
|
||||||
|
const DeleteButton = ({ t, config, deleteConfig, hideTooltips }) => {
|
||||||
|
const [tooltipId] = useState(createUuid());
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CPopover content={t('common.delete')}>
|
||||||
|
<div className="d-inline">
|
||||||
|
<CButton
|
||||||
|
color="primary"
|
||||||
|
variant="outline"
|
||||||
|
shape="square"
|
||||||
|
size="sm"
|
||||||
|
className="mx-2"
|
||||||
|
data-tip
|
||||||
|
data-for={tooltipId}
|
||||||
|
data-event="click"
|
||||||
|
style={{ width: '33px', height: '30px' }}
|
||||||
|
>
|
||||||
|
<CIcon name="cil-trash" content={cilTrash} size="sm" />
|
||||||
|
</CButton>
|
||||||
|
<ReactTooltip
|
||||||
|
id={tooltipId}
|
||||||
|
place="top"
|
||||||
|
effect="solid"
|
||||||
|
globalEventOff="click"
|
||||||
|
clickable
|
||||||
|
className={[styles.deleteTooltip, 'tooltipRight'].join(' ')}
|
||||||
|
border
|
||||||
|
borderColor="#321fdb"
|
||||||
|
arrowColor="white"
|
||||||
|
overridePosition={({ left, top }) => {
|
||||||
|
const element = document.getElementById(tooltipId);
|
||||||
|
const tooltipWidth = element ? element.offsetWidth : 0;
|
||||||
|
const newLeft = left - tooltipWidth * 0.25;
|
||||||
|
return { top, left: newLeft };
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<CCardHeader color="primary" className={styles.tooltipHeader}>
|
||||||
|
{t('configuration.delete_config')}
|
||||||
|
<CButtonClose
|
||||||
|
style={{ color: 'white' }}
|
||||||
|
onClick={(e) => {
|
||||||
|
e.target.parentNode.parentNode.classList.remove('show');
|
||||||
|
hideTooltips();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</CCardHeader>
|
||||||
|
<CCardBody className="py-1 px-4">
|
||||||
|
<CRow>
|
||||||
|
<CCol>
|
||||||
|
<LoadingButton
|
||||||
|
data-toggle="dropdown"
|
||||||
|
variant="outline"
|
||||||
|
color="danger"
|
||||||
|
label={t('common.confirm')}
|
||||||
|
isLoadingLabel={t('user.deleting')}
|
||||||
|
isLoading={false}
|
||||||
|
action={() => deleteConfig(config.name)}
|
||||||
|
block
|
||||||
|
disabled={false}
|
||||||
|
/>
|
||||||
|
</CCol>
|
||||||
|
</CRow>
|
||||||
|
</CCardBody>
|
||||||
|
</ReactTooltip>
|
||||||
|
</div>
|
||||||
|
</CPopover>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
DeleteButton.propTypes = {
|
||||||
|
t: PropTypes.func.isRequired,
|
||||||
|
config: PropTypes.instanceOf(Object).isRequired,
|
||||||
|
deleteConfig: PropTypes.func.isRequired,
|
||||||
|
hideTooltips: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeleteButton;
|
||||||