foris 6.4.0 → 6.5.0-beta.2ab65be0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bootstrap/Modal.js +10 -7
- package/bootstrap/NumberInput.js +32 -2
- package/common/ActionButtonWithModal/ActionButtonWithModal.js +135 -0
- package/common/ActionButtonWithModal/ActionButtonWithModal.md +39 -0
- package/common/RichTable/RichTable.js +86 -0
- package/common/RichTable/RichTable.md +135 -0
- package/common/RichTable/RichTableBody.js +48 -0
- package/common/RichTable/RichTableHeader.js +96 -0
- package/common/RichTable/RichTablePagination.js +128 -0
- package/common/WiFiSettings/WiFiForm.js +21 -21
- package/common/WiFiSettings/WiFiGuestForm.js +17 -1
- package/common/WiFiSettings/constants.js +8 -5
- package/foris-6.5.0.tgz +0 -0
- package/index.js +2 -1
- package/package.json +2 -1
- package/testUtils/customTestRender.js +1 -1
- package/translations/cs/LC_MESSAGES/forisjs.po +91 -35
- package/translations/da/LC_MESSAGES/forisjs.po +75 -16
- package/translations/de/LC_MESSAGES/forisjs.po +129 -81
- package/translations/el/LC_MESSAGES/forisjs.po +84 -27
- package/translations/en/LC_MESSAGES/forisjs.po +75 -16
- package/translations/es/LC_MESSAGES/forisjs.po +79 -21
- package/translations/fi/LC_MESSAGES/forisjs.po +75 -16
- package/translations/fo/LC_MESSAGES/forisjs.po +75 -16
- package/translations/forisjs.pot +61 -17
- package/translations/fr/LC_MESSAGES/forisjs.po +84 -27
- package/translations/hr/LC_MESSAGES/forisjs.po +75 -16
- package/translations/hu/LC_MESSAGES/forisjs.po +76 -16
- package/translations/it/LC_MESSAGES/forisjs.po +75 -16
- package/translations/ja/LC_MESSAGES/forisjs.po +76 -17
- package/translations/ko/LC_MESSAGES/forisjs.po +75 -16
- package/translations/lt/LC_MESSAGES/forisjs.po +75 -16
- package/translations/nb_NO/LC_MESSAGES/forisjs.po +78 -21
- package/translations/nl/LC_MESSAGES/forisjs.po +78 -22
- package/translations/pl/LC_MESSAGES/forisjs.po +79 -21
- package/translations/pt_BR/LC_MESSAGES/forisjs.po +77 -20
- package/translations/ro/LC_MESSAGES/forisjs.po +75 -16
- package/translations/ru/LC_MESSAGES/forisjs.po +79 -21
- package/translations/sk/LC_MESSAGES/forisjs.po +82 -26
- package/translations/sv/LC_MESSAGES/forisjs.po +78 -21
- package/utils/forisUrls.js +2 -0
- package/common/RebootButton.js +0 -80
- package/foris-6.4.0.tgz +0 -0
- /package/testUtils/{cutomizationContextMock.js → customizationContextMock.js} +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
|
3
|
+
*
|
|
4
|
+
* This is free software, licensed under the GNU General Public License v3.
|
|
5
|
+
* See /LICENSE for more information.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React, { useMemo } from "react";
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
faAngleLeft,
|
|
12
|
+
faAnglesLeft,
|
|
13
|
+
faAngleRight,
|
|
14
|
+
faAnglesRight,
|
|
15
|
+
} from "@fortawesome/free-solid-svg-icons";
|
|
16
|
+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
17
|
+
import propTypes from "prop-types";
|
|
18
|
+
|
|
19
|
+
RichTablePagination.propTypes = {
|
|
20
|
+
table: propTypes.shape({
|
|
21
|
+
getState: propTypes.func.isRequired,
|
|
22
|
+
getCanPreviousPage: propTypes.func.isRequired,
|
|
23
|
+
getCanNextPage: propTypes.func.isRequired,
|
|
24
|
+
firstPage: propTypes.func.isRequired,
|
|
25
|
+
previousPage: propTypes.func.isRequired,
|
|
26
|
+
nextPage: propTypes.func.isRequired,
|
|
27
|
+
lastPage: propTypes.func.isRequired,
|
|
28
|
+
setPageSize: propTypes.func.isRequired,
|
|
29
|
+
getPageCount: propTypes.func.isRequired,
|
|
30
|
+
}).isRequired,
|
|
31
|
+
tablePageSize: propTypes.number,
|
|
32
|
+
allRows: propTypes.number,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function RichTablePagination({ table, tablePageSize, allRows }) {
|
|
36
|
+
const { pagination } = table.getState();
|
|
37
|
+
const prevPagBtnDisabled = !table.getCanPreviousPage();
|
|
38
|
+
const nextPagBtnDisabled = !table.getCanNextPage();
|
|
39
|
+
|
|
40
|
+
const pageSizes = useMemo(() => {
|
|
41
|
+
return [tablePageSize ?? 5, 10, 25].filter(
|
|
42
|
+
(value, index, self) => self.indexOf(value) === index
|
|
43
|
+
);
|
|
44
|
+
}, [tablePageSize]);
|
|
45
|
+
|
|
46
|
+
const renderPaginationButton = (icon, ariaLabel, onClick, disabled) => (
|
|
47
|
+
<li
|
|
48
|
+
className={`page-item ${disabled ? "disabled" : ""}`}
|
|
49
|
+
style={{ cursor: disabled ? "not-allowed" : "pointer" }}
|
|
50
|
+
>
|
|
51
|
+
<button
|
|
52
|
+
type="button"
|
|
53
|
+
className="page-link"
|
|
54
|
+
aria-label={ariaLabel}
|
|
55
|
+
onClick={onClick}
|
|
56
|
+
disabled={disabled}
|
|
57
|
+
>
|
|
58
|
+
<FontAwesomeIcon icon={icon} />
|
|
59
|
+
</button>
|
|
60
|
+
</li>
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<nav
|
|
65
|
+
aria-label={_("Pagination navigation bar")}
|
|
66
|
+
className="d-flex gap-2 justify-content-start align-items-center mx-2 mb-1 text-nowrap"
|
|
67
|
+
>
|
|
68
|
+
<ul className="pagination pagination-sm mb-0">
|
|
69
|
+
{renderPaginationButton(
|
|
70
|
+
faAnglesLeft,
|
|
71
|
+
_("First page"),
|
|
72
|
+
() => table.firstPage(),
|
|
73
|
+
prevPagBtnDisabled
|
|
74
|
+
)}
|
|
75
|
+
{renderPaginationButton(
|
|
76
|
+
faAngleLeft,
|
|
77
|
+
_("Previous page"),
|
|
78
|
+
() => table.previousPage(),
|
|
79
|
+
prevPagBtnDisabled
|
|
80
|
+
)}
|
|
81
|
+
{renderPaginationButton(
|
|
82
|
+
faAngleRight,
|
|
83
|
+
_("Next page"),
|
|
84
|
+
() => table.nextPage(),
|
|
85
|
+
nextPagBtnDisabled
|
|
86
|
+
)}
|
|
87
|
+
{renderPaginationButton(
|
|
88
|
+
faAnglesRight,
|
|
89
|
+
_("Last page"),
|
|
90
|
+
() => table.lastPage(),
|
|
91
|
+
nextPagBtnDisabled
|
|
92
|
+
)}
|
|
93
|
+
</ul>
|
|
94
|
+
<span>
|
|
95
|
+
{_("Page")}
|
|
96
|
+
<span className="fw-bold">
|
|
97
|
+
{pagination.pageIndex + 1}
|
|
98
|
+
{_("of")}
|
|
99
|
+
{table.getPageCount().toLocaleString()}
|
|
100
|
+
</span>
|
|
101
|
+
</span>
|
|
102
|
+
<div
|
|
103
|
+
className="vr mx-1 align-self-center"
|
|
104
|
+
style={{ height: "1.5rem" }}
|
|
105
|
+
/>
|
|
106
|
+
<span>{_("Rows per page:")}</span>
|
|
107
|
+
<select
|
|
108
|
+
className="form-select form-select-sm w-auto"
|
|
109
|
+
aria-label={_("Select rows per page")}
|
|
110
|
+
value={pagination.pageSize}
|
|
111
|
+
onChange={(e) => {
|
|
112
|
+
table.setPageSize(Number(e.target.value));
|
|
113
|
+
}}
|
|
114
|
+
>
|
|
115
|
+
{pageSizes.map((pageSize) => (
|
|
116
|
+
<option key={pageSize} value={pageSize}>
|
|
117
|
+
{pageSize}
|
|
118
|
+
</option>
|
|
119
|
+
))}
|
|
120
|
+
<option key={allRows} value={allRows}>
|
|
121
|
+
{_("All")}
|
|
122
|
+
</option>
|
|
123
|
+
</select>
|
|
124
|
+
</nav>
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export default RichTablePagination;
|
|
@@ -9,7 +9,7 @@ import React from "react";
|
|
|
9
9
|
|
|
10
10
|
import PropTypes from "prop-types";
|
|
11
11
|
|
|
12
|
-
import { HELP_TEXTS, HTMODES,
|
|
12
|
+
import { HELP_TEXTS, HTMODES, BANDS, ENCRYPTIONMODES } from "./constants";
|
|
13
13
|
import WifiGuestForm from "./WiFiGuestForm";
|
|
14
14
|
import WiFiQRCode from "./WiFiQRCode";
|
|
15
15
|
import PasswordInput from "../../bootstrap/PasswordInput";
|
|
@@ -60,7 +60,7 @@ DeviceForm.propTypes = {
|
|
|
60
60
|
SSID: PropTypes.string.isRequired,
|
|
61
61
|
password: PropTypes.string.isRequired,
|
|
62
62
|
hidden: PropTypes.bool.isRequired,
|
|
63
|
-
|
|
63
|
+
band: PropTypes.string.isRequired,
|
|
64
64
|
htmode: PropTypes.string.isRequired,
|
|
65
65
|
channel: PropTypes.string.isRequired,
|
|
66
66
|
guest_wifi: PropTypes.object.isRequired,
|
|
@@ -155,26 +155,26 @@ function DeviceForm({
|
|
|
155
155
|
/>
|
|
156
156
|
|
|
157
157
|
<RadioSet
|
|
158
|
-
name={`
|
|
159
|
-
label="
|
|
160
|
-
choices={
|
|
161
|
-
value={formData.
|
|
162
|
-
helpText={HELP_TEXTS.
|
|
158
|
+
name={`band-${deviceID}`}
|
|
159
|
+
label={_("Band")}
|
|
160
|
+
choices={getBandChoices(formData)}
|
|
161
|
+
value={formData.band}
|
|
162
|
+
helpText={HELP_TEXTS.band}
|
|
163
163
|
inline
|
|
164
164
|
onChange={setFormValue((value) => {
|
|
165
|
-
//
|
|
166
|
-
const
|
|
167
|
-
|
|
165
|
+
// Find the selected band
|
|
166
|
+
const selectedBand = bnds.find(
|
|
167
|
+
(band) => band.band === value
|
|
168
|
+
);
|
|
169
|
+
// Get the last item in the available HT modes for the selected band
|
|
170
|
+
const bestHtmode =
|
|
171
|
+
selectedBand.available_htmodes.slice(-1)[0];
|
|
168
172
|
return {
|
|
169
173
|
devices: {
|
|
170
174
|
[deviceIndex]: {
|
|
171
|
-
|
|
175
|
+
band: { $set: value },
|
|
172
176
|
channel: { $set: "0" },
|
|
173
|
-
htmode: {
|
|
174
|
-
$set:
|
|
175
|
-
// Set HT mode depending on checked frequency
|
|
176
|
-
value === "11a" ? best5 : best2,
|
|
177
|
-
},
|
|
177
|
+
htmode: { $set: bestHtmode },
|
|
178
178
|
},
|
|
179
179
|
},
|
|
180
180
|
};
|
|
@@ -263,7 +263,7 @@ function getChannelChoices(device) {
|
|
|
263
263
|
};
|
|
264
264
|
|
|
265
265
|
device.available_bands.forEach((availableBand) => {
|
|
266
|
-
if (availableBand.
|
|
266
|
+
if (availableBand.band !== device.band) return;
|
|
267
267
|
|
|
268
268
|
availableBand.available_channels.forEach((availableChannel) => {
|
|
269
269
|
channelChoices[availableChannel.number.toString()] = `
|
|
@@ -282,7 +282,7 @@ function getHtmodeChoices(device) {
|
|
|
282
282
|
const htmodeChoices = {};
|
|
283
283
|
|
|
284
284
|
device.available_bands.forEach((availableBand) => {
|
|
285
|
-
if (availableBand.
|
|
285
|
+
if (availableBand.band !== device.band) return;
|
|
286
286
|
|
|
287
287
|
availableBand.available_htmodes.forEach((availableHtmod) => {
|
|
288
288
|
htmodeChoices[availableHtmod] = HTMODES[availableHtmod];
|
|
@@ -291,10 +291,10 @@ function getHtmodeChoices(device) {
|
|
|
291
291
|
return htmodeChoices;
|
|
292
292
|
}
|
|
293
293
|
|
|
294
|
-
function
|
|
294
|
+
function getBandChoices(device) {
|
|
295
295
|
return device.available_bands.map((availableBand) => ({
|
|
296
|
-
label:
|
|
297
|
-
value: availableBand.
|
|
296
|
+
label: `${BANDS[availableBand.band]} GHz`,
|
|
297
|
+
value: availableBand.band,
|
|
298
298
|
}));
|
|
299
299
|
}
|
|
300
300
|
|
|
@@ -9,9 +9,10 @@ import React from "react";
|
|
|
9
9
|
|
|
10
10
|
import PropTypes from "prop-types";
|
|
11
11
|
|
|
12
|
-
import { HELP_TEXTS } from "./constants";
|
|
12
|
+
import { HELP_TEXTS, ENCRYPTIONMODES } from "./constants";
|
|
13
13
|
import WiFiQRCode from "./WiFiQRCode";
|
|
14
14
|
import PasswordInput from "../../bootstrap/PasswordInput";
|
|
15
|
+
import Select from "../../bootstrap/Select";
|
|
15
16
|
import Switch from "../../bootstrap/Switch";
|
|
16
17
|
import TextInput from "../../bootstrap/TextInput";
|
|
17
18
|
|
|
@@ -21,6 +22,7 @@ WifiGuestForm.propTypes = {
|
|
|
21
22
|
SSID: PropTypes.string.isRequired,
|
|
22
23
|
password: PropTypes.string.isRequired,
|
|
23
24
|
enabled: PropTypes.bool.isRequired,
|
|
25
|
+
encryption: PropTypes.string.isRequired,
|
|
24
26
|
}),
|
|
25
27
|
formErrors: PropTypes.shape({
|
|
26
28
|
SSID: PropTypes.string,
|
|
@@ -89,6 +91,20 @@ export default function WifiGuestForm({
|
|
|
89
91
|
}))}
|
|
90
92
|
{...props}
|
|
91
93
|
/>
|
|
94
|
+
<Select
|
|
95
|
+
label={_("Encryption")}
|
|
96
|
+
choices={ENCRYPTIONMODES}
|
|
97
|
+
helpText={HELP_TEXTS.wpa3}
|
|
98
|
+
value={formData.encryption}
|
|
99
|
+
onChange={setFormValue((value) => ({
|
|
100
|
+
devices: {
|
|
101
|
+
[formData.id]: {
|
|
102
|
+
guest_wifi: { encryption: { $set: value } },
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
}))}
|
|
106
|
+
{...props}
|
|
107
|
+
/>
|
|
92
108
|
</>
|
|
93
109
|
) : null}
|
|
94
110
|
</>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C) 2019-
|
|
2
|
+
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
|
3
3
|
*
|
|
4
4
|
* This is free software, licensed under the GNU General Public License v3.
|
|
5
5
|
* See /LICENSE for more information.
|
|
@@ -12,15 +12,18 @@ export const HTMODES = {
|
|
|
12
12
|
VHT20: _("802.11ac - 20 MHz wide channel"),
|
|
13
13
|
VHT40: _("802.11ac - 40 MHz wide channel"),
|
|
14
14
|
VHT80: _("802.11ac - 80 MHz wide channel"),
|
|
15
|
+
VHT80_80: _("802.11ac - 80+80 MHz wide channel"),
|
|
15
16
|
VHT160: _("802.11ac - 160 MHz wide channel"),
|
|
16
17
|
HE20: _("802.11ax - 20 MHz wide channel"),
|
|
17
18
|
HE40: _("802.11ax - 40 MHz wide channel"),
|
|
18
19
|
HE80: _("802.11ax - 80 MHz wide channel"),
|
|
20
|
+
HE80_80: _("802.11ax - 80+80 MHz wide channel"),
|
|
19
21
|
HE160: _("802.11ax - 160 MHz wide channel"),
|
|
20
22
|
};
|
|
21
|
-
export const
|
|
22
|
-
"
|
|
23
|
-
"
|
|
23
|
+
export const BANDS = {
|
|
24
|
+
"2g": "2.4",
|
|
25
|
+
"5g": "5",
|
|
26
|
+
"6g": "6",
|
|
24
27
|
};
|
|
25
28
|
export const ENCRYPTIONMODES = {
|
|
26
29
|
WPA3: _("WPA3 only"),
|
|
@@ -37,7 +40,7 @@ export const HELP_TEXTS = {
|
|
|
37
40
|
hidden: _(
|
|
38
41
|
"If set, network is not visible when scanning for available networks."
|
|
39
42
|
),
|
|
40
|
-
|
|
43
|
+
band: _(
|
|
41
44
|
"The 2.4 GHz band is more widely supported by clients, but tends to have more interference. The 5 GHz band is a newer standard and may not be supported by all your devices. It usually has less interference, but the signal does not carry so well indoors."
|
|
42
45
|
),
|
|
43
46
|
htmode: _(
|
package/foris-6.5.0.tgz
ADDED
|
Binary file
|
package/index.js
CHANGED
|
@@ -40,9 +40,10 @@ export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
|
|
|
40
40
|
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
|
|
41
41
|
|
|
42
42
|
// Common
|
|
43
|
-
export { default as
|
|
43
|
+
export { default as ActionButtonWithModal } from "./common/ActionButtonWithModal/ActionButtonWithModal";
|
|
44
44
|
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
|
|
45
45
|
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
|
|
46
|
+
export { default as RichTable } from "./common/RichTable/RichTable";
|
|
46
47
|
// Form
|
|
47
48
|
export { default as ForisForm } from "./form/components/ForisForm";
|
|
48
49
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "foris",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.5.0-beta.2ab65be0",
|
|
4
4
|
"description": "Foris JS library is a set of components and utils for reForis application and plugins.",
|
|
5
5
|
"author": "CZ.NIC, z.s.p.o.",
|
|
6
6
|
"repository": {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
|
19
19
|
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
|
20
20
|
"@fortawesome/react-fontawesome": "^0.2.2",
|
|
21
|
+
"@tanstack/react-table": "^8.20.5",
|
|
21
22
|
"axios": "^1.7.2",
|
|
22
23
|
"immutability-helper": "^3.1.1",
|
|
23
24
|
"moment": "^2.30.1",
|
|
@@ -14,7 +14,7 @@ import { render } from "@testing-library/react";
|
|
|
14
14
|
import PropTypes from "prop-types";
|
|
15
15
|
|
|
16
16
|
import { AlertContextMock } from "./alertContextMock";
|
|
17
|
-
import { CustomizationContextMock } from "./
|
|
17
|
+
import { CustomizationContextMock } from "./customizationContextMock";
|
|
18
18
|
|
|
19
19
|
Wrapper.propTypes = {
|
|
20
20
|
children: PropTypes.oneOfType([
|
|
@@ -7,16 +7,17 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: PROJECT VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
|
10
|
-
"POT-Creation-Date: 2024-
|
|
11
|
-
"PO-Revision-Date: 2024-
|
|
12
|
-
"Last-Translator:
|
|
10
|
+
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
|
11
|
+
"PO-Revision-Date: 2024-11-15 06:01+0000\n"
|
|
12
|
+
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
|
13
|
+
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
|
|
14
|
+
">\n"
|
|
13
15
|
"Language: cs\n"
|
|
14
|
-
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
|
|
15
|
-
"js/cs/>\n"
|
|
16
|
-
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
|
17
16
|
"MIME-Version: 1.0\n"
|
|
18
17
|
"Content-Type: text/plain; charset=utf-8\n"
|
|
19
18
|
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
+
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
|
20
|
+
"X-Generator: Weblate 5.9-dev\n"
|
|
20
21
|
"Generated-By: Babel 2.16.0\n"
|
|
21
22
|
|
|
22
23
|
#: src/api/utils.js:61
|
|
@@ -35,42 +36,86 @@ msgstr "Neobdržena žádná odezva."
|
|
|
35
36
|
msgid "An unknown API error occurred."
|
|
36
37
|
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
|
|
37
38
|
|
|
38
|
-
#: src/bootstrap/Alert.js:
|
|
39
|
+
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
|
39
40
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
|
40
41
|
msgid "Close"
|
|
41
42
|
msgstr "Zavřít"
|
|
42
43
|
|
|
43
|
-
#: src/bootstrap/CopyInput.js:
|
|
44
|
+
#: src/bootstrap/CopyInput.js:56
|
|
44
45
|
msgid "Copied!"
|
|
45
46
|
msgstr "Zkopírováno!"
|
|
46
47
|
|
|
47
|
-
#: src/bootstrap/CopyInput.js:
|
|
48
|
+
#: src/bootstrap/CopyInput.js:56
|
|
48
49
|
msgid "Copy"
|
|
49
50
|
msgstr "Kopírovat"
|
|
50
51
|
|
|
51
|
-
#: src/common/
|
|
52
|
-
msgid "
|
|
53
|
-
msgstr "
|
|
54
|
-
|
|
55
|
-
#: src/common/RebootButton.js:51
|
|
56
|
-
msgid "Reboot"
|
|
57
|
-
msgstr "Restartovat"
|
|
52
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
|
53
|
+
msgid "Action successful."
|
|
54
|
+
msgstr "Akce úspěšná."
|
|
58
55
|
|
|
59
|
-
#: src/common/
|
|
60
|
-
msgid "
|
|
61
|
-
msgstr "
|
|
56
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
|
57
|
+
msgid "Action failed."
|
|
58
|
+
msgstr "Akce se nezdařila."
|
|
62
59
|
|
|
63
|
-
#: src/common/
|
|
64
|
-
msgid "Are you sure you want to restart the router?"
|
|
65
|
-
msgstr "Opravdu chcete router restartovat?"
|
|
66
|
-
|
|
67
|
-
#: src/common/RebootButton.js:71
|
|
60
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
|
68
61
|
msgid "Cancel"
|
|
69
62
|
msgstr "Zrušit"
|
|
70
63
|
|
|
71
|
-
#: src/common/
|
|
72
|
-
msgid "Confirm
|
|
73
|
-
msgstr "Potvrdit
|
|
64
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
|
65
|
+
msgid "Confirm"
|
|
66
|
+
msgstr "Potvrdit"
|
|
67
|
+
|
|
68
|
+
#: src/common/RichTable/RichTableHeader.js:29
|
|
69
|
+
msgid "Sort ascending"
|
|
70
|
+
msgstr "Seřadit vzestupně"
|
|
71
|
+
|
|
72
|
+
#: src/common/RichTable/RichTableHeader.js:30
|
|
73
|
+
msgid "Sort descending"
|
|
74
|
+
msgstr "Seřadit sestupně"
|
|
75
|
+
|
|
76
|
+
#: src/common/RichTable/RichTableHeader.js:31
|
|
77
|
+
msgid "Clear sort"
|
|
78
|
+
msgstr "Vyčistit řazení"
|
|
79
|
+
|
|
80
|
+
#: src/common/RichTable/RichTablePagination.js:65
|
|
81
|
+
msgid "Pagination navigation bar"
|
|
82
|
+
msgstr "Navigační pruh stránkování"
|
|
83
|
+
|
|
84
|
+
#: src/common/RichTable/RichTablePagination.js:71
|
|
85
|
+
msgid "First page"
|
|
86
|
+
msgstr "První stránka"
|
|
87
|
+
|
|
88
|
+
#: src/common/RichTable/RichTablePagination.js:77
|
|
89
|
+
msgid "Previous page"
|
|
90
|
+
msgstr "Předchozí stránka"
|
|
91
|
+
|
|
92
|
+
#: src/common/RichTable/RichTablePagination.js:83
|
|
93
|
+
msgid "Next page"
|
|
94
|
+
msgstr "Následující stránka"
|
|
95
|
+
|
|
96
|
+
#: src/common/RichTable/RichTablePagination.js:89
|
|
97
|
+
msgid "Last page"
|
|
98
|
+
msgstr "Poslední stránka"
|
|
99
|
+
|
|
100
|
+
#: src/common/RichTable/RichTablePagination.js:95
|
|
101
|
+
msgid "Page"
|
|
102
|
+
msgstr "Stránka"
|
|
103
|
+
|
|
104
|
+
#: src/common/RichTable/RichTablePagination.js:98
|
|
105
|
+
msgid "of"
|
|
106
|
+
msgstr "z"
|
|
107
|
+
|
|
108
|
+
#: src/common/RichTable/RichTablePagination.js:106
|
|
109
|
+
msgid "Rows per page:"
|
|
110
|
+
msgstr "Řádků na stránku:"
|
|
111
|
+
|
|
112
|
+
#: src/common/RichTable/RichTablePagination.js:109
|
|
113
|
+
msgid "Select rows per page"
|
|
114
|
+
msgstr "Vyberte řádky na stránku"
|
|
115
|
+
|
|
116
|
+
#: src/common/RichTable/RichTablePagination.js:121
|
|
117
|
+
msgid "All"
|
|
118
|
+
msgstr "Vše"
|
|
74
119
|
|
|
75
120
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
|
76
121
|
msgid "An error occurred during resetting Wi-Fi settings."
|
|
@@ -91,9 +136,9 @@ msgid ""
|
|
|
91
136
|
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
|
92
137
|
"and restore the default values."
|
|
93
138
|
msgstr ""
|
|
94
|
-
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit "
|
|
95
|
-
"
|
|
96
|
-
"
|
|
139
|
+
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit nastavení "
|
|
140
|
+
"Wi-Fi. Je třeba upozornit, že se tím odstraní stávající nastavení Wi-Fi a "
|
|
141
|
+
"obnoví se výchozí hodnoty."
|
|
97
142
|
|
|
98
143
|
#: src/common/WiFiSettings/WiFiForm.js:97
|
|
99
144
|
msgid "Wi-Fi ${deviceID + 1}"
|
|
@@ -129,7 +174,7 @@ msgid ""
|
|
|
129
174
|
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
|
130
175
|
"Management Frame Protection."
|
|
131
176
|
msgstr ""
|
|
132
|
-
"
|
|
177
|
+
"Pokud máte problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
|
|
133
178
|
"vypnout Management Frame Protection."
|
|
134
179
|
|
|
135
180
|
#: src/common/WiFiSettings/WiFiForm.js:262
|
|
@@ -180,7 +225,7 @@ msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
|
|
|
180
225
|
#: src/common/WiFiSettings/WiFiSettings.js:91
|
|
181
226
|
#: src/common/WiFiSettings/WiFiSettings.js:110
|
|
182
227
|
msgid "Password must not contain more than 63 symbols"
|
|
183
|
-
msgstr "Heslo
|
|
228
|
+
msgstr "Heslo nemůže obsahovat více než 63 znaků"
|
|
184
229
|
|
|
185
230
|
#: src/common/WiFiSettings/constants.js:9
|
|
186
231
|
msgid "Disabled"
|
|
@@ -317,11 +362,11 @@ msgstr ""
|
|
|
317
362
|
|
|
318
363
|
#: src/form/components/SubmitButton.js:32
|
|
319
364
|
msgid "Updating"
|
|
320
|
-
msgstr "
|
|
365
|
+
msgstr "Aktualizuje se"
|
|
321
366
|
|
|
322
367
|
#: src/form/components/SubmitButton.js:35
|
|
323
368
|
msgid "Load settings"
|
|
324
|
-
msgstr "
|
|
369
|
+
msgstr "Načíst nastavení"
|
|
325
370
|
|
|
326
371
|
#: src/form/components/SubmitButton.js:38
|
|
327
372
|
msgid "Save"
|
|
@@ -353,7 +398,7 @@ msgstr "Toto není platné doménové jméno."
|
|
|
353
398
|
|
|
354
399
|
#: src/utils/validations.js:18
|
|
355
400
|
msgid "This is not a valid DUID."
|
|
356
|
-
msgstr "
|
|
401
|
+
msgstr "Toto není platné DUID."
|
|
357
402
|
|
|
358
403
|
#: src/utils/validations.js:19
|
|
359
404
|
msgid "This is not a valid MAC address."
|
|
@@ -389,3 +434,14 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
|
|
|
389
434
|
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
|
|
390
435
|
#~ " "
|
|
391
436
|
|
|
437
|
+
#~ msgid "Reboot request failed."
|
|
438
|
+
#~ msgstr "Vyžadován restart."
|
|
439
|
+
|
|
440
|
+
#~ msgid "Reboot"
|
|
441
|
+
#~ msgstr "Restartovat"
|
|
442
|
+
|
|
443
|
+
#~ msgid "Warning!"
|
|
444
|
+
#~ msgstr "Varování!"
|
|
445
|
+
|
|
446
|
+
#~ msgid "Are you sure you want to restart the router?"
|
|
447
|
+
#~ msgstr "Opravdu chcete router restartovat?"
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: PROJECT VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
|
10
|
-
"POT-Creation-Date: 2024-
|
|
10
|
+
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
|
11
11
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
|
12
12
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
13
13
|
"Language: da\n"
|
|
@@ -34,41 +34,85 @@ msgstr ""
|
|
|
34
34
|
msgid "An unknown API error occurred."
|
|
35
35
|
msgstr ""
|
|
36
36
|
|
|
37
|
-
#: src/bootstrap/Alert.js:
|
|
37
|
+
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
|
38
38
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
|
39
39
|
msgid "Close"
|
|
40
40
|
msgstr ""
|
|
41
41
|
|
|
42
|
-
#: src/bootstrap/CopyInput.js:
|
|
42
|
+
#: src/bootstrap/CopyInput.js:56
|
|
43
43
|
msgid "Copied!"
|
|
44
44
|
msgstr ""
|
|
45
45
|
|
|
46
|
-
#: src/bootstrap/CopyInput.js:
|
|
46
|
+
#: src/bootstrap/CopyInput.js:56
|
|
47
47
|
msgid "Copy"
|
|
48
48
|
msgstr ""
|
|
49
49
|
|
|
50
|
-
#: src/common/
|
|
51
|
-
msgid "
|
|
50
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
|
51
|
+
msgid "Action successful."
|
|
52
52
|
msgstr ""
|
|
53
53
|
|
|
54
|
-
#: src/common/
|
|
55
|
-
msgid "
|
|
54
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
|
55
|
+
msgid "Action failed."
|
|
56
56
|
msgstr ""
|
|
57
57
|
|
|
58
|
-
#: src/common/
|
|
59
|
-
msgid "
|
|
58
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
|
59
|
+
msgid "Cancel"
|
|
60
60
|
msgstr ""
|
|
61
61
|
|
|
62
|
-
#: src/common/
|
|
63
|
-
msgid "
|
|
62
|
+
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
|
63
|
+
msgid "Confirm"
|
|
64
64
|
msgstr ""
|
|
65
65
|
|
|
66
|
-
#: src/common/
|
|
67
|
-
msgid "
|
|
66
|
+
#: src/common/RichTable/RichTableHeader.js:29
|
|
67
|
+
msgid "Sort ascending"
|
|
68
|
+
msgstr ""
|
|
69
|
+
|
|
70
|
+
#: src/common/RichTable/RichTableHeader.js:30
|
|
71
|
+
msgid "Sort descending"
|
|
72
|
+
msgstr ""
|
|
73
|
+
|
|
74
|
+
#: src/common/RichTable/RichTableHeader.js:31
|
|
75
|
+
msgid "Clear sort"
|
|
76
|
+
msgstr ""
|
|
77
|
+
|
|
78
|
+
#: src/common/RichTable/RichTablePagination.js:65
|
|
79
|
+
msgid "Pagination navigation bar"
|
|
80
|
+
msgstr ""
|
|
81
|
+
|
|
82
|
+
#: src/common/RichTable/RichTablePagination.js:71
|
|
83
|
+
msgid "First page"
|
|
84
|
+
msgstr ""
|
|
85
|
+
|
|
86
|
+
#: src/common/RichTable/RichTablePagination.js:77
|
|
87
|
+
msgid "Previous page"
|
|
88
|
+
msgstr ""
|
|
89
|
+
|
|
90
|
+
#: src/common/RichTable/RichTablePagination.js:83
|
|
91
|
+
msgid "Next page"
|
|
92
|
+
msgstr ""
|
|
93
|
+
|
|
94
|
+
#: src/common/RichTable/RichTablePagination.js:89
|
|
95
|
+
msgid "Last page"
|
|
96
|
+
msgstr ""
|
|
97
|
+
|
|
98
|
+
#: src/common/RichTable/RichTablePagination.js:95
|
|
99
|
+
msgid "Page"
|
|
100
|
+
msgstr ""
|
|
101
|
+
|
|
102
|
+
#: src/common/RichTable/RichTablePagination.js:98
|
|
103
|
+
msgid "of"
|
|
104
|
+
msgstr ""
|
|
105
|
+
|
|
106
|
+
#: src/common/RichTable/RichTablePagination.js:106
|
|
107
|
+
msgid "Rows per page:"
|
|
68
108
|
msgstr ""
|
|
69
109
|
|
|
70
|
-
#: src/common/
|
|
71
|
-
msgid "
|
|
110
|
+
#: src/common/RichTable/RichTablePagination.js:109
|
|
111
|
+
msgid "Select rows per page"
|
|
112
|
+
msgstr ""
|
|
113
|
+
|
|
114
|
+
#: src/common/RichTable/RichTablePagination.js:121
|
|
115
|
+
msgid "All"
|
|
72
116
|
msgstr ""
|
|
73
117
|
|
|
74
118
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
|
@@ -425,3 +469,18 @@ msgstr ""
|
|
|
425
469
|
#~ "channel."
|
|
426
470
|
#~ msgstr ""
|
|
427
471
|
|
|
472
|
+
#~ msgid "Reboot request failed."
|
|
473
|
+
#~ msgstr ""
|
|
474
|
+
|
|
475
|
+
#~ msgid "Reboot"
|
|
476
|
+
#~ msgstr ""
|
|
477
|
+
|
|
478
|
+
#~ msgid "Warning!"
|
|
479
|
+
#~ msgstr ""
|
|
480
|
+
|
|
481
|
+
#~ msgid "Are you sure you want to restart the router?"
|
|
482
|
+
#~ msgstr ""
|
|
483
|
+
|
|
484
|
+
#~ msgid "Confirm reboot"
|
|
485
|
+
#~ msgstr ""
|
|
486
|
+
|