mirror of
https://gitlab.nic.cz/turris/reforis/foris-js.git
synced 2025-06-15 13:36:35 +02:00
Compare commits
96 Commits
Author | SHA1 | Date | |
---|---|---|---|
227a975e5f | |||
819e5a1dd2 | |||
6432073d62 | |||
94f436008d | |||
6f9e44a7b1 | |||
13ca745412 | |||
a25133d786 | |||
0a839bf369 | |||
54a801a580 | |||
377b4279fd | |||
317966e1c9 | |||
326790d80d | |||
700b28c463 | |||
3d725e7e1b | |||
ede4fb0212 | |||
33add77704 | |||
456cbcfeec | |||
bf0b2ce70c | |||
1441f6ff5a | |||
c7d0655771 | |||
7197813cc9 | |||
31cb8e2ae0 | |||
0a75f24a04 | |||
230ae8e35b | |||
eb4ffb0651 | |||
2f249ce3dc | |||
74722b8ff3 | |||
a2f9b3bfab | |||
2ab65be0bf | |||
36a7b4dfda | |||
9fb0871cfc | |||
c7087eabf2 | |||
b315ea2fd0 | |||
d46629a1bd | |||
8ddb590ba8 | |||
1c2a4518d3 | |||
b6312075d2 | |||
2feedec8d1 | |||
dff5f87e91 | |||
38de792390 | |||
c23616811a | |||
f1132c6b22 | |||
e8e81b36dc | |||
53c7bb1a10 | |||
fb1f79c6c1 | |||
eafbc01c73 | |||
73819809f4 | |||
ffa1121d39 | |||
ee6865e3bb | |||
6352060da3 | |||
a63b5bfa4e | |||
4b2e47f8f9 | |||
66f83b24bd | |||
30fd6f91b4 | |||
5a53eca138 | |||
8d2a4dc108 | |||
2481a0c025 | |||
71697424c5 | |||
07f8e3b9de | |||
c9f2b24095 | |||
087ecfa670 | |||
e6365ecac4 | |||
e57722caa0 | |||
babdf92ddd | |||
42294316d9 | |||
b65e034b04 | |||
14b90bbbd4 | |||
85b207b1dd | |||
79e61d9507 | |||
6795c3941b | |||
969e8e6411 | |||
0099759279 | |||
87c81a2a2d | |||
81b71f8153 | |||
c0fd0adbc9 | |||
1ec0a26199 | |||
76e37b738a | |||
8a69d14429 | |||
4d5395c826 | |||
1fb83e08ea | |||
e6cfc6dbb0 | |||
a93a64bf96 | |||
1ab77decfd | |||
b6e1e0adae | |||
a7a4e76cd1 | |||
e7758cab9a | |||
bf88b76613 | |||
3cf85a9516 | |||
7c8442300a | |||
e849397aa2 | |||
c1b44d498c | |||
1b5a5da953 | |||
7f45201f05 | |||
f34d9bbdbd | |||
c7ff3f42f6 | |||
a1036514dd |
428
CHANGELOG.md
428
CHANGELOG.md
@ -8,360 +8,448 @@ and this project adheres to
|
|||||||
|
|
||||||
## [Unreleased]
|
## [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
|
||||||
|
|
||||||
|
- Refactored Alert component to include dismiss animation and timeout
|
||||||
|
- Refactored ThreeDotsMenu component to include additional props
|
||||||
|
|
||||||
|
## [6.3.0] - 2024-09-27
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added ThreeDotsMenu component
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Refactored EmailInput description
|
||||||
|
- Refactored RadioSet & ignore Radio component
|
||||||
|
- Refactored npm package badge in introduction.md
|
||||||
|
- NPM audit fix
|
||||||
|
|
||||||
|
## [6.2.1] - 2024-09-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added & updated Weblate translations
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Refactored CopyInput component
|
||||||
|
- Refactored ForisURLs to include new URLs for Overview page
|
||||||
|
|
||||||
## [6.2.0] - 2024-09-20
|
## [6.2.0] - 2024-09-20
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added useFocusTrap hook
|
- Added useFocusTrap hook
|
||||||
- Added extendSession endpoint
|
- Added extendSession endpoint
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Refactored Spinner.css to use CSS variable for color
|
- Refactored Spinner.css to use CSS variable for color
|
||||||
- Refactored Modal component to use useFocusTrap hook
|
- Refactored Modal component to use useFocusTrap hook
|
||||||
- Refactored Alert component to use useFocusTrap hook
|
- Refactored Alert component to use useFocusTrap hook
|
||||||
|
|
||||||
## [6.1.1] - 2024-08-30
|
## [6.1.1] - 2024-08-30
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added & updated Weblate translations
|
- Added & updated Weblate translations
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated icon color classes to use "text-secondary" instead of "text-dark"
|
- Updated icon color classes to use "text-secondary" instead of "text-dark"
|
||||||
- Updated Wi-Fi QRCodeModal component to use new styles & added close button
|
- Updated Wi-Fi QRCodeModal component to use new styles & added close button
|
||||||
- Refactored WiFiGuestForm component to get rid of obsolete div element
|
- Refactored WiFiGuestForm component to get rid of obsolete div element
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [6.1.0] - 2024-08-23
|
## [6.1.0] - 2024-08-23
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added & updated Weblate translations
|
- Added & updated Weblate translations
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Migrated to Font Awesome v6
|
- Migrated to Font Awesome v6
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [6.0.3] - 2024-07-26
|
## [6.0.3] - 2024-07-26
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated WiFiQRCode component
|
- Updated WiFiQRCode component
|
||||||
|
|
||||||
## [6.0.2] - 2024-06-28
|
## [6.0.2] - 2024-06-28
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added className prop to CheckBox and Radio components
|
- Added className prop to CheckBox and Radio components
|
||||||
|
|
||||||
## [6.0.1] - 2024-06-26
|
## [6.0.1] - 2024-06-26
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added className prop to Switch component
|
- Added className prop to Switch component
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated dependencies in package.json
|
- Updated dependencies in package.json
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [6.0.0] - 2024-06-11
|
## [6.0.0] - 2024-06-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Added CHANGELOG.md
|
- Added CHANGELOG.md
|
||||||
- Added JS_DIR variable to Makefile
|
- Added JS_DIR variable to Makefile
|
||||||
- Added support for shared reForis ESLint configuration
|
- Added support for shared reForis ESLint configuration
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- Updated dependencies in package.json
|
- Updated dependencies in package.json
|
||||||
- Updated Spinner.css styles for better positioning and responsiveness
|
- Updated Spinner.css styles for better positioning and responsiveness
|
||||||
- Migrated to Bootstrap 5
|
- Migrated to Bootstrap 5
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
- Other small improvements
|
- Other small improvements
|
||||||
|
|
||||||
## [5.6.1] - 2024-01-19
|
## [5.6.1] - 2024-01-19
|
||||||
|
|
||||||
- Added & updated Weblate translations
|
- Added & updated Weblate translations
|
||||||
- Fixed loading state & button's layout
|
- Fixed loading state & button's layout
|
||||||
- Updated bootstrap library to version 4.6.2
|
- Updated bootstrap library to version 4.6.2
|
||||||
- Used custom reforis-image in GitLab CI/CD
|
- Used custom reforis-image in GitLab CI/CD
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.6.0] - 2022-12-29
|
## [5.6.0] - 2022-12-29
|
||||||
|
|
||||||
- Add & update Weblate translations
|
- Add & update Weblate translations
|
||||||
- Add CustomizationContext and custom hook
|
- Add CustomizationContext and custom hook
|
||||||
- Update caniuse-lite
|
- Update caniuse-lite
|
||||||
- Remove testUtils from .gitignore
|
- Remove testUtils from .gitignore
|
||||||
- Make ieee80211w_disabled as optional in WiFiForm
|
- Make ieee80211w_disabled as optional in WiFiForm
|
||||||
- Move contexts in a context folder
|
- Move contexts in a context folder
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.5.0] - 2022-12-02
|
## [5.5.0] - 2022-12-02
|
||||||
|
|
||||||
- Add & update translations
|
- Add & update translations
|
||||||
- Add a switch to disable Management Frame Protection (802.11w)
|
- Add a switch to disable Management Frame Protection (802.11w)
|
||||||
- Improved Foris JS documentation
|
- Improved Foris JS documentation
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.4.1] - 2022-06-03
|
## [5.4.1] - 2022-06-03
|
||||||
|
|
||||||
- Add Weblate translations
|
- Add Weblate translations
|
||||||
- Update PropType peer dependency
|
- Update PropType peer dependency
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.4.0] - 2022-05-20
|
## [5.4.0] - 2022-05-20
|
||||||
|
|
||||||
- Add & update translations
|
- Add & update translations
|
||||||
- Add CopyInput bootstrap component
|
- Add CopyInput bootstrap component
|
||||||
- Update WiFiForm labels and description for wifi ax
|
- Update WiFiForm labels and description for wifi ax
|
||||||
- Make WS path in lighttpd mode configurable
|
- Make WS path in lighttpd mode configurable
|
||||||
- Fix Wi-Fi password helptext string
|
- Fix Wi-Fi password helptext string
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.3.0] - 2022-02-21
|
## [5.3.0] - 2022-02-21
|
||||||
|
|
||||||
- Added & update translations
|
- Added & update translations
|
||||||
- Added rest of the props to DownloadButton component
|
- Added rest of the props to DownloadButton component
|
||||||
- Added hostname validation
|
- Added hostname validation
|
||||||
- Added wifi 802.11ax HE modes
|
- Added wifi 802.11ax HE modes
|
||||||
- Set best Wi-Fi HT mode depending on the checked frequency
|
- Set best Wi-Fi HT mode depending on the checked frequency
|
||||||
- Improved domain name RegEx pattern
|
- Improved domain name RegEx pattern
|
||||||
- Removed customOrder prop in Select component
|
- Removed customOrder prop in Select component
|
||||||
- Fixed Wi-Fi translation strings
|
- Fixed Wi-Fi translation strings
|
||||||
- Fixed autocomplete attribute in PasswordInput
|
- Fixed autocomplete attribute in PasswordInput
|
||||||
- Fixed WiFi password max length check
|
- Fixed WiFi password max length check
|
||||||
- Fixed documentation build
|
- Fixed documentation build
|
||||||
- Fixed access token in publish script
|
- Fixed access token in publish script
|
||||||
- Refined & restructure Makefile
|
- Refined & restructure Makefile
|
||||||
- Updated GitLab CI image to Node.js v16
|
- Updated GitLab CI image to Node.js v16
|
||||||
- NPM update (several dependencies)
|
- NPM update (several dependencies)
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.2.0] - 2021-12-15
|
## [5.2.0] - 2021-12-15
|
||||||
|
|
||||||
- Remove login page
|
- Remove login page
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.16] - 2021-11-18
|
## [5.1.16] - 2021-11-18
|
||||||
|
|
||||||
- Revert bad NPM audit fix
|
- Revert bad NPM audit fix
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.15] - 2021-11-03
|
## [5.1.15] - 2021-11-03
|
||||||
|
|
||||||
- Add WPA3 option
|
- Add WPA3 option
|
||||||
- Add custom order ability of Select options
|
- Add custom order ability of Select options
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.14] - 2021-07-30
|
## [5.1.14] - 2021-07-30
|
||||||
|
|
||||||
- Add & update translations
|
- Add & update translations
|
||||||
- Fix infinity redirect loop when WS error occurs
|
- Fix infinity redirect loop when WS error occurs
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.13] - 2021-06-30
|
## [5.1.13] - 2021-06-30
|
||||||
|
|
||||||
- Add sentinelAgreement endpoint to forisUrls
|
- Add sentinelAgreement endpoint to forisUrls
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.12] - 2021-05-14
|
## [5.1.12] - 2021-05-14
|
||||||
|
|
||||||
- Add & update translations
|
- Add & update translations
|
||||||
- Add & fix obsolete links
|
- Add & fix obsolete links
|
||||||
- Expend library with the ResetWifiSettings function
|
- Expend library with the ResetWifiSettings function
|
||||||
- Fix switching Wi-Fi modes depending on bands in WiFiForm
|
- Fix switching Wi-Fi modes depending on bands in WiFiForm
|
||||||
- Fix translation sources in WiFiForm
|
- Fix translation sources in WiFiForm
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
- Other small improvements
|
- Other small improvements
|
||||||
|
|
||||||
## [5.1.11] - 2021-01-04
|
## [5.1.11] - 2021-01-04
|
||||||
|
|
||||||
- Remove duplicated file for Norwegian language
|
- Remove duplicated file for Norwegian language
|
||||||
- Fix translations inconsistency
|
- Fix translations inconsistency
|
||||||
|
|
||||||
## [5.1.10] - 2021-12-29
|
## [5.1.10] - 2021-12-29
|
||||||
|
|
||||||
- Add and update translations
|
- Add and update translations
|
||||||
|
|
||||||
## [5.1.9] - 2021-12-20
|
## [5.1.9] - 2021-12-20
|
||||||
|
|
||||||
- Increase bottom margin of formFieldsSize
|
- Increase bottom margin of formFieldsSize
|
||||||
- Change formFieldsSize of ResetWiFiSettings card
|
- Change formFieldsSize of ResetWiFiSettings card
|
||||||
- Fix trailing space in Modal classes
|
- Fix trailing space in Modal classes
|
||||||
|
|
||||||
## [5.1.8] - 2020-12-19
|
## [5.1.8] - 2020-12-19
|
||||||
|
|
||||||
- Add isPluginInstalled function
|
- Add isPluginInstalled function
|
||||||
|
|
||||||
## [5.1.7] - 2020-11-27
|
## [5.1.7] - 2020-11-27
|
||||||
|
|
||||||
## [5.1.6] - 2020-11-25
|
## [5.1.6] - 2020-11-25
|
||||||
|
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
- Add displayCard function to utils
|
- Add displayCard function to utils
|
||||||
- Add optional sizes to Modal
|
- Add optional sizes to Modal
|
||||||
- Add information about optional sizes to docs
|
- Add information about optional sizes to docs
|
||||||
- Remove redundant merge.py
|
- Remove redundant merge.py
|
||||||
|
|
||||||
## [5.1.5] - 2020-09-25
|
## [5.1.5] - 2020-09-25
|
||||||
|
|
||||||
- Fix DateTime import
|
- Fix DateTime import
|
||||||
- Fix extra empty space in Switch's classes
|
- Fix extra empty space in Switch's classes
|
||||||
|
|
||||||
## [5.1.4] - 2020-09-25
|
## [5.1.4] - 2020-09-25
|
||||||
|
|
||||||
- Add inline option to Wi-Fi's RadioSet
|
- Add inline option to Wi-Fi's RadioSet
|
||||||
- Fix Alert's dismissible class condition
|
- Fix Alert's dismissible class condition
|
||||||
- Add closing bootstrap modal using ESC
|
- Add closing bootstrap modal using ESC
|
||||||
- Change reboot modal's heading to "Warning!"
|
- Change reboot modal's heading to "Warning!"
|
||||||
|
|
||||||
## [5.1.3] - 2020-09-11
|
## [5.1.3] - 2020-09-11
|
||||||
|
|
||||||
- Add SSID validation for 32 bytes length
|
- Add SSID validation for 32 bytes length
|
||||||
- Add helpText for SSID input
|
- Add helpText for SSID input
|
||||||
|
|
||||||
## [5.1.2] - 2020-09-08
|
## [5.1.2] - 2020-09-08
|
||||||
|
|
||||||
- Fix infinity loop caused by WebSockets
|
- Fix infinity loop caused by WebSockets
|
||||||
- Resolve small issues
|
- Resolve small issues
|
||||||
|
|
||||||
## [5.1.1] - 2020-08-31
|
## [5.1.1] - 2020-08-31
|
||||||
|
|
||||||
- Add "inline" option to RadioSet
|
- Add "inline" option to RadioSet
|
||||||
- NPM audit fix
|
- NPM audit fix
|
||||||
|
|
||||||
## [5.1.0] - 2020-08-25
|
## [5.1.0] - 2020-08-25
|
||||||
|
|
||||||
- Add new Switch component
|
- Add new Switch component
|
||||||
- Swap checkboxes for switches on Wi-Fi page
|
- Swap checkboxes for switches on Wi-Fi page
|
||||||
- Decrease button width on different breakpoints
|
- Decrease button width on different breakpoints
|
||||||
- Add integration of Prettier + ESLint + reForis Style Guide
|
- Add integration of Prettier + ESLint + reForis Style Guide
|
||||||
- Add appropriate links to dropdown headers
|
- Add appropriate links to dropdown headers
|
||||||
- Add semantic & accessibility structure for headings
|
- Add semantic & accessibility structure for headings
|
||||||
- NPM audit & Update packages
|
- NPM audit & Update packages
|
||||||
- GitLab CI: image update to node 10
|
- GitLab CI: image update to node 10
|
||||||
|
|
||||||
## [5.0.3] - 2020-09-23
|
## [5.0.3] - 2020-09-23
|
||||||
|
|
||||||
- Fixes issue with WebSockets
|
- Fixes issue with WebSockets
|
||||||
|
|
||||||
## [5.0.2] - 2020-09-22
|
## [5.0.2] - 2020-09-22
|
||||||
|
|
||||||
- Fix infinity loop caused by WebSockets
|
- Fix infinity loop caused by WebSockets
|
||||||
|
|
||||||
## [5.0.1] - 2020-07-21
|
## [5.0.1] - 2020-07-21
|
||||||
|
|
||||||
- Fix Wi-Fi Form
|
- Fix Wi-Fi Form
|
||||||
- NPM audit fix & update of packages
|
- NPM audit fix & update of packages
|
||||||
|
|
||||||
## [5.0.0] - 2020-05-07
|
## [5.0.0] - 2020-05-07
|
||||||
|
|
||||||
- I've realized that it should be major update due to broken API.
|
- I've realized that it should be major update due to broken API.
|
||||||
|
|
||||||
## [4.5.1] - 2020-05-07
|
## [4.5.1] - 2020-05-07
|
||||||
|
|
||||||
- Add initialData to ForisForm children.
|
- Add initialData to ForisForm children.
|
||||||
- Update translations .pot file.
|
- Update translations .pot file.
|
||||||
|
|
||||||
## [4.5.0] - 2020-03-25
|
## [4.5.0] - 2020-03-25
|
||||||
|
|
||||||
- Use exposed pdfmake.
|
- Use exposed pdfmake.
|
||||||
- NPM audit fix & update of packages.
|
- NPM audit fix & update of packages.
|
||||||
|
|
||||||
## [4.4.0] - 2020-03-13
|
## [4.4.0] - 2020-03-13
|
||||||
|
|
||||||
- Update domain validation.
|
- Update domain validation.
|
||||||
|
|
||||||
## [4.3.1] - 2020-03-06
|
## [4.3.1] - 2020-03-06
|
||||||
|
|
||||||
- Add logout link.
|
- Add logout link.
|
||||||
|
|
||||||
## [4.3.0] - 2020-02-26
|
## [4.3.0] - 2020-02-26
|
||||||
|
|
||||||
- Allow RadioSet accept elements as children.
|
- Allow RadioSet accept elements as children.
|
||||||
- Add option to make modal scrollable.
|
- Add option to make modal scrollable.
|
||||||
|
|
||||||
## [4.2.0] - 2020-02-21
|
## [4.2.0] - 2020-02-21
|
||||||
|
|
||||||
- Add translations.
|
- Add translations.
|
||||||
- Improve datatime localization.
|
- Improve datatime localization.
|
||||||
|
|
||||||
## [4.1.0] - 2020-02-20
|
## [4.1.0] - 2020-02-20
|
||||||
|
|
||||||
- Added date and time utilities.
|
- Added date and time utilities.
|
||||||
|
|
||||||
## [4.0.0] - 2020-02-20
|
## [4.0.0] - 2020-02-20
|
||||||
|
|
||||||
- Throw an error if unhandled exception happens during API request.
|
- Throw an error if unhandled exception happens during API request.
|
||||||
|
|
||||||
## [3.4.0] - 2020-02-17
|
## [3.4.0] - 2020-02-17
|
||||||
|
|
||||||
- Display actual GET error response within the form.
|
- Display actual GET error response within the form.
|
||||||
- Added styles extracted from reForis.
|
- Added styles extracted from reForis.
|
||||||
- Added reference to form element (for programmatically submitting it).
|
- Added reference to form element (for programmatically submitting it).
|
||||||
|
|
||||||
## [3.2.0] - 2020-01-17
|
## [3.2.0] - 2020-01-17
|
||||||
|
|
||||||
- Swapped react-router with react-router-dom. Prepared Foris JS for using
|
- Swapped react-router with react-router-dom. Prepared Foris JS for using
|
||||||
react-router-dom exposed by reForis.
|
react-router-dom exposed by reForis.
|
||||||
- Added controller ID filter to WebSocket hook.
|
- Added controller ID filter to WebSocket hook.
|
||||||
- Updated translation messages after moving WiFi form.
|
- Updated translation messages after moving WiFi form.
|
||||||
- Increased request timeout to 30.5 sec.
|
- Increased request timeout to 30.5 sec.
|
||||||
|
|
||||||
## [3.1.1] - 2020-01-10
|
## [3.1.1] - 2020-01-10
|
||||||
|
|
||||||
- Fixed package dependencies related to exposing libraries via reForis
|
- Fixed package dependencies related to exposing libraries via reForis
|
||||||
|
|
||||||
## [3.1.0] - 2020-01-09
|
## [3.1.0] - 2020-01-09
|
||||||
|
|
||||||
- Added Wi-Fi settings form
|
- Added Wi-Fi settings form
|
||||||
- Fixed path to index.js file in package.json
|
- Fixed path to index.js file in package.json
|
||||||
|
|
||||||
## [3.0.0] - 2020-01-07
|
## [3.0.0] - 2020-01-07
|
||||||
|
|
||||||
- Removal of Babel compiler
|
- Removal of Babel compiler
|
||||||
- Fixed width of ForisForm, removed default sizing for form widgets (like
|
- Fixed width of ForisForm, removed default sizing for form widgets (like
|
||||||
buttons)
|
buttons)
|
||||||
|
|
||||||
## [2.1.1] - 2020-01-06
|
## [2.1.1] - 2020-01-06
|
||||||
|
|
||||||
- Display date and time picker above input element
|
- Display date and time picker above input element
|
||||||
|
|
||||||
## [2.1.0] - 2019-12-19
|
## [2.1.0] - 2019-12-19
|
||||||
|
|
||||||
- Set WebSocket logging to debug level
|
- Set WebSocket logging to debug level
|
||||||
- Added hook that detects clicking outside of component
|
- Added hook that detects clicking outside of component
|
||||||
- Added Radio to list of publicly available components
|
- Added Radio to list of publicly available components
|
||||||
- Fixed link to git repository in package.json
|
- Fixed link to git repository in package.json
|
||||||
|
|
||||||
## [2.0.0] - 2019-12-09
|
## [2.0.0] - 2019-12-09
|
||||||
|
|
||||||
- Added dynamic suffix for API URLs (allowing to use one hook for different
|
- Added dynamic suffix for API URLs (allowing to use one hook for different
|
||||||
resources with e.g. PUT)
|
resources with e.g. PUT)
|
||||||
- Added unsubscribe method to WebSocket client
|
- Added unsubscribe method to WebSocket client
|
||||||
- Added custom class to SpinnerElement
|
- Added custom class to SpinnerElement
|
||||||
- Improved documentation
|
- Improved documentation
|
||||||
- Published README.md
|
- Published README.md
|
||||||
|
|
||||||
## [1.4.0] - 2019-11-29
|
## [1.4.0] - 2019-11-29
|
||||||
|
|
||||||
- Add reboot button.
|
- Add reboot button.
|
||||||
- Fix Foris URLs prefixes
|
- Fix Foris URLs prefixes
|
||||||
|
|
||||||
## [1.3.3] - 2019-11-22
|
## [1.3.3] - 2019-11-22
|
||||||
|
|
||||||
- Add translations from Weblate.
|
- Add translations from Weblate.
|
||||||
|
|
||||||
## [1.3.2] - 2019-11-20
|
## [1.3.2] - 2019-11-20
|
||||||
|
|
||||||
- Expose only AlertContext.
|
- Expose only AlertContext.
|
||||||
- Add hook for API pooling.
|
- Add hook for API pooling.
|
||||||
|
|
||||||
## [1.3.1] - 2019-11-14
|
## [1.3.1] - 2019-11-14
|
||||||
|
|
||||||
@ -374,7 +462,15 @@ and this project adheres to
|
|||||||
## [0.0.7] - 2019-09-02
|
## [0.0.7] - 2019-09-02
|
||||||
|
|
||||||
[unreleased]:
|
[unreleased]:
|
||||||
https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.0...dev
|
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
|
||||||
|
[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
|
||||||
[6.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...v6.2.0
|
[6.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...v6.2.0
|
||||||
[6.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.0...v6.1.1
|
[6.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.0...v6.1.1
|
||||||
[6.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.3...v6.1.0
|
[6.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.3...v6.1.0
|
||||||
|
@ -33,5 +33,4 @@ To install a specific version:
|
|||||||
npm install foris@version
|
npm install foris@version
|
||||||
```
|
```
|
||||||
|
|
||||||
<a target="_blank" href="https://www.npmjs.com/package/foris">Check
|
[](https://badge.fury.io/js/foris)
|
||||||
on<img width="100px" src="./docs/forisjs-npm.svg"></a>
|
|
||||||
|
@ -21,10 +21,7 @@ module.exports = {
|
|||||||
testPathIgnorePatterns: ["/node_modules/", "/__fixtures__/", "/dist/"],
|
testPathIgnorePatterns: ["/node_modules/", "/__fixtures__/", "/dist/"],
|
||||||
testEnvironment: "jsdom",
|
testEnvironment: "jsdom",
|
||||||
verbose: false,
|
verbose: false,
|
||||||
setupFilesAfterEnv: [
|
setupFilesAfterEnv: ["<rootDir>/src/testUtils/setup"],
|
||||||
"@testing-library/react/cleanup-after-each",
|
|
||||||
"<rootDir>/src/testUtils/setup",
|
|
||||||
],
|
|
||||||
globals: {
|
globals: {
|
||||||
TZ: "utc",
|
TZ: "utc",
|
||||||
},
|
},
|
||||||
|
8699
package-lock.json
generated
8699
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
48
package.json
48
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "foris",
|
"name": "foris",
|
||||||
"version": "6.2.0",
|
"version": "6.7.0",
|
||||||
"description": "Foris JS library is a set of components and utils for reForis application and plugins.",
|
"description": "Foris JS library is a set of components and utils for reForis application and plugins.",
|
||||||
"author": "CZ.NIC, z.s.p.o.",
|
"author": "CZ.NIC, z.s.p.o.",
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -14,16 +14,18 @@
|
|||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"main": "./src/index.js",
|
"main": "./src/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.6.0",
|
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||||
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
"@fortawesome/free-regular-svg-icons": "^6.7.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
||||||
"@fortawesome/react-fontawesome": "^0.2.2",
|
"@fortawesome/react-fontawesome": "^0.2.2",
|
||||||
"axios": "^1.7.2",
|
"@tanstack/match-sorter-utils": "^8.19.4",
|
||||||
|
"@tanstack/react-table": "^8.21.2",
|
||||||
|
"axios": "^1.7.9",
|
||||||
"immutability-helper": "^3.1.1",
|
"immutability-helper": "^3.1.1",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"qrcode.react": "^3.1.0",
|
"qrcode.react": "^4.2.0",
|
||||||
"react-datetime": "^3.2.0",
|
"react-datetime": "^3.3.1",
|
||||||
"react-uid": "^2.3.3"
|
"react-uid": "^2.4.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"bootstrap": "^5.3.3",
|
"bootstrap": "^5.3.3",
|
||||||
@ -33,32 +35,32 @@
|
|||||||
"react-router-dom": "^5.1.2"
|
"react-router-dom": "^5.1.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.24.7",
|
"@babel/cli": "^7.26.4",
|
||||||
"@babel/core": "^7.24.7",
|
"@babel/core": "^7.26.9",
|
||||||
"@babel/plugin-transform-runtime": "^7.24.7",
|
"@babel/plugin-transform-runtime": "^7.26.9",
|
||||||
"@babel/preset-env": "^7.24.7",
|
"@babel/preset-env": "^7.26.9",
|
||||||
"@babel/preset-react": "^7.24.7",
|
"@babel/preset-react": "^7.26.3",
|
||||||
"@testing-library/react": "^8.0.9",
|
"@testing-library/react": "^12.1.5",
|
||||||
"babel-loader": "^8.1.0",
|
"babel-loader": "^9.2.1",
|
||||||
"babel-polyfill": "^6.26.0",
|
"babel-polyfill": "^6.26.0",
|
||||||
"bootstrap": "^5.3.3",
|
"bootstrap": "^5.3.3",
|
||||||
"css-loader": "^5.2.4",
|
"css-loader": "^7.1.2",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"eslint-config-reforis": "^2.1.1",
|
"eslint-config-reforis": "^2.2.1",
|
||||||
"file-loader": "^6.0.0",
|
"file-loader": "^6.0.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-environment-jsdom": "^29.7.0",
|
"jest-environment-jsdom": "^29.7.0",
|
||||||
"jest-mock-axios": "^4.7.3",
|
"jest-mock-axios": "^4.8.0",
|
||||||
"moment-timezone": "^0.5.45",
|
"moment-timezone": "^0.5.47",
|
||||||
"prettier": "^3.3.2",
|
"prettier": "^3.5.3",
|
||||||
"prop-types": "15.8.1",
|
"prop-types": "15.8.1",
|
||||||
"react": "16.9.0",
|
"react": "16.9.0",
|
||||||
"react-dom": "16.9.0",
|
"react-dom": "16.9.0",
|
||||||
"react-router-dom": "^5.1.2",
|
"react-router-dom": "^5.1.2",
|
||||||
"react-styleguidist": "^12.0.1",
|
"react-styleguidist": "^12.0.1",
|
||||||
"snapshot-diff": "^0.10.0",
|
"snapshot-diff": "^0.10.0",
|
||||||
"style-loader": "^1.2.1",
|
"style-loader": "^4.0.0",
|
||||||
"webpack": "^5.92.1"
|
"webpack": "^5.98.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint src",
|
"lint": "eslint src",
|
||||||
@ -69,4 +71,4 @@
|
|||||||
"docs": "npx styleguidist build ",
|
"docs": "npx styleguidist build ",
|
||||||
"docs:watch": "styleguidist server"
|
"docs:watch": "styleguidist server"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,7 +5,7 @@
|
|||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React, { useRef } from "react";
|
import React, { useRef, useEffect, useState } from "react";
|
||||||
|
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
@ -40,20 +40,36 @@ Alert.defaultProps = {
|
|||||||
|
|
||||||
function Alert({ type, onDismiss, children }) {
|
function Alert({ type, onDismiss, children }) {
|
||||||
const alertRef = useRef();
|
const alertRef = useRef();
|
||||||
|
const [isVisible, setIsVisible] = useState(true);
|
||||||
useFocusTrap(alertRef, !!onDismiss);
|
useFocusTrap(alertRef, !!onDismiss);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (onDismiss) {
|
||||||
|
const timeout = setTimeout(() => setIsVisible(false), 7000);
|
||||||
|
return () => clearTimeout(timeout);
|
||||||
|
}
|
||||||
|
}, [onDismiss]);
|
||||||
|
|
||||||
|
const handleAnimationEnd = () => {
|
||||||
|
if (!isVisible && onDismiss) {
|
||||||
|
onDismiss();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
ref={alertRef}
|
ref={alertRef}
|
||||||
className={`alert alert-${type} ${
|
className={`alert alert-${type} ${isVisible ? "alert-fade-in" : "alert-slide-out-top"} ${
|
||||||
onDismiss ? "alert-dismissible" : ""
|
onDismiss ? "alert-dismissible" : ""
|
||||||
}`.trim()}
|
}`.trim()}
|
||||||
role="alert"
|
role="alert"
|
||||||
|
onAnimationEnd={handleAnimationEnd}
|
||||||
>
|
>
|
||||||
{onDismiss && (
|
{onDismiss && (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="btn-close"
|
className="btn-close"
|
||||||
onClick={onDismiss}
|
onClick={() => setIsVisible(false)}
|
||||||
aria-label={_("Close")}
|
aria-label={_("Close")}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
@ -48,15 +48,13 @@ function CopyInput({ value, ...props }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Input type="text" value={value} ref={inputTextRef} {...props}>
|
<Input type="text" value={value} ref={inputTextRef} {...props}>
|
||||||
<div className="input-group-append">
|
<button
|
||||||
<button
|
className="btn btn-outline-secondary"
|
||||||
className="btn btn-outline-secondary"
|
type="button"
|
||||||
type="button"
|
onClick={handleCopyClick}
|
||||||
onClick={handleCopyClick}
|
>
|
||||||
>
|
<span>{isCopied ? _("Copied!") : _("Copy")}</span>
|
||||||
<span>{isCopied ? _("Copied!") : _("Copy")}</span>
|
</button>
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</Input>
|
</Input>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ All additional `props` are passed to the `<input type="email">` HTML component.
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import Button from "./Button";
|
||||||
const [email, setEmail] = useState("Wrong email");
|
const [email, setEmail] = useState("Wrong email");
|
||||||
<form onSubmit={(e) => e.preventDefault()}>
|
<form onSubmit={(e) => e.preventDefault()}>
|
||||||
<EmailInput
|
<EmailInput
|
||||||
@ -14,6 +15,6 @@ const [email, setEmail] = useState("Wrong email");
|
|||||||
helpText="Read the small text!"
|
helpText="Read the small text!"
|
||||||
onChange={(event) => setEmail(event.target.value)}
|
onChange={(event) => setEmail(event.target.value)}
|
||||||
/>
|
/>
|
||||||
<button type="submit">Try to submit</button>
|
<Button type="submit">Try to submit</Button>
|
||||||
</form>;
|
</form>;
|
||||||
```
|
```
|
||||||
|
@ -34,12 +34,14 @@ const Input = forwardRef(
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mb-3">
|
<div className="mb-3">
|
||||||
<label
|
{label && (
|
||||||
className={`form-label ${labelClassName || ""}`.trim()}
|
<label
|
||||||
htmlFor={uid}
|
className={`form-label ${labelClassName || ""}`.trim()}
|
||||||
>
|
htmlFor={uid}
|
||||||
{label}
|
>
|
||||||
</label>
|
{label}
|
||||||
|
</label>
|
||||||
|
)}
|
||||||
<div className={`input-group ${groupClassName || ""}`.trim()}>
|
<div className={`input-group ${groupClassName || ""}`.trim()}>
|
||||||
<input
|
<input
|
||||||
className={`form-control ${inputClassName}`.trim()}
|
className={`form-control ${inputClassName}`.trim()}
|
||||||
@ -65,7 +67,7 @@ Input.displayName = "Input";
|
|||||||
|
|
||||||
Input.propTypes = {
|
Input.propTypes = {
|
||||||
type: PropTypes.string.isRequired,
|
type: PropTypes.string.isRequired,
|
||||||
label: PropTypes.string.isRequired,
|
label: PropTypes.string,
|
||||||
helpText: PropTypes.string,
|
helpText: PropTypes.string,
|
||||||
error: PropTypes.string,
|
error: PropTypes.string,
|
||||||
className: PropTypes.string,
|
className: PropTypes.string,
|
||||||
|
@ -88,18 +88,21 @@ export function Modal({ shown, setShown, scrollable, size, children }) {
|
|||||||
ModalHeader.propTypes = {
|
ModalHeader.propTypes = {
|
||||||
setShown: PropTypes.func.isRequired,
|
setShown: PropTypes.func.isRequired,
|
||||||
title: PropTypes.string.isRequired,
|
title: PropTypes.string.isRequired,
|
||||||
|
showCloseButton: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function ModalHeader({ setShown, title }) {
|
export function ModalHeader({ setShown, title, showCloseButton = true }) {
|
||||||
return (
|
return (
|
||||||
<div className="modal-header">
|
<div className="modal-header">
|
||||||
<h1 className="modal-title fs-5">{title}</h1>
|
<h1 className="modal-title fs-5">{title}</h1>
|
||||||
<button
|
{showCloseButton && (
|
||||||
type="button"
|
<button
|
||||||
className="btn-close"
|
type="button"
|
||||||
onClick={() => setShown(false)}
|
className="btn-close"
|
||||||
aria-label={_("Close")}
|
onClick={() => setShown(false)}
|
||||||
/>
|
aria-label={_("Close")}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,20 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
|
|||||||
-1
|
-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 (
|
return (
|
||||||
<Input type="number" onChange={onChange} value={value} {...props}>
|
<Input type="number" onChange={onChange} value={value} {...props}>
|
||||||
{inlineText && (
|
{inlineText && (
|
||||||
@ -60,7 +74,15 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
|
|||||||
className="btn btn-outline-secondary"
|
className="btn btn-outline-secondary"
|
||||||
onMouseDown={() => enableIncrease(true)}
|
onMouseDown={() => enableIncrease(true)}
|
||||||
onMouseUp={() => enableIncrease(false)}
|
onMouseUp={() => enableIncrease(false)}
|
||||||
aria-label="Increase"
|
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.")}
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={faPlus} />
|
<FontAwesomeIcon icon={faPlus} />
|
||||||
</button>
|
</button>
|
||||||
@ -69,7 +91,15 @@ function NumberInput({ onChange, inlineText, value, ...props }) {
|
|||||||
className="btn btn-outline-secondary"
|
className="btn btn-outline-secondary"
|
||||||
onMouseDown={() => enableDecrease(true)}
|
onMouseDown={() => enableDecrease(true)}
|
||||||
onMouseUp={() => enableDecrease(false)}
|
onMouseUp={() => enableDecrease(false)}
|
||||||
aria-label="Decrease"
|
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.")}
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={faMinus} />
|
<FontAwesomeIcon icon={faMinus} />
|
||||||
</button>
|
</button>
|
||||||
|
48
src/bootstrap/Radio.js
Normal file
48
src/bootstrap/Radio.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 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";
|
||||||
|
|
||||||
|
Radio.propTypes = {
|
||||||
|
label: PropTypes.oneOfType([
|
||||||
|
PropTypes.string,
|
||||||
|
PropTypes.element,
|
||||||
|
PropTypes.node,
|
||||||
|
PropTypes.arrayOf(PropTypes.node),
|
||||||
|
]).isRequired,
|
||||||
|
id: PropTypes.string.isRequired,
|
||||||
|
inline: PropTypes.bool,
|
||||||
|
helpText: PropTypes.string,
|
||||||
|
className: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
function Radio({ label, id, helpText, inline, className, ...props }) {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={`${className || "mb-3"} ${inline ? "form-check form-check-inline" : ""}`.trim()}
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
id={id}
|
||||||
|
className="form-check-input me-2"
|
||||||
|
type="radio"
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
<label className="form-check-label" htmlFor={id}>
|
||||||
|
{label}
|
||||||
|
{helpText && (
|
||||||
|
<div className="form-text">
|
||||||
|
<small>{helpText}</small>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Radio;
|
@ -10,6 +10,8 @@ import React from "react";
|
|||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
import { useUID } from "react-uid";
|
import { useUID } from "react-uid";
|
||||||
|
|
||||||
|
import Radio from "./Radio";
|
||||||
|
|
||||||
RadioSet.propTypes = {
|
RadioSet.propTypes = {
|
||||||
/** Name attribute of the input HTML tag. */
|
/** Name attribute of the input HTML tag. */
|
||||||
name: PropTypes.string.isRequired,
|
name: PropTypes.string.isRequired,
|
||||||
@ -73,40 +75,4 @@ function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Radio.propTypes = {
|
|
||||||
label: PropTypes.oneOfType([
|
|
||||||
PropTypes.string,
|
|
||||||
PropTypes.element,
|
|
||||||
PropTypes.node,
|
|
||||||
PropTypes.arrayOf(PropTypes.node),
|
|
||||||
]).isRequired,
|
|
||||||
id: PropTypes.string.isRequired,
|
|
||||||
inline: PropTypes.bool,
|
|
||||||
helpText: PropTypes.string,
|
|
||||||
className: PropTypes.string,
|
|
||||||
};
|
|
||||||
|
|
||||||
export function Radio({ label, id, helpText, inline, className, ...props }) {
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={`${className || "mb-3"} ${inline ? "form-check form-check-inline" : ""}`.trim()}
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
id={id}
|
|
||||||
className="form-check-input me-2"
|
|
||||||
type="radio"
|
|
||||||
{...props}
|
|
||||||
/>
|
|
||||||
<label className="form-check-label" htmlFor={id}>
|
|
||||||
{label}
|
|
||||||
{helpText && (
|
|
||||||
<div className="form-text">
|
|
||||||
<small>{helpText}</small>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default RadioSet;
|
export default RadioSet;
|
||||||
|
42
src/bootstrap/ThreeDotsMenu.js
Normal file
42
src/bootstrap/ThreeDotsMenu.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 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 { faEllipsisVertical } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
|
import Button from "./Button";
|
||||||
|
|
||||||
|
ThreeDotsMenu.propTypes = {
|
||||||
|
/** Menu items. */
|
||||||
|
children: PropTypes.arrayOf(PropTypes.node).isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
function ThreeDotsMenu({ children, ...props }) {
|
||||||
|
return (
|
||||||
|
<div className="dropdown position-static" {...props}>
|
||||||
|
<Button
|
||||||
|
className="btn-sm btn-link text-body"
|
||||||
|
data-bs-toggle="dropdown"
|
||||||
|
aria-expanded="false"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={faEllipsisVertical} />
|
||||||
|
</Button>
|
||||||
|
<ul className="dropdown-menu">
|
||||||
|
{children.map((child) => (
|
||||||
|
<li key={child.key || child.props.id || Math.random()}>
|
||||||
|
{child}
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ThreeDotsMenu;
|
40
src/bootstrap/ThreeDotsMenu.md
Normal file
40
src/bootstrap/ThreeDotsMenu.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
ThreeDotsMenu Bootstrap component is a dropdown menu that appears when the user
|
||||||
|
clicks on three dots. It is used to display a list of actions that can be
|
||||||
|
performed on a particular item.
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { useState } from "react";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
import { faEdit, faTrash } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
|
||||||
|
const threeDotsMenuItems = [
|
||||||
|
{
|
||||||
|
text: "Edit",
|
||||||
|
icon: faEdit,
|
||||||
|
onClick: () => {
|
||||||
|
alert("Edit clicked");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Delete",
|
||||||
|
icon: faTrash,
|
||||||
|
onClick: () => {
|
||||||
|
alert("Delete clicked");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
<ThreeDotsMenu>
|
||||||
|
{threeDotsMenuItems.map((item, index) => (
|
||||||
|
<button key={index} onClick={item.onClick} className="dropdown-item">
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={item.icon}
|
||||||
|
className="me-1"
|
||||||
|
width="1rem"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
{item.text}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</ThreeDotsMenu>;
|
||||||
|
```
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { render, fireEvent, getByLabelText, wait } from "customTestRender";
|
import { render, fireEvent, getByLabelText, waitFor } from "customTestRender";
|
||||||
|
|
||||||
import NumberInput from "../NumberInput";
|
import NumberInput from "../NumberInput";
|
||||||
|
|
||||||
@ -32,17 +32,17 @@ describe("<NumberInput/>", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("Increase number with button", async () => {
|
it("Increase number with button", async () => {
|
||||||
const increaseButton = getByLabelText(componentContainer, "Increase");
|
const increaseButton = getByLabelText(componentContainer, /Increase/);
|
||||||
fireEvent.mouseDown(increaseButton);
|
fireEvent.mouseDown(increaseButton);
|
||||||
await wait(() =>
|
await waitFor(() =>
|
||||||
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 2 } })
|
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 2 } })
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Decrease number with button", async () => {
|
it("Decrease number with button", async () => {
|
||||||
const decreaseButton = getByLabelText(componentContainer, "Decrease");
|
const decreaseButton = getByLabelText(componentContainer, /Decrease/);
|
||||||
fireEvent.mouseDown(decreaseButton);
|
fireEvent.mouseDown(decreaseButton);
|
||||||
await wait(() =>
|
await waitFor(() =>
|
||||||
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 0 } })
|
expect(onChangeMock).toHaveBeenCalledWith({ target: { value: 0 } })
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -20,8 +20,9 @@ exports[`<NumberInput/> Render number input 1`] = `
|
|||||||
value="1"
|
value="1"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
aria-label="Increase"
|
aria-label="Increase value. Hint: Hold to increase faster."
|
||||||
class="btn btn-outline-secondary"
|
class="btn btn-outline-secondary"
|
||||||
|
title="Increase value. Hint: Hold to increase faster."
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<i
|
<i
|
||||||
@ -29,8 +30,9 @@ exports[`<NumberInput/> Render number input 1`] = `
|
|||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
aria-label="Decrease"
|
aria-label="Decrease value. Hint: Hold to decrease faster."
|
||||||
class="btn btn-outline-secondary"
|
class="btn btn-outline-secondary"
|
||||||
|
title="Decrease value. Hint: Hold to decrease faster."
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<i
|
<i
|
||||||
|
157
src/common/ActionButtonWithModal/ActionButtonWithModal.js
Normal file
157
src/common/ActionButtonWithModal/ActionButtonWithModal.js
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
39
src/common/ActionButtonWithModal/ActionButtonWithModal.md
Normal file
39
src/common/ActionButtonWithModal/ActionButtonWithModal.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
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 />;
|
||||||
|
```
|
@ -1,80 +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, { 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;
|
|
118
src/common/RichTable/RichTable.js
Normal file
118
src/common/RichTable/RichTable.js
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
135
src/common/RichTable/RichTable.md
Normal file
135
src/common/RichTable/RichTable.md
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
### 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 />;
|
||||||
|
```
|
58
src/common/RichTable/RichTableBody.js
Normal file
58
src/common/RichTable/RichTableBody.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
90
src/common/RichTable/RichTableColumnsDropdown.js
Normal file
90
src/common/RichTable/RichTableColumnsDropdown.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
102
src/common/RichTable/RichTableHeader.js
Normal file
102
src/common/RichTable/RichTableHeader.js
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
128
src/common/RichTable/RichTablePagination.js
Normal file
128
src/common/RichTable/RichTablePagination.js
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* 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")}
|
||||||
|
<span className="fw-bold">
|
||||||
|
{pagination.pageIndex + 1}
|
||||||
|
{_("of")}
|
||||||
|
{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;
|
@ -9,7 +9,7 @@ import React from "react";
|
|||||||
|
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants";
|
import { HELP_TEXTS, HTMODES, BANDS, ENCRYPTIONMODES } from "./constants";
|
||||||
import WifiGuestForm from "./WiFiGuestForm";
|
import WifiGuestForm from "./WiFiGuestForm";
|
||||||
import WiFiQRCode from "./WiFiQRCode";
|
import WiFiQRCode from "./WiFiQRCode";
|
||||||
import PasswordInput from "../../bootstrap/PasswordInput";
|
import PasswordInput from "../../bootstrap/PasswordInput";
|
||||||
@ -60,7 +60,7 @@ DeviceForm.propTypes = {
|
|||||||
SSID: PropTypes.string.isRequired,
|
SSID: PropTypes.string.isRequired,
|
||||||
password: PropTypes.string.isRequired,
|
password: PropTypes.string.isRequired,
|
||||||
hidden: PropTypes.bool.isRequired,
|
hidden: PropTypes.bool.isRequired,
|
||||||
hwmode: PropTypes.string.isRequired,
|
band: PropTypes.string.isRequired,
|
||||||
htmode: PropTypes.string.isRequired,
|
htmode: PropTypes.string.isRequired,
|
||||||
channel: PropTypes.string.isRequired,
|
channel: PropTypes.string.isRequired,
|
||||||
guest_wifi: PropTypes.object.isRequired,
|
guest_wifi: PropTypes.object.isRequired,
|
||||||
@ -155,26 +155,26 @@ function DeviceForm({
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<RadioSet
|
<RadioSet
|
||||||
name={`hwmode-${deviceID}`}
|
name={`band-${deviceID}`}
|
||||||
label="GHz"
|
label={_("Band")}
|
||||||
choices={getHwmodeChoices(formData)}
|
choices={getBandChoices(formData)}
|
||||||
value={formData.hwmode}
|
value={formData.band}
|
||||||
helpText={HELP_TEXTS.hwmode}
|
helpText={HELP_TEXTS.band}
|
||||||
inline
|
inline
|
||||||
onChange={setFormValue((value) => {
|
onChange={setFormValue((value) => {
|
||||||
// Get the last item in an array of available HT modes
|
// Find the selected band
|
||||||
const [best2] = bnds[0].available_htmodes.slice(-1);
|
const selectedBand = bnds.find(
|
||||||
const [best5] = bnds[1].available_htmodes.slice(-1);
|
(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];
|
||||||
return {
|
return {
|
||||||
devices: {
|
devices: {
|
||||||
[deviceIndex]: {
|
[deviceIndex]: {
|
||||||
hwmode: { $set: value },
|
band: { $set: value },
|
||||||
channel: { $set: "0" },
|
channel: { $set: "0" },
|
||||||
htmode: {
|
htmode: { $set: bestHtmode },
|
||||||
$set:
|
|
||||||
// Set HT mode depending on checked frequency
|
|
||||||
value === "11a" ? best5 : best2,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -263,7 +263,7 @@ function getChannelChoices(device) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
device.available_bands.forEach((availableBand) => {
|
device.available_bands.forEach((availableBand) => {
|
||||||
if (availableBand.hwmode !== device.hwmode) return;
|
if (availableBand.band !== device.band) return;
|
||||||
|
|
||||||
availableBand.available_channels.forEach((availableChannel) => {
|
availableBand.available_channels.forEach((availableChannel) => {
|
||||||
channelChoices[availableChannel.number.toString()] = `
|
channelChoices[availableChannel.number.toString()] = `
|
||||||
@ -282,7 +282,7 @@ function getHtmodeChoices(device) {
|
|||||||
const htmodeChoices = {};
|
const htmodeChoices = {};
|
||||||
|
|
||||||
device.available_bands.forEach((availableBand) => {
|
device.available_bands.forEach((availableBand) => {
|
||||||
if (availableBand.hwmode !== device.hwmode) return;
|
if (availableBand.band !== device.band) return;
|
||||||
|
|
||||||
availableBand.available_htmodes.forEach((availableHtmod) => {
|
availableBand.available_htmodes.forEach((availableHtmod) => {
|
||||||
htmodeChoices[availableHtmod] = HTMODES[availableHtmod];
|
htmodeChoices[availableHtmod] = HTMODES[availableHtmod];
|
||||||
@ -291,10 +291,10 @@ function getHtmodeChoices(device) {
|
|||||||
return htmodeChoices;
|
return htmodeChoices;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHwmodeChoices(device) {
|
function getBandChoices(device) {
|
||||||
return device.available_bands.map((availableBand) => ({
|
return device.available_bands.map((availableBand) => ({
|
||||||
label: HWMODES[availableBand.hwmode],
|
label: `${BANDS[availableBand.band]} GHz`,
|
||||||
value: availableBand.hwmode,
|
value: availableBand.band,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,9 +9,10 @@ import React from "react";
|
|||||||
|
|
||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
import { HELP_TEXTS } from "./constants";
|
import { HELP_TEXTS, ENCRYPTIONMODES } from "./constants";
|
||||||
import WiFiQRCode from "./WiFiQRCode";
|
import WiFiQRCode from "./WiFiQRCode";
|
||||||
import PasswordInput from "../../bootstrap/PasswordInput";
|
import PasswordInput from "../../bootstrap/PasswordInput";
|
||||||
|
import Select from "../../bootstrap/Select";
|
||||||
import Switch from "../../bootstrap/Switch";
|
import Switch from "../../bootstrap/Switch";
|
||||||
import TextInput from "../../bootstrap/TextInput";
|
import TextInput from "../../bootstrap/TextInput";
|
||||||
|
|
||||||
@ -21,6 +22,7 @@ WifiGuestForm.propTypes = {
|
|||||||
SSID: PropTypes.string.isRequired,
|
SSID: PropTypes.string.isRequired,
|
||||||
password: PropTypes.string.isRequired,
|
password: PropTypes.string.isRequired,
|
||||||
enabled: PropTypes.bool.isRequired,
|
enabled: PropTypes.bool.isRequired,
|
||||||
|
encryption: PropTypes.string.isRequired,
|
||||||
}),
|
}),
|
||||||
formErrors: PropTypes.shape({
|
formErrors: PropTypes.shape({
|
||||||
SSID: PropTypes.string,
|
SSID: PropTypes.string,
|
||||||
@ -89,6 +91,20 @@ export default function WifiGuestForm({
|
|||||||
}))}
|
}))}
|
||||||
{...props}
|
{...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}
|
) : null}
|
||||||
</>
|
</>
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { render, fireEvent, wait } from "customTestRender";
|
import { render, fireEvent, waitFor } from "customTestRender";
|
||||||
|
|
||||||
import mockAxios from "jest-mock-axios";
|
import mockAxios from "jest-mock-axios";
|
||||||
import WebSockets from "webSockets/WebSockets";
|
import WebSockets from "webSockets/WebSockets";
|
||||||
@ -35,7 +35,7 @@ describe("<ResetWiFiSettings/>", () => {
|
|||||||
expect.anything()
|
expect.anything()
|
||||||
);
|
);
|
||||||
mockAxios.mockResponse({ data: { foo: "bar" } });
|
mockAxios.mockResponse({ data: { foo: "bar" } });
|
||||||
await wait(() =>
|
await waitFor(() =>
|
||||||
expect(mockSetAlert).toBeCalledWith(
|
expect(mockSetAlert).toBeCalledWith(
|
||||||
"Wi-Fi settings are set to defaults.",
|
"Wi-Fi settings are set to defaults.",
|
||||||
ALERT_TYPES.SUCCESS
|
ALERT_TYPES.SUCCESS
|
||||||
@ -46,7 +46,7 @@ describe("<ResetWiFiSettings/>", () => {
|
|||||||
it("should display alert on open ports - failure", async () => {
|
it("should display alert on open ports - failure", async () => {
|
||||||
fireEvent.click(getAllByText("Reset Wi-Fi Settings")[1]);
|
fireEvent.click(getAllByText("Reset Wi-Fi Settings")[1]);
|
||||||
mockJSONError();
|
mockJSONError();
|
||||||
await wait(() =>
|
await waitFor(() =>
|
||||||
expect(mockSetAlert).toBeCalledWith(
|
expect(mockSetAlert).toBeCalledWith(
|
||||||
"An error occurred during resetting Wi-Fi settings."
|
"An error occurred during resetting Wi-Fi settings."
|
||||||
)
|
)
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019-2021 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import diffSnapshot from "snapshot-diff";
|
import diffSnapshot from "snapshot-diff";
|
||||||
import mockAxios from "jest-mock-axios";
|
import mockAxios from "jest-mock-axios";
|
||||||
|
|
||||||
import { fireEvent, render, wait } from "customTestRender";
|
import { fireEvent, render, waitFor } from "customTestRender";
|
||||||
import WebSockets from "webSockets/WebSockets";
|
import WebSockets from "webSockets/WebSockets";
|
||||||
import { mockJSONError } from "testUtils/network";
|
import { mockJSONError } from "testUtils/network";
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
getByLabelText = renderRes.getByLabelText;
|
getByLabelText = renderRes.getByLabelText;
|
||||||
getByText = renderRes.getByText;
|
getByText = renderRes.getByText;
|
||||||
mockAxios.mockResponse({ data: wifiSettingsFixture() });
|
mockAxios.mockResponse({ data: wifiSettingsFixture() });
|
||||||
await wait(() => renderRes.getByText("Wi-Fi 1"));
|
await waitFor(() => renderRes.getByText("Wi-Fi 1"));
|
||||||
firstRender = renderRes.asFragment();
|
firstRender = renderRes.asFragment();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
);
|
);
|
||||||
const errorMessage = "An API error occurred.";
|
const errorMessage = "An API error occurred.";
|
||||||
mockJSONError(errorMessage);
|
mockJSONError(errorMessage);
|
||||||
await wait(() => {
|
await waitFor(() => {
|
||||||
expect(getByText(errorMessage)).toBeTruthy();
|
expect(getByText(errorMessage)).toBeTruthy();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -77,7 +78,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
it("Snapshot 2.4 GHz", () => {
|
it("Snapshot 2.4 GHz", () => {
|
||||||
fireEvent.click(getByText("Wi-Fi 1"));
|
fireEvent.click(getByText("Wi-Fi 1"));
|
||||||
const enabledRender = asFragment();
|
const enabledRender = asFragment();
|
||||||
fireEvent.click(getAllByText("2.4")[0]);
|
fireEvent.click(getAllByText(/2.4/)[0]);
|
||||||
expect(diffSnapshot(enabledRender, asFragment())).toMatchSnapshot();
|
expect(diffSnapshot(enabledRender, asFragment())).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -118,7 +119,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT80",
|
htmode: "HT80",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -135,7 +136,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
|
|
||||||
it("Post form: 2.4 GHz", () => {
|
it("Post form: 2.4 GHz", () => {
|
||||||
fireEvent.click(getByText("Wi-Fi 1"));
|
fireEvent.click(getByText("Wi-Fi 1"));
|
||||||
fireEvent.click(getAllByText("2.4")[0]);
|
fireEvent.click(getAllByText(/2.4/)[0]);
|
||||||
|
|
||||||
fireEvent.click(getByText("Save"));
|
fireEvent.click(getByText("Save"));
|
||||||
expect(mockAxios.post).toBeCalled();
|
expect(mockAxios.post).toBeCalled();
|
||||||
@ -148,7 +149,7 @@ describe("<WiFiSettings/>", () => {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "VHT80",
|
htmode: "VHT80",
|
||||||
hwmode: "11g",
|
band: "2g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -181,11 +182,12 @@ describe("<WiFiSettings/>", () => {
|
|||||||
guest_wifi: {
|
guest_wifi: {
|
||||||
SSID: "TestGuestSSID",
|
SSID: "TestGuestSSID",
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
encryption: "WPA2",
|
||||||
password: "test_password",
|
password: "test_password",
|
||||||
},
|
},
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT80",
|
htmode: "HT80",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
|
@ -77,7 +77,7 @@ export function wifiSettingsFixture() {
|
|||||||
"VHT40",
|
"VHT40",
|
||||||
"VHT80",
|
"VHT80",
|
||||||
],
|
],
|
||||||
hwmode: "11g",
|
band: "2g",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
available_channels: [
|
available_channels: [
|
||||||
@ -215,7 +215,7 @@ export function wifiSettingsFixture() {
|
|||||||
"VHT40",
|
"VHT40",
|
||||||
"VHT80",
|
"VHT80",
|
||||||
],
|
],
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
channel: 60,
|
channel: 60,
|
||||||
@ -223,11 +223,12 @@ export function wifiSettingsFixture() {
|
|||||||
guest_wifi: {
|
guest_wifi: {
|
||||||
SSID: "TestGuestSSID",
|
SSID: "TestGuestSSID",
|
||||||
enabled: false,
|
enabled: false,
|
||||||
|
encryption: "WPA2",
|
||||||
password: "",
|
password: "",
|
||||||
},
|
},
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT80",
|
htmode: "HT80",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -294,7 +295,7 @@ export function wifiSettingsFixture() {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
available_htmodes: ["NOHT", "HT20", "HT40"],
|
available_htmodes: ["NOHT", "HT20", "HT40"],
|
||||||
hwmode: "11g",
|
band: "2g",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
channel: 11,
|
channel: 11,
|
||||||
@ -306,7 +307,7 @@ export function wifiSettingsFixture() {
|
|||||||
},
|
},
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11g",
|
band: "2g",
|
||||||
id: 1,
|
id: 1,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -323,7 +324,7 @@ const oneDevice = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -340,7 +341,7 @@ const twoDevices = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -352,7 +353,7 @@ const twoDevices = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 1,
|
id: 1,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -369,7 +370,7 @@ const threeDevices = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 0,
|
id: 0,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -381,7 +382,7 @@ const threeDevices = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 1,
|
id: 1,
|
||||||
password: "TestPass",
|
password: "TestPass",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
@ -393,7 +394,7 @@ const threeDevices = {
|
|||||||
guest_wifi: { enabled: false },
|
guest_wifi: { enabled: false },
|
||||||
hidden: false,
|
hidden: false,
|
||||||
htmode: "HT40",
|
htmode: "HT40",
|
||||||
hwmode: "11a",
|
band: "5g",
|
||||||
id: 2,
|
id: 2,
|
||||||
password: "",
|
password: "",
|
||||||
encryption: "WPA3",
|
encryption: "WPA3",
|
||||||
|
@ -339,7 +339,7 @@ exports[`<WiFiSettings/> Snapshot guest network. 1`] = `
|
|||||||
- First value
|
- First value
|
||||||
+ Second value
|
+ Second value
|
||||||
|
|
||||||
@@ -524,10 +524,87 @@
|
@@ -524,10 +524,124 @@
|
||||||
<small>
|
<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.
|
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>
|
</small>
|
||||||
@ -421,13 +421,50 @@ exports[`<WiFiSettings/> Snapshot guest network. 1`] = `
|
|||||||
+ WPA2/3 pre-shared key, that is required to connect to the network.
|
+ WPA2/3 pre-shared key, that is required to connect to the network.
|
||||||
+ </small>
|
+ </small>
|
||||||
+ </div>
|
+ </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>
|
+ </div>
|
||||||
<hr />
|
<hr />
|
||||||
<div
|
<div
|
||||||
class="form-check form-switch mb-3 d-flex align-items-center"
|
class="form-check form-switch mb-3 d-flex align-items-center"
|
||||||
>
|
>
|
||||||
<input
|
<input
|
||||||
@@ -550,10 +627,11 @@
|
@@ -550,10 +664,11 @@
|
||||||
<div
|
<div
|
||||||
class="text-end"
|
class="text-end"
|
||||||
>
|
>
|
||||||
@ -555,23 +592,23 @@ exports[`<WiFiSettings/> Snapshot one module enabled. 1`] = `
|
|||||||
+ class="d-block"
|
+ class="d-block"
|
||||||
+ for="6"
|
+ for="6"
|
||||||
+ >
|
+ >
|
||||||
+ GHz
|
+ Band
|
||||||
+ </label>
|
+ </label>
|
||||||
+ <div
|
+ <div
|
||||||
+ class="mb-3 form-check form-check-inline"
|
+ class="mb-3 form-check form-check-inline"
|
||||||
+ >
|
+ >
|
||||||
+ <input
|
+ <input
|
||||||
+ class="form-check-input me-2"
|
+ class="form-check-input me-2"
|
||||||
+ id="hwmode-0-0"
|
+ id="band-0-0"
|
||||||
+ name="hwmode-0"
|
+ name="band-0"
|
||||||
+ type="radio"
|
+ type="radio"
|
||||||
+ value="11g"
|
+ value="2g"
|
||||||
+ />
|
+ />
|
||||||
+ <label
|
+ <label
|
||||||
+ class="form-check-label"
|
+ class="form-check-label"
|
||||||
+ for="hwmode-0-0"
|
+ for="band-0-0"
|
||||||
+ >
|
+ >
|
||||||
+ 2.4
|
+ 2.4 GHz
|
||||||
+ </label>
|
+ </label>
|
||||||
+ </div>
|
+ </div>
|
||||||
+ <div
|
+ <div
|
||||||
@ -580,16 +617,16 @@ exports[`<WiFiSettings/> Snapshot one module enabled. 1`] = `
|
|||||||
+ <input
|
+ <input
|
||||||
+ checked=""
|
+ checked=""
|
||||||
+ class="form-check-input me-2"
|
+ class="form-check-input me-2"
|
||||||
+ id="hwmode-0-1"
|
+ id="band-0-1"
|
||||||
+ name="hwmode-0"
|
+ name="band-0"
|
||||||
+ type="radio"
|
+ type="radio"
|
||||||
+ value="11a"
|
+ value="5g"
|
||||||
+ />
|
+ />
|
||||||
+ <label
|
+ <label
|
||||||
+ class="form-check-label"
|
+ class="form-check-label"
|
||||||
+ for="hwmode-0-1"
|
+ for="band-0-1"
|
||||||
+ >
|
+ >
|
||||||
+ 5
|
+ 5 GHz
|
||||||
+ </label>
|
+ </label>
|
||||||
+ </div>
|
+ </div>
|
||||||
+ <div
|
+ <div
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
@ -12,15 +12,18 @@ export const HTMODES = {
|
|||||||
VHT20: _("802.11ac - 20 MHz wide channel"),
|
VHT20: _("802.11ac - 20 MHz wide channel"),
|
||||||
VHT40: _("802.11ac - 40 MHz wide channel"),
|
VHT40: _("802.11ac - 40 MHz wide channel"),
|
||||||
VHT80: _("802.11ac - 80 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"),
|
VHT160: _("802.11ac - 160 MHz wide channel"),
|
||||||
HE20: _("802.11ax - 20 MHz wide channel"),
|
HE20: _("802.11ax - 20 MHz wide channel"),
|
||||||
HE40: _("802.11ax - 40 MHz wide channel"),
|
HE40: _("802.11ax - 40 MHz wide channel"),
|
||||||
HE80: _("802.11ax - 80 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"),
|
HE160: _("802.11ax - 160 MHz wide channel"),
|
||||||
};
|
};
|
||||||
export const HWMODES = {
|
export const BANDS = {
|
||||||
"11g": "2.4",
|
"2g": "2.4",
|
||||||
"11a": "5",
|
"5g": "5",
|
||||||
|
"6g": "6",
|
||||||
};
|
};
|
||||||
export const ENCRYPTIONMODES = {
|
export const ENCRYPTIONMODES = {
|
||||||
WPA3: _("WPA3 only"),
|
WPA3: _("WPA3 only"),
|
||||||
@ -37,7 +40,7 @@ export const HELP_TEXTS = {
|
|||||||
hidden: _(
|
hidden: _(
|
||||||
"If set, network is not visible when scanning for available networks."
|
"If set, network is not visible when scanning for available networks."
|
||||||
),
|
),
|
||||||
hwmode: _(
|
band: _(
|
||||||
"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."
|
||||||
),
|
),
|
||||||
htmode: _(
|
htmode: _(
|
||||||
|
86
src/common/__tests__/ActionButtonWithModal.test.js
Normal file
86
src/common/__tests__/ActionButtonWithModal.test.js
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* 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"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.")
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,6 +1,25 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
exports[`<RebootButton/> Render modal. 1`] = `
|
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`] = `
|
||||||
<div>
|
<div>
|
||||||
<div
|
<div
|
||||||
id="modal-container"
|
id="modal-container"
|
||||||
@ -35,15 +54,17 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
|||||||
<div
|
<div
|
||||||
class="modal-body"
|
class="modal-body"
|
||||||
>
|
>
|
||||||
<p>
|
<p
|
||||||
Are you sure you want to restart the router?
|
class="mb-0"
|
||||||
|
>
|
||||||
|
Are you sure you want to perform this action?
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="modal-footer"
|
class="modal-footer"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
|
class="btn btn-secondary d-inline-flex justify-content-center align-items-center"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
@ -55,7 +76,7 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
|||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
Confirm reboot
|
Confirm action
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -63,28 +84,15 @@ exports[`<RebootButton/> Render modal. 1`] = `
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button
|
|
||||||
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
|
|
||||||
type="button"
|
|
||||||
>
|
|
||||||
<span>
|
|
||||||
Reboot
|
|
||||||
</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`<RebootButton/> Render. 1`] = `
|
|
||||||
<div>
|
|
||||||
<div
|
<div
|
||||||
id="modal-container"
|
id="alert-container"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
class="btn btn-danger d-inline-flex justify-content-center align-items-center"
|
class="btn btn-primary d-inline-flex justify-content-center align-items-center"
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
Reboot
|
Action
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
@ -43,14 +43,17 @@ describe("AlertContext", () => {
|
|||||||
expect(componentContainer).toMatchSnapshot();
|
expect(componentContainer).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should dismiss alert with alert button", () => {
|
it("should dismiss alert with alert button", async () => {
|
||||||
fireEvent.click(getByText(componentContainer, "Set alert"));
|
fireEvent.click(getByText(componentContainer, "Set alert"));
|
||||||
// Alert is present
|
// Alert is present
|
||||||
expect(getByText(componentContainer, "Alert content")).toBeDefined();
|
expect(getByText(componentContainer, "Alert content")).toBeDefined();
|
||||||
|
|
||||||
fireEvent.click(componentContainer.querySelector(".btn-close"));
|
fireEvent.click(componentContainer.querySelector(".btn-close"));
|
||||||
// Alert is gone
|
// Alert is gone
|
||||||
expect(queryByText(componentContainer, "Alert content")).toBeNull();
|
await (() =>
|
||||||
|
expect(
|
||||||
|
queryByText(componentContainer, "Alert content")
|
||||||
|
).toBeNull());
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should dismiss alert with external button", () => {
|
it("should dismiss alert with external button", () => {
|
||||||
|
@ -6,7 +6,7 @@ exports[`AlertContext should render alert 1`] = `
|
|||||||
id="alert-container"
|
id="alert-container"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="alert alert-danger alert-dismissible"
|
class="alert alert-danger alert-fade-in alert-dismissible"
|
||||||
role="alert"
|
role="alert"
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { render, wait, getByText } from "customTestRender";
|
import { render, waitFor, getByText } from "customTestRender";
|
||||||
import mockAxios from "jest-mock-axios";
|
import mockAxios from "jest-mock-axios";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -38,7 +38,7 @@ describe("CustomizationContext", () => {
|
|||||||
it("should render component without customization", async () => {
|
it("should render component without customization", async () => {
|
||||||
mockAxios.mockResponse({ data: {} });
|
mockAxios.mockResponse({ data: {} });
|
||||||
|
|
||||||
await wait(() => getByText(componentContainer, ORIGINAL));
|
await waitFor(() => getByText(componentContainer, ORIGINAL));
|
||||||
|
|
||||||
expect(componentContainer).toMatchSnapshot();
|
expect(componentContainer).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
@ -46,7 +46,7 @@ describe("CustomizationContext", () => {
|
|||||||
it("should render customized component", async () => {
|
it("should render customized component", async () => {
|
||||||
mockAxios.mockResponse({ data: { customization: "shield" } });
|
mockAxios.mockResponse({ data: { customization: "shield" } });
|
||||||
|
|
||||||
await wait(() => getByText(componentContainer, CUSTOM));
|
await waitFor(() => getByText(componentContainer, CUSTOM));
|
||||||
|
|
||||||
expect(componentContainer).toMatchSnapshot();
|
expect(componentContainer).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { act, fireEvent, render, waitForElement } from "customTestRender";
|
import { act, fireEvent, render, waitFor } from "customTestRender";
|
||||||
import mockAxios from "jest-mock-axios";
|
import mockAxios from "jest-mock-axios";
|
||||||
import WebSockets from "webSockets/WebSockets";
|
import WebSockets from "webSockets/WebSockets";
|
||||||
import ForisForm from "../components/ForisForm";
|
import ForisForm from "../components/ForisForm";
|
||||||
@ -59,7 +59,7 @@ describe("useForm hook.", () => {
|
|||||||
);
|
);
|
||||||
mockAxios.mockResponse({ field: "fetchedData" });
|
mockAxios.mockResponse({ field: "fetchedData" });
|
||||||
|
|
||||||
input = await waitForElement(() => getByTestId("test-input"));
|
input = await waitFor(() => getByTestId("test-input"));
|
||||||
form = container.firstChild.firstChild;
|
form = container.firstChild.firstChild;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
|
* 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.
|
* This is free software, licensed under the GNU General Public License v3.
|
||||||
* See /LICENSE for more information.
|
* See /LICENSE for more information.
|
||||||
@ -20,22 +20,25 @@ export const STATES = {
|
|||||||
SubmitButton.propTypes = {
|
SubmitButton.propTypes = {
|
||||||
disabled: PropTypes.bool,
|
disabled: PropTypes.bool,
|
||||||
state: PropTypes.oneOf(Object.keys(STATES).map((key) => STATES[key])),
|
state: PropTypes.oneOf(Object.keys(STATES).map((key) => STATES[key])),
|
||||||
|
label: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function SubmitButton({ disabled, state, ...props }) {
|
export function SubmitButton({ disabled, state, label, ...props }) {
|
||||||
const disableSubmitButton = disabled || state !== STATES.READY;
|
const disableSubmitButton = disabled || state !== STATES.READY;
|
||||||
const loadingSubmitButton = state !== STATES.READY;
|
const loadingSubmitButton = state !== STATES.READY;
|
||||||
|
|
||||||
let labelSubmitButton;
|
let labelSubmitButton = label;
|
||||||
switch (state) {
|
if (!labelSubmitButton) {
|
||||||
case STATES.SAVING:
|
switch (state) {
|
||||||
labelSubmitButton = _("Updating");
|
case STATES.SAVING:
|
||||||
break;
|
labelSubmitButton = _("Updating");
|
||||||
case STATES.LOAD:
|
break;
|
||||||
labelSubmitButton = _("Load settings");
|
case STATES.LOAD:
|
||||||
break;
|
labelSubmitButton = _("Load settings");
|
||||||
default:
|
break;
|
||||||
labelSubmitButton = _("Save");
|
default:
|
||||||
|
labelSubmitButton = _("Save");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -28,19 +28,22 @@ export { default as FileInput } from "./bootstrap/FileInput";
|
|||||||
export { default as Input } from "./bootstrap/Input";
|
export { default as Input } from "./bootstrap/Input";
|
||||||
export { default as NumberInput } from "./bootstrap/NumberInput";
|
export { default as NumberInput } from "./bootstrap/NumberInput";
|
||||||
export { default as PasswordInput } from "./bootstrap/PasswordInput";
|
export { default as PasswordInput } from "./bootstrap/PasswordInput";
|
||||||
export { default as RadioSet, Radio } from "./bootstrap/RadioSet";
|
export { default as Radio } from "./bootstrap/Radio";
|
||||||
|
export { default as RadioSet } from "./bootstrap/RadioSet";
|
||||||
export { default as Select } from "./bootstrap/Select";
|
export { default as Select } from "./bootstrap/Select";
|
||||||
export { default as TextInput } from "./bootstrap/TextInput";
|
export { default as TextInput } from "./bootstrap/TextInput";
|
||||||
export { formFieldsSize, buttonFormFieldsSize } from "./bootstrap/constants";
|
export { formFieldsSize, buttonFormFieldsSize } from "./bootstrap/constants";
|
||||||
export { default as Switch } from "./bootstrap/Switch";
|
export { default as Switch } from "./bootstrap/Switch";
|
||||||
|
export { default as ThreeDotsMenu } from "./bootstrap/ThreeDotsMenu";
|
||||||
|
|
||||||
export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
|
export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
|
||||||
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
|
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
|
||||||
|
|
||||||
// Common
|
// Common
|
||||||
export { default as RebootButton } from "./common/RebootButton";
|
export { default as ActionButtonWithModal } from "./common/ActionButtonWithModal/ActionButtonWithModal";
|
||||||
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
|
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
|
||||||
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
|
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
|
||||||
|
export { default as RichTable } from "./common/RichTable/RichTable";
|
||||||
// Form
|
// Form
|
||||||
export { default as ForisForm } from "./form/components/ForisForm";
|
export { default as ForisForm } from "./form/components/ForisForm";
|
||||||
export {
|
export {
|
||||||
|
@ -14,7 +14,7 @@ import { render } from "@testing-library/react";
|
|||||||
import PropTypes from "prop-types";
|
import PropTypes from "prop-types";
|
||||||
|
|
||||||
import { AlertContextMock } from "./alertContextMock";
|
import { AlertContextMock } from "./alertContextMock";
|
||||||
import { CustomizationContextMock } from "./cutomizationContextMock";
|
import { CustomizationContextMock } from "./customizationContextMock";
|
||||||
|
|
||||||
Wrapper.propTypes = {
|
Wrapper.propTypes = {
|
||||||
children: PropTypes.oneOfType([
|
children: PropTypes.oneOfType([
|
||||||
|
@ -27,10 +27,19 @@ export const ForisURLs = {
|
|||||||
storage: `${REFORIS_URL_PREFIX}/storage`,
|
storage: `${REFORIS_URL_PREFIX}/storage`,
|
||||||
sentinelAgreement: `${REFORIS_URL_PREFIX}/sentinel/agreement`,
|
sentinelAgreement: `${REFORIS_URL_PREFIX}/sentinel/agreement`,
|
||||||
|
|
||||||
|
// URLs without prefix for Overview page
|
||||||
|
openvpnClientSettings: "/openvpn/client-settings",
|
||||||
|
packageManagementPackages: "/package-management/packages",
|
||||||
|
packageManagementUpdateSettings: "/package-management/update-settings",
|
||||||
|
sentinelLicenseAgreement: "/sentinel/agreement",
|
||||||
|
librespeedSpeedTest: "/librespeed/speed-test",
|
||||||
|
|
||||||
// Notifications links are used with <Link/> inside Router, thus url subdir is not required.
|
// Notifications links are used with <Link/> inside Router, thus url subdir is not required.
|
||||||
overview: "/overview",
|
overview: "/overview",
|
||||||
notifications: "/overview#notifications",
|
notifications: "/overview#notifications",
|
||||||
notificationsSettings: "/administration/notifications-settings",
|
notificationsSettings: "/administration/notifications-settings",
|
||||||
|
wifiSettings: "/network-settings/wifi",
|
||||||
|
lanSettings: "/network-settings/lan",
|
||||||
|
|
||||||
approveUpdates: "/package-management/updates",
|
approveUpdates: "/package-management/updates",
|
||||||
languages: "/package-management/languages",
|
languages: "/package-management/languages",
|
||||||
|
@ -28,11 +28,11 @@ module.exports = {
|
|||||||
content: "docs/development.md",
|
content: "docs/development.md",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Components",
|
name: "Common Components",
|
||||||
description: "Set of main components.",
|
description: "Set of main components.",
|
||||||
sections: [
|
sections: [
|
||||||
{
|
{
|
||||||
name: "Foris forms",
|
name: "ForisForm",
|
||||||
components: [
|
components: [
|
||||||
"src/form/components/ForisForm.js",
|
"src/form/components/ForisForm.js",
|
||||||
"src/form/components/alerts.js",
|
"src/form/components/alerts.js",
|
||||||
@ -42,47 +42,52 @@ module.exports = {
|
|||||||
usageMode: "expand",
|
usageMode: "expand",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Alert Context",
|
name: "RichTable",
|
||||||
components: ["src/context/alertContext/AlertContext.js"],
|
components: ["src/common/RichTable/RichTable.js"],
|
||||||
|
exampleMode: "expand",
|
||||||
|
usageMode: "expand",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ActionButtonWithModal",
|
||||||
|
components: [
|
||||||
|
"src/common/ActionButtonWithModal/ActionButtonWithModal.js",
|
||||||
|
],
|
||||||
exampleMode: "expand",
|
exampleMode: "expand",
|
||||||
usageMode: "expand",
|
usageMode: "expand",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
sectionDepth: 1,
|
sectionDepth: 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: "Customization Context",
|
name: "Bootstrap Components",
|
||||||
components: [
|
|
||||||
"src/context/customizationContext/CustomizationContext.js",
|
|
||||||
],
|
|
||||||
exampleMode: "expand",
|
|
||||||
usageMode: "expand",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Bootstrap components",
|
|
||||||
description: "Set of bootstrap components.",
|
description: "Set of bootstrap components.",
|
||||||
components: "src/bootstrap/*.js",
|
components: "src/bootstrap/*.js",
|
||||||
exampleMode: "expand",
|
exampleMode: "expand",
|
||||||
usageMode: "expand",
|
usageMode: "expand",
|
||||||
ignore: ["src/bootstrap/constants.js"],
|
ignore: ["src/bootstrap/constants.js", "src/bootstrap/Radio.js"],
|
||||||
sectionDepth: 0,
|
sectionDepth: 0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Contexts",
|
||||||
|
components: [
|
||||||
|
"src/context/alertContext/AlertContext.js",
|
||||||
|
"src/context/customizationContext/CustomizationContext.js",
|
||||||
|
],
|
||||||
|
exampleMode: "expand",
|
||||||
|
usageMode: "expand",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
template: {
|
template: {
|
||||||
favicon: "/docs/components/logo.svg",
|
favicon: "/docs/components/logo.svg",
|
||||||
},
|
},
|
||||||
require: [
|
require: [
|
||||||
"babel-polyfill",
|
"babel-polyfill",
|
||||||
path.join(__dirname, "src/testUtils/mockGlobals"),
|
path.join(__dirname, "src/testUtils/mockGlobals.js"),
|
||||||
path.join(
|
path.join(
|
||||||
__dirname,
|
__dirname,
|
||||||
"node_modules/bootstrap/dist/css/bootstrap.min.css"
|
"node_modules/bootstrap/dist/css/bootstrap.min.css"
|
||||||
),
|
),
|
||||||
path.join(
|
path.join(__dirname, "node_modules/bootstrap/dist/js/bootstrap.min.js"),
|
||||||
__dirname,
|
|
||||||
"node_modules/@fortawesome/fontawesome-free/css/all.min.css"
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
styleguideComponents: {
|
styleguideComponents: {
|
||||||
LogoRenderer: path.join(__dirname, "docs/components/Logo"),
|
LogoRenderer: path.join(__dirname, "docs/components/Logo"),
|
||||||
|
@ -7,16 +7,17 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2023-11-23 16:03+0000\n"
|
"PO-Revision-Date: 2024-11-15 06:01+0000\n"
|
||||||
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
|
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||||
|
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
|
||||||
|
">\n"
|
||||||
"Language: 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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"Generated-By: Babel 2.16.0\n"
|
||||||
|
|
||||||
#: src/api/utils.js:61
|
#: src/api/utils.js:61
|
||||||
@ -35,41 +36,86 @@ msgstr "Neobdržena žádná odezva."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
|
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Zavřít"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Zkopírováno!"
|
msgstr "Zkopírováno!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopírovat"
|
msgstr "Kopírovat"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr "Vyžadován restart."
|
msgstr "Akce úspěšná."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Restartovat"
|
msgstr "Akce se nezdařila."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Zrušit"
|
msgstr "Zrušit"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
msgid "Confirm"
|
||||||
msgstr "Potvrdit restart"
|
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/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
@ -90,16 +136,16 @@ msgid ""
|
|||||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
||||||
"and restore the default values."
|
"and restore the default values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit "
|
"Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit nastavení "
|
||||||
"nastavení Wi-Fi. Je třeba upozornit, že se tím odstraní aktuální "
|
"Wi-Fi. Je třeba upozornit, že se tím odstraní stávající nastavení Wi-Fi a "
|
||||||
"konfigurace Wi-Fi a obnoví se výchozí hodnoty."
|
"obnoví se výchozí hodnoty."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||||
msgid "Wi-Fi ${deviceID + 1}"
|
msgid "Wi-Fi ${deviceID + 1}"
|
||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Heslo"
|
msgstr "Heslo"
|
||||||
|
|
||||||
@ -128,7 +174,7 @@ msgid ""
|
|||||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||||
"Management Frame Protection."
|
"Management Frame Protection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Máte-li problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
|
"Pokud máte problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
|
||||||
"vypnout Management Frame Protection."
|
"vypnout Management Frame Protection."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||||
@ -145,15 +191,14 @@ msgstr "Zapnout Wi-Fi pro hosty"
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||||
#, fuzzy
|
|
||||||
msgid "Show QR code"
|
msgid "Show QR code"
|
||||||
msgstr "Wi-Fi QR kód"
|
msgstr "Ukázat QR kód"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "Wi-Fi QR kód"
|
msgstr "Wi-Fi QR kód"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Stáhnout PDF"
|
msgstr "Stáhnout PDF"
|
||||||
|
|
||||||
@ -180,7 +225,7 @@ msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
|
|||||||
#: src/common/WiFiSettings/WiFiSettings.js:91
|
#: src/common/WiFiSettings/WiFiSettings.js:91
|
||||||
#: src/common/WiFiSettings/WiFiSettings.js:110
|
#: src/common/WiFiSettings/WiFiSettings.js:110
|
||||||
msgid "Password must not contain more than 63 symbols"
|
msgid "Password must not contain more than 63 symbols"
|
||||||
msgstr "Heslo nesmí obsahovat více než 63 znaků"
|
msgstr "Heslo nemůže obsahovat více než 63 znaků"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:9
|
#: src/common/WiFiSettings/constants.js:9
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
@ -317,11 +362,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/form/components/SubmitButton.js:32
|
#: src/form/components/SubmitButton.js:32
|
||||||
msgid "Updating"
|
msgid "Updating"
|
||||||
msgstr "Aktualizuji"
|
msgstr "Aktualizuje se"
|
||||||
|
|
||||||
#: src/form/components/SubmitButton.js:35
|
#: src/form/components/SubmitButton.js:35
|
||||||
msgid "Load settings"
|
msgid "Load settings"
|
||||||
msgstr "Načítám nastavení"
|
msgstr "Načíst nastavení"
|
||||||
|
|
||||||
#: src/form/components/SubmitButton.js:38
|
#: src/form/components/SubmitButton.js:38
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
@ -353,7 +398,7 @@ msgstr "Toto není platné doménové jméno."
|
|||||||
|
|
||||||
#: src/utils/validations.js:18
|
#: src/utils/validations.js:18
|
||||||
msgid "This is not a valid DUID."
|
msgid "This is not a valid DUID."
|
||||||
msgstr "Tohle není platné DUID."
|
msgstr "Toto není platné DUID."
|
||||||
|
|
||||||
#: src/utils/validations.js:19
|
#: src/utils/validations.js:19
|
||||||
msgid "This is not a valid MAC address."
|
msgid "This is not a valid MAC address."
|
||||||
@ -389,3 +434,14 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
|
|||||||
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
|
#~ "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?"
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
@ -34,40 +34,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -146,7 +191,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -424,3 +469,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,12 +7,12 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
|
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
|
||||||
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
|
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-"
|
"Language-Team: German <https://hosted.weblate.org/projects/turris/foris-js/"
|
||||||
"js/de/>\n"
|
"de/>\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
@ -35,47 +35,94 @@ msgstr "Keine Antwort erhalten."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Ein unbekannter API-Fehler ist aufgetreten."
|
msgstr "Ein unbekannter API-Fehler ist aufgetreten."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Schließen"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56 src/bootstrap/CopyInput.js:57
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Kopiert!"
|
msgstr "Kopiert!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56 src/bootstrap/CopyInput.js:57
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopieren"
|
msgstr "Kopieren"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
#, fuzzy
|
||||||
msgstr "Neustart-Einleitung fehlgeschlagen."
|
msgid "Action successful."
|
||||||
|
msgstr "Einstellungen erfolgreich gespeichert"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Systemneustart"
|
msgstr ""
|
||||||
|
|
||||||
#: 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
|
#: src/common/RebootButton.js:71
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Neustart bestätigen"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ein Fehler ist während der Zurücksetzung der WLAN-Einstellungen "
|
"Ein Fehler ist während der Zurücksetzung der WLAN-Einstellungen aufgetreten."
|
||||||
"aufgetreten."
|
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:42
|
||||||
msgid "Wi-Fi settings are set to defaults."
|
msgid "Wi-Fi settings are set to defaults."
|
||||||
@ -88,20 +135,20 @@ msgstr "WLAN-Einstellungen zurücksetzen"
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:58
|
||||||
msgid ""
|
msgid ""
|
||||||
"If a number of wireless cards doesn't match, you may try to reset the Wi-"
|
"If a number of wireless cards doesn't match, you may try to reset the Wi-Fi "
|
||||||
"Fi settings. Note that this will remove the current Wi-Fi configuration "
|
"settings. Note that this will remove the current Wi-Fi configuration and "
|
||||||
"and restore the default values."
|
"restore the default values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls die Anzahl der WLAN-Karten nicht korrekt ist, könnte es helfen, die"
|
"Falls die Anzahl der WLAN-Karten nicht korrekt ist, könnte es helfen, die "
|
||||||
" WLAN-Einstellungen zurückzusetzen. Beachten Sie, dass dabei die aktuelle"
|
"WLAN-Einstellungen zurückzusetzen. Beachten Sie, dass dabei die aktuelle "
|
||||||
" WLAN-Konfiguration mit den Werkseinstellungen überschrieben wird."
|
"WLAN-Konfiguration mit den Werkseinstellungen überschrieben wird."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:97
|
#: src/common/WiFiSettings/WiFiForm.js:97
|
||||||
msgid "Wi-Fi ${deviceID + 1}"
|
msgid "Wi-Fi ${deviceID + 1}"
|
||||||
msgstr "WLAN ${deviceID + 1}"
|
msgstr "WLAN ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Passwort"
|
msgstr "Passwort"
|
||||||
|
|
||||||
@ -130,8 +177,8 @@ msgid ""
|
|||||||
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
"In case you have trouble connecting to WiFi Access Point, try disabling "
|
||||||
"Management Frame Protection."
|
"Management Frame Protection."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Falls Sie beim Verbinden mit dem WiFi-Access-Point Probleme haben, "
|
"Falls Sie beim Verbinden mit dem WiFi-Access-Point Probleme haben, schalten "
|
||||||
"schalten Sie testweise die Management Frame Protection ab."
|
"Sie testweise die Management Frame Protection ab."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:262
|
#: src/common/WiFiSettings/WiFiForm.js:262
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
@ -147,15 +194,14 @@ msgstr "Gast-WLAN aktivieren"
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||||
#, fuzzy
|
|
||||||
msgid "Show QR code"
|
msgid "Show QR code"
|
||||||
msgstr "WLAN QR-Code"
|
msgstr "QR-Code anzeigen"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "WLAN QR-Code"
|
msgstr "WLAN QR-Code"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "PDF herunterladen"
|
msgstr "PDF herunterladen"
|
||||||
|
|
||||||
@ -250,7 +296,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:34
|
#: src/common/WiFiSettings/constants.js:34
|
||||||
msgid "WPA2/3 pre-shared key, that is required to connect to the network."
|
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
|
#: src/common/WiFiSettings/constants.js:37
|
||||||
msgid "If set, network is not visible when scanning for available networks."
|
msgid "If set, network is not visible when scanning for available networks."
|
||||||
@ -260,55 +307,54 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:40
|
#: src/common/WiFiSettings/constants.js:40
|
||||||
msgid ""
|
msgid ""
|
||||||
"The 2.4 GHz band is more widely supported by clients, but tends to have "
|
"The 2.4 GHz band is more widely supported by clients, but tends to have more "
|
||||||
"more interference. The 5 GHz band is a newer standard and may not be "
|
"interference. The 5 GHz band is a newer standard and may not be supported by "
|
||||||
"supported by all your devices. It usually has less interference, but the "
|
"all your devices. It usually has less interference, but the signal does not "
|
||||||
"signal does not carry so well indoors."
|
"carry so well indoors."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das 2,4 GHz-Band wird von allen Geräten unterstützt, ist aber tendenziell"
|
"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 "
|
"stärker mit Interferenzen belastet. Das 5-GHz-Band ist ein neuerer Standard, "
|
||||||
"Standard, der möglicherweise nicht von allen Ihren Geräten unterstützt "
|
"der möglicherweise nicht von allen Ihren Geräten unterstützt wird. Es hat in "
|
||||||
"wird. Es hat in der Regel weniger Interferenzen, aber das Signal trägt "
|
"der Regel weniger Interferenzen, aber das Signal trägt nicht so gut in "
|
||||||
"nicht so gut in Innenräumen."
|
"Innenräumen."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:43
|
#: src/common/WiFiSettings/constants.js:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 "
|
"Change this to adjust 802.11n/ac/ax mode of operation. 802.11n with 40 MHz "
|
||||||
"MHz wide channels can yield higher throughput but can cause more "
|
"wide channels can yield higher throughput but can cause more interference in "
|
||||||
"interference in the network. If you don't know what to choose, use the "
|
"the network. If you don't know what to choose, use the default option with "
|
||||||
"default option with 20 MHz wide channel."
|
"20 MHz wide channel."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ändern Sie diese Option, um den 802.11n/ac/ax-Betriebsmodus anzupassen. "
|
"Ändern Sie diese Option, um den 802.11n/ac/ax-Betriebsmodus anzupassen. 40 "
|
||||||
"40 MHz breite Kanäle können bei 802.11n mehr Daten transportieren, jedoch"
|
"MHz breite Kanäle können bei 802.11n mehr Daten transportieren, jedoch zu "
|
||||||
" zu mehr Interferenzen im Netzwerk führen. Wenn Sie nicht wissen, was Sie"
|
"mehr Interferenzen im Netzwerk führen. Wenn Sie nicht wissen, was Sie wählen "
|
||||||
" wählen sollen, verwenden Sie die Voreinstellung mit 20 MHz Kanalbreite."
|
"sollen, verwenden Sie die Voreinstellung mit 20 MHz Kanalbreite."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:46
|
#: src/common/WiFiSettings/constants.js:46
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enables Wi-Fi for guests, which is separated from LAN network. Devices "
|
"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 "
|
"connected to this network are allowed to access the internet, but aren't "
|
||||||
"allowed to access other devices and the configuration interface of the "
|
"allowed to access other devices and the configuration interface of the "
|
||||||
"router. Parameters of the guest network can be set in the Guest network "
|
"router. Parameters of the guest network can be set in the Guest network tab."
|
||||||
"tab."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ermöglicht ein Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. "
|
"Ermöglicht ein Wi-Fi für Gäste, das vom LAN-Netzwerk getrennt ist. Geräte, "
|
||||||
"Geräte, die mit diesem Netzwerk verbunden sind, dürfen auf das Internet "
|
"die mit diesem Netzwerk verbunden sind, dürfen auf das Internet zugreifen, "
|
||||||
"zugreifen, nicht jedoch auf andere Geräte oder die "
|
"nicht jedoch auf andere Geräte oder die Konfigurationsschnittstelle des "
|
||||||
"Konfigurationsschnittstelle des Routers. Die Parameter des Gastnetzwerks "
|
"Routers. Die Parameter des Gastnetzwerks können auf der Gastnetzwerk-"
|
||||||
"können auf der Gastnetzwerk-Registerkarte eingestellt werden."
|
"Registerkarte eingestellt werden."
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:49
|
#: src/common/WiFiSettings/constants.js:49
|
||||||
msgid ""
|
msgid ""
|
||||||
"The WPA3 standard is the new most secure encryption method that is "
|
"The WPA3 standard is the new most secure encryption method that is suggested "
|
||||||
"suggested to be used with any device that supports it. The older devices "
|
"to be used with any device that supports it. The older devices without WPA3 "
|
||||||
"without WPA3 support require older WPA2. If you experience issues with "
|
"support require older WPA2. If you experience issues with connecting older "
|
||||||
"connecting older devices, try to enable WPA2."
|
"devices, try to enable WPA2."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der WPA3-Standard ist die neue Verschlüsselungsmethode mit der besten "
|
"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 "
|
"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 Geräte, bei denen das noch nicht der Fall ist, müssen auf das ältere "
|
||||||
"ältere WPA2 ausweichen. Falls Sie Probleme dabei haben, ältere Geräte mit"
|
"WPA2 ausweichen. Falls Sie Probleme dabei haben, ältere Geräte mit dem WLAN "
|
||||||
" dem WLAN zu verbinden, schalten Sie versuchsweise WPA2 ein."
|
"zu verbinden, schalten Sie versuchsweise WPA2 ein."
|
||||||
|
|
||||||
#: src/form/components/ForisForm.js:121
|
#: src/form/components/ForisForm.js:121
|
||||||
msgid "Settings saved successfully"
|
msgid "Settings saved successfully"
|
||||||
@ -368,22 +414,25 @@ msgstr "Dies ist keine gültige MAC-Adresse."
|
|||||||
msgid "Doesn't contain a list of emails separated by commas."
|
msgid "Doesn't contain a list of emails separated by commas."
|
||||||
msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
|
msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
|
||||||
|
|
||||||
#~ msgid "An unknown error occurred. Check the console for more info."
|
#: src/common/RebootButton.js:27
|
||||||
#~ msgstr ""
|
msgid "Reboot request failed."
|
||||||
|
msgstr "Neustart-Einleitung fehlgeschlagen."
|
||||||
|
|
||||||
#~ msgid "Reboot confirmation"
|
#: src/common/RebootButton.js:51
|
||||||
#~ msgstr ""
|
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 "Enable"
|
#~ msgid "Enable"
|
||||||
#~ msgstr "Aktivieren"
|
#~ 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 ""
|
|
||||||
|
|
||||||
|
@ -7,16 +7,17 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2021-02-09 16:50+0000\n"
|
"PO-Revision-Date: 2025-01-18 11:00+0000\n"
|
||||||
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
|
"Last-Translator: Thanasis <thanasakis11mail@gmail.com>\n"
|
||||||
|
"Language-Team: Greek <https://hosted.weblate.org/projects/turris/foris-js/el/"
|
||||||
|
">\n"
|
||||||
"Language: el\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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"Generated-By: Babel 2.16.0\n"
|
||||||
|
|
||||||
#: src/api/utils.js:61
|
#: src/api/utils.js:61
|
||||||
@ -35,42 +36,88 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Κλείσιμο"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Επανεκκίνηση"
|
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
|
||||||
msgid "Warning!"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:68
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
msgid "Are you sure you want to restart the router?"
|
|
||||||
msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"
|
|
||||||
|
|
||||||
#: src/common/RebootButton.js:71
|
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Άκυρο"
|
msgstr "Άκυρο"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Επιβεβαίωση επανεκκίνησης"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -96,7 +143,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -133,7 +180,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:303
|
#: src/common/WiFiSettings/WiFiForm.js:303
|
||||||
msgid "Custom"
|
msgid "Custom"
|
||||||
msgstr ""
|
msgstr "Προσαρμοσμένο"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
#: src/common/WiFiSettings/WiFiGuestForm.js:43
|
||||||
msgid "Enable Guest Wi-Fi"
|
msgid "Enable Guest Wi-Fi"
|
||||||
@ -148,7 +195,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -179,7 +226,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:9
|
#: src/common/WiFiSettings/constants.js:9
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr ""
|
msgstr "Απενεργοποιημένο"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:10
|
#: src/common/WiFiSettings/constants.js:10
|
||||||
msgid "802.11n - 20 MHz wide channel"
|
msgid "802.11n - 20 MHz wide channel"
|
||||||
@ -426,3 +473,14 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Reboot request failed."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Reboot"
|
||||||
|
#~ msgstr "Επανεκκίνηση"
|
||||||
|
|
||||||
|
#~ msgid "Warning!"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to restart the router?"
|
||||||
|
#~ msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
|
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
|
||||||
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
|
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
@ -35,40 +35,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -147,7 +192,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -422,3 +467,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,17 +7,16 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
|
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
|
||||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-js/"
|
|
||||||
"es/>\n"
|
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
|
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-"
|
||||||
|
"js/es/>\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
"X-Generator: Weblate 5.7.1-dev\n"
|
|
||||||
"Generated-By: Babel 2.16.0\n"
|
"Generated-By: Babel 2.16.0\n"
|
||||||
|
|
||||||
#: src/api/utils.js:61
|
#: src/api/utils.js:61
|
||||||
@ -38,42 +37,89 @@ msgstr ""
|
|||||||
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
|
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
|
||||||
"informaciòn."
|
"informaciòn."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Cerrar"
|
msgstr "Cerrar"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "¡Copiado!"
|
msgstr "¡Copiado!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Copiar"
|
msgstr "Copiar"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
#, fuzzy
|
||||||
msgstr "La petición de reinicio ha fallado."
|
msgid "Action successful."
|
||||||
|
msgstr "Los ajustes se han guardado correctamente"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Reiniciar"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Confirmar reinicio"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
|
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
|
||||||
@ -102,7 +148,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Contraseña"
|
msgstr "Contraseña"
|
||||||
|
|
||||||
@ -155,7 +201,7 @@ msgstr "Mostrar el código QR"
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "Código QR Wi-Fi"
|
msgstr "Código QR Wi-Fi"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Descargar PDF"
|
msgstr "Descargar PDF"
|
||||||
|
|
||||||
@ -446,3 +492,16 @@ msgstr "No contiene una lista de correos electrónicos separados por comas."
|
|||||||
#~ " default option with 20 MHz wide "
|
#~ " default option with 20 MHz wide "
|
||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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?"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: fi\n"
|
"Language: fi\n"
|
||||||
@ -34,40 +34,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -146,7 +191,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -424,3 +469,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: fo\n"
|
"Language: fo\n"
|
||||||
@ -34,40 +34,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -146,7 +191,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -424,3 +469,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Foris JS 6.1.0\n"
|
"Project-Id-Version: Foris JS 6.5.0\n"
|
||||||
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
|
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -33,40 +33,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -94,7 +139,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -145,7 +190,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,16 +7,17 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2024-07-27 01:09+0000\n"
|
"PO-Revision-Date: 2024-12-14 10:00+0000\n"
|
||||||
"Last-Translator: Moha684 <nahil82466@gmail.com>\n"
|
"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
|
||||||
|
"Language-Team: French <https://hosted.weblate.org/projects/turris/foris-js/"
|
||||||
|
"fr/>\n"
|
||||||
"Language: fr\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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"Generated-By: Babel 2.16.0\n"
|
||||||
|
|
||||||
#: src/api/utils.js:61
|
#: src/api/utils.js:61
|
||||||
@ -35,42 +36,88 @@ msgstr "Aucun réponse reçue."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Une erreur d’API inconnue s’est produite."
|
msgstr "Une erreur d’API inconnue s’est produite."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Fermer"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Copié!"
|
msgstr "Copié!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Copier"
|
msgstr "Copier"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr "La demande de redémarrage a échoué."
|
msgstr "Paramètres enregistrés avec succès."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Redémarrer"
|
msgstr "L'enregistrement des paramètres a échoué."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Confirmer le redémarrage"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -98,7 +145,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Mot de passe"
|
msgstr "Mot de passe"
|
||||||
|
|
||||||
@ -153,7 +200,7 @@ msgstr "Code QR Wi-Fi"
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "Code QR Wi-Fi"
|
msgstr "Code QR Wi-Fi"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Télécharger le PDF"
|
msgstr "Télécharger le PDF"
|
||||||
|
|
||||||
@ -415,3 +462,14 @@ msgstr ""
|
|||||||
#~ " "
|
#~ " "
|
||||||
#~ 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 ?"
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2022-09-29 14:17+0000\n"
|
"PO-Revision-Date: 2022-09-29 14:17+0000\n"
|
||||||
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
|
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
|
||||||
"Language: hr\n"
|
"Language: hr\n"
|
||||||
@ -36,40 +36,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -97,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Lozinka"
|
msgstr "Lozinka"
|
||||||
|
|
||||||
@ -148,7 +193,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -426,3 +471,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2021-01-07 01:26+0000\n"
|
"PO-Revision-Date: 2021-01-07 01:26+0000\n"
|
||||||
"Last-Translator: Zoli <boritek@gmail.com>\n"
|
"Last-Translator: Zoli <boritek@gmail.com>\n"
|
||||||
"Language: hu\n"
|
"Language: hu\n"
|
||||||
@ -35,40 +35,86 @@ msgstr "Nem érkezett válasz."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Ismeretlen API-hiba történt."
|
msgstr "Ismeretlen API-hiba történt."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
#, fuzzy
|
||||||
|
msgid "Action successful."
|
||||||
|
msgstr "Beállítások sikeresen elmentve"
|
||||||
|
|
||||||
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -147,7 +193,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -419,3 +465,18 @@ msgstr "Nem tartalmaz vesszővel elválasztott e-mail listát."
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
|
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
|
||||||
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
|
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
@ -35,40 +35,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Password"
|
msgstr "Password"
|
||||||
|
|
||||||
@ -147,7 +192,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -425,3 +470,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-10-16 10:08+0000\n"
|
"PO-Revision-Date: 2019-10-16 10:08+0000\n"
|
||||||
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
|
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
@ -35,40 +35,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "再起動"
|
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
|
||||||
msgid "Warning!"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:68
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
msgid "Are you sure you want to restart the router?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/common/RebootButton.js:71
|
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -148,7 +193,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -426,3 +471,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
@ -34,40 +34,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -146,7 +191,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -424,3 +469,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: lt\n"
|
"Language: lt\n"
|
||||||
@ -35,40 +35,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -147,7 +192,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -425,3 +470,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2023-03-02 11:40+0000\n"
|
"PO-Revision-Date: 2023-03-02 11:40+0000\n"
|
||||||
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
||||||
"Language: nb_NO\n"
|
"Language: nb_NO\n"
|
||||||
@ -36,43 +36,89 @@ msgstr "Fikk ikke svar."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Ukjent API-feil."
|
msgstr "Ukjent API-feil."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Kopiert"
|
msgstr "Kopiert"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopier"
|
msgstr "Kopier"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr "Omstart kreves"
|
msgstr "Innstillinger lagret"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Start på ny"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Bekreft omstart"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
@ -103,7 +149,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Passord"
|
msgstr "Passord"
|
||||||
|
|
||||||
@ -161,7 +207,7 @@ msgstr "QR-kode for Wi-Fi"
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "QR-kode for Wi-Fi"
|
msgstr "QR-kode for Wi-Fi"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Last ned PDF"
|
msgstr "Last ned PDF"
|
||||||
|
|
||||||
@ -403,3 +449,15 @@ msgstr "Inneholder ikke en kommainndelt liste med e-postadresser."
|
|||||||
#~ "gjeldende Wi-Fi-oppsett og tilbakestiller forvalgte verdier.\n"
|
#~ "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?"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
|
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
|
||||||
"Last-Translator: powerburner-nl <peter.mulder.1981@gmail.com>\n"
|
"Last-Translator: powerburner-nl <peter.mulder.1981@gmail.com>\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
@ -35,43 +35,88 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
#, fuzzy
|
msgid "Action successful."
|
||||||
msgid "Reboot request failed."
|
msgstr ""
|
||||||
msgstr "Opnieuw opstarten is vereist"
|
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Opnieuw opstarten"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Annuleren"
|
msgstr "Annuleren"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Opnieuw opstarten bevestigen"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -97,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Wachtwoord"
|
msgstr "Wachtwoord"
|
||||||
|
|
||||||
@ -149,7 +194,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -428,3 +473,15 @@ msgstr "Bevat geen lijst met e-mails gescheiden door komma's."
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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?"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2023-03-07 16:37+0000\n"
|
"PO-Revision-Date: 2023-03-07 16:37+0000\n"
|
||||||
"Last-Translator: Arusekk <arek_koz@o2.pl>\n"
|
"Last-Translator: Arusekk <arek_koz@o2.pl>\n"
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
@ -36,42 +36,89 @@ msgstr "Brak odpowiedzi."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Wystąpił nieznany błąd API."
|
msgstr "Wystąpił nieznany błąd API."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
#, fuzzy
|
||||||
|
msgid "Action successful."
|
||||||
|
msgstr "Ustawienia zostały zapisane"
|
||||||
|
|
||||||
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Anuluj"
|
msgstr "Anuluj"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Potwierdź restart"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -97,7 +144,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Hasło"
|
msgstr "Hasło"
|
||||||
|
|
||||||
@ -148,7 +195,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -426,3 +473,15 @@ msgstr "Nie zawiera listy e-maili oddzielonych przecinkami."
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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?"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2021-12-21 12:52+0000\n"
|
"PO-Revision-Date: 2021-12-21 12:52+0000\n"
|
||||||
"Last-Translator: c10l <weblate.org@a.c10l.cc>\n"
|
"Last-Translator: c10l <weblate.org@a.c10l.cc>\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
@ -35,42 +35,88 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Reinício"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Confirma reinício"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -96,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -147,7 +193,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -403,3 +449,15 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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?"
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2019-02-19 13:35+0100\n"
|
"PO-Revision-Date: 2019-02-19 13:35+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: ro\n"
|
"Language: ro\n"
|
||||||
@ -35,40 +35,85 @@ msgstr ""
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
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"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -147,7 +192,7 @@ msgstr ""
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -425,3 +470,18 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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 ""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2022-12-07 12:47+0000\n"
|
"PO-Revision-Date: 2022-12-07 12:47+0000\n"
|
||||||
"Last-Translator: Алексей Леньшин <alenshin@gmail.com>\n"
|
"Last-Translator: Алексей Леньшин <alenshin@gmail.com>\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@ -36,42 +36,89 @@ msgstr "Ответ не получен."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Неизвестная ошибка программного интерфейса приложения."
|
msgstr "Неизвестная ошибка программного интерфейса приложения."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Скопировано!"
|
msgstr "Скопировано!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Копировать"
|
msgstr "Копировать"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
#, fuzzy
|
||||||
msgstr "Запрос на перезагрузку не выполнен."
|
msgid "Action successful."
|
||||||
|
msgstr "Настройки были успешно сохранены"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Перезагрузка"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Отмена"
|
msgstr "Отмена"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Подтвердите перезагрузку"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr "При сбросе настроек Wi-Fi произошла ошибка."
|
msgstr "При сбросе настроек Wi-Fi произошла ошибка."
|
||||||
@ -100,7 +147,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Пароль"
|
msgstr "Пароль"
|
||||||
|
|
||||||
@ -154,7 +201,7 @@ msgstr "QR-код Wi-Fi"
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "QR-код Wi-Fi"
|
msgstr "QR-код Wi-Fi"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Скачать PDF"
|
msgstr "Скачать PDF"
|
||||||
|
|
||||||
@ -394,3 +441,15 @@ msgstr "Не содержит списка электронных адресов
|
|||||||
#~ "значений по умолчанию.\n"
|
#~ "значений по умолчанию.\n"
|
||||||
#~ " "
|
#~ " "
|
||||||
|
|
||||||
|
#~ msgid "Reboot request failed."
|
||||||
|
#~ msgstr "Запрос на перезагрузку не выполнен."
|
||||||
|
|
||||||
|
#~ msgid "Reboot"
|
||||||
|
#~ msgstr "Перезагрузка"
|
||||||
|
|
||||||
|
#~ msgid "Warning!"
|
||||||
|
#~ msgstr "Предупреждение!"
|
||||||
|
|
||||||
|
#~ msgid "Are you sure you want to restart the router?"
|
||||||
|
#~ msgstr "Вы уверены, что хотите перезагрузить маршрутизатор?"
|
||||||
|
|
||||||
|
@ -7,16 +7,17 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2023-01-17 22:51+0000\n"
|
"PO-Revision-Date: 2024-12-14 10:00+0000\n"
|
||||||
"Last-Translator: Atec <dr.atec@gmail.com>\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: 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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"Generated-By: Babel 2.16.0\n"
|
||||||
|
|
||||||
#: src/api/utils.js:61
|
#: src/api/utils.js:61
|
||||||
@ -35,41 +36,86 @@ msgstr "Nenastala žiadna odozva."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Nastala neznáma chyba v API."
|
msgstr "Nastala neznáma chyba v API."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Zatvoriť"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Skopírované!"
|
msgstr "Skopírované!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopírovať"
|
msgstr "Kopírovať"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr "Požiadavka na reštart neúspešná."
|
msgstr "Akcia úspešná."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Reštartovať"
|
msgstr "Akcia neúspešná."
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Zrušiť"
|
msgstr "Zrušiť"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
msgid "Confirm"
|
||||||
msgstr "Potvrdiť reštart"
|
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/WiFiSettings/ResetWiFiSettings.js:39
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
@ -99,7 +145,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Heslo"
|
msgstr "Heslo"
|
||||||
|
|
||||||
@ -145,15 +191,14 @@ msgstr "Povoliť Wi-Fi pre hostí"
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
#: src/common/WiFiSettings/WiFiQRCode.js:43
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
#: src/common/WiFiSettings/WiFiQRCode.js:44
|
||||||
#, fuzzy
|
|
||||||
msgid "Show QR code"
|
msgid "Show QR code"
|
||||||
msgstr "Wi-Fi QR kód"
|
msgstr "Zobraziť QR kód"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
#: src/common/WiFiSettings/WiFiQRCode.js:70
|
||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "Wi-Fi QR kód"
|
msgstr "Wi-Fi QR kód"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Stiahnuť PDF"
|
msgstr "Stiahnuť PDF"
|
||||||
|
|
||||||
@ -184,7 +229,7 @@ msgstr "Heslo nesmie obsahovať viac ako 63 znakov"
|
|||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:9
|
#: src/common/WiFiSettings/constants.js:9
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Zakázané"
|
msgstr "Vypnuté"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/constants.js:10
|
#: src/common/WiFiSettings/constants.js:10
|
||||||
msgid "802.11n - 20 MHz wide channel"
|
msgid "802.11n - 20 MHz wide channel"
|
||||||
@ -390,3 +435,14 @@ msgstr "Neobsahuje zoznam e-mailov oddelených čiarkami."
|
|||||||
#~ " a obnovia sa východiskové hodnoty.\n"
|
#~ " 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ť?"
|
||||||
|
@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
|
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
|
||||||
"PO-Revision-Date: 2023-09-22 21:00+0000\n"
|
"PO-Revision-Date: 2023-09-22 21:00+0000\n"
|
||||||
"Last-Translator: Kristoffer Grundström "
|
"Last-Translator: Kristoffer Grundström "
|
||||||
"<swedishsailfishosuser@tutanota.com>\n"
|
"<swedishsailfishosuser@tutanota.com>\n"
|
||||||
@ -36,42 +36,88 @@ msgstr "Inget svar togs emot."
|
|||||||
msgid "An unknown API error occurred."
|
msgid "An unknown API error occurred."
|
||||||
msgstr "Ett okänt API-fel inträffade."
|
msgstr "Ett okänt API-fel inträffade."
|
||||||
|
|
||||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
|
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
|
||||||
|
#: src/common/WiFiSettings/WiFiQRCode.js:89
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copied!"
|
msgid "Copied!"
|
||||||
msgstr "Kopierades!"
|
msgstr "Kopierades!"
|
||||||
|
|
||||||
#: src/bootstrap/CopyInput.js:57
|
#: src/bootstrap/CopyInput.js:56
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopiera"
|
msgstr "Kopiera"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:27
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
|
||||||
msgid "Reboot request failed."
|
msgid "Action successful."
|
||||||
msgstr "Förfrågning för omstart misslyckades."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:51
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
|
||||||
msgid "Reboot"
|
msgid "Action failed."
|
||||||
msgstr "Starta om"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/RebootButton.js:66
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
|
||||||
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"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: src/common/RebootButton.js:73
|
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
|
||||||
msgid "Confirm reboot"
|
#, fuzzy
|
||||||
|
msgid "Confirm"
|
||||||
msgstr "Bekräfta omstart"
|
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
|
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
|
||||||
msgid "An error occurred during resetting Wi-Fi settings."
|
msgid "An error occurred during resetting Wi-Fi settings."
|
||||||
msgstr "Ett fel inträffade under återställningen av Wi-Fi-inställningarna."
|
msgstr "Ett fel inträffade under återställningen av Wi-Fi-inställningarna."
|
||||||
@ -100,7 +146,7 @@ msgid "Wi-Fi ${deviceID + 1}"
|
|||||||
msgstr "Wi-Fi ${deviceID + 1}"
|
msgstr "Wi-Fi ${deviceID + 1}"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiForm.js:132
|
#: src/common/WiFiSettings/WiFiForm.js:132
|
||||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
|
#: src/common/WiFiSettings/WiFiGuestForm.js:78
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Lösenord"
|
msgstr "Lösenord"
|
||||||
|
|
||||||
@ -154,7 +200,7 @@ msgstr "QR-kod för Wi-Fi"
|
|||||||
msgid "Wi-Fi QR Code"
|
msgid "Wi-Fi QR Code"
|
||||||
msgstr "QR-kod för Wi-Fi"
|
msgstr "QR-kod för Wi-Fi"
|
||||||
|
|
||||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
|
#: src/common/WiFiSettings/WiFiQRCode.js:102
|
||||||
msgid "Download PDF"
|
msgid "Download PDF"
|
||||||
msgstr "Ladda ner PDF"
|
msgstr "Ladda ner PDF"
|
||||||
|
|
||||||
@ -440,3 +486,15 @@ msgstr ""
|
|||||||
#~ "channel."
|
#~ "channel."
|
||||||
#~ msgstr ""
|
#~ 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?"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user