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

Compare commits

...

30 Commits

Author SHA1 Message Date
Štěpán Henek
6dd87cdf57 Merge branch 'feature/ws-included' into 'master'
Draft: Using socket.io for websocket handling and make reforis configurable

See merge request turris/reforis/foris-js!201
2023-09-27 22:27:48 +02:00
Lukas Jelinek
390e4bdce8 Merge branch 'translations-september-2023' into 'master' 2023-09-25 14:52:27 +02:00
Kristoffer Grundström
5232b55cf6 Translated using Weblate (Swedish)
Currently translated at 57.9% (40 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/sv/
2023-09-22 21:00:08 +00:00
Erik Pfannenstein
5823012c6e Translated using Weblate (German)
Currently translated at 98.5% (68 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/de/
2023-08-13 12:47:51 +02:00
Stepan Henek
f6dece80b2 Using socket.io for websocket handling and make reforis configurable
Socket.io wrapper is used to handle websockets now,
this means that websocket logic had to be redone.

Also it is necessary to set `REFORIS_PREFIX` env variable
during the build process. To set the path of backend url.
It was previously fixed to `/reforis`.
2023-04-27 10:05:22 +02:00
Vri 🌈
e907a3a21f Translated using Weblate (German)
Currently translated at 63.7% (44 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/de/
2023-04-24 16:49:38 +02:00
František Bartoš
9e4cb4b417 Translated using Weblate (Czech)
Currently translated at 76.8% (53 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/cs/
2023-04-16 15:52:11 +02:00
Arusekk
55f4d2ff15 Translated using Weblate (Polish)
Currently translated at 36.2% (25 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/pl/
2023-03-07 17:37:51 +01:00
Michal Hrušecký
6b464783ed Translated using Weblate (Czech)
Currently translated at 72.4% (50 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/cs/
2023-03-03 14:40:04 +01:00
Allan Nordhøy
85ba270135 Translated using Weblate (Norwegian Bokmål)
Currently translated at 73.9% (51 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/nb_NO/
2023-03-02 12:40:09 +01:00
Atec
a0f42906f5 Translated using Weblate (Slovak)
Currently translated at 100.0% (69 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/sk/
2023-01-17 23:51:47 +01:00
Anselmo
bc1b6e7877 Translated using Weblate (Italian)
Currently translated at 4.3% (3 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/it/
2023-01-01 00:48:44 +01:00
Aleksandr Gumroian
efb3fa80ce Merge branch 'dev' into 'master'
Dev

See merge request turris/reforis/foris-js!210
2022-12-29 11:52:54 +01:00
Aleksandr Gumroian
9c3dcaf6b5 Merge branch 'bump-version-560' into 'dev'
Bump v5.6.0

See merge request turris/reforis/foris-js!209
2022-12-29 11:45:58 +01:00
Aleksandr Gumroian
fb41c9629e Bump v5.6.0
* Add & update Weblate translations
* Add CustomizationContext and custom hook
* Update caniuse-lite
* Remove testUtils from .gitignore
* Make ieee80211w_disabled as optional in WiFiForm
* Move contexts in a context folder
* NPM audit fix
2022-12-29 11:34:19 +01:00
Aleksandr Gumroian
620eee3f53 NPM audit fix 2022-12-29 11:33:47 +01:00
Aleksandr Gumroian
f6ec82609c Merge branch 'update-translations' into 'dev'
Add & update Weblate translations

See merge request turris/reforis/foris-js!208
2022-12-28 16:27:48 +01:00
Aleksandr Gumroian
0b47c38f21 Merge branch 'fix-custom-context-mock' into 'dev'
Fix custom context mock

See merge request turris/reforis/foris-js!207
2022-12-28 16:09:20 +01:00
Aleksandr Gumroian
6183669c9b Fix CustomizationContextMock for tests 2022-12-28 15:19:24 +01:00
Aleksandr Gumroian
f3694bb62c Make ieee80211w_disabled as optional in WiFiForm 2022-12-28 15:18:42 +01:00
Aleksandr Gumroian
0f2344a005 Merge branch 'add-customization-context' into 'dev'
Add CustomizationContext and custom hook

See merge request turris/reforis/foris-js!183
2022-12-22 15:58:04 +01:00
Aleksandr Gumroian
f2ae6c4d0a Move contexts in a context folder 2022-12-22 15:35:22 +01:00
Aleksandr Gumroian
f382e743aa Update caniuse-lite 2022-12-22 15:35:22 +01:00
Aleksandr Gumroian
d71f4a7967 Remove testUtils from .gitignore
Because the testUtils folder consists of useful utils for testing,
we want to track changes in these files.
2022-12-22 15:35:21 +01:00
Aleksandr Gumroian
aeabc0bf06 Add info about CustomizationContext to the docs 2022-12-22 15:35:21 +01:00
Aleksandr Gumroian
46fe75d3cf Add tests for CustomizationContext 2022-12-22 15:35:20 +01:00
Aleksandr Gumroian
c469d8dfde Add CustomizationContext and custom hook
As we want to share customization context between reForis & Plugins
2022-12-22 15:35:20 +01:00
Aleksandr Gumroian
f327428765 Add about endpoint to forisUrls 2022-12-22 15:35:19 +01:00
Алексей Леньшин
5a359661da Translated using Weblate (Russian)
Currently translated at 100.0% (69 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/ru/
2022-12-07 13:47:07 +01:00
Atec
3d30e2720e Translated using Weblate (Slovak)
Currently translated at 100.0% (69 of 69 strings)

Translation: Turris/Foris JS
Translate-URL: https://hosted.weblate.org/projects/turris/foris-js/sk/
2022-12-05 17:48:13 +01:00
30 changed files with 13826 additions and 14182 deletions

1
.gitignore vendored
View File

@@ -51,4 +51,3 @@ coverage.xml
dist/
foris-*.tgz
styleguide/
testUtils

27402
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "foris",
"version": "5.5.0",
"version": "5.6.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": {
@@ -18,8 +18,9 @@
"immutability-helper": "3.0.1",
"moment": "^2.24.0",
"qrcode.react": "^1.0.1",
"react-datetime": "^3.1.1",
"react-uid": "^2.2.0"
"react-datetime": "^3.2.0",
"react-uid": "^2.2.0",
"socket.io-client": "^4.6.1"
},
"peerDependencies": {
"bootstrap": "4.4.1",
@@ -29,14 +30,14 @@
"react-router-dom": "^5.1.2"
},
"devDependencies": {
"@babel/cli": "^7.12.10",
"@babel/core": "^7.9.0",
"@babel/plugin-transform-runtime": "^7.9.0",
"@babel/preset-env": "^7.9.0",
"@babel/cli": "^7.20.7",
"@babel/core": "^7.20.12",
"@babel/plugin-transform-runtime": "^7.19.6",
"@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.9.4",
"@fortawesome/fontawesome-free": "^5.13.0",
"@testing-library/react": "^8.0.9",
"babel-loader": "^8.1.0",
"babel-loader": "^8.3.0",
"babel-polyfill": "^6.26.0",
"bootstrap": "^4.5.0",
"css-loader": "^5.2.4",
@@ -45,18 +46,18 @@
"eslint-config-reforis": "^1.0.0",
"eslint-plugin-prettier": "^3.1.4",
"file-loader": "^6.0.0",
"jest": "^25.2.0",
"jest": "^29.5.0",
"jest-mock-axios": "^3.2.0",
"moment-timezone": "^0.5.34",
"moment-timezone": "^0.5.40",
"prettier": "2.0.5",
"prop-types": "15.8.1",
"react": "16.9.0",
"react-dom": "16.9.0",
"react-router-dom": "^5.1.2",
"react-styleguidist": "^11.2.0",
"react-router-dom": "^5.3.4",
"react-styleguidist": "^13.1.1",
"snapshot-diff": "^0.7.0",
"style-loader": "^1.2.1",
"webpack": "^5.68.0"
"webpack": "^5.75.0"
},
"scripts": {
"lint": "eslint src",

View File

@@ -14,7 +14,7 @@ import { ForisURLs } from "../utils/forisUrls";
import { Button } from "../bootstrap/Button";
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
import { useAlert } from "../alertContext/AlertContext";
import { useAlert } from "../context/alertContext/AlertContext";
export function RebootButton(props) {
const [triggered, setTriggered] = useState(false);

View File

@@ -9,7 +9,7 @@ import React, { useEffect, useState } from "react";
import PropTypes from "prop-types";
import { Button } from "../../bootstrap/Button";
import { useAlert } from "../../alertContext/AlertContext";
import { useAlert } from "../../context/alertContext/AlertContext";
import { ALERT_TYPES } from "../../bootstrap/Alert";
import { useAPIPost } from "../../api/hooks";
import { API_STATE } from "../../api/utils";
@@ -25,7 +25,7 @@ export function ResetWiFiSettings({ ws, endpoint }) {
useEffect(() => {
const module = "wifi";
ws.subscribe(module).bind(module, "reset", () => {
ws.bind(module, "reset", () => {
// eslint-disable-next-line no-restricted-globals
setTimeout(() => location.reload(), 1000);
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://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.
@@ -64,7 +64,7 @@ DeviceForm.propTypes = {
guest_wifi: PropTypes.object.isRequired,
encryption: PropTypes.string.isRequired,
available_bands: PropTypes.array.isRequired,
ieee80211w_disabled: PropTypes.bool.isRequired,
ieee80211w_disabled: PropTypes.bool,
}),
formErrors: PropTypes.object.isRequired,
setFormValue: PropTypes.func.isRequired,

View File

@@ -8,8 +8,8 @@
import React, { useState, useContext, useCallback } from "react";
import PropTypes from "prop-types";
import { Alert, ALERT_TYPES } from "../bootstrap/Alert";
import { Portal } from "../utils/Portal";
import { Alert, ALERT_TYPES } from "../../bootstrap/Alert";
import { Portal } from "../../utils/Portal";
AlertContextProvider.propTypes = {
children: PropTypes.oneOfType([

View File

@@ -0,0 +1,57 @@
/*
* 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.
*/
import React, { useContext, useEffect } from "react";
import PropTypes from "prop-types";
import { useAPIGet } from "../../api/hooks";
import { ForisURLs } from "../../utils/forisUrls";
import { Spinner } from "../../bootstrap/Spinner";
CustomizationContextProvider.propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]),
};
function CustomizationContextProvider({ children }) {
const { CustomizationContext } = window;
const [getCustomizationResponse, getCustomization] = useAPIGet(
ForisURLs.about
);
useEffect(() => {
getCustomization();
}, [getCustomization]);
if (getCustomizationResponse.state !== "success") {
return <Spinner fullScreen />;
}
const deviceDetails = getCustomizationResponse.data || {};
const isCustomized = !!(
deviceDetails &&
deviceDetails.customization !== undefined &&
deviceDetails.customization === "shield"
);
return (
<CustomizationContext.Provider value={{ deviceDetails, isCustomized }}>
{children}
</CustomizationContext.Provider>
);
}
function useCustomizationContext() {
const { CustomizationContext } = window;
return useContext(CustomizationContext);
}
export { CustomizationContextProvider, useCustomizationContext };

View File

@@ -0,0 +1,3 @@
It provides customization context to the children. `CustomizationContext` allows
using `useCustomizationContext` in components to check if the reForis UI is
customized or not for specific devices.

View File

@@ -0,0 +1,53 @@
/*
* 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.
*/
import React from "react";
import { render, wait, getByText } from "customTestRender";
import mockAxios from "jest-mock-axios";
import {
useCustomizationContext,
CustomizationContextProvider,
} from "../CustomizationContext";
const CUSTOM = "Description / component for customized reForis (Shield)";
const ORIGINAL = "Description / component for original reForis (other devices)";
const CustomizationTest = () => {
const { isCustomized } = useCustomizationContext();
return <p>{isCustomized ? CUSTOM : ORIGINAL}</p>;
};
describe("CustomizationContext", () => {
let componentContainer;
beforeEach(() => {
const { container } = render(
<CustomizationContextProvider>
<CustomizationTest />
</CustomizationContextProvider>
);
componentContainer = container;
});
it("should render component without customization", async () => {
mockAxios.mockResponse({ data: {} });
await wait(() => getByText(componentContainer, ORIGINAL));
expect(componentContainer).toMatchSnapshot();
});
it("should render customized component", async () => {
mockAxios.mockResponse({ data: { customization: "shield" } });
await wait(() => getByText(componentContainer, CUSTOM));
expect(componentContainer).toMatchSnapshot();
});
});

View File

@@ -0,0 +1,17 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`CustomizationContext should render component without customization 1`] = `
<div>
<p>
Description / component for original reForis (other devices)
</p>
</div>
`;
exports[`CustomizationContext should render customized component 1`] = `
<div>
<p>
Description / component for customized reForis (Shield)
</p>
</div>
`;

View File

@@ -13,7 +13,7 @@ import { ALERT_TYPES } from "../../bootstrap/Alert";
import { API_STATE } from "../../api/utils";
import { formFieldsSize } from "../../bootstrap/constants";
import { Spinner } from "../../bootstrap/Spinner";
import { useAlert } from "../../alertContext/AlertContext";
import { useAlert } from "../../context/alertContext/AlertContext";
import { useAPIPost } from "../../api/hooks";
import { useForisModule, useForm } from "../hooks";

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://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.
@@ -90,4 +90,13 @@ export {
} from "./utils/validations";
// Alert context
export { AlertContextProvider, useAlert } from "./alertContext/AlertContext";
export {
AlertContextProvider,
useAlert,
} from "./context/alertContext/AlertContext";
// Customization context
export {
CustomizationContextProvider,
useCustomizationContext,
} from "./context/customizationContext/CustomizationContext";

View File

@@ -14,6 +14,7 @@ import { render } from "@testing-library/react";
import PropTypes from "prop-types";
import { AlertContextMock } from "./alertContextMock";
import { CustomizationContextMock } from "./cutomizationContextMock";
Wrapper.propTypes = {
children: PropTypes.oneOfType([
@@ -24,11 +25,13 @@ Wrapper.propTypes = {
function Wrapper({ children }) {
return (
<AlertContextMock>
<StaticRouter>
<UIDReset>{children}</UIDReset>
</StaticRouter>
</AlertContextMock>
<CustomizationContextMock>
<AlertContextMock>
<StaticRouter>
<UIDReset>{children}</UIDReset>
</StaticRouter>
</AlertContextMock>
</CustomizationContextMock>
);
}

View File

@@ -0,0 +1,34 @@
/*
* 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.
*/
import React from "react";
window.CustomizationContext = React.createContext();
const deviceDetails = {
kernel: "5.x.x",
model: "Turris Omnia",
os_branch: {
mode: "branch",
value: "hbs",
},
os_version: "6.x.x",
reforis_version: "1.x.x",
serial: 123456789,
};
const isCustomized = false;
function CustomizationContextMock({ children }) {
return (
<CustomizationContext.Provider value={{ deviceDetails, isCustomized }}>
{children}
</CustomizationContext.Provider>
);
}
export { CustomizationContextMock };

View File

@@ -1,11 +1,11 @@
/*
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
* Copyright (C) 2019-2022 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.
*/
export const REFORIS_URL_PREFIX = "/reforis";
export const REFORIS_URL_PREFIX = process.env.REFORIS_PREFIX || "";
export const REFORIS_API_URL_PREFIX = `${REFORIS_URL_PREFIX}/api`;
export const ForisURLs = {
@@ -36,5 +36,6 @@ export const ForisURLs = {
luci: "/cgi-bin/luci",
// API
about: `${REFORIS_API_URL_PREFIX}/about`,
reboot: `${REFORIS_API_URL_PREFIX}/reboot`,
};

View File

@@ -7,49 +7,33 @@
/* eslint no-console: "off" */
const PROTOCOL = window.location.protocol === "http:" ? "ws" : "wss";
import { REFORIS_URL_PREFIX } from "../utils/forisUrls";
const URL = process.env.LIGHTTPD
? `${PROTOCOL}://${window.location.host}/${
process.env.WSPATH || "foris-ws"
}`
: `${PROTOCOL}://${window.location.hostname}:9081`;
const WAITING_FOR_CONNECTION_TIMEOUT = 500;
const { io } = require("socket.io-client");
export class WebSockets {
constructor() {
this.ws = new WebSocket(URL);
this.ws.onerror = (e) => {
console.error("WS: Error:", e);
};
this.ws.onmessage = (e) => {
console.debug(`WS: Received Message: ${e.data}`);
const data = JSON.parse(e.data);
this.dispatch(data);
};
this.ws.onopen = () => {
console.debug("WS: Connection open.");
};
this.ws.onclose = () => {
console.debug("WS: Connection closed.");
};
this.socket = io("/notifications", {
path: `${REFORIS_URL_PREFIX}/reforis-ws`,
});
this.connection = null;
this.socket.on("disconnect", (reason) => {
this.connection = null;
console.debug(`SocketIO disconnected (${reason})`);
});
this.socket.on("notification", (message) => {
console.debug("WS: Received Message:", message);
this.dispatch(message);
});
this.socket.on("connect", (connection) => {
this.connection = connection;
console.debug(`SocketIO connected.`);
});
// callbacks[module][action]
this.callbacks = {};
}
waitForConnection(callback) {
if (this.ws.readyState === 1) {
callback();
} else {
const that = this;
setTimeout(() => {
that.waitForConnection(callback);
}, WAITING_FOR_CONNECTION_TIMEOUT);
}
}
bind(module, action, callback) {
this.callbacks[module] = this.callbacks[module] || {};
this.callbacks[module][action] = this.callbacks[module][action] || [];
@@ -57,13 +41,6 @@ export class WebSockets {
return this;
}
subscribe(module) {
this.waitForConnection(() => {
this.send("subscribe", module);
});
return this;
}
unbind(module, action, callback) {
const callbacks = this.callbacks[module][action];
@@ -77,28 +54,12 @@ export class WebSockets {
}
if (Object.keys(this.callbacks[module]).length === 0) {
this.unsubscribe(module);
delete this.callbacks[module];
}
return this;
}
unsubscribe(module) {
this.waitForConnection(() => {
this.send("unsubscribe", module);
delete this.callbacks[module];
});
return this;
}
send(action, params) {
const payload = JSON.stringify({ action, params });
this.waitForConnection(() => {
this.ws.send(payload);
});
return this;
}
dispatch(json) {
if (!json.module) return;
@@ -107,18 +68,15 @@ export class WebSockets {
chain = this.callbacks[json.module][json.action];
} catch (error) {
if (error instanceof TypeError) {
console.warn(
`Callback for this message wasn't found:${error.data}`
console.debug(
`Callbacks for this module wasn't found: ${json.module}`
);
} else throw error;
}
if (typeof chain === "undefined") return;
console.debug("Handling WS message", json);
chain.forEach((callback) => callback(json));
}
close() {
this.ws.close();
}
}

View File

@@ -32,7 +32,7 @@ export function useWSForisModule(
setData(message.data);
}
ws.subscribe(module).bind(module, action, callback);
ws.bind(module, action, callback);
return () => {
ws.unbind(module, action, callback);

View File

@@ -43,7 +43,7 @@ module.exports = {
},
{
name: "Alert Context",
components: ["src/alertContext/AlertContext.js"],
components: ["src/context/alertContext/AlertContext.js"],
exampleMode: "expand",
usageMode: "expand",
},
@@ -51,6 +51,14 @@ module.exports = {
sectionDepth: 1,
},
{
name: "Customization Context",
components: [
"src/context/customizationContext/CustomizationContext.js",
],
exampleMode: "expand",
usageMode: "expand",
},
{
name: "Bootstrap components",
description: "Set of bootstrap components.",

View File

@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-03-15 22:41+0000\n"
"Last-Translator: Koli <lukas.koluch@gmail.com>\n"
"PO-Revision-Date: 2023-04-16 13:52+0000\n"
"Last-Translator: František Bartoš <frantisek.bartos@email.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
">\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 4.17-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -37,11 +38,11 @@ msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
#: src/bootstrap/CopyInput.js:55
msgid "Copied!"
msgstr ""
msgstr "Zkopírováno!"
#: src/bootstrap/CopyInput.js:55
msgid "Copy"
msgstr ""
msgstr "Kopírovat"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
@@ -61,7 +62,7 @@ msgstr "Opravdu chcete router restartovat?"
#: src/common/RebootButton.js:71
msgid "Cancel"
msgstr "Storno"
msgstr "Zrušit"
#: src/common/RebootButton.js:73
msgid "Confirm reboot"
@@ -86,6 +87,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í aktuální konfigurace Wi-Fi a "
"obnoví se výchozí hodnoty."
#: src/common/WiFiSettings/WiFiForm.js:95
msgid "Wi-Fi ${deviceID + 1}"
@@ -103,7 +107,7 @@ msgstr "Skrýt SSID"
#: src/common/WiFiSettings/WiFiForm.js:186
#, fuzzy
msgid "802.11n/ac/ax mode"
msgstr "Režim 802.11n/ac"
msgstr "Režim 802.11n/ac/ax"
#: src/common/WiFiSettings/WiFiForm.js:199
msgid "Channel"
@@ -168,7 +172,7 @@ msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
#: src/common/WiFiSettings/WiFiSettings.js:109
#, fuzzy
msgid "Password must not contain more than 63 symbols"
msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
msgstr "Heslo nesmí obsahovat více než 63 znaků"
#: src/common/WiFiSettings/constants.js:9
msgid "Disabled"
@@ -394,4 +398,3 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
#~ "ale, že\n"
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
#~ " "

View File

@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2021-09-24 19:38+0000\n"
"Last-Translator: CryptKid <CryptKiddie@chaospott.de>\n"
"PO-Revision-Date: 2023-08-13 10:47+0000\n"
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-js/"
"de/>\n"
"Language: 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"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.0-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -37,11 +38,11 @@ msgstr "Ein unbekannter API-Fehler ist aufgetreten."
#: src/bootstrap/CopyInput.js:55
msgid "Copied!"
msgstr ""
msgstr "Kopiert!"
#: src/bootstrap/CopyInput.js:55
msgid "Copy"
msgstr ""
msgstr "Kopieren"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
@@ -103,9 +104,8 @@ msgid "Hide SSID"
msgstr "SSID verbergen"
#: src/common/WiFiSettings/WiFiForm.js:186
#, fuzzy
msgid "802.11n/ac/ax mode"
msgstr "802.11n/ac Modus"
msgstr "802.11n/ac/ax-Modus"
#: src/common/WiFiSettings/WiFiForm.js:199
msgid "Channel"
@@ -113,26 +113,27 @@ msgstr "Kanal"
#: src/common/WiFiSettings/WiFiForm.js:211
msgid "Encryption"
msgstr ""
msgstr "Verschlüsselung"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
msgstr ""
msgstr "Management Frame Protection abschalten"
#: src/common/WiFiSettings/WiFiForm.js:227
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."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
msgstr "automatisch"
#: src/common/WiFiSettings/WiFiForm.js:303
#, fuzzy
msgid "Custom"
msgstr "automatisch"
msgstr "Benutzerdefiniert"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
msgid "Enable Guest Wi-Fi"
@@ -149,17 +150,17 @@ msgstr "PDF herunterladen"
#: src/common/WiFiSettings/WiFiSettings.js:82
#: src/common/WiFiSettings/WiFiSettings.js:98
msgid "SSID can't be longer than 32 symbols"
msgstr "SSID darf nicht länger als 32 Symbole sein"
msgstr "Die SSID darf nicht länger als 32 Zeichen sein"
#: src/common/WiFiSettings/WiFiSettings.js:83
#: src/common/WiFiSettings/WiFiSettings.js:100
msgid "SSID can't be empty"
msgstr "SSID darf nicht leer sein"
msgstr "Die SSID darf nicht leer sein"
#: src/common/WiFiSettings/WiFiSettings.js:85
#: src/common/WiFiSettings/WiFiSettings.js:102
msgid "SSID can't be longer than 32 bytes"
msgstr "SSID darf nicht länger als 32 Symbole sein"
msgstr "Die SSID darf nicht länger als 32 Bytes sein"
#: src/common/WiFiSettings/WiFiSettings.js:88
#: src/common/WiFiSettings/WiFiSettings.js:105
@@ -168,9 +169,8 @@ msgstr "Das Passwort muss mindestens 8 Zeichen enthalten"
#: src/common/WiFiSettings/WiFiSettings.js:90
#: src/common/WiFiSettings/WiFiSettings.js:109
#, fuzzy
msgid "Password must not contain more than 63 symbols"
msgstr "Das Passwort muss mindestens 8 Zeichen enthalten"
msgstr "Das Passwort darf höchstens 63 Zeichen enthalten"
#: src/common/WiFiSettings/constants.js:9
msgid "Disabled"
@@ -197,56 +197,48 @@ msgid "802.11ac - 80 MHz wide channel"
msgstr "802.11ac - 80 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:15
#, fuzzy
msgid "802.11ac - 160 MHz wide channel"
msgstr "802.11ac - 80 MHz breiter Kanal"
msgstr "802.11ac - 160 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:16
#, fuzzy
msgid "802.11ax - 20 MHz wide channel"
msgstr "802.11ac - 20 MHz breiter Kanal"
msgstr "802.11ax - 20 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:17
#, fuzzy
msgid "802.11ax - 40 MHz wide channel"
msgstr "802.11ac - 40 MHz breiter Kanal"
msgstr "802.11ax - 40 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:18
#, fuzzy
msgid "802.11ax - 80 MHz wide channel"
msgstr "802.11ac - 80 MHz breiter Kanal"
msgstr "802.11ax - 80 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:19
#, fuzzy
msgid "802.11ax - 160 MHz wide channel"
msgstr "802.11ac - 80 MHz breiter Kanal"
msgstr "802.11ax - 160 MHz breiter Kanal"
#: src/common/WiFiSettings/constants.js:26
msgid "WPA3 only"
msgstr ""
msgstr "Nur WPA3"
#: src/common/WiFiSettings/constants.js:27
msgid "WPA3 with WPA2 as fallback (default)"
msgstr ""
msgstr "WPA3 mit WPA2 als Ausweichmöglichkeit (Voreinstellung)"
#: src/common/WiFiSettings/constants.js:28
msgid "WPA2 only"
msgstr ""
msgstr "Nur WPA2"
#: src/common/WiFiSettings/constants.js:31
msgid ""
"SSID which contains non-standard characters could cause problems on some "
"devices."
msgstr ""
"SSIDs, die nicht standardmäßige Zeichen enthalten, können auf manchen "
"Geräten Probleme verursachen."
#: src/common/WiFiSettings/constants.js:34
#, fuzzy
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
msgstr ""
"\n"
" WPA2 Pre-Shared Key, der für die Verbindung mit dem Netzwerk "
"benötigt wird.\n"
" "
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."
@@ -255,39 +247,31 @@ msgstr ""
"drahtlosen Netzwerke angezeigt."
#: src/common/WiFiSettings/constants.js:40
#, fuzzy
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."
msgstr ""
"\n"
" Das 2,4 GHz-Band wird stärker von Clients unterstützt, hat aber "
"tendenziell mehr Interferenzen. Das 5-GHz-Band ist ein\n"
" neuerer Standard und wird möglicherweise nicht von allen Geräten "
"unterstützt. Es hat in der Regel weniger Interferenzen, aber das Signal\n"
" trägt nicht so gut drinnen."
"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."
#: src/common/WiFiSettings/constants.js:43
#, fuzzy
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."
msgstr ""
"\n"
" Ändern Sie diese Option, um den Betriebsmodus 802.11n/ac "
"anzupassen. 802.11n mit 40 MHz breiten Kanälen können höhere\n"
" durchsatz, kann jedoch zu mehr Interferenzen im Netzwerk führen. "
"Wenn Sie nicht wissen, was Sie wählen sollen, verwenden Sie die "
"Standardeinstellung\n"
" Option mit 20 MHz breitem Kanal.\n"
" "
"Ä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
#, fuzzy
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 "
@@ -295,14 +279,11 @@ msgid ""
"router. Parameters of the guest network can be set in the Guest network "
"tab."
msgstr ""
"\n"
" Ermöglicht Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. "
"Geräte, die mit diesem Netzwerk verbunden sind, dürfen\n"
" auf das Internet zugreifen, dürfen aber nicht auf andere Geräte "
"und die Konfigurationsschnittstelle des Routers zugreifen.\n"
" Die Parameter des Gastnetzwerks können in der Registerkarte "
"Gastnetzwerk eingestellt werden.\n"
" "
"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 ""
@@ -311,6 +292,11 @@ msgid ""
"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."
#: src/form/components/ForisForm.js:121
msgid "Settings saved successfully"
@@ -319,6 +305,8 @@ msgstr "Einstellungen erfolgreich gespeichert"
#: src/form/components/ForisForm.js:183
msgid "Changes you made may not be saved. Are you sure you want to leave?"
msgstr ""
"Änderungen, die Sie vorgenommen haben, werden möglicherweise nicht "
"gespeichert. Möchten Sie wirklich gehen?"
#: src/form/components/SubmitButton.js:31
msgid "Updating"
@@ -334,11 +322,11 @@ msgstr "Speichern"
#: src/utils/ErrorMessage.js:16
msgid "An error occurred while fetching data."
msgstr ""
msgstr "Beim Abruf der Daten ist ein Fehler aufgetreten."
#: src/utils/validations.js:13
msgid "This is not a valid IPv4 address."
msgstr "Dies ist keine gültige IPv4-Adresse."
msgstr "Das ist keine gültige IPv4 Adresse."
#: src/utils/validations.js:14
msgid "This is not a valid IPv6 address."
@@ -353,9 +341,8 @@ msgid "This is not a valid domain name."
msgstr "Dies ist kein gültiger Domainname."
#: src/utils/validations.js:17
#, fuzzy
msgid "This is not a valid hostname."
msgstr "Dies ist kein gültiger Domainname."
msgstr "Dies ist kein gültiger Hostname."
#: src/utils/validations.js:18
msgid "This is not a valid DUID."
@@ -387,4 +374,3 @@ msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
#~ "current Wi-Fi configuration and restore the default values.\n"
#~ " "
#~ msgstr ""

View File

@@ -8,19 +8,21 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/turris/foris-js/"
"it/>\n"
"Language: it\n"
"Language-Team: it <LL@li.org>\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 4.15.1-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
msgid "The session is expired. Please log in again."
msgstr ""
msgstr "Sessione scaduta. Ripetere l'accesso."
#: src/api/utils.js:66
msgid "Timeout error occurred."
@@ -93,7 +95,7 @@ msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:132
#: src/common/WiFiSettings/WiFiGuestForm.js:80
msgid "Password"
msgstr ""
msgstr "Password"
#: src/common/WiFiSettings/WiFiForm.js:146
msgid "Hide SSID"
@@ -295,7 +297,7 @@ msgstr ""
#: src/utils/validations.js:13
msgid "This is not a valid IPv4 address."
msgstr ""
msgstr "Indirizzo IPv4 non valido."
#: src/utils/validations.js:14
msgid "This is not a valid IPv6 address."
@@ -414,4 +416,3 @@ msgstr ""
#~ " default option with 20 MHz wide "
#~ "channel."
#~ msgstr ""

View File

@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-10-26 07:01+0000\n"
"PO-Revision-Date: 2023-03-02 11:40+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/turris/"
"foris-js/nb_NO/>\n"
"Language: nb_NO\n"
"Language-Team: Norwegian Bokmål "
"<https://hosted.weblate.org/projects/turris/foris-js/nb_NO/>\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 4.16.2-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -121,14 +122,18 @@ msgid "Encryption"
msgstr "Kryptering"
#: src/common/WiFiSettings/WiFiForm.js:226
#, fuzzy
msgid "Disable Management Frame Protection"
msgstr ""
msgstr "Skru av håndtering av rammebeskyttelse"
#: src/common/WiFiSettings/WiFiForm.js:227
#, fuzzy
msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"I fall du har problemer med å koble til Wi-Fi-tilgangspunkt, kan du skru av "
"håndtering av rammebeskyttelse."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
@@ -388,4 +393,3 @@ msgstr "Inneholder ikke en kommainndelt liste med e-postadresser."
#~ "\n"
#~ "gjeldende Wi-Fi-oppsett og tilbakestiller forvalgte verdier.\n"
#~ " "

View File

@@ -8,16 +8,17 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-09-27 15:19+0000\n"
"Last-Translator: Orest Worhacz <areyouloco@paranoici.org>\n"
"PO-Revision-Date: 2023-03-07 16:37+0000\n"
"Last-Translator: Arusekk <arek_koz@o2.pl>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/turris/foris-js/"
"pl/>\n"
"Language: pl\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/turris/foris-"
"js/pl/>\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && "
"(n%100<10 || n%100>=20) ? 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%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.16.2-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -57,9 +58,8 @@ msgid "Warning!"
msgstr "Ostrzeżenie!"
#: src/common/RebootButton.js:68
#, fuzzy
msgid "Are you sure you want to restart the router?"
msgstr "Czy jesteś pewien/pewna, że chcesz zrestartować router?"
msgstr "Czy na pewno zrestartować router?"
#: src/common/RebootButton.js:71
msgid "Cancel"
@@ -130,7 +130,7 @@ msgstr ""
#: src/common/WiFiSettings/WiFiForm.js:303
msgid "Custom"
msgstr ""
msgstr "Własny"
#: src/common/WiFiSettings/WiFiGuestForm.js:42
msgid "Enable Guest Wi-Fi"
@@ -171,7 +171,7 @@ msgstr ""
#: src/common/WiFiSettings/constants.js:9
msgid "Disabled"
msgstr ""
msgstr "Wyłączone"
#: src/common/WiFiSettings/constants.js:10
msgid "802.11n - 20 MHz wide channel"
@@ -417,4 +417,3 @@ msgstr "Nie zawiera listy e-maili oddzielonych przecinkami."
#~ " default option with 20 MHz wide "
#~ "channel."
#~ msgstr ""

View File

@@ -8,16 +8,17 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-05-28 09:19+0000\n"
"PO-Revision-Date: 2022-12-07 12:47+0000\n"
"Last-Translator: Алексей Леньшин <alenshin@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/turris/foris-js/"
"ru/>\n"
"Language: ru\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/turris/foris-"
"js/ru/>\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 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%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.15-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -118,13 +119,15 @@ msgstr "Шифрование"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
msgstr ""
msgstr "Отключить защиту кадров управления"
#: src/common/WiFiSettings/WiFiForm.js:227
msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"Если у вас возникли проблемы с подключением к точке доступа Wi-Fi, "
"попробуйте отключить защиту кадров управления."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
@@ -381,4 +384,3 @@ msgstr "Не содержит списка электронных адресов
#~ "конфигурации Wi-Fi и восстановлению "
#~ "значений по умолчанию.\n"
#~ " "

View File

@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2022-05-30 06:14+0000\n"
"PO-Revision-Date: 2023-01-17 22:51+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 4.15.1-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -117,13 +118,15 @@ msgstr "Šifrovanie"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
msgstr ""
msgstr "Zakázať Management Frame Protection"
#: src/common/WiFiSettings/WiFiForm.js:227
msgid ""
"In case you have trouble connecting to WiFi Access Point, try disabling "
"Management Frame Protection."
msgstr ""
"Ak máte problémy s pripojením k prístupovému bodu WiFi, skúste zakázať "
"Management Frame Protection."
#: src/common/WiFiSettings/WiFiForm.js:262
msgid "auto"
@@ -377,4 +380,3 @@ msgstr "Neobsahuje zoznam e-mailov oddelených čiarkami."
#~ "že sa tým odstráni aktuálna konfigurácia"
#~ " a obnovia sa východiskové hodnoty.\n"
#~ " "

View File

@@ -8,16 +8,16 @@ msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-02 15:54+0100\n"
"PO-Revision-Date: 2021-09-26 03:39+0000\n"
"Last-Translator: Kristoffer Grundström "
"<swedishsailfishosuser@tutanota.com>\n"
"PO-Revision-Date: 2023-09-22 21:00+0000\n"
"Last-Translator: Kristoffer Grundström <swedishsailfishosuser@tutanota.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/turris/foris-js/"
"sv/>\n"
"Language: sv\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/turris/foris-"
"js/sv/>\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.1-dev\n"
"Generated-By: Babel 2.11.0\n"
#: src/api/utils.js:61
@@ -30,19 +30,19 @@ msgstr ""
#: src/api/utils.js:69
msgid "No response received."
msgstr ""
msgstr "Inget svar togs emot."
#: src/api/utils.js:79
msgid "An unknown API error occurred."
msgstr ""
msgstr "Ett okänt API-fel inträffade."
#: src/bootstrap/CopyInput.js:55
msgid "Copied!"
msgstr ""
msgstr "Kopierades!"
#: src/bootstrap/CopyInput.js:55
msgid "Copy"
msgstr ""
msgstr "Kopiera"
#: src/common/RebootButton.js:27
msgid "Reboot request failed."
@@ -70,11 +70,11 @@ msgstr "Bekräfta omstart"
#: src/common/WiFiSettings/ResetWiFiSettings.js:38
msgid "An error occurred during resetting Wi-Fi settings."
msgstr ""
msgstr "Ett fel inträffade under återställningen av Wi-Fi-inställningarna."
#: src/common/WiFiSettings/ResetWiFiSettings.js:41
msgid "Wi-Fi settings are set to defaults."
msgstr ""
msgstr "Wi-Fi-inställningarna har ställts in standardinställningarna."
#: src/common/WiFiSettings/ResetWiFiSettings.js:55
#: src/common/WiFiSettings/ResetWiFiSettings.js:69
@@ -87,6 +87,9 @@ msgid ""
"Fi settings. Note that this will remove the current Wi-Fi configuration "
"and restore the default values."
msgstr ""
"Om ett antal trådlösa kort inte matchar så kan du prova att återställa Wi-Fi-"
"inställningarna. Notera att det här kommer att ta bort den nuvarande Wi-Fi-"
"konfigurationen och återställa till standardvärdena."
#: src/common/WiFiSettings/WiFiForm.js:95
msgid "Wi-Fi ${deviceID + 1}"
@@ -99,11 +102,11 @@ msgstr "Lösenord"
#: src/common/WiFiSettings/WiFiForm.js:146
msgid "Hide SSID"
msgstr ""
msgstr "Göm SSID"
#: src/common/WiFiSettings/WiFiForm.js:186
msgid "802.11n/ac/ax mode"
msgstr ""
msgstr "802.11n/ac/ax-läge"
#: src/common/WiFiSettings/WiFiForm.js:199
#, fuzzy
@@ -112,7 +115,7 @@ msgstr "Avbryt"
#: src/common/WiFiSettings/WiFiForm.js:211
msgid "Encryption"
msgstr ""
msgstr "Kryptering"
#: src/common/WiFiSettings/WiFiForm.js:226
msgid "Disable Management Frame Protection"
@@ -221,7 +224,7 @@ msgstr "802.11ac - 160 MHz bred kanal"
#: src/common/WiFiSettings/constants.js:26
msgid "WPA3 only"
msgstr ""
msgstr "Endast WPA3"
#: src/common/WiFiSettings/constants.js:27
msgid "WPA3 with WPA2 as fallback (default)"
@@ -229,13 +232,15 @@ msgstr ""
#: src/common/WiFiSettings/constants.js:28
msgid "WPA2 only"
msgstr ""
msgstr "Endast WPA2"
#: src/common/WiFiSettings/constants.js:31
msgid ""
"SSID which contains non-standard characters could cause problems on some "
"devices."
msgstr ""
"SSID som innehåller icke-standardiserade tecken kan orsaka problem i en del "
"enheter."
#: src/common/WiFiSettings/constants.js:34
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
@@ -424,4 +429,3 @@ msgstr ""
#~ " default option with 20 MHz wide "
#~ "channel."
#~ msgstr ""