1
0
mirror of https://gitlab.nic.cz/turris/reforis/foris-js.git synced 2025-06-16 13:46:16 +02:00

Compare commits

..

1 Commits

Author SHA1 Message Date
cdf39345f1 WiFi API update
Deprecated option `hwmode=11g/11a` was replaced by `band=2g/5g/6g`
2024-10-17 12:11:16 +02:00
60 changed files with 5222 additions and 7649 deletions

View File

@ -8,63 +8,6 @@ and this project adheres to
## [Unreleased]
## [6.7.0] - 2025-03-11
### Added
- Added encryption property to guest WiFi settings in tests
- Added global fuzzy search and columns visibility to RichTable
### Changed
- Made thead of RichTable lighter
- Updated dependencies in package.json to latest versions
- Enhanced ActionButtonWithModal to support dynamic methods
- NPM audit fix
## [6.6.2] - 2025-02-20
### Changed
- Enhanced SubmitButton component to accept a custom label prop
- Refactored RichTable component to remove forwardRef and simplify data handling
## [6.6.1] - 2025-02-17
### Changed
- Refactored RichTable component to use forwardRef
## [6.6.0] - 2025-02-07
### Added
- Added & updated Weblate translations
- Added Wi-Fi and LAN settings URLs to ForisURLs
- Added Wi-Fi modes VHT/HE 80+80
- Added encryption selection to WiFiGuestForm
- Added optional close button to ModalHeader component
### Changed
- Updated Wi-Fi API
- Enhanced NumberInput component with keyboard & touch accessibility
- Refactored pagination condition in RichTable component
## [6.5.0] - 2024-11-13
### Added
- Added & updated Weblate translations
- Added RichTable component with pagination and sorting
- Added @tanstack/react-table v8.20.5 to dependencies
### Changed
- Updated documentation
- Replaced RebootButton with ActionButtonWithModal component
- Fixed import path for CustomizationContextMock in customTestRender.js
## [6.4.0] - 2024-10-02
### Changed
@ -462,12 +405,7 @@ and this project adheres to
## [0.0.7] - 2019-09-02
[unreleased]:
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.7.0...dev
[6.7.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.6.2...v6.7.0
[6.6.2]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.6.1...v6.6.2
[6.6.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.6.0...v6.6.1
[6.6.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.5.0...v6.6.0
[6.5.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.4.0...v6.5.0
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.4.0...dev
[6.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.3.0...v6.4.0
[6.3.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.1...v6.3.0
[6.2.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.0...v6.2.1

View File

@ -21,7 +21,10 @@ module.exports = {
testPathIgnorePatterns: ["/node_modules/", "/__fixtures__/", "/dist/"],
testEnvironment: "jsdom",
verbose: false,
setupFilesAfterEnv: ["<rootDir>/src/testUtils/setup"],
setupFilesAfterEnv: [
"@testing-library/react/cleanup-after-each",
"<rootDir>/src/testUtils/setup",
],
globals: {
TZ: "utc",
},

8496
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "foris",
"version": "6.7.0",
"version": "6.4.0",
"description": "Foris JS library is a set of components and utils for reForis application and plugins.",
"author": "CZ.NIC, z.s.p.o.",
"repository": {
@ -14,18 +14,16 @@
"license": "GPL-3.0",
"main": "./src/index.js",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.7.2",
"@fortawesome/free-regular-svg-icons": "^6.7.2",
"@fortawesome/free-solid-svg-icons": "^6.7.2",
"@fortawesome/fontawesome-svg-core": "^6.6.0",
"@fortawesome/free-regular-svg-icons": "^6.6.0",
"@fortawesome/free-solid-svg-icons": "^6.6.0",
"@fortawesome/react-fontawesome": "^0.2.2",
"@tanstack/match-sorter-utils": "^8.19.4",
"@tanstack/react-table": "^8.21.2",
"axios": "^1.7.9",
"axios": "^1.7.2",
"immutability-helper": "^3.1.1",
"moment": "^2.30.1",
"qrcode.react": "^4.2.0",
"react-datetime": "^3.3.1",
"react-uid": "^2.4.0"
"qrcode.react": "^3.1.0",
"react-datetime": "^3.2.0",
"react-uid": "^2.3.3"
},
"peerDependencies": {
"bootstrap": "^5.3.3",
@ -35,32 +33,32 @@
"react-router-dom": "^5.1.2"
},
"devDependencies": {
"@babel/cli": "^7.26.4",
"@babel/core": "^7.26.9",
"@babel/plugin-transform-runtime": "^7.26.9",
"@babel/preset-env": "^7.26.9",
"@babel/preset-react": "^7.26.3",
"@testing-library/react": "^12.1.5",
"babel-loader": "^9.2.1",
"@babel/cli": "^7.24.7",
"@babel/core": "^7.24.7",
"@babel/plugin-transform-runtime": "^7.24.7",
"@babel/preset-env": "^7.24.7",
"@babel/preset-react": "^7.24.7",
"@testing-library/react": "^8.0.9",
"babel-loader": "^8.1.0",
"babel-polyfill": "^6.26.0",
"bootstrap": "^5.3.3",
"css-loader": "^7.1.2",
"css-loader": "^5.2.4",
"eslint": "^8.57.0",
"eslint-config-reforis": "^2.2.1",
"eslint-config-reforis": "^2.1.1",
"file-loader": "^6.0.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jest-mock-axios": "^4.8.0",
"moment-timezone": "^0.5.47",
"prettier": "^3.5.3",
"jest-mock-axios": "^4.7.3",
"moment-timezone": "^0.5.45",
"prettier": "^3.3.2",
"prop-types": "15.8.1",
"react": "16.9.0",
"react-dom": "16.9.0",
"react-router-dom": "^5.1.2",
"react-styleguidist": "^12.0.1",
"snapshot-diff": "^0.10.0",
"style-loader": "^4.0.0",
"webpack": "^5.98.0"
"style-loader": "^1.2.1",
"webpack": "^5.92.1"
},
"scripts": {
"lint": "eslint src",

View File

@ -34,14 +34,12 @@ const Input = forwardRef(
return (
<div className="mb-3">
{label && (
<label
className={`form-label ${labelClassName || ""}`.trim()}
htmlFor={uid}
>
{label}
</label>
)}
<div className={`input-group ${groupClassName || ""}`.trim()}>
<input
className={`form-control ${inputClassName}`.trim()}
@ -67,7 +65,7 @@ Input.displayName = "Input";
Input.propTypes = {
type: PropTypes.string.isRequired,
label: PropTypes.string,
label: PropTypes.string.isRequired,
helpText: PropTypes.string,
error: PropTypes.string,
className: PropTypes.string,

View File

@ -88,21 +88,18 @@ export function Modal({ shown, setShown, scrollable, size, children }) {
ModalHeader.propTypes = {
setShown: PropTypes.func.isRequired,
title: PropTypes.string.isRequired,
showCloseButton: PropTypes.bool,
};
export function ModalHeader({ setShown, title, showCloseButton = true }) {
export function ModalHeader({ setShown, title }) {
return (
<div className="modal-header">
<h1 className="modal-title fs-5">{title}</h1>
{showCloseButton && (
<button
type="button"
className="btn-close"
onClick={() => setShown(false)}
aria-label={_("Close")}
/>
)}
</div>
);
}

View File

@ -50,20 +50,6 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
-1
);
function handleKeyDown(event, enableFunction) {
if (event.key === "Enter" || event.key === " ") {
event.preventDefault();
enableFunction(true);
}
}
function handleKeyUp(event, enableFunction) {
if (event.key === "Enter" || event.key === " ") {
event.preventDefault();
enableFunction(false);
}
}
return (
<Input type="number" onChange={onChange} value={value} {...props}>
{inlineText && (
@ -74,15 +60,7 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
className="btn btn-outline-secondary"
onMouseDown={() => enableIncrease(true)}
onMouseUp={() => enableIncrease(false)}
onMouseLeave={() => enableIncrease(false)}
onTouchStart={() => enableIncrease(true)}
onTouchEnd={() => enableIncrease(false)}
onTouchCancel={() => enableIncrease(false)}
onKeyDown={(event) => handleKeyDown(event, enableIncrease)}
onKeyUp={(event) => handleKeyUp(event, enableIncrease)}
onBlur={() => enableIncrease(false)}
title={_("Increase value. Hint: Hold to increase faster.")}
aria-label={_("Increase value. Hint: Hold to increase faster.")}
aria-label="Increase"
>
<FontAwesomeIcon icon={faPlus} />
</button>
@ -91,15 +69,7 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
className="btn btn-outline-secondary"
onMouseDown={() => enableDecrease(true)}
onMouseUp={() => enableDecrease(false)}
onMouseLeave={() => enableDecrease(false)}
onTouchStart={() => enableDecrease(true)}
onTouchEnd={() => enableDecrease(false)}
onTouchCancel={() => enableDecrease(false)}
onKeyDown={(event) => handleKeyDown(event, enableDecrease)}
onKeyUp={(event) => handleKeyUp(event, enableDecrease)}
onBlur={() => enableDecrease(false)}
title={_("Decrease value. Hint: Hold to decrease faster.")}
aria-label={_("Decrease value. Hint: Hold to decrease faster.")}
aria-label="Decrease"
>
<FontAwesomeIcon icon={faMinus} />
</button>

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
@ -7,7 +7,7 @@
import React from "react";
import { render, fireEvent, getByLabelText, waitFor } from "customTestRender";
import { render, fireEvent, getByLabelText, wait } from "customTestRender";
import NumberInput from "../NumberInput";
@ -32,17 +32,17 @@ describe("<NumberInput/>", () => {
});
it("Increase number with button", async () => {
const increaseButton = getByLabelText(componentContainer, /Increase/);
const increaseButton = getByLabelText(componentContainer, "Increase");
fireEvent.mouseDown(increaseButton);
await waitFor(() =>
await wait(() =>
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 2 } })
);
});
it("Decrease number with button", async () => {
const decreaseButton = getByLabelText(componentContainer, /Decrease/);
const decreaseButton = getByLabelText(componentContainer, "Decrease");
fireEvent.mouseDown(decreaseButton);
await waitFor(() =>
await wait(() =>
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 0 } })
);
});

View File

@ -20,9 +20,8 @@ exports[`<NumberInput/> Render number input 1`] = `
value="1"
/>
<button
aria-label="Increase value. Hint: Hold to increase faster."
aria-label="Increase"
class="btn btn-outline-secondary"
title="Increase value. Hint: Hold to increase faster."
type="button"
>
<i
@ -30,9 +29,8 @@ exports[`<NumberInput/> Render number input 1`] = `
/>
</button>
<button
aria-label="Decrease value. Hint: Hold to decrease faster."
aria-label="Decrease"
class="btn btn-outline-secondary"
title="Decrease value. Hint: Hold to decrease faster."
type="button"
>
<i

View File

@ -1,157 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React, { useState, useEffect } from "react";
import PropTypes from "prop-types";
import { useAPIPost, useAPIPut } from "../../api/hooks";
import { API_STATE } from "../../api/utils";
import Button from "../../bootstrap/Button";
import {
Modal,
ModalHeader,
ModalBody,
ModalFooter,
} from "../../bootstrap/Modal";
import { useAlert } from "../../context/alertContext/AlertContext";
ActionButtonWithModal.propTypes = {
/** Component that triggers the action. */
actionTrigger: PropTypes.elementType.isRequired,
/** Method to use for the action. */
actionMethod: PropTypes.string,
/** URL to send the action to. */
actionUrl: PropTypes.string.isRequired,
/** Title of the modal. */
modalTitle: PropTypes.string.isRequired,
/** Message of the modal. */
modalMessage: PropTypes.string.isRequired,
/** Text of the action button in the modal. */
modalActionText: PropTypes.string,
/** Props for the action button in the modal. */
modalActionProps: PropTypes.object,
/** Message to display on successful action. */
successMessage: PropTypes.string,
/** Message to display on failed action. */
errorMessage: PropTypes.string,
};
function ActionButtonWithModal({
actionTrigger: ActionTriggerComponent,
actionMethod = "POST",
actionUrl,
modalTitle,
modalMessage,
modalActionText,
modalActionProps,
successMessage,
errorMessage,
}) {
const [triggered, setTriggered] = useState(false);
const [modalShown, setModalShown] = useState(false);
const [triggerPostActionStatus, triggerPostAction] = useAPIPost(actionUrl);
const [triggerPutActionStatus, triggerPutAction] = useAPIPut(actionUrl);
const [setAlert] = useAlert();
useEffect(() => {
if (
triggerPostActionStatus.state === API_STATE.SUCCESS ||
triggerPutActionStatus.state === API_STATE.SUCCESS
) {
setAlert(
successMessage || _("Action successful."),
API_STATE.SUCCESS
);
setTriggered(false);
}
if (
triggerPostActionStatus.state === API_STATE.ERROR ||
triggerPutActionStatus.state === API_STATE.ERROR
) {
setAlert(errorMessage || _("Action failed."));
setTriggered(false);
}
}, [
triggerPostActionStatus,
triggerPutActionStatus,
setAlert,
successMessage,
errorMessage,
]);
const actionHandler = () => {
setTriggered(true);
if (actionMethod === "POST") {
triggerPostAction();
} else {
triggerPutAction();
}
setModalShown(false);
};
return (
<>
<ActionModal
shown={modalShown}
setShown={setModalShown}
onAction={actionHandler}
title={modalTitle}
message={modalMessage}
actionText={modalActionText}
actionProps={modalActionProps}
/>
<ActionTriggerComponent
loading={triggered}
disabled={triggered}
onClick={() => setModalShown(true)}
/>
</>
);
}
ActionModal.propTypes = {
shown: PropTypes.bool.isRequired,
setShown: PropTypes.func.isRequired,
onAction: PropTypes.func.isRequired,
title: PropTypes.string.isRequired,
message: PropTypes.string.isRequired,
actionText: PropTypes.string,
actionProps: PropTypes.object,
};
function ActionModal({
shown,
setShown,
onAction,
title,
message,
actionText,
actionProps,
}) {
return (
<Modal shown={shown} setShown={setShown}>
<ModalHeader setShown={setShown} title={title} />
<ModalBody>
<p className="mb-0">{message}</p>
</ModalBody>
<ModalFooter>
<Button
className="btn-secondary"
onClick={() => setShown(false)}
>
{_("Cancel")}
</Button>
<Button onClick={onAction} {...actionProps}>
{actionText || _("Confirm")}
</Button>
</ModalFooter>
</Modal>
);
}
export default ActionButtonWithModal;

View File

@ -1,39 +0,0 @@
RebootButton component is a button that opens a modal dialog to confirm the
reboot of the device.
## Usage
```jsx
import React, { useEffect, createContext } from "react";
import Button from "../../bootstrap/Button";
import { AlertContextProvider } from "../../context/alertContext/AlertContext";
import ActionButtonWithModal from "./ActionButtonWithModal";
window.AlertContext = React.createContext();
const RebootButtonExample = () => {
const ActionButton = (props) => {
return <Button {...props}>Action</Button>;
};
return (
<AlertContextProvider>
<div id="modal-container" />
<div id="alert-container" />
<ActionButtonWithModal
actionTrigger={ActionButton}
actionUrl="/reforis/api/action"
modalTitle="Warning!"
modalMessage="Are you sure you want to perform this action?"
modalActionText="Confirm action"
modalActionProps={{ className: "btn-danger" }}
successMessage="Action request succeeded."
errorMessage="Action request failed."
/>
</AlertContextProvider>
);
};
<RebootButtonExample />;
```

View File

@ -0,0 +1,80 @@
/*
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React, { useState, useEffect } from "react";
import PropTypes from "prop-types";
import { useAPIPost } from "../api/hooks";
import { API_STATE } from "../api/utils";
import Button from "../bootstrap/Button";
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
import { useAlert } from "../context/alertContext/AlertContext";
import { ForisURLs } from "../utils/forisUrls";
function RebootButton(props) {
const [triggered, setTriggered] = useState(false);
const [modalShown, setModalShown] = useState(false);
const [triggerRebootStatus, triggerReboot] = useAPIPost(ForisURLs.reboot);
const [setAlert] = useAlert();
useEffect(() => {
if (triggerRebootStatus.state === API_STATE.ERROR) {
setAlert(_("Reboot request failed."));
}
});
const rebootHandler = () => {
setTriggered(true);
triggerReboot();
setModalShown(false);
};
return (
<>
<RebootModal
shown={modalShown}
setShown={setModalShown}
onReboot={rebootHandler}
/>
<Button
className="btn-danger"
loading={triggered}
disabled={triggered}
onClick={() => setModalShown(true)}
{...props}
>
{_("Reboot")}
</Button>
</>
);
}
RebootModal.propTypes = {
shown: PropTypes.bool.isRequired,
setShown: PropTypes.func.isRequired,
onReboot: PropTypes.func.isRequired,
};
function RebootModal({ shown, setShown, onReboot }) {
return (
<Modal shown={shown} setShown={setShown}>
<ModalHeader setShown={setShown} title={_("Warning!")} />
<ModalBody>
<p>{_("Are you sure you want to restart the router?")}</p>
</ModalBody>
<ModalFooter>
<Button onClick={() => setShown(false)}>{_("Cancel")}</Button>
<Button className="btn-danger" onClick={onReboot}>
{_("Confirm reboot")}
</Button>
</ModalFooter>
</Modal>
);
}
export default RebootButton;

View File

@ -1,118 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React, { useMemo, useState } from "react";
import { rankItem } from "@tanstack/match-sorter-utils";
import {
flexRender,
getCoreRowModel,
getSortedRowModel,
getFilteredRowModel,
getPaginationRowModel,
useReactTable,
} from "@tanstack/react-table";
import PropTypes from "prop-types";
import RichTableBody from "./RichTableBody";
import RichTableColumnsDropdown from "./RichTableColumnsDropdown";
import RichTableHeader from "./RichTableHeader";
import RichTablePagination from "./RichTablePagination";
import Input from "../../bootstrap/Input";
RichTable.propTypes = {
/** Columns to be displayed in the table */
columns: PropTypes.array.isRequired,
/** Data to be displayed in the table, must be passed as a stable reference, for example, useState */
data: PropTypes.array.isRequired,
/** Whether to display pagination */
withPagination: PropTypes.bool,
/** Number of rows per page, the default is 5 */
pageSize: PropTypes.number,
/** Index of the current page */
pageIndex: PropTypes.number,
};
export default function RichTable({
columns,
data,
withPagination,
pageSize = 5,
pageIndex = 0,
}) {
const tableColumns = useMemo(() => columns, [columns]);
const [sorting, setSorting] = useState([]);
const [pagination, setPagination] = useState({
pageIndex,
pageSize,
});
const [globalFilter, setGlobalFilter] = useState("");
const [columnVisibility, setColumnVisibility] = useState({});
const table = useReactTable({
data,
columns: tableColumns,
filterFns: {
fuzzy: fuzzyFilter,
},
globalFilterFn: "fuzzy",
getCoreRowModel: getCoreRowModel(),
getSortedRowModel: getSortedRowModel(),
getPaginationRowModel: getPaginationRowModel(),
getFilteredRowModel: getFilteredRowModel(),
onSortingChange: setSorting,
onPaginationChange: setPagination,
onGlobalFilterChange: setGlobalFilter,
onColumnVisibilityChange: setColumnVisibility,
state: {
sorting,
pagination,
globalFilter,
columnVisibility,
},
});
const paginationIsNeeded = data.length > pageSize && withPagination;
return (
<div>
<div className="d-flex justify-content-between align-items-center">
<Input
className="me-3"
type="text"
placeholder={_("Search…")}
value={globalFilter ?? ""}
onChange={(e) => setGlobalFilter(String(e.target.value))}
/>
<RichTableColumnsDropdown columns={table.getAllLeafColumns()} />
</div>
<div className="table-responsive">
<table className="table table-hover text-nowrap">
<RichTableHeader table={table} flexRender={flexRender} />
<RichTableBody
table={table}
columns={tableColumns}
flexRender={flexRender}
/>
</table>
{paginationIsNeeded && (
<RichTablePagination
table={table}
tablePageSize={pageSize}
allRows={data.length}
/>
)}
</div>
</div>
);
}
function fuzzyFilter(row, columnId, value, addMeta) {
const itemRank = rankItem(row.getValue(columnId), value);
addMeta({ itemRank });
return itemRank.passed;
}

View File

@ -1,135 +0,0 @@
### Description
Rich Table is a table component based on
[Tanstack React Table](https://tanstack.com/table/). It adds some features to
the table component, such as:
- **Pagination**: The table can be paginated.
- **Sorting**: The table can be sorted by columns.
- **Row Expansion**: The table rows can be expanded. (To be implemented)
### Example
```js
import RichTable from "./RichTable";
const columns = [
{
header: "Name",
accessorKey: "name",
},
{
header: "Surname",
accessorKey: "surname",
},
{
header: "Age",
accessorKey: "age",
},
{
header: "Phone",
accessorKey: "phone",
},
];
const data = [
{
name: "John",
surname: "Coltrane",
age: 30,
phone: "123456789",
},
{
name: "Jane",
surname: "Doe",
age: 25,
phone: "987654321",
},
{
name: "Alice",
surname: "Smith",
age: 35,
phone: "123456789",
},
{
name: "Bob",
surname: "Smith",
age: 40,
phone: "987654321",
},
{
name: "Charlie",
surname: "Brown",
age: 45,
phone: "123456789",
},
{
name: "Daisy",
surname: "Brown",
age: 50,
phone: "987654321",
},
{
name: "Eve",
surname: "Johnson",
age: 55,
phone: "123456789",
},
{
name: "Frank",
surname: "Johnson",
age: 60,
phone: "987654321",
},
{
name: "Grace",
surname: "Williams",
age: 65,
phone: "123456789",
},
{
name: "Henry",
surname: "Williams",
age: 70,
phone: "987654321",
},
{
name: "Ivy",
surname: "Brown",
age: 75,
phone: "123456789",
},
{
name: "Jack",
surname: "Brown",
age: 80,
phone: "987654321",
},
{
name: "Kelly",
surname: "Johnson",
age: 85,
phone: "123456789",
},
{
name: "Liam",
surname: "Johnson",
age: 90,
phone: "987654321",
},
{
name: "Mia",
surname: "Williams",
age: 95,
phone: "123456789",
},
{
name: "Nathan",
surname: "Williams",
age: 100,
phone: "987654321",
},
];
<RichTable columns={columns} data={data} withPagination />;
```

View File

@ -1,58 +0,0 @@
/*
* Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import propTypes from "prop-types";
RichTableBody.propTypes = {
table: propTypes.shape({
getRowModel: propTypes.func.isRequired,
}).isRequired,
columns: propTypes.array.isRequired,
flexRender: propTypes.func.isRequired,
};
function RichTableBody({ table, columns, flexRender }) {
return (
<tbody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => {
return (
<tr key={row.id} className="align-middle">
{row.getVisibleCells().map((cell) => {
return (
<td
key={cell.id}
{...(cell.column.columnDef
.className && {
className:
cell.column.columnDef.className,
})}
>
{flexRender(
cell.column.columnDef.cell,
cell.getContext()
)}
</td>
);
})}
</tr>
);
})
) : (
<tr>
<td colSpan={columns.length} className="text-center py-4">
<span>{_("No results.")}</span>
</td>
</tr>
)}
</tbody>
);
}
export default RichTableBody;

View File

@ -1,90 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import { faCheck, faRotateLeft } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import PropTypes from "prop-types";
import Button from "../../bootstrap/Button";
RichTableColumnsDropdown.propTypes = {
columns: PropTypes.array.isRequired,
};
function RichTableColumnsDropdown({ columns }) {
return (
<div className="dropdown mb-3">
<Button
className="btn btn-outline-secondary dropdown-toggle"
data-bs-toggle="dropdown"
>
{_("Columns")}
</Button>
<ul className="dropdown-menu dropdown-menu-end">
{columns.map((column) => {
return (
<li key={column.id}>
<button
type="button"
className="dropdown-item d-flex align-items-center"
onClick={column.getToggleVisibilityHandler()}
style={{ paddingLeft: "2rem" }}
disabled={
column.columnDef?.enableHiding === false
}
>
{column.getIsVisible() && (
<FontAwesomeIcon
icon={faCheck}
className="position-absolute text-secondary me-2"
style={{ left: "0.6rem" }}
width="1rem"
/>
)}
<span>{column.columnDef.header}</span>
</button>
</li>
);
})}
{columns.some((column) => !column.getIsVisible()) && (
<>
<li>
<hr className="dropdown-divider" />
</li>
<li>
<button
type="button"
className="dropdown-item d-flex align-items-center"
style={{ paddingLeft: "2rem" }}
onClick={() => {
// toggleVisibility for columns that are hidden
columns.forEach((column) => {
if (!column.getIsVisible()) {
column.toggleVisibility();
}
});
}}
>
<FontAwesomeIcon
icon={faRotateLeft}
className="position-absolute text-secondary me-2"
width="1rem"
style={{ left: "0.6rem" }}
/>
{_("Reset")}
</button>
</li>
</>
)}
</ul>
</div>
);
}
export default RichTableColumnsDropdown;

View File

@ -1,102 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import {
faSquareCaretUp,
faSquareCaretDown,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import propTypes from "prop-types";
RichTableHeader.propTypes = {
table: propTypes.shape({
getHeaderGroups: propTypes.func.isRequired,
}).isRequired,
flexRender: propTypes.func.isRequired,
};
function RichTableHeader({ table, flexRender }) {
const getThTitle = (header) => {
if (!header.column.getCanSort()) return undefined;
const nextSortingOrder = header.column.getNextSortingOrder();
if (nextSortingOrder === "asc") return _("Sort ascending");
if (nextSortingOrder === "desc") return _("Sort descending");
return _("Clear sort");
};
return (
<thead className="table-light">
{table.getHeaderGroups().map((headerGroup) => (
<tr key={headerGroup.id} role="row">
{headerGroup.headers.map((header) => (
<th
key={header.id}
colSpan={header.colSpan}
{...(header.column.columnDef.headerClassName && {
className:
header.column.columnDef.headerClassName,
})}
>
{header.isPlaceholder ||
header.column.columnDef.headerIsHidden ? (
<div className="d-none" aria-hidden="true">
{flexRender(
header.column.columnDef.header,
header.getContext()
)}
</div>
) : (
<button
type="button"
style={
header.column.columnDef
.headerClassName === "text-center"
? { justifySelf: "center" }
: {}
}
className={`btn btn-link text-decoration-none text-reset fw-bold p-0 d-flex align-items-center
${
header.column.getCanSort()
? "d-flex align-items-center"
: ""
}
`}
onClick={header.column.getToggleSortingHandler()}
title={getThTitle(header)}
>
{flexRender(
header.column.columnDef.header,
header.getContext()
)}
{{
asc: (
<FontAwesomeIcon
icon={faSquareCaretUp}
className="ms-1 text-primary"
/>
),
desc: (
<FontAwesomeIcon
icon={faSquareCaretDown}
className="ms-1 text-primary"
/>
),
}[header.column.getIsSorted()] ?? null}
</button>
)}
</th>
))}
</tr>
))}
</thead>
);
}
export default RichTableHeader;

View File

@ -1,128 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React, { useMemo } from "react";
import {
faAngleLeft,
faAnglesLeft,
faAngleRight,
faAnglesRight,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import propTypes from "prop-types";
RichTablePagination.propTypes = {
table: propTypes.shape({
getState: propTypes.func.isRequired,
getCanPreviousPage: propTypes.func.isRequired,
getCanNextPage: propTypes.func.isRequired,
firstPage: propTypes.func.isRequired,
previousPage: propTypes.func.isRequired,
nextPage: propTypes.func.isRequired,
lastPage: propTypes.func.isRequired,
setPageSize: propTypes.func.isRequired,
getPageCount: propTypes.func.isRequired,
}).isRequired,
tablePageSize: propTypes.number,
allRows: propTypes.number,
};
function RichTablePagination({ table, tablePageSize, allRows }) {
const { pagination } = table.getState();
const prevPagBtnDisabled = !table.getCanPreviousPage();
const nextPagBtnDisabled = !table.getCanNextPage();
const pageSizes = useMemo(() => {
return [tablePageSize ?? 5, 10, 25].filter(
(value, index, self) => self.indexOf(value) === index
);
}, [tablePageSize]);
const renderPaginationButton = (icon, ariaLabel, onClick, disabled) => (
<li
className={`page-item ${disabled ? "disabled" : ""}`}
style={{ cursor: disabled ? "not-allowed" : "pointer" }}
>
<button
type="button"
className="page-link"
aria-label={ariaLabel}
onClick={onClick}
disabled={disabled}
>
<FontAwesomeIcon icon={icon} />
</button>
</li>
);
return (
<nav
aria-label={_("Pagination navigation bar")}
className="d-flex gap-2 justify-content-start align-items-center mx-2 mb-1 text-nowrap"
>
<ul className="pagination pagination-sm mb-0">
{renderPaginationButton(
faAnglesLeft,
_("First page"),
() => table.firstPage(),
prevPagBtnDisabled
)}
{renderPaginationButton(
faAngleLeft,
_("Previous page"),
() => table.previousPage(),
prevPagBtnDisabled
)}
{renderPaginationButton(
faAngleRight,
_("Next page"),
() => table.nextPage(),
nextPagBtnDisabled
)}
{renderPaginationButton(
faAnglesRight,
_("Last page"),
() => table.lastPage(),
nextPagBtnDisabled
)}
</ul>
<span>
{_("Page")}&nbsp;
<span className="fw-bold">
{pagination.pageIndex + 1}
&nbsp;{_("of")}&nbsp;
{table.getPageCount().toLocaleString()}
</span>
</span>
<div
className="vr mx-1 align-self-center"
style={{ height: "1.5rem" }}
/>
<span>{_("Rows per page:")}</span>
<select
className="form-select form-select-sm w-auto"
aria-label={_("Select rows per page")}
value={pagination.pageSize}
onChange={(e) => {
table.setPageSize(Number(e.target.value));
}}
>
{pageSizes.map((pageSize) => (
<option key={pageSize} value={pageSize}>
{pageSize}
</option>
))}
<option key={allRows} value={allRows}>
{_("All")}
</option>
</select>
</nav>
);
}
export default RichTablePagination;

View File

@ -156,25 +156,25 @@ function DeviceForm({
<RadioSet
name={`band-${deviceID}`}
label={_("Band")}
label="GHz"
choices={getBandChoices(formData)}
value={formData.band}
helpText={HELP_TEXTS.band}
inline
onChange={setFormValue((value) => {
// Find the selected band
const selectedBand = bnds.find(
(band) => band.band === value
);
// Get the last item in the available HT modes for the selected band
const bestHtmode =
selectedBand.available_htmodes.slice(-1)[0];
// Get the last item in an array of available HT modes
const [best2] = bnds[0].available_htmodes.slice(-1);
const [best5] = bnds[1].available_htmodes.slice(-1);
return {
devices: {
[deviceIndex]: {
band: { $set: value },
channel: { $set: "0" },
htmode: { $set: bestHtmode },
htmode: {
$set:
// Set HT mode depending on checked frequency
value === "11a" ? best5 : best2,
},
},
},
};
@ -293,7 +293,7 @@ function getHtmodeChoices(device) {
function getBandChoices(device) {
return device.available_bands.map((availableBand) => ({
label: `${BANDS[availableBand.band]} GHz`,
label: BANDS[availableBand.band],
value: availableBand.band,
}));
}

View File

@ -9,10 +9,9 @@ import React from "react";
import PropTypes from "prop-types";
import { HELP_TEXTS, ENCRYPTIONMODES } from "./constants";
import { HELP_TEXTS } from "./constants";
import WiFiQRCode from "./WiFiQRCode";
import PasswordInput from "../../bootstrap/PasswordInput";
import Select from "../../bootstrap/Select";
import Switch from "../../bootstrap/Switch";
import TextInput from "../../bootstrap/TextInput";
@ -22,7 +21,6 @@ WifiGuestForm.propTypes = {
SSID: PropTypes.string.isRequired,
password: PropTypes.string.isRequired,
enabled: PropTypes.bool.isRequired,
encryption: PropTypes.string.isRequired,
}),
formErrors: PropTypes.shape({
SSID: PropTypes.string,
@ -91,20 +89,6 @@ export default function WifiGuestForm({
}))}
{...props}
/>
<Select
label={_("Encryption")}
choices={ENCRYPTIONMODES}
helpText={HELP_TEXTS.wpa3}
value={formData.encryption}
onChange={setFormValue((value) => ({
devices: {
[formData.id]: {
guest_wifi: { encryption: { $set: value } },
},
},
}))}
{...props}
/>
</>
) : null}
</>

View File

@ -1,12 +1,12 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import { render, fireEvent, waitFor } from "customTestRender";
import { render, fireEvent, wait } from "customTestRender";
import mockAxios from "jest-mock-axios";
import WebSockets from "webSockets/WebSockets";
@ -35,7 +35,7 @@ describe("<ResetWiFiSettings/>", () => {
expect.anything()
);
mockAxios.mockResponse({ data: { foo: "bar" } });
await waitFor(() =>
await wait(() =>
expect(mockSetAlert).toBeCalledWith(
"Wi-Fi settings are set to defaults.",
ALERT_TYPES.SUCCESS
@ -46,7 +46,7 @@ describe("<ResetWiFiSettings/>", () => {
it("should display alert on open ports - failure", async () => {
fireEvent.click(getAllByText("Reset Wi-Fi Settings")[1]);
mockJSONError();
await waitFor(() =>
await wait(() =>
expect(mockSetAlert).toBeCalledWith(
"An error occurred during resetting Wi-Fi settings."
)

View File

@ -1,16 +1,15 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import diffSnapshot from "snapshot-diff";
import mockAxios from "jest-mock-axios";
import { fireEvent, render, waitFor } from "customTestRender";
import { fireEvent, render, wait } from "customTestRender";
import WebSockets from "webSockets/WebSockets";
import { mockJSONError } from "testUtils/network";
@ -46,7 +45,7 @@ describe("<WiFiSettings/>", () => {
getByLabelText = renderRes.getByLabelText;
getByText = renderRes.getByText;
mockAxios.mockResponse({ data: wifiSettingsFixture() });
await waitFor(() => renderRes.getByText("Wi-Fi 1"));
await wait(() => renderRes.getByText("Wi-Fi 1"));
firstRender = renderRes.asFragment();
});
@ -61,7 +60,7 @@ describe("<WiFiSettings/>", () => {
);
const errorMessage = "An API error occurred.";
mockJSONError(errorMessage);
await waitFor(() => {
await wait(() => {
expect(getByText(errorMessage)).toBeTruthy();
});
});
@ -78,7 +77,7 @@ describe("<WiFiSettings/>", () => {
it("Snapshot 2.4 GHz", () => {
fireEvent.click(getByText("Wi-Fi 1"));
const enabledRender = asFragment();
fireEvent.click(getAllByText(/2.4/)[0]);
fireEvent.click(getAllByText("2.4")[0]);
expect(diffSnapshot(enabledRender, asFragment())).toMatchSnapshot();
});
@ -136,7 +135,7 @@ describe("<WiFiSettings/>", () => {
it("Post form: 2.4 GHz", () => {
fireEvent.click(getByText("Wi-Fi 1"));
fireEvent.click(getAllByText(/2.4/)[0]);
fireEvent.click(getAllByText("2.4")[0]);
fireEvent.click(getByText("Save"));
expect(mockAxios.post).toBeCalled();
@ -182,7 +181,6 @@ describe("<WiFiSettings/>", () => {
guest_wifi: {
SSID: "TestGuestSSID",
enabled: true,
encryption: "WPA2",
password: "test_password",
},
hidden: false,

View File

@ -223,7 +223,6 @@ export function wifiSettingsFixture() {
guest_wifi: {
SSID: "TestGuestSSID",
enabled: false,
encryption: "WPA2",
password: "",
},
hidden: false,

View File

@ -339,7 +339,7 @@ exports[`<WiFiSettings/> Snapshot guest network. 1`] = `
- First value
+ Second value
@@ -524,10 +524,124 @@
@@ -524,10 +524,87 @@
<small>
Enables Wi-Fi for guests, which is separated from LAN network. Devices connected to this network are allowed to access the internet, but aren't allowed to access other devices and the configuration interface of the router. Parameters of the guest network can be set in the Guest network tab.
</small>
@ -421,50 +421,13 @@ exports[`<WiFiSettings/> Snapshot guest network. 1`] = `
+ WPA2/3 pre-shared key, that is required to connect to the network.
+ </small>
+ </div>
+ </div>
+ <div
+ class="mb-3"
+ >
+ <label
+ class="form-label"
+ for="14"
+ >
+ Encryption
+ </label>
+ <select
+ class="form-select"
+ id="14"
+ >
+ <option
+ value="WPA3"
+ >
+ WPA3 only
+ </option>
+ <option
+ value="WPA2/3"
+ >
+ WPA3 with WPA2 as fallback (default)
+ </option>
+ <option
+ value="WPA2"
+ >
+ WPA2 only
+ </option>
+ </select>
+ <div
+ class="form-text"
+ >
+ <small>
+ The WPA3 standard is the new most secure encryption method that is suggested to be used with any device that supports it. The older devices without WPA3 support require older WPA2. If you experience issues with connecting older devices, try to enable WPA2.
+ </small>
+ </div>
+ </div>
<hr />
<div
class="form-check form-switch mb-3 d-flex align-items-center"
>
<input
@@ -550,10 +664,11 @@
@@ -550,10 +627,11 @@
<div
class="text-end"
>
@ -592,7 +555,7 @@ exports[`<WiFiSettings/> Snapshot one module enabled. 1`] = `
+ class="d-block"
+ for="6"
+ >
+ Band
+ GHz
+ </label>
+ <div
+ class="mb-3 form-check form-check-inline"
@ -608,7 +571,7 @@ exports[`<WiFiSettings/> Snapshot one module enabled. 1`] = `
+ class="form-check-label"
+ for="band-0-0"
+ >
+ 2.4 GHz
+ 2.4
+ </label>
+ </div>
+ <div
@ -626,7 +589,7 @@ exports[`<WiFiSettings/> Snapshot one module enabled. 1`] = `
+ class="form-check-label"
+ for="band-0-1"
+ >
+ 5 GHz
+ 5
+ </label>
+ </div>
+ <div

View File

@ -12,12 +12,10 @@ export const HTMODES = {
VHT20: _("802.11ac - 20 MHz wide channel"),
VHT40: _("802.11ac - 40 MHz wide channel"),
VHT80: _("802.11ac - 80 MHz wide channel"),
VHT80_80: _("802.11ac - 80+80 MHz wide channel"),
VHT160: _("802.11ac - 160 MHz wide channel"),
HE20: _("802.11ax - 20 MHz wide channel"),
HE40: _("802.11ax - 40 MHz wide channel"),
HE80: _("802.11ax - 80 MHz wide channel"),
HE80_80: _("802.11ax - 80+80 MHz wide channel"),
HE160: _("802.11ax - 160 MHz wide channel"),
};
export const BANDS = {

View File

@ -1,86 +0,0 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import Button from "bootstrap/Button";
import { fireEvent, getByText, render, waitFor } from "customTestRender";
import mockAxios from "jest-mock-axios";
import { mockJSONError } from "testUtils/network";
import { mockSetAlert } from "testUtils/alertContextMock";
import ActionButtonWithModal from "../ActionButtonWithModal/ActionButtonWithModal";
describe("<ActionButtonWithModal/>", () => {
let componentContainer;
const ActionButton = (props) => (
<Button type="button" {...props}>
Action
</Button>
);
beforeEach(() => {
const { container } = render(
<>
<div id="modal-container" />
<div id="alert-container" />
<ActionButtonWithModal
actionTrigger={ActionButton}
actionUrl="/reforis/api/action"
modalTitle="Warning!"
modalMessage="Are you sure you want to perform this action?"
modalActionText="Confirm action"
modalActionProps={{ className: "btn-danger" }}
successMessage="Action request succeeded."
errorMessage="Action request failed."
/>
</>
);
componentContainer = container;
});
it("Render button.", () => {
expect(componentContainer).toMatchSnapshot();
});
it("Render modal.", () => {
fireEvent.click(getByText(componentContainer, "Action"));
expect(componentContainer).toMatchSnapshot();
});
it("Confirm action.", () => {
fireEvent.click(getByText(componentContainer, "Action"));
fireEvent.click(getByText(componentContainer, "Confirm action"));
expect(mockAxios.post).toHaveBeenCalledWith(
"/reforis/api/action",
undefined,
expect.anything()
);
});
it("Hold error.", async () => {
fireEvent.click(getByText(componentContainer, "Action"));
fireEvent.click(getByText(componentContainer, "Confirm action"));
mockJSONError();
await waitFor(() =>
expect(mockSetAlert).toBeCalledWith("Action request failed.")
);
});
it("Show success alert on successful action.", async () => {
fireEvent.click(getByText(componentContainer, "Action"));
fireEvent.click(getByText(componentContainer, "Confirm action"));
mockAxios.mockResponse({ status: 200 });
await waitFor(() =>
expect(mockSetAlert).toBeCalledWith(
"Action request succeeded.",
"success"
)
);
});
});

View File

@ -0,0 +1,63 @@
/*
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
*/
import React from "react";
import {
fireEvent,
getByText,
queryByText,
render,
wait,
} from "customTestRender";
import mockAxios from "jest-mock-axios";
import { mockJSONError } from "testUtils/network";
import { mockSetAlert } from "testUtils/alertContextMock";
import RebootButton from "../RebootButton";
describe("<RebootButton/>", () => {
let componentContainer;
beforeEach(() => {
const { container } = render(
<>
<div id="modal-container" />
<RebootButton />
</>
);
componentContainer = container;
});
it("Render.", () => {
expect(componentContainer).toMatchSnapshot();
});
it("Render modal.", () => {
expect(queryByText(componentContainer, "Confirm reboot")).toBeNull();
fireEvent.click(getByText(componentContainer, "Reboot"));
expect(componentContainer).toMatchSnapshot();
});
it("Confirm reboot.", () => {
fireEvent.click(getByText(componentContainer, "Reboot"));
fireEvent.click(getByText(componentContainer, "Confirm reboot"));
expect(mockAxios.post).toHaveBeenCalledWith(
"/reforis/api/reboot",
undefined,
expect.anything()
);
});
it("Hold error.", async () => {
fireEvent.click(getByText(componentContainer, "Reboot"));
fireEvent.click(getByText(componentContainer, "Confirm reboot"));
mockJSONError();
await wait(() =>
expect(mockSetAlert).toBeCalledWith("Reboot request failed.")
);
});
});

View File

@ -1,25 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<ActionButtonWithModal/> Render button. 1`] = `
<div>
<div
id="modal-container"
/>
<div
id="alert-container"
/>
<button
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
type="button"
>
<span>
Action
</span>
</button>
</div>
`;
exports[`<ActionButtonWithModal/> Render modal. 1`] = `
exports[`<RebootButton/> Render modal. 1`] = `
<div>
<div
id="modal-container"
@ -54,17 +35,15 @@ exports[`<ActionButtonWithModal/> Render modal. 1`] = `
<div
class="modal-body"
>
<p
class="mb-0"
>
Are you sure you want to perform this action?
<p>
Are you sure you want to restart the router?
</p>
</div>
<div
class="modal-footer"
>
<button
class="btn btn-secondary d-inline-flex justify-content-center align-items-center"
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
type="button"
>
<span>
@ -76,7 +55,7 @@ exports[`<ActionButtonWithModal/> Render modal. 1`] = `
type="button"
>
<span>
Confirm action
Confirm reboot
</span>
</button>
</div>
@ -84,15 +63,28 @@ exports[`<ActionButtonWithModal/> Render modal. 1`] = `
</div>
</div>
</div>
<div
id="alert-container"
/>
<button
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
type="button"
>
<span>
Action
Reboot
</span>
</button>
</div>
`;
exports[`<RebootButton/> Render. 1`] = `
<div>
<div
id="modal-container"
/>
<button
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
type="button"
>
<span>
Reboot
</span>
</button>
</div>

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
@ -7,7 +7,7 @@
import React from "react";
import { render, waitFor, getByText } from "customTestRender";
import { render, wait, getByText } from "customTestRender";
import mockAxios from "jest-mock-axios";
import {
@ -38,7 +38,7 @@ describe("CustomizationContext", () => {
it("should render component without customization", async () => {
mockAxios.mockResponse({ data: {} });
await waitFor(() => getByText(componentContainer, ORIGINAL));
await wait(() => getByText(componentContainer, ORIGINAL));
expect(componentContainer).toMatchSnapshot();
});
@ -46,7 +46,7 @@ describe("CustomizationContext", () => {
it("should render customized component", async () => {
mockAxios.mockResponse({ data: { customization: "shield" } });
await waitFor(() => getByText(componentContainer, CUSTOM));
await wait(() => getByText(componentContainer, CUSTOM));
expect(componentContainer).toMatchSnapshot();
});

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
@ -7,7 +7,7 @@
import React from "react";
import { act, fireEvent, render, waitFor } from "customTestRender";
import { act, fireEvent, render, waitForElement } from "customTestRender";
import mockAxios from "jest-mock-axios";
import WebSockets from "webSockets/WebSockets";
import ForisForm from "../components/ForisForm";
@ -59,7 +59,7 @@ describe("useForm hook.", () => {
);
mockAxios.mockResponse({ field: "fetchedData" });
input = await waitFor(() => getByTestId("test-input"));
input = await waitForElement(() => getByTestId("test-input"));
form = container.firstChild.firstChild;
});

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2025 CZ.NIC z.s.p.o. (https://www.nic.cz/)
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
*
* This is free software, licensed under the GNU General Public License v3.
* See /LICENSE for more information.
@ -20,15 +20,13 @@ export const STATES = {
SubmitButton.propTypes = {
disabled: PropTypes.bool,
state: PropTypes.oneOf(Object.keys(STATES).map((key) => STATES[key])),
label: PropTypes.string,
};
export function SubmitButton({ disabled, state, label, ...props }) {
export function SubmitButton({ disabled, state, ...props }) {
const disableSubmitButton = disabled || state !== STATES.READY;
const loadingSubmitButton = state !== STATES.READY;
let labelSubmitButton = label;
if (!labelSubmitButton) {
let labelSubmitButton;
switch (state) {
case STATES.SAVING:
labelSubmitButton = _("Updating");
@ -39,7 +37,6 @@ export function SubmitButton({ disabled, state, label, ...props }) {
default:
labelSubmitButton = _("Save");
}
}
return (
<Button

View File

@ -40,10 +40,9 @@ export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
// Common
export { default as ActionButtonWithModal } from "./common/ActionButtonWithModal/ActionButtonWithModal";
export { default as RebootButton } from "./common/RebootButton";
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
export { default as RichTable } from "./common/RichTable/RichTable";
// Form
export { default as ForisForm } from "./form/components/ForisForm";
export {

View File

@ -14,7 +14,7 @@ import { render } from "@testing-library/react";
import PropTypes from "prop-types";
import { AlertContextMock } from "./alertContextMock";
import { CustomizationContextMock } from "./customizationContextMock";
import { CustomizationContextMock } from "./cutomizationContextMock";
Wrapper.propTypes = {
children: PropTypes.oneOfType([

View File

@ -38,8 +38,6 @@ export const ForisURLs = {
overview: "/overview",
notifications: "/overview#notifications",
notificationsSettings: "/administration/notifications-settings",
wifiSettings: "/network-settings/wifi",
lanSettings: "/network-settings/lan",
approveUpdates: "/package-management/updates",
languages: "/package-management/languages",

View File

@ -28,11 +28,11 @@ module.exports = {
content: "docs/development.md",
},
{
name: "Common Components",
name: "Components",
description: "Set of main components.",
sections: [
{
name: "ForisForm",
name: "Foris forms",
components: [
"src/form/components/ForisForm.js",
"src/form/components/alerts.js",
@ -42,24 +42,25 @@ module.exports = {
usageMode: "expand",
},
{
name: "RichTable",
components: ["src/common/RichTable/RichTable.js"],
exampleMode: "expand",
usageMode: "expand",
},
{
name: "ActionButtonWithModal",
components: [
"src/common/ActionButtonWithModal/ActionButtonWithModal.js",
],
name: "Alert Context",
components: ["src/context/alertContext/AlertContext.js"],
exampleMode: "expand",
usageMode: "expand",
},
],
sectionDepth: 1,
},
{
name: "Bootstrap Components",
name: "Customization Context",
components: [
"src/context/customizationContext/CustomizationContext.js",
],
exampleMode: "expand",
usageMode: "expand",
},
{
name: "Bootstrap components",
description: "Set of bootstrap components.",
components: "src/bootstrap/*.js",
exampleMode: "expand",
@ -67,22 +68,13 @@ module.exports = {
ignore: ["src/bootstrap/constants.js", "src/bootstrap/Radio.js"],
sectionDepth: 0,
},
{
name: "Contexts",
components: [
"src/context/alertContext/AlertContext.js",
"src/context/customizationContext/CustomizationContext.js",
],
exampleMode: "expand",
usageMode: "expand",
},
],
template: {
favicon: "/docs/components/logo.svg",
},
require: [
"babel-polyfill",
path.join(__dirname, "src/testUtils/mockGlobals.js"),
path.join(__dirname, "src/testUtils/mockGlobals"),
path.join(
__dirname,
"node_modules/bootstrap/dist/css/bootstrap.min.css"

View File

@ -7,17 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"PO-Revision-Date: 2024-11-15 06:01+0000\n"
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
">\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-09-25 10:15+0000\n"
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
"Language: cs\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
"js/cs/>\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.9-dev\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
@ -36,86 +35,42 @@ msgstr "Neobdržena žádná odezva."
msgid "An unknown API error occurred."
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Zavřít"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Zkopírováno!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopírovat"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
msgstr "Akce úspěšná."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Vyžadován restart."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr "Akce se nezdařila."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Restartovat"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Varování!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Opravdu chcete router restartovat?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Zrušit"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr "Potvrdit"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr "Seřadit vzestupně"
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr "Seřadit sestupně"
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr "Vyčistit řazení"
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr "Navigační pruh stránkování"
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr "První stránka"
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr "Předchozí stránka"
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr "Následující stránka"
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr "Poslední stránka"
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr "Stránka"
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr "z"
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr "Řádků na stránku:"
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr "Vyberte řádky na stránku"
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr "Vše"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Potvrdit restart"
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
@ -136,9 +91,9 @@ msgid ""
"Fi settings. Note that this will remove the current Wi-Fi configuration "
"and restore the default values."
msgstr ""
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit nastavení "
"Wi-Fi. Je třeba upozornit, že se tím odstraní stávající nastavení Wi-Fi a "
"obnoví se výchozí hodnoty."
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit "
"nastavení Wi-Fi. Je třeba upozornit, že se tím odstraní aktuální "
"konfigurace Wi-Fi a obnoví se výchozí hodnoty."
#: src/common/WiFiSettings/WiFiForm.js:97
msgid "Wi-Fi ${deviceID + 1}"
@ -174,7 +129,7 @@ msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"Pokud máte problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
"Máte-li problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
"vypnout Management Frame Protection."
#: src/common/WiFiSettings/WiFiForm.js:262
@ -225,7 +180,7 @@ msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
#: src/common/WiFiSettings/WiFiSettings.js:91
#: src/common/WiFiSettings/WiFiSettings.js:110
msgid "Password must not contain more than 63 symbols"
msgstr "Heslo nemůže obsahovat více než 63 znaků"
msgstr "Heslo nesmí obsahovat více než 63 znaků"
#: src/common/WiFiSettings/constants.js:9
msgid "Disabled"
@ -362,11 +317,11 @@ msgstr ""
#: src/form/components/SubmitButton.js:32
msgid "Updating"
msgstr "Aktualizuje se"
msgstr "Aktualizuji"
#: src/form/components/SubmitButton.js:35
msgid "Load settings"
msgstr "Načíst nastavení"
msgstr "Načítám nastavení"
#: src/form/components/SubmitButton.js:38
msgid "Save"
@ -398,7 +353,7 @@ msgstr "Toto není platné doménové jméno."
#: src/utils/validations.js:18
msgid "This is not a valid DUID."
msgstr "Toto není platné DUID."
msgstr "Tohle není platné DUID."
#: src/utils/validations.js:19
msgid "This is not a valid MAC address."
@ -434,14 +389,3 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
#~ " "
#~ msgid "Reboot request failed."
#~ msgstr "Vyžadován restart."
#~ msgid "Reboot"
#~ msgstr "Restartovat"
#~ msgid "Warning!"
#~ msgstr "Varování!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Opravdu chcete router restartovat?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: da\n"
@ -34,85 +34,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -469,18 +425,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
"Language: de\n"
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-js/"
"de/>\n"
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-"
"js/de/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@ -38,91 +38,45 @@ msgstr "Ein unbekannter API-Fehler ist aufgetreten."
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Schließen"
msgstr ""
#: src/bootstrap/CopyInput.js:56 src/bootstrap/CopyInput.js:57
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Kopiert!"
#: src/bootstrap/CopyInput.js:56 src/bootstrap/CopyInput.js:57
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopieren"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#, fuzzy
msgid "Action successful."
msgstr "Einstellungen erfolgreich gespeichert"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Neustart-Einleitung fehlgeschlagen."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Systemneustart"
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Warnung!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Sind Sie sicher, dass Sie den Router neu starten wollen?"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Abbrechen"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Neustart bestätigen"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
"Ein Fehler ist während der Zurücksetzung der WLAN-Einstellungen aufgetreten."
"Ein Fehler ist während der Zurücksetzung der WLAN-Einstellungen "
"aufgetreten."
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
msgid "Wi-Fi settings are set to defaults."
@ -135,9 +89,9 @@ msgstr "WLAN-Einstellungen zurücksetzen"
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
msgid ""
"If a number of wireless cards doesn't match, you may try to reset the Wi-Fi "
"settings. Note that this will remove the current Wi-Fi configuration and "
"restore the default values."
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
"Fi settings. Note that this will remove the current Wi-Fi configuration "
"and restore the default values."
msgstr ""
"Falls die Anzahl der WLAN-Karten nicht korrekt ist, könnte es helfen, die"
" WLAN-Einstellungen zurückzusetzen. Beachten Sie, dass dabei die aktuelle"
@ -177,8 +131,8 @@ msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"Falls Sie beim Verbinden mit dem WiFi-Access-Point Probleme haben, schalten "
"Sie testweise die Management Frame Protection ab."
"Falls Sie beim Verbinden mit dem WiFi-Access-Point Probleme haben, "
"schalten Sie testweise die Management Frame Protection ab."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
@ -194,8 +148,9 @@ msgstr "Gast-WLAN aktivieren"
#: src/common/WiFiSettings/WiFiQRCode.js:43
#: src/common/WiFiSettings/WiFiQRCode.js:44
#, fuzzy
msgid "Show QR code"
msgstr "QR-Code anzeigen"
msgstr "WLAN QR-Code"
#: src/common/WiFiSettings/WiFiQRCode.js:70
msgid "Wi-Fi QR Code"
@ -296,8 +251,7 @@ msgstr ""
#: src/common/WiFiSettings/constants.js:34
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
msgstr ""
"WPA2/3 Pre-Shard Key, der zum Verbinden mit dem Netzwerk notwendig ist."
msgstr "WPA2/3 Pre-Shard Key, der zum Verbinden mit dem Netzwerk notwendig ist."
#: src/common/WiFiSettings/constants.js:37
msgid "If set, network is not visible when scanning for available networks."
@ -307,54 +261,55 @@ msgstr ""
#: src/common/WiFiSettings/constants.js:40
msgid ""
"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."
"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."
msgstr ""
"Das 2,4 GHz-Band wird von allen Geräten unterstützt, ist aber tendenziell"
"stärker mit Interferenzen belastet. Das 5-GHz-Band ist ein neuerer Standard, "
"der möglicherweise nicht von allen Ihren Geräten unterstützt wird. Es hat in "
"der Regel weniger Interferenzen, aber das Signal trägt nicht so gut in "
"Innenräumen."
" stärker mit Interferenzen belastet. Das 5-GHz-Band ist ein neuerer "
"Standard, der möglicherweise nicht von allen Ihren Geräten unterstützt "
"wird. Es hat in der Regel weniger Interferenzen, aber das Signal trägt "
"nicht so gut in Innenräumen."
#: src/common/WiFiSettings/constants.js:43
msgid ""
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 MHz "
"wide channels can yield higher throughput but can cause more interference in "
"the network. If you don't know what to choose, use the default option with "
"20 MHz wide channel."
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
"MHz wide channels can yield higher throughput but can cause more "
"interference in the network. If you don't know what to choose, use the "
"default option with 20 MHz wide channel."
msgstr ""
"Ändern Sie diese Option, um den 802.11n/ac/ax-Betriebsmodus anzupassen. 40 "
"MHz breite Kanäle können bei 802.11n mehr Daten transportieren, jedoch zu "
"mehr Interferenzen im Netzwerk führen. Wenn Sie nicht wissen, was Sie wählen "
"sollen, verwenden Sie die Voreinstellung mit 20 MHz Kanalbreite."
"Ändern Sie diese Option, um den 802.11n/ac/ax-Betriebsmodus anzupassen. "
"40 MHz breite Kanäle können bei 802.11n mehr Daten transportieren, jedoch"
" zu mehr Interferenzen im Netzwerk führen. Wenn Sie nicht wissen, was Sie"
" wählen sollen, verwenden Sie die Voreinstellung mit 20 MHz Kanalbreite."
#: src/common/WiFiSettings/constants.js:46
msgid ""
"Enables Wi-Fi for guests, which is separated from LAN network. Devices "
"connected to this network are allowed to access the internet, but aren't "
"allowed to access other devices and the configuration interface of the "
"router. Parameters of the guest network can be set in the Guest network tab."
"router. Parameters of the guest network can be set in the Guest network "
"tab."
msgstr ""
"Ermöglicht ein Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. Geräte, "
"die mit diesem Netzwerk verbunden sind, dürfen auf das Internet zugreifen, "
"nicht jedoch auf andere Geräte oder die Konfigurationsschnittstelle des "
"Routers. Die Parameter des Gastnetzwerks können auf der Gastnetzwerk-"
"Registerkarte eingestellt werden."
"Ermöglicht ein Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. "
"Geräte, die mit diesem Netzwerk verbunden sind, dürfen auf das Internet "
"zugreifen, nicht jedoch auf andere Geräte oder die "
"Konfigurationsschnittstelle des Routers. Die Parameter des Gastnetzwerks "
"können auf der Gastnetzwerk-Registerkarte eingestellt werden."
#: src/common/WiFiSettings/constants.js:49
msgid ""
"The WPA3 standard is the new most secure encryption method that is suggested "
"to be used with any device that supports it. The older devices without WPA3 "
"support require older WPA2. If you experience issues with connecting older "
"devices, try to enable WPA2."
"The WPA3 standard is the new most secure encryption method that is "
"suggested to be used with any device that supports it. The older devices "
"without WPA3 support require older WPA2. If you experience issues with "
"connecting older devices, try to enable WPA2."
msgstr ""
"Der WPA3-Standard ist die neue Verschlüsselungsmethode mit der besten "
"Sicherheit. Er empfiehlt sich für jedes Gerät, das ihn unterstützt, aber "
"ältere Geräte, bei denen das noch nicht der Fall ist, müssen auf das ältere "
"WPA2 ausweichen. Falls Sie Probleme dabei haben, ältere Geräte mit dem WLAN "
"zu verbinden, schalten Sie versuchsweise WPA2 ein."
"ältere Geräte, bei denen das noch nicht der Fall ist, müssen auf das "
"ältere WPA2 ausweichen. Falls Sie Probleme dabei haben, ältere Geräte mit"
" dem WLAN zu verbinden, schalten Sie versuchsweise WPA2 ein."
#: src/form/components/ForisForm.js:121
msgid "Settings saved successfully"
@ -414,25 +369,22 @@ msgstr "Dies ist keine gültige MAC-Adresse."
msgid "Doesn't contain a list of emails separated by commas."
msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Neustart-Einleitung fehlgeschlagen."
#~ msgid "An unknown error occurred. Check the console for more info."
#~ msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Systemneustart"
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Warnung!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Sind Sie sicher, dass Sie den Router neu starten wollen?"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Neustart bestätigen"
#~ msgid "Reboot confirmation"
#~ msgstr ""
#~ msgid "Enable"
#~ msgstr "Aktivieren"
#~ msgid ""
#~ "\n"
#~ "If a number of wireless cards "
#~ "doesn't match, you may try to "
#~ "reset the Wi-Fi settings. Note "
#~ "that this will remove the\n"
#~ "current Wi-Fi configuration and restore the default values.\n"
#~ " "
#~ msgstr ""

View File

@ -7,17 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"PO-Revision-Date: 2025-01-18 11:00+0000\n"
"Last-Translator: Thanasis <thanasakis11mail@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/turris/foris-js/el/"
">\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2021-02-09 16:50+0000\n"
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
"Language: el\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/turris/foris-"
"js/el/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10-dev\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
@ -36,88 +35,43 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Κλείσιμο"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Επανεκκίνηση"
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Άκυρο"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Επιβεβαίωση επανεκκίνησης"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
@ -180,7 +134,7 @@ msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:303
msgid "Custom"
msgstr "Προσαρμοσμένο"
msgstr ""
#: src/common/WiFiSettings/WiFiGuestForm.js:43
msgid "Enable Guest Wi-Fi"
@ -226,7 +180,7 @@ msgstr ""
#: src/common/WiFiSettings/constants.js:9
msgid "Disabled"
msgstr "Απενεργοποιημένο"
msgstr ""
#: src/common/WiFiSettings/constants.js:10
msgid "802.11n - 20 MHz wide channel"
@ -473,14 +427,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr "Επανεκκίνηση"
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
"Language: en\n"
@ -35,85 +35,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -467,18 +423,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
"Language: es\n"
@ -37,89 +37,43 @@ msgstr ""
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
"informaciòn."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Cerrar"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "¡Copiado!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Copiar"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#, fuzzy
msgid "Action successful."
msgstr "Los ajustes se han guardado correctamente"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "La petición de reinicio ha fallado."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Reiniciar"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "¡Atención!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "¿Estás seguro de que quieres reiniciar el router?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Cancelar"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Confirmar reinicio"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
@ -493,15 +447,3 @@ msgstr "No contiene una lista de correos electrónicos separados por comas."
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr "La petición de reinicio ha fallado."
#~ msgid "Reboot"
#~ msgstr "Reiniciar"
#~ msgid "Warning!"
#~ msgstr "¡Atención!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "¿Estás seguro de que quieres reiniciar el router?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: fi\n"
@ -34,85 +34,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -469,18 +425,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: fo\n"
@ -34,85 +34,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -469,18 +425,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Foris JS 6.5.0\n"
"Project-Id-Version: Foris JS 6.2.0\n"
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -33,85 +33,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39

View File

@ -7,17 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"PO-Revision-Date: 2024-12-14 10:00+0000\n"
"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/turris/foris-js/"
"fr/>\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-07-27 01:09+0000\n"
"Last-Translator: Moha684 <nahil82466@gmail.com>\n"
"Language: fr\n"
"Language-Team: French <https://hosted.weblate.org/projects/turris/foris-"
"js/fr/>\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.9-rc\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
@ -36,88 +35,43 @@ msgstr "Aucun réponse reçue."
msgid "An unknown API error occurred."
msgstr "Une erreur dAPI inconnue sest produite."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Fermer"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Copié!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Copier"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
msgstr "Paramètres enregistrés avec succès."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "La demande de redémarrage a échoué."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr "L'enregistrement des paramètres a échoué."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Redémarrer"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Attention!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Voulez-vous vraiment redémarrer le routeur ?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Annuler"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Confirmer le redémarrage"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr "Première page"
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr "Page précédente"
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr "Page suivante"
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr "Dernière page"
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr "Page"
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr "de"
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr "Lignes par page :"
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr "Sélectionnez les lignes par page"
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr "Tout"
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
@ -462,14 +416,3 @@ msgstr ""
#~ " "
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr "La demande de redémarrage a échoué."
#~ msgid "Reboot"
#~ msgstr "Redémarrer"
#~ msgid "Warning!"
#~ msgstr "Attention!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Voulez-vous vraiment redémarrer le routeur ?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2022-09-29 14:17+0000\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language: hr\n"
@ -36,85 +36,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -471,18 +427,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2021-01-07 01:26+0000\n"
"Last-Translator: Zoli <boritek@gmail.com>\n"
"Language: hu\n"
@ -35,86 +35,41 @@ msgstr "Nem érkezett válasz."
msgid "An unknown API error occurred."
msgstr "Ismeretlen API-hiba történt."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#, fuzzy
msgid "Action successful."
msgstr "Beállítások sikeresen elmentve"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -465,18 +420,3 @@ msgstr "Nem tartalmaz vesszővel elválasztott e-mail listát."
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
"Language: it\n"
@ -35,85 +35,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -470,18 +426,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-10-16 10:08+0000\n"
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
"Language: ja\n"
@ -35,85 +35,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "再起動"
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -471,18 +427,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr "再起動"
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ko\n"
@ -34,85 +34,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -469,18 +425,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: lt\n"
@ -35,85 +35,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -470,18 +426,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2023-03-02 11:40+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language: nb_NO\n"
@ -36,89 +36,44 @@ msgstr "Fikk ikke svar."
msgid "An unknown API error occurred."
msgstr "Ukjent API-feil."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Kopiert"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopier"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#: src/common/RebootButton.js:27
#, fuzzy
msgid "Action successful."
msgstr "Innstillinger lagret"
msgid "Reboot request failed."
msgstr "Omstart kreves"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Start på ny"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Advarsel!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Er du sikker på at du vil utføre omstart av ruteren?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Avbryt"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Bekreft omstart"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
#, fuzzy
msgid "An error occurred during resetting Wi-Fi settings."
@ -449,15 +404,3 @@ msgstr "Inneholder ikke en kommainndelt liste med e-postadresser."
#~ "gjeldende Wi-Fi-oppsett og tilbakestiller forvalgte verdier.\n"
#~ " "
#~ msgid "Reboot request failed."
#~ msgstr "Omstart kreves"
#~ msgid "Reboot"
#~ msgstr "Start på ny"
#~ msgid "Warning!"
#~ msgstr "Advarsel!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Er du sikker på at du vil utføre omstart av ruteren?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
"Last-Translator: powerburner-nl <peter.mulder.1981@gmail.com>\n"
"Language: nl\n"
@ -35,88 +35,44 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
msgstr ""
#: src/common/RebootButton.js:27
#, fuzzy
msgid "Reboot request failed."
msgstr "Opnieuw opstarten is vereist"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Opnieuw opstarten"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Waarschuwing!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Weet u zeker dat u de router opnieuw wilt opstarten?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Annuleren"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Opnieuw opstarten bevestigen"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
@ -473,15 +429,3 @@ msgstr "Bevat geen lijst met e-mails gescheiden door komma's."
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr "Opnieuw opstarten is vereist"
#~ msgid "Reboot"
#~ msgstr "Opnieuw opstarten"
#~ msgid "Warning!"
#~ msgstr "Waarschuwing!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Weet u zeker dat u de router opnieuw wilt opstarten?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2023-03-07 16:37+0000\n"
"Last-Translator: Arusekk <arek_koz@o2.pl>\n"
"Language: pl\n"
@ -36,89 +36,43 @@ msgstr "Brak odpowiedzi."
msgid "An unknown API error occurred."
msgstr "Wystąpił nieznany błąd API."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#, fuzzy
msgid "Action successful."
msgstr "Ustawienia zostały zapisane"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Restart"
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Ostrzeżenie!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Czy na pewno zrestartować router?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Anuluj"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Potwierdź restart"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
@ -473,15 +427,3 @@ msgstr "Nie zawiera listy e-maili oddzielonych przecinkami."
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr "Restart"
#~ msgid "Warning!"
#~ msgstr "Ostrzeżenie!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Czy na pewno zrestartować router?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2021-12-21 12:52+0000\n"
"Last-Translator: c10l <weblate.org@a.c10l.cc>\n"
"Language: pt_BR\n"
@ -35,88 +35,43 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Reinício"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Atenção!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Você tem certeza de que quer reiniciar o roteador?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Cancelar"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Confirma reinício"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
@ -449,15 +404,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr "Reinício"
#~ msgid "Warning!"
#~ msgstr "Atenção!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Você tem certeza de que quer reiniciar o roteador?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2019-02-19 13:35+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ro\n"
@ -35,85 +35,41 @@ msgstr ""
msgid "An unknown API error occurred."
msgstr ""
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr ""
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr ""
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr ""
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
@ -470,18 +426,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr ""
#~ msgid "Reboot"
#~ msgstr ""
#~ msgid "Warning!"
#~ msgstr ""
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr ""
#~ msgid "Confirm reboot"
#~ msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2022-12-07 12:47+0000\n"
"Last-Translator: Алексей Леньшин <alenshin@gmail.com>\n"
"Language: ru\n"
@ -36,89 +36,43 @@ msgstr "Ответ не получен."
msgid "An unknown API error occurred."
msgstr "Неизвестная ошибка программного интерфейса приложения."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Скопировано!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Копировать"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
#, fuzzy
msgid "Action successful."
msgstr "Настройки были успешно сохранены"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Запрос на перезагрузку не выполнен."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Перезагрузка"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Предупреждение!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Вы уверены, что хотите перезагрузить маршрутизатор?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Отмена"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Подтвердите перезагрузку"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr "При сбросе настроек Wi-Fi произошла ошибка."
@ -441,15 +395,3 @@ msgstr "Не содержит списка электронных адресов
#~ "значений по умолчанию.\n"
#~ " "
#~ msgid "Reboot request failed."
#~ msgstr "Запрос на перезагрузку не выполнен."
#~ msgid "Reboot"
#~ msgstr "Перезагрузка"
#~ msgid "Warning!"
#~ msgstr "Предупреждение!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Вы уверены, что хотите перезагрузить маршрутизатор?"

View File

@ -7,17 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"PO-Revision-Date: 2024-12-14 10:00+0000\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2024-09-09 18:09+0000\n"
"Last-Translator: Atec <dr.atec@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/turris/foris-js/"
"sk/>\n"
"Language: sk\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/turris/foris-"
"js/sk/>\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.9-rc\n"
"Generated-By: Babel 2.16.0\n"
#: src/api/utils.js:61
@ -36,86 +35,42 @@ msgstr "Nenastala žiadna odozva."
msgid "An unknown API error occurred."
msgstr "Nastala neznáma chyba v API."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr "Zatvoriť"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Skopírované!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopírovať"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
msgstr "Akcia úspešná."
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Požiadavka na reštart neúspešná."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr "Akcia neúspešná."
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Reštartovať"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Výstraha!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Naozaj sa má router reštartovať?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Zrušiť"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
msgid "Confirm"
msgstr "Potvrdiť"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr "Zoradiť vzostupne"
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr "Zoradiť zostupne"
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr "Vymazať zoradenie"
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr "Navigačný pás stránkovania"
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr "Prvá strana"
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr "Predchádzajúca strana"
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr "Nasledujúca strana"
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr "Posledná strana"
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr "Strana"
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr "z"
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr "Počet riadkov na stranu:"
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr "Vyberte počet riadkov na stranu"
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr "Všetky"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Potvrdiť reštart"
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
@ -435,14 +390,3 @@ msgstr "Neobsahuje zoznam e-mailov oddelených čiarkami."
#~ " a obnovia sa východiskové hodnoty.\n"
#~ " "
#~ msgid "Reboot request failed."
#~ msgstr "Požiadavka na reštart neúspešná."
#~ msgid "Reboot"
#~ msgstr "Reštartovať"
#~ msgid "Warning!"
#~ msgstr "Výstraha!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Naozaj sa má router reštartovať?"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
"POT-Creation-Date: 2024-09-25 16:10+0200\n"
"PO-Revision-Date: 2023-09-22 21:00+0000\n"
"Last-Translator: Kristoffer Grundström "
"<swedishsailfishosuser@tutanota.com>\n"
@ -36,88 +36,43 @@ msgstr "Inget svar togs emot."
msgid "An unknown API error occurred."
msgstr "Ett okänt API-fel inträffade."
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
#: src/common/WiFiSettings/WiFiQRCode.js:89
msgid "Close"
msgstr ""
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copied!"
msgstr "Kopierades!"
#: src/bootstrap/CopyInput.js:56
#: src/bootstrap/CopyInput.js:57
msgid "Copy"
msgstr "Kopiera"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
msgid "Action successful."
msgstr ""
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
msgstr "Förfrågning för omstart misslyckades."
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
msgid "Action failed."
msgstr ""
#: src/common/RebootButton.js:51
msgid "Reboot"
msgstr "Starta om"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
#: src/common/RebootButton.js:66
msgid "Warning!"
msgstr "Varning!"
#: src/common/RebootButton.js:68
msgid "Are you sure you want to restart the router?"
msgstr "Är du säker på att du vill starta om routern?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Avbryt"
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
#, fuzzy
msgid "Confirm"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
msgstr "Bekräfta omstart"
#: src/common/RichTable/RichTableHeader.js:29
msgid "Sort ascending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:30
msgid "Sort descending"
msgstr ""
#: src/common/RichTable/RichTableHeader.js:31
msgid "Clear sort"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:65
msgid "Pagination navigation bar"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:71
msgid "First page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:77
msgid "Previous page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:83
msgid "Next page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:89
msgid "Last page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:95
msgid "Page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:98
msgid "of"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:106
msgid "Rows per page:"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:109
msgid "Select rows per page"
msgstr ""
#: src/common/RichTable/RichTablePagination.js:121
msgid "All"
msgstr ""
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
msgid "An error occurred during resetting Wi-Fi settings."
msgstr "Ett fel inträffade under återställningen av Wi-Fi-inställningarna."
@ -486,15 +441,3 @@ msgstr ""
#~ "channel."
#~ msgstr ""
#~ msgid "Reboot request failed."
#~ msgstr "Förfrågning för omstart misslyckades."
#~ msgid "Reboot"
#~ msgstr "Starta om"
#~ msgid "Warning!"
#~ msgstr "Varning!"
#~ msgid "Are you sure you want to restart the router?"
#~ msgstr "Är du säker på att du vill starta om routern?"