Compare commits

...

427 Commits

Author SHA1 Message Date
shamoon
af2566c237 Merge pull request #1069 from rommelkott/main
Refactor Healthchecks widget API host to be parametrized
2023-02-28 07:58:20 -08:00
Rommel Kott
bf2f527f76 Refactor API host to be parametrized 2023-02-28 01:04:44 -06:00
Anonymous
009b13817a Translated using Weblate (Thai)
Currently translated at 12.8% (47 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-28 05:17:49 +01:00
Anonymous
397dfa98a2 Translated using Weblate (Latvian)
Currently translated at 32.5% (119 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-28 05:17:49 +01:00
Anonymous
b46f07244a Translated using Weblate (Japanese)
Currently translated at 4.0% (15 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-28 05:17:49 +01:00
Anonymous
371aec0d98 Translated using Weblate (Ukrainian)
Currently translated at 98.6% (361 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-28 05:17:48 +01:00
Anonymous
f6aef7e2f9 Translated using Weblate (Esperanto)
Currently translated at 28.1% (103 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-28 05:17:48 +01:00
Anonymous
8a1be1e02d Translated using Weblate (Hindi)
Currently translated at 2.4% (9 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-28 05:17:48 +01:00
Anonymous
e2d5f94b04 Translated using Weblate (Malay)
Currently translated at 69.1% (253 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-28 05:17:48 +01:00
Anonymous
7b455e0c1b Translated using Weblate (Danish)
Currently translated at 54.0% (198 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-28 05:17:47 +01:00
Anonymous
4aedbe4bdc Translated using Weblate (Czech)
Currently translated at 68.3% (250 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-28 05:17:47 +01:00
Anonymous
c2ed7feab7 Translated using Weblate (Arabic)
Currently translated at 71.5% (262 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-28 05:17:47 +01:00
Anonymous
0989c02d38 Translated using Weblate (Serbian)
Currently translated at 2.4% (9 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-28 05:17:46 +01:00
Anonymous
dd026c85d9 Translated using Weblate (Turkish)
Currently translated at 86.6% (317 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-28 05:17:46 +01:00
Anonymous
66e45d2594 Translated using Weblate (Bulgarian)
Currently translated at 12.5% (46 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-28 05:17:46 +01:00
Anonymous
ea578d6185 Translated using Weblate (Telugu)
Currently translated at 59.2% (217 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-28 05:17:45 +01:00
Anonymous
aadb2ecdb3 Translated using Weblate (Finnish)
Currently translated at 48.6% (178 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-28 05:17:45 +01:00
Anonymous
296e80b7d5 Translated using Weblate (Yue)
Currently translated at 32.2% (118 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-28 05:17:45 +01:00
Anonymous
6f298eb4ee Translated using Weblate (Portuguese (Brazil))
Currently translated at 98.6% (361 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-28 05:17:44 +01:00
Anonymous
644fcdc57b Translated using Weblate (Romanian)
Currently translated at 37.4% (137 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-28 05:17:44 +01:00
Anonymous
f9b963da6b Translated using Weblate (Hebrew)
Currently translated at 27.5% (101 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-28 05:17:44 +01:00
Anonymous
56be3474db Translated using Weblate (Hungarian)
Currently translated at 29.5% (108 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-28 05:17:43 +01:00
Anonymous
2850111024 Translated using Weblate (Croatian)
Currently translated at 78.1% (286 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-28 05:17:43 +01:00
Anonymous
abe20929c3 Translated using Weblate (Swedish)
Currently translated at 36.0% (132 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-28 05:17:43 +01:00
Anonymous
820eaa67d7 Translated using Weblate (Polish)
Currently translated at 77.8% (285 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-28 05:17:43 +01:00
Anonymous
3ce25830cc Translated using Weblate (Catalan)
Currently translated at 70.4% (258 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-28 05:17:42 +01:00
Anonymous
6e899c0684 Translated using Weblate (Chinese (Traditional))
Currently translated at 96.7% (354 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-28 05:17:42 +01:00
Anonymous
40bf9202ec Translated using Weblate (Dutch)
Currently translated at 24.0% (88 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-28 05:17:42 +01:00
Anonymous
92ba57e1e0 Translated using Weblate (Vietnamese)
Currently translated at 12.0% (44 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-28 05:17:41 +01:00
Anonymous
34ca28b65f Translated using Weblate (Norwegian Bokmål)
Currently translated at 21.5% (79 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-28 05:17:41 +01:00
Anonymous
34ebf27b06 Translated using Weblate (Italian)
Currently translated at 78.6% (288 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-28 05:17:41 +01:00
Anonymous
3adfaf9e26 Translated using Weblate (Chinese (Simplified))
Currently translated at 90.4% (331 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-28 05:17:40 +01:00
Anonymous
5bdef9c6a1 Translated using Weblate (Russian)
Currently translated at 13.1% (48 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-28 05:17:40 +01:00
Anonymous
e5bd5bb423 Translated using Weblate (Portuguese)
Currently translated at 69.9% (256 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-28 05:17:40 +01:00
Anonymous
5bc7fc168c Translated using Weblate (French)
Currently translated at 99.4% (364 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-28 05:17:40 +01:00
Anonymous
44c99af690 Translated using Weblate (Spanish)
Currently translated at 99.4% (364 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-28 05:17:39 +01:00
Anonymous
befefd9af6 Translated using Weblate (German)
Currently translated at 62.2% (228 of 366 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-28 05:17:39 +01:00
shamoon
78e92dac22 Merge pull request #1068 from Aesop7/main
Add Quicklaunch feature to jump to a url
2023-02-27 20:15:26 -08:00
shamoon
af147c0da0 Support open url in quicklaunch 2023-02-27 20:06:30 -08:00
danny
6d5434fa3a Add the ability to go to a URL from quicklaunch
disable shift indicator whenever modal is closed

Add prefix to make feature more explicit

Hide the results when shift is pressed

fix typo - className not class

Revert "Add the ability to go to a URL from quicklaunch"

This reverts commit c52184df275b2819a968db0a3f2a57d56b988ac9.
2023-02-27 17:29:43 -08:00
shamoon
cbf11e3fb4 Merge pull request #1063 from benphelps/issue-1060
Change: Alter cloudflare widget to use api token [Breaking Change]
2023-02-26 08:31:11 -08:00
shamoon
e9790e5677 Change cloudflare widget to use api tokens 2023-02-26 08:18:47 -08:00
gallegonovato
86383e5dce Translated using Weblate (Spanish)
Currently translated at 100.0% (364 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-26 16:36:39 +01:00
shamoon
449c23a63d fix service widgets import organization 2023-02-24 22:24:30 -08:00
Anonymous
829f7e33bc Translated using Weblate (Thai)
Currently translated at 12.9% (47 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-25 07:10:38 +01:00
Anonymous
9f4237f07d Translated using Weblate (Latvian)
Currently translated at 32.6% (119 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-25 07:10:38 +01:00
Anonymous
7458b9f685 Translated using Weblate (Japanese)
Currently translated at 4.1% (15 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-25 07:10:37 +01:00
Anonymous
9a11cd5f81 Translated using Weblate (Ukrainian)
Currently translated at 99.1% (361 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-25 07:10:37 +01:00
Anonymous
81aaf5aa56 Translated using Weblate (Esperanto)
Currently translated at 28.2% (103 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-25 07:10:37 +01:00
Anonymous
716660318b Translated using Weblate (Hindi)
Currently translated at 2.4% (9 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-25 07:10:36 +01:00
Anonymous
a861971ba6 Translated using Weblate (Malay)
Currently translated at 69.5% (253 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-25 07:10:36 +01:00
Anonymous
6a7a30b423 Translated using Weblate (Danish)
Currently translated at 54.3% (198 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-25 07:10:36 +01:00
Anonymous
e60768d156 Translated using Weblate (Czech)
Currently translated at 68.6% (250 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-25 07:10:35 +01:00
Anonymous
dfa9cf29f9 Translated using Weblate (Arabic)
Currently translated at 71.9% (262 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-25 07:10:35 +01:00
Anonymous
ab576f173b Translated using Weblate (Serbian)
Currently translated at 2.4% (9 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-25 07:10:35 +01:00
Anonymous
10604fc5d2 Translated using Weblate (Turkish)
Currently translated at 87.0% (317 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-25 07:10:34 +01:00
Anonymous
ebc8b745a4 Translated using Weblate (Bulgarian)
Currently translated at 12.6% (46 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-25 07:10:34 +01:00
Anonymous
f0151a5d57 Translated using Weblate (Telugu)
Currently translated at 59.6% (217 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-25 07:10:34 +01:00
Anonymous
76274a7843 Translated using Weblate (Finnish)
Currently translated at 48.9% (178 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-25 07:10:33 +01:00
Anonymous
20635da031 Translated using Weblate (Yue)
Currently translated at 32.4% (118 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-25 07:10:33 +01:00
Anonymous
a52f4ed984 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.1% (361 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-25 07:10:33 +01:00
Anonymous
1f4e89cf10 Translated using Weblate (Romanian)
Currently translated at 37.6% (137 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-25 07:10:32 +01:00
Anonymous
2ae71a27fe Translated using Weblate (Hebrew)
Currently translated at 27.7% (101 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-25 07:10:32 +01:00
Anonymous
eb508170f0 Translated using Weblate (Hungarian)
Currently translated at 29.6% (108 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-25 07:10:32 +01:00
Anonymous
7ba37c894d Translated using Weblate (Croatian)
Currently translated at 78.5% (286 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-25 07:10:32 +01:00
Anonymous
37d7a94d8a Translated using Weblate (Swedish)
Currently translated at 36.2% (132 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-25 07:10:31 +01:00
Anonymous
98595a84e2 Translated using Weblate (Polish)
Currently translated at 78.2% (285 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-25 07:10:31 +01:00
Anonymous
509d0a785e Translated using Weblate (Catalan)
Currently translated at 70.8% (258 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-25 07:10:31 +01:00
Anonymous
49e564af8a Translated using Weblate (Chinese (Traditional))
Currently translated at 97.2% (354 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-25 07:10:30 +01:00
Anonymous
72a65e9a15 Translated using Weblate (Dutch)
Currently translated at 24.1% (88 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-25 07:10:30 +01:00
Anonymous
dcbfd25d04 Translated using Weblate (Vietnamese)
Currently translated at 12.0% (44 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-25 07:10:30 +01:00
Anonymous
e7e46db9a1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 21.7% (79 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-25 07:10:29 +01:00
Anonymous
4c2cbb180f Translated using Weblate (Italian)
Currently translated at 79.1% (288 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-25 07:10:29 +01:00
Anonymous
6b56311955 Translated using Weblate (Chinese (Simplified))
Currently translated at 90.9% (331 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-25 07:10:29 +01:00
Anonymous
7cce64a91a Translated using Weblate (Russian)
Currently translated at 13.1% (48 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-25 07:10:28 +01:00
Anonymous
aaf4a5855e Translated using Weblate (Portuguese)
Currently translated at 70.3% (256 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-25 07:10:28 +01:00
Anonymous
2e83eec155 Translated using Weblate (French)
Currently translated at 99.1% (361 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-25 07:10:28 +01:00
Anonymous
21e9b55b74 Translated using Weblate (Spanish)
Currently translated at 98.6% (359 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-25 07:10:27 +01:00
Anonymous
5976a3c27f Translated using Weblate (German)
Currently translated at 62.6% (228 of 364 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-25 07:10:27 +01:00
Dan
cb9755d8e6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (361 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-25 07:09:58 +01:00
Bruno Rossetto
c139fbebd7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (361 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-25 07:09:58 +01:00
Nonoss117
8ef7b301ec Translated using Weblate (French)
Currently translated at 100.0% (361 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-25 07:09:58 +01:00
shamoon
102ce2b1fe Merge pull request #1056 from tristo7/prometheus-widget
add prometheus service widget
2023-02-24 22:09:51 -08:00
shamoon
fe494a4ab3 add prometheus widget data validation 2023-02-24 22:07:42 -08:00
Tristin Terry
8dcb3a27bd add prometheus service widget 2023-02-24 19:55:13 -06:00
shamoon
7740f7e2dd Revert #1044 2023-02-24 11:58:29 -08:00
shamoon
99efe2e7aa Merge pull request #1051 from benphelps/dependabot/github_actions/actions/checkout-3 2023-02-24 11:36:59 -08:00
dependabot[bot]
79df42a743 Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-24 17:03:59 +00:00
Anonymous
555e9463e8 Translated using Weblate (Thai)
Currently translated at 13.0% (47 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-24 16:54:25 +01:00
Anonymous
a2424ea0bd Translated using Weblate (Latvian)
Currently translated at 32.9% (119 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-24 16:54:25 +01:00
Anonymous
743e9dcbf8 Translated using Weblate (Japanese)
Currently translated at 4.1% (15 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-24 16:54:24 +01:00
Anonymous
350bb1ff25 Translated using Weblate (Ukrainian)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-24 16:54:24 +01:00
Anonymous
bf50eaff17 Translated using Weblate (Esperanto)
Currently translated at 28.5% (103 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-24 16:54:24 +01:00
Anonymous
2594068fd0 Translated using Weblate (Hindi)
Currently translated at 2.4% (9 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-24 16:54:24 +01:00
Anonymous
72f66385ae Translated using Weblate (Malay)
Currently translated at 70.0% (253 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-24 16:54:23 +01:00
Anonymous
9cae86d88b Translated using Weblate (Danish)
Currently translated at 54.8% (198 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-24 16:54:23 +01:00
Anonymous
9f5b381b17 Translated using Weblate (Czech)
Currently translated at 69.2% (250 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-24 16:54:23 +01:00
Anonymous
707bb93ad6 Translated using Weblate (Arabic)
Currently translated at 72.5% (262 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-24 16:54:22 +01:00
Anonymous
dfcd4d8e84 Translated using Weblate (Serbian)
Currently translated at 2.4% (9 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-24 16:54:22 +01:00
Anonymous
3d99302e33 Translated using Weblate (Turkish)
Currently translated at 87.8% (317 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-24 16:54:21 +01:00
Anonymous
a5036a701b Translated using Weblate (Bulgarian)
Currently translated at 12.7% (46 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-24 16:54:21 +01:00
Anonymous
3aa0fd594c Translated using Weblate (Telugu)
Currently translated at 60.1% (217 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-24 16:54:21 +01:00
Anonymous
67c60b4256 Translated using Weblate (Finnish)
Currently translated at 49.3% (178 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-24 16:54:20 +01:00
Anonymous
42675c2e71 Translated using Weblate (Yue)
Currently translated at 32.6% (118 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-24 16:54:20 +01:00
Anonymous
35098385c0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 69.8% (252 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-24 16:54:19 +01:00
Anonymous
409204c564 Translated using Weblate (Romanian)
Currently translated at 37.9% (137 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-24 16:54:19 +01:00
Anonymous
7ad59dc85f Translated using Weblate (Hebrew)
Currently translated at 27.9% (101 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-24 16:54:19 +01:00
Anonymous
f87d3d4ae3 Translated using Weblate (Hungarian)
Currently translated at 29.9% (108 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-24 16:54:19 +01:00
Anonymous
c84fecd981 Translated using Weblate (Croatian)
Currently translated at 79.2% (286 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-24 16:54:18 +01:00
Anonymous
321ede5297 Translated using Weblate (Swedish)
Currently translated at 36.5% (132 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-24 16:54:18 +01:00
Anonymous
6bea32ad83 Translated using Weblate (Polish)
Currently translated at 78.9% (285 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-24 16:54:18 +01:00
Anonymous
2a73b603c9 Translated using Weblate (Catalan)
Currently translated at 71.4% (258 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-24 16:54:17 +01:00
Anonymous
8203537915 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.0% (354 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-24 16:54:17 +01:00
Anonymous
c56f48fb42 Translated using Weblate (Dutch)
Currently translated at 24.3% (88 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-24 16:54:17 +01:00
Anonymous
743267ba7b Translated using Weblate (Vietnamese)
Currently translated at 12.1% (44 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-24 16:54:16 +01:00
Anonymous
218327b4a2 Translated using Weblate (Norwegian Bokmål)
Currently translated at 21.8% (79 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-24 16:54:16 +01:00
Anonymous
7754b8b8f1 Translated using Weblate (Italian)
Currently translated at 79.7% (288 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-24 16:54:16 +01:00
Anonymous
c0df7db05e Translated using Weblate (Chinese (Simplified))
Currently translated at 91.6% (331 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-24 16:54:15 +01:00
Anonymous
2c8aea1cd9 Translated using Weblate (Russian)
Currently translated at 13.2% (48 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-24 16:54:15 +01:00
Anonymous
d0ba6aebbf Translated using Weblate (Portuguese)
Currently translated at 70.9% (256 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-24 16:54:15 +01:00
Anonymous
5ed50bbb57 Translated using Weblate (French)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-24 16:54:14 +01:00
Anonymous
311b7b1cea Translated using Weblate (Spanish)
Currently translated at 99.4% (359 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-24 16:54:14 +01:00
Anonymous
101b706cd9 Translated using Weblate (German)
Currently translated at 63.1% (228 of 361 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-24 16:54:14 +01:00
Bruno Rossetto
bdfb09b1a4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 70.1% (252 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-24 16:53:50 +01:00
shamoon
65c06adb5a Merge pull request #1026 from Oupsman/pterodactyl
Pterodactyl widget: initial commit
2023-02-24 07:53:45 -08:00
shamoon
8c26da6655 Merge pull request #1047 from jameswynn/chart-commons-version 2023-02-24 07:50:19 -08:00
James Wynn
c0d58d8206 Typo in common lib version 2023-02-24 08:58:41 -06:00
shamoon
c2136e8353 Merge pull request #1044 from jameswynn/helm-chart 2023-02-24 06:52:00 -08:00
Dan
bc26d4f3b3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (359 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-24 02:46:32 +01:00
James Wynn
563cc9ce60 Migrated helm chart from jameswynn/helm-charts
Standard chart release pipeline from:
https://helm.sh/docs/howto/chart_releaser_action/
2023-02-23 14:36:55 -06:00
shamoon
060d5afcaa Simplify pterodactyl to only show server / node counts 2023-02-23 07:50:13 -08:00
Benoit SERRA
8e9ce016b1 Pterodactyl widget: initial commit 2023-02-23 07:50:13 -08:00
shamoon
b65f6fca19 Merge pull request #1040 from jameswynn/external-services
Added "external" boolean annotation to specify external services
2023-02-22 08:27:06 -08:00
James Wynn
f8f96645b0 Added "external" boolean annotation to specify external services
External services define a kubernetes service pointing to an application
hosted outside of the cluster. These services should not attempt to get
the status based on kubernetes deployments. The new boolean flag disables
this functionality. Since this is an edge case, the default value is "false".
2023-02-22 09:05:26 -06:00
Anonymous
81a2e1e692 Translated using Weblate (Czech)
Currently translated at 69.6% (250 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-22 06:14:06 +01:00
Chun Chi Hsieh
50a9bdbcb8 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.6% (354 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-22 06:14:05 +01:00
shamoon
601edb8d6b Merge pull request #1033 from DanBrezeanu/877-remove-bottom-version
Configuration option for removing bottom version
2023-02-21 08:20:40 -08:00
Dan Brezeanu
9eafac346b Configuration option for removing bottom version 2023-02-21 10:11:24 +02:00
shamoon
767fc1ec39 Better handle homebridge errors 2023-02-20 17:39:16 -08:00
Tomáš Plášek
09fa08b037 Translated using Weblate (Czech)
Currently translated at 69.6% (250 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-21 02:07:54 +01:00
Nonoss117
fe204dd0c3 Translated using Weblate (French)
Currently translated at 100.0% (359 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-21 02:07:53 +01:00
Antonio Sanchez Castellón
93fe847667 Translated using Weblate (Spanish)
Currently translated at 100.0% (359 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-21 02:07:53 +01:00
gallegonovato
f474b746d3 Translated using Weblate (Spanish)
Currently translated at 100.0% (359 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-21 02:07:52 +01:00
shamoon
b69bb94253 Merge pull request #1031 from benphelps/fix-1025
Fix homebridge config UI-X API expires login with 403
2023-02-20 14:59:46 -08:00
shamoon
9df4ba0881 Fix homebridge config UI-X API expires login with 403 2023-02-20 14:58:19 -08:00
shamoon
b2f26e1a43 Update status.jsx 2023-02-20 14:55:01 -08:00
Anonymous
f9282180db Translated using Weblate (Thai)
Currently translated at 13.0% (47 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-20 08:36:14 +01:00
Anonymous
794fcaf3c3 Translated using Weblate (Latvian)
Currently translated at 33.1% (119 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-20 08:36:14 +01:00
Anonymous
ea9b7de1c9 Translated using Weblate (Japanese)
Currently translated at 4.1% (15 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-20 08:36:14 +01:00
Anonymous
aef672f1bb Translated using Weblate (Ukrainian)
Currently translated at 97.7% (351 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-20 08:36:13 +01:00
Anonymous
c0ad65b3b1 Translated using Weblate (Esperanto)
Currently translated at 28.6% (103 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-20 08:36:12 +01:00
Anonymous
062dd5b79c Translated using Weblate (Hindi)
Currently translated at 2.5% (9 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-20 08:36:12 +01:00
Anonymous
085e485e7c Translated using Weblate (Malay)
Currently translated at 70.4% (253 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-20 08:36:12 +01:00
Anonymous
c227b70f32 Translated using Weblate (Danish)
Currently translated at 55.1% (198 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-20 08:36:11 +01:00
Anonymous
e06a992437 Translated using Weblate (Czech)
Currently translated at 62.6% (225 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-20 08:36:11 +01:00
Anonymous
f9a96e10d6 Translated using Weblate (Arabic)
Currently translated at 72.9% (262 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-20 08:36:11 +01:00
Anonymous
0c52bf02eb Translated using Weblate (Serbian)
Currently translated at 2.5% (9 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-20 08:36:10 +01:00
Anonymous
ae7a938245 Translated using Weblate (Turkish)
Currently translated at 88.3% (317 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-20 08:36:10 +01:00
Anonymous
1c749bf93e Translated using Weblate (Bulgarian)
Currently translated at 12.8% (46 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-20 08:36:09 +01:00
Anonymous
72b21b5d0e Translated using Weblate (Telugu)
Currently translated at 60.4% (217 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-20 08:36:09 +01:00
Anonymous
4762177ef2 Translated using Weblate (Finnish)
Currently translated at 49.5% (178 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-20 08:36:09 +01:00
Anonymous
418578c795 Translated using Weblate (Yue)
Currently translated at 32.8% (118 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-20 08:36:08 +01:00
Anonymous
d2335eb4cc Translated using Weblate (Portuguese (Brazil))
Currently translated at 48.1% (173 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-20 08:36:08 +01:00
Anonymous
520965c7fd Translated using Weblate (Romanian)
Currently translated at 38.1% (137 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-20 08:36:08 +01:00
Anonymous
7b36e071ea Translated using Weblate (Hebrew)
Currently translated at 28.1% (101 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-20 08:36:07 +01:00
Anonymous
3ea68caf53 Translated using Weblate (Hungarian)
Currently translated at 30.0% (108 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-20 08:36:07 +01:00
Anonymous
e36ab158f7 Translated using Weblate (Croatian)
Currently translated at 79.6% (286 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-20 08:36:07 +01:00
Anonymous
b5dedbdbf1 Translated using Weblate (Swedish)
Currently translated at 36.7% (132 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-20 08:36:06 +01:00
Anonymous
abc44e3fe1 Translated using Weblate (Polish)
Currently translated at 79.3% (285 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-20 08:36:06 +01:00
Anonymous
32aeae0c41 Translated using Weblate (Catalan)
Currently translated at 71.8% (258 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-20 08:36:05 +01:00
Anonymous
b0c443f982 Translated using Weblate (Chinese (Traditional))
Currently translated at 87.4% (314 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-20 08:36:05 +01:00
Anonymous
890b9a97cb Translated using Weblate (Dutch)
Currently translated at 24.5% (88 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-20 08:36:05 +01:00
Anonymous
034a30a29c Translated using Weblate (Vietnamese)
Currently translated at 12.2% (44 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-20 08:36:04 +01:00
Anonymous
b651fb84c4 Translated using Weblate (Norwegian Bokmål)
Currently translated at 22.0% (79 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-20 08:36:04 +01:00
Anonymous
4354698b15 Translated using Weblate (Italian)
Currently translated at 80.2% (288 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-20 08:36:04 +01:00
Anonymous
01210bcbc9 Translated using Weblate (Chinese (Simplified))
Currently translated at 92.2% (331 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-20 08:36:03 +01:00
Anonymous
810bae42fc Translated using Weblate (Russian)
Currently translated at 13.3% (48 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-20 08:36:03 +01:00
Anonymous
bfb8b703dc Translated using Weblate (Portuguese)
Currently translated at 71.3% (256 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-20 08:36:03 +01:00
Anonymous
2ab980e658 Translated using Weblate (French)
Currently translated at 97.7% (351 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-20 08:36:02 +01:00
Anonymous
509a4e5460 Translated using Weblate (Spanish)
Currently translated at 97.7% (351 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-20 08:36:02 +01:00
Anonymous
030aec3908 Translated using Weblate (German)
Currently translated at 63.5% (228 of 359 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-20 08:36:02 +01:00
Dan
26e4216780 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (351 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-20 08:35:07 +01:00
Nonoss117
08d7636165 Translated using Weblate (French)
Currently translated at 100.0% (351 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-20 08:35:07 +01:00
gallegonovato
9fcc6cae36 Translated using Weblate (Spanish)
Currently translated at 100.0% (351 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-20 08:35:07 +01:00
shamoon
893c443f21 Merge pull request #1023 from rommelkott/main
Add Health checks widget
2023-02-19 23:35:01 -08:00
shamoon
594f47fa68 Rework healthchecks date formatting 2023-02-19 23:32:53 -08:00
Rommel Kott
5def5dd508 Add healthcheck widget 2023-02-19 23:31:33 -08:00
shamoon
0e2b474540 Merge pull request #1022 from danroc/main
Fix: Correct flood + transmission rate units
2023-02-19 18:43:42 -08:00
shamoon
4855aa762f correct transmission rate units 2023-02-19 07:46:51 -08:00
Daniel Rocha
96507e4eba Use byterate for flood 2023-02-19 07:46:51 -08:00
shamoon
08f56b54f5 Update component.jsx 2023-02-19 06:25:07 -08:00
shamoon
9662c29374 Update PULL_REQUEST_TEMPLATE.md 2023-02-18 23:17:07 -08:00
shamoon
14e1a9a4ed limit widgets > 4 blocks 2023-02-18 22:58:55 -08:00
Jason Fischer
45946ddfe1 Merge pull request #963 from benphelps/fix-settings-after-container-update
Fix settings after container update
2023-02-18 22:56:53 -08:00
shamoon
651b8d8ef7 Update PULL_REQUEST_TEMPLATE.md 2023-02-18 22:50:38 -08:00
shamoon
8e53dff5dc Create PULL_REQUEST_TEMPLATE.md 2023-02-18 22:44:37 -08:00
Anonymous
c84a75ce77 Translated using Weblate (Thai)
Currently translated at 13.3% (47 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-19 07:22:26 +01:00
Anonymous
21106e4bbd Translated using Weblate (Latvian)
Currently translated at 33.9% (119 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-19 07:22:26 +01:00
Anonymous
af6f867e41 Translated using Weblate (Japanese)
Currently translated at 4.2% (15 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-19 07:22:26 +01:00
Anonymous
deaa4e5a13 Translated using Weblate (Ukrainian)
Currently translated at 96.5% (339 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-19 07:22:25 +01:00
Anonymous
fff96b6ab7 Translated using Weblate (Esperanto)
Currently translated at 29.3% (103 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-19 07:22:25 +01:00
Anonymous
7648f2d409 Translated using Weblate (Hindi)
Currently translated at 2.5% (9 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-19 07:22:24 +01:00
Anonymous
6461578fc5 Translated using Weblate (Malay)
Currently translated at 72.0% (253 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-19 07:22:24 +01:00
Anonymous
9d97b6e231 Translated using Weblate (Danish)
Currently translated at 56.4% (198 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-19 07:22:24 +01:00
Anonymous
71109db50f Translated using Weblate (Czech)
Currently translated at 64.1% (225 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-19 07:22:23 +01:00
Anonymous
f7294131b7 Translated using Weblate (Arabic)
Currently translated at 74.6% (262 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-19 07:22:23 +01:00
Anonymous
271aee139e Translated using Weblate (Serbian)
Currently translated at 2.5% (9 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-19 07:22:23 +01:00
Anonymous
3d9e739cb4 Translated using Weblate (Turkish)
Currently translated at 90.3% (317 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-19 07:22:22 +01:00
Anonymous
ada39bb876 Translated using Weblate (Bulgarian)
Currently translated at 13.1% (46 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-19 07:22:22 +01:00
Anonymous
160b936206 Translated using Weblate (Telugu)
Currently translated at 61.8% (217 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-19 07:22:21 +01:00
Anonymous
5874598a36 Translated using Weblate (Finnish)
Currently translated at 50.7% (178 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-19 07:22:21 +01:00
Anonymous
938d03e4ba Translated using Weblate (Yue)
Currently translated at 33.6% (118 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-19 07:22:21 +01:00
Anonymous
4314013b2e Translated using Weblate (Portuguese (Brazil))
Currently translated at 49.2% (173 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-19 07:22:20 +01:00
Anonymous
acfeaae8c6 Translated using Weblate (Romanian)
Currently translated at 39.0% (137 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-19 07:22:20 +01:00
Anonymous
b70fa0e844 Translated using Weblate (Hebrew)
Currently translated at 28.7% (101 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-19 07:22:20 +01:00
Anonymous
b7dcd3e9cd Translated using Weblate (Hungarian)
Currently translated at 30.7% (108 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-19 07:22:19 +01:00
Anonymous
f697c9b9dd Translated using Weblate (Croatian)
Currently translated at 81.4% (286 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-19 07:22:19 +01:00
Anonymous
06fa779966 Translated using Weblate (Swedish)
Currently translated at 37.6% (132 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-19 07:22:19 +01:00
Anonymous
6eefa34741 Translated using Weblate (Polish)
Currently translated at 81.1% (285 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-19 07:22:18 +01:00
Anonymous
4bd2fda6ae Translated using Weblate (Catalan)
Currently translated at 73.5% (258 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-19 07:22:18 +01:00
Anonymous
ec701d9fd7 Translated using Weblate (Chinese (Traditional))
Currently translated at 89.4% (314 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-19 07:22:17 +01:00
Anonymous
6476094ce4 Translated using Weblate (Dutch)
Currently translated at 25.0% (88 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-19 07:22:17 +01:00
Anonymous
57940c1519 Translated using Weblate (Vietnamese)
Currently translated at 12.5% (44 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-19 07:22:17 +01:00
Anonymous
4b494efcd1 Translated using Weblate (Norwegian Bokmål)
Currently translated at 22.5% (79 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-19 07:22:16 +01:00
Anonymous
bb8796000c Translated using Weblate (Italian)
Currently translated at 82.0% (288 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-19 07:22:16 +01:00
Anonymous
e49478085c Translated using Weblate (Chinese (Simplified))
Currently translated at 94.3% (331 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-19 07:22:16 +01:00
Anonymous
db5a7beb57 Translated using Weblate (Russian)
Currently translated at 13.6% (48 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-19 07:22:15 +01:00
Anonymous
0b7b1c4c9e Translated using Weblate (Portuguese)
Currently translated at 72.9% (256 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-19 07:22:15 +01:00
Anonymous
4a85caca50 Translated using Weblate (French)
Currently translated at 97.7% (343 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-19 07:22:15 +01:00
Anonymous
410054347d Translated using Weblate (Spanish)
Currently translated at 97.7% (343 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-19 07:22:14 +01:00
Anonymous
05b056d18e Translated using Weblate (German)
Currently translated at 64.9% (228 of 351 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-19 07:22:14 +01:00
shamoon
080d684089 Merge pull request #807 from JeffResc/unmanic
Add Unmanic service widget
2023-02-18 22:21:42 -08:00
shamoon
0666268d91 unmanic use generic proxy 2023-02-18 22:21:32 -08:00
Jeff Rescignano
b45d6240ae Add Unmanic service widget 2023-02-18 22:19:45 -08:00
shamoon
e35a66d3f1 Suppory body in widget endpoint mappings 2023-02-18 22:18:27 -08:00
Anonymous
2367564041 Translated using Weblate (Thai)
Currently translated at 13.5% (47 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-18 22:58:54 +01:00
Anonymous
0223e8828f Translated using Weblate (Latvian)
Currently translated at 34.1% (119 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-18 22:58:54 +01:00
Anonymous
408533ee24 Translated using Weblate (Japanese)
Currently translated at 4.3% (15 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-18 22:58:53 +01:00
Anonymous
0c745d6d58 Translated using Weblate (Ukrainian)
Currently translated at 97.4% (339 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-18 22:58:53 +01:00
Anonymous
35cbe9e69b Translated using Weblate (Esperanto)
Currently translated at 29.5% (103 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-18 22:58:52 +01:00
Anonymous
91511edcfb Translated using Weblate (Hindi)
Currently translated at 2.5% (9 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-18 22:58:52 +01:00
Anonymous
df8cf8cb20 Translated using Weblate (Malay)
Currently translated at 72.7% (253 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-18 22:58:52 +01:00
Anonymous
8c1b95cb0a Translated using Weblate (Danish)
Currently translated at 56.8% (198 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-18 22:58:51 +01:00
Anonymous
264f2fb84b Translated using Weblate (Czech)
Currently translated at 64.6% (225 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-18 22:58:51 +01:00
Anonymous
13fe3f6e73 Translated using Weblate (Arabic)
Currently translated at 75.2% (262 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-18 22:58:50 +01:00
Anonymous
c7a927fe7d Translated using Weblate (Serbian)
Currently translated at 2.5% (9 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-18 22:58:50 +01:00
Anonymous
446d06b538 Translated using Weblate (Turkish)
Currently translated at 91.0% (317 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-18 22:58:50 +01:00
Anonymous
a2d88bd30f Translated using Weblate (Bulgarian)
Currently translated at 13.2% (46 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-18 22:58:49 +01:00
Anonymous
bbde2876e2 Translated using Weblate (Telugu)
Currently translated at 62.3% (217 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-18 22:58:49 +01:00
Anonymous
161dcf70ab Translated using Weblate (Finnish)
Currently translated at 51.1% (178 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-18 22:58:48 +01:00
Anonymous
1544d6cb37 Translated using Weblate (Yue)
Currently translated at 33.9% (118 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-18 22:58:48 +01:00
Anonymous
b6b716c95f Translated using Weblate (Portuguese (Brazil))
Currently translated at 49.7% (173 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-18 22:58:47 +01:00
Anonymous
f0b32e7d14 Translated using Weblate (Romanian)
Currently translated at 39.3% (137 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-18 22:58:47 +01:00
Anonymous
27eb036996 Translated using Weblate (Hebrew)
Currently translated at 29.0% (101 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-18 22:58:46 +01:00
Anonymous
65cee0ec2b Translated using Weblate (Hungarian)
Currently translated at 31.0% (108 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-18 22:58:46 +01:00
Anonymous
735cf18dd8 Translated using Weblate (Croatian)
Currently translated at 82.1% (286 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-18 22:58:46 +01:00
Anonymous
a4a0d293cd Translated using Weblate (Swedish)
Currently translated at 37.9% (132 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-18 22:58:45 +01:00
Anonymous
bcc7852e25 Translated using Weblate (Polish)
Currently translated at 81.8% (285 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-18 22:58:45 +01:00
Anonymous
724fc07610 Translated using Weblate (Catalan)
Currently translated at 74.1% (258 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-18 22:58:44 +01:00
Anonymous
2f0cf218fc Translated using Weblate (Chinese (Traditional))
Currently translated at 90.2% (314 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-18 22:58:44 +01:00
Anonymous
534b28259f Translated using Weblate (Dutch)
Currently translated at 25.2% (88 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-18 22:58:44 +01:00
Anonymous
61db2fd57d Translated using Weblate (Vietnamese)
Currently translated at 12.6% (44 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-18 22:58:43 +01:00
Anonymous
0a926a322a Translated using Weblate (Norwegian Bokmål)
Currently translated at 22.7% (79 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-18 22:58:43 +01:00
Anonymous
386df61ed7 Translated using Weblate (Italian)
Currently translated at 82.7% (288 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-18 22:58:42 +01:00
Anonymous
467f42e0f6 Translated using Weblate (Chinese (Simplified))
Currently translated at 95.1% (331 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-18 22:58:42 +01:00
Anonymous
5dd4df8a05 Translated using Weblate (Russian)
Currently translated at 13.7% (48 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-18 22:58:42 +01:00
Anonymous
0a4116425b Translated using Weblate (Portuguese)
Currently translated at 73.5% (256 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-18 22:58:41 +01:00
Anonymous
e26e7f8559 Translated using Weblate (French)
Currently translated at 98.5% (343 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-18 22:58:41 +01:00
Anonymous
0b30764b89 Translated using Weblate (Spanish)
Currently translated at 98.5% (343 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-18 22:58:41 +01:00
Anonymous
97669a98a9 Translated using Weblate (German)
Currently translated at 65.5% (228 of 348 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-18 22:58:40 +01:00
Mbarmem
addf0911a0 Add Kopia widget (#1018)
* Add Kopia widget

* Add Kopia widget

* Modify Kopia widget blocks

* Kopia next run / last run

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-02-18 13:58:01 -08:00
Nonoss117
806b7f3cab Translated using Weblate (French)
Currently translated at 100.0% (343 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-18 12:37:10 +01:00
gallegonovato
9b037ce349 Translated using Weblate (Spanish)
Currently translated at 100.0% (343 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-18 12:37:09 +01:00
shamoon
79d199b321 Merge pull request #1019 from benphelps/issue-1007
Fix: pass csrf token for unifi login
2023-02-17 14:12:07 -08:00
shamoon
5289476937 Pass csrf token for unifi login 2023-02-16 22:45:11 -08:00
Anonymous
08f5cd8ef2 Translated using Weblate (Thai)
Currently translated at 13.7% (47 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-17 07:06:41 +01:00
Anonymous
7634e41652 Translated using Weblate (Latvian)
Currently translated at 34.6% (119 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-17 07:06:40 +01:00
Anonymous
321c7c95f8 Translated using Weblate (Japanese)
Currently translated at 4.3% (15 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-17 07:06:40 +01:00
Anonymous
5697037550 Translated using Weblate (Ukrainian)
Currently translated at 98.8% (339 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-17 07:06:40 +01:00
Anonymous
bb43d30d81 Translated using Weblate (Esperanto)
Currently translated at 30.0% (103 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-17 07:06:39 +01:00
Anonymous
7f0db24203 Translated using Weblate (Hindi)
Currently translated at 2.6% (9 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-17 07:06:39 +01:00
Anonymous
89699cabb1 Translated using Weblate (Malay)
Currently translated at 73.7% (253 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-17 07:06:38 +01:00
Anonymous
5e51a16959 Translated using Weblate (Danish)
Currently translated at 57.7% (198 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-17 07:06:38 +01:00
Anonymous
babc73c74e Translated using Weblate (Czech)
Currently translated at 65.5% (225 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-17 07:06:38 +01:00
Anonymous
a8391db069 Translated using Weblate (Arabic)
Currently translated at 76.3% (262 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-17 07:06:37 +01:00
Anonymous
e9b8b50b24 Translated using Weblate (Serbian)
Currently translated at 2.6% (9 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-17 07:06:37 +01:00
Anonymous
d52d31a2bd Translated using Weblate (Turkish)
Currently translated at 92.4% (317 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-17 07:06:37 +01:00
Anonymous
890d392b29 Translated using Weblate (Bulgarian)
Currently translated at 13.4% (46 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-17 07:06:36 +01:00
Anonymous
77b5879602 Translated using Weblate (Telugu)
Currently translated at 63.2% (217 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-17 07:06:36 +01:00
Anonymous
1b643d8572 Translated using Weblate (Finnish)
Currently translated at 51.8% (178 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-17 07:06:35 +01:00
Anonymous
d7544e9b9f Translated using Weblate (Yue)
Currently translated at 34.4% (118 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-17 07:06:35 +01:00
Anonymous
1c71b8872f Translated using Weblate (Portuguese (Brazil))
Currently translated at 50.4% (173 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-17 07:06:35 +01:00
Anonymous
c1865592de Translated using Weblate (Romanian)
Currently translated at 39.9% (137 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-17 07:06:34 +01:00
Anonymous
6d3dc81692 Translated using Weblate (Hebrew)
Currently translated at 29.4% (101 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-17 07:06:34 +01:00
Anonymous
95caacce41 Translated using Weblate (Hungarian)
Currently translated at 31.4% (108 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-17 07:06:33 +01:00
Anonymous
caf2d2c63b Translated using Weblate (Croatian)
Currently translated at 83.3% (286 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-17 07:06:33 +01:00
Anonymous
7bed5604ca Translated using Weblate (Swedish)
Currently translated at 38.4% (132 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-17 07:06:33 +01:00
Anonymous
5ff206565c Translated using Weblate (Polish)
Currently translated at 83.0% (285 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-17 07:06:32 +01:00
Anonymous
976bcdd794 Translated using Weblate (Catalan)
Currently translated at 75.2% (258 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-17 07:06:32 +01:00
Anonymous
bdbd570fbc Translated using Weblate (Chinese (Traditional))
Currently translated at 91.5% (314 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-17 07:06:31 +01:00
Anonymous
1fdcc95ab1 Translated using Weblate (Dutch)
Currently translated at 25.6% (88 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-17 07:06:31 +01:00
Anonymous
b0113908a6 Translated using Weblate (Vietnamese)
Currently translated at 12.8% (44 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-17 07:06:31 +01:00
Anonymous
b9c823decb Translated using Weblate (Norwegian Bokmål)
Currently translated at 23.0% (79 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-17 07:06:30 +01:00
Anonymous
a23ec1d4f3 Translated using Weblate (Italian)
Currently translated at 83.9% (288 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-17 07:06:30 +01:00
Anonymous
58b3706d5d Translated using Weblate (Chinese (Simplified))
Currently translated at 96.5% (331 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-17 07:06:30 +01:00
Anonymous
4d1c01b9f9 Translated using Weblate (Russian)
Currently translated at 13.9% (48 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-17 07:06:29 +01:00
Anonymous
edb94b7499 Translated using Weblate (Portuguese)
Currently translated at 74.6% (256 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-17 07:06:29 +01:00
Anonymous
dd43b02e92 Translated using Weblate (French)
Currently translated at 98.8% (339 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-17 07:06:28 +01:00
Anonymous
daaeedf3e5 Translated using Weblate (Spanish)
Currently translated at 98.8% (339 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-17 07:06:28 +01:00
Anonymous
10f7d9cbfe Translated using Weblate (German)
Currently translated at 66.4% (228 of 343 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-17 07:06:28 +01:00
shamoon
21a4751289 Merge pull request #1010 from Mbarmem/main
Add Nextcloud widget
2023-02-16 22:05:51 -08:00
shamoon
ad6eeaaf75 Remove nextcloud shares block 2023-02-16 22:05:32 -08:00
Dan
5d5ddfec1b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (339 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-16 12:36:36 +01:00
Nonoss117
3d3dcd2a63 Translated using Weblate (French)
Currently translated at 100.0% (339 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-16 12:36:35 +01:00
gallegonovato
ede631e487 Translated using Weblate (Spanish)
Currently translated at 100.0% (339 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-16 12:36:35 +01:00
Mbarmem
ed96c46fa5 Add Nextcloud widget 2023-02-16 11:30:05 +03:00
shamoon
5a8b1b587b Merge pull request #1008 from benphelps/fix-1001
Feature: strip sensitive information contained in URLs from frontend API calls
2023-02-15 15:31:53 -08:00
shamoon
e1176e9e3b Strip sensitive information contained in URLs from frontend API calls 2023-02-15 14:46:31 -08:00
shamoon
a25606cfe9 Merge pull request #994 from benphelps/fix-970
Fix: improve swarm status for replicated services & prefer stats for local containers
2023-02-14 10:41:49 -08:00
shamoon
ae7a77d247 Use replica count for swarm status
Co-Authored-By: Raphaël Catarino <raphcatarino@gmail.com>
2023-02-14 10:41:12 -08:00
Anonymous
be51be60a2 Translated using Weblate (Thai)
Currently translated at 13.8% (47 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-14 19:33:04 +01:00
Anonymous
07f7025dde Translated using Weblate (Latvian)
Currently translated at 35.1% (119 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-14 19:33:03 +01:00
Anonymous
bd62195c60 Translated using Weblate (Japanese)
Currently translated at 4.4% (15 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-14 19:33:03 +01:00
Anonymous
2af8f5f36b Translated using Weblate (Ukrainian)
Currently translated at 97.6% (331 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-14 19:33:02 +01:00
Anonymous
52ab10a17b Translated using Weblate (Esperanto)
Currently translated at 30.3% (103 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-14 19:33:02 +01:00
Anonymous
6cec2f0d0d Translated using Weblate (Hindi)
Currently translated at 2.6% (9 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-14 19:33:02 +01:00
Anonymous
d953b52938 Translated using Weblate (Malay)
Currently translated at 74.6% (253 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-14 19:33:01 +01:00
Anonymous
7d43d23d84 Translated using Weblate (Danish)
Currently translated at 58.4% (198 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-14 19:33:01 +01:00
Anonymous
34653dd286 Translated using Weblate (Czech)
Currently translated at 66.3% (225 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-14 19:33:00 +01:00
Anonymous
3d0a53f4ae Translated using Weblate (Arabic)
Currently translated at 77.2% (262 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-14 19:33:00 +01:00
Anonymous
f704acc3b1 Translated using Weblate (Serbian)
Currently translated at 2.6% (9 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-14 19:32:59 +01:00
Anonymous
db4d812a12 Translated using Weblate (Turkish)
Currently translated at 93.5% (317 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-14 19:32:59 +01:00
Anonymous
e8fcb8add2 Translated using Weblate (Bulgarian)
Currently translated at 13.5% (46 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-14 19:32:58 +01:00
Anonymous
54bfecd59a Translated using Weblate (Telugu)
Currently translated at 64.0% (217 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-14 19:32:58 +01:00
Anonymous
5bf2b816c8 Translated using Weblate (Finnish)
Currently translated at 52.5% (178 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-14 19:32:58 +01:00
Anonymous
8cfa880f5c Translated using Weblate (Yue)
Currently translated at 34.8% (118 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-14 19:32:57 +01:00
Anonymous
30af03a7ce Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.0% (173 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-14 19:32:57 +01:00
Anonymous
6aaf82418e Translated using Weblate (Romanian)
Currently translated at 40.4% (137 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-14 19:32:56 +01:00
Anonymous
d4b46eb18c Translated using Weblate (Hebrew)
Currently translated at 29.7% (101 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-14 19:32:56 +01:00
Anonymous
a5a0a0c510 Translated using Weblate (Hungarian)
Currently translated at 31.8% (108 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-14 19:32:56 +01:00
Anonymous
613e40a900 Translated using Weblate (Croatian)
Currently translated at 84.3% (286 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-14 19:32:55 +01:00
Anonymous
248b5759a0 Translated using Weblate (Swedish)
Currently translated at 38.9% (132 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-14 19:32:55 +01:00
Anonymous
5c35aee418 Translated using Weblate (Polish)
Currently translated at 84.0% (285 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-14 19:32:54 +01:00
Anonymous
2f9cf474dd Translated using Weblate (Catalan)
Currently translated at 76.1% (258 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-14 19:32:54 +01:00
Anonymous
378be50c35 Translated using Weblate (Chinese (Traditional))
Currently translated at 92.6% (314 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-14 19:32:53 +01:00
Anonymous
49c55e04e9 Translated using Weblate (Dutch)
Currently translated at 25.9% (88 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-14 19:32:53 +01:00
Anonymous
c1250d0ab6 Translated using Weblate (Vietnamese)
Currently translated at 12.9% (44 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-14 19:32:53 +01:00
Anonymous
b7e9a69345 Translated using Weblate (Norwegian Bokmål)
Currently translated at 23.3% (79 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-14 19:32:52 +01:00
Anonymous
1210add0ff Translated using Weblate (Italian)
Currently translated at 84.9% (288 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-14 19:32:52 +01:00
Anonymous
e235790d68 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.6% (331 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-14 19:32:51 +01:00
Anonymous
31a6408583 Translated using Weblate (Russian)
Currently translated at 14.1% (48 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-14 19:32:51 +01:00
Anonymous
0a5276b12d Translated using Weblate (Portuguese)
Currently translated at 75.5% (256 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-14 19:32:51 +01:00
Anonymous
d440126c45 Translated using Weblate (French)
Currently translated at 98.8% (335 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-14 19:32:50 +01:00
Anonymous
6a3f096d44 Translated using Weblate (Spanish)
Currently translated at 98.8% (335 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-14 19:32:50 +01:00
Anonymous
1b5f7ac3e2 Translated using Weblate (German)
Currently translated at 67.2% (228 of 339 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-14 19:32:49 +01:00
Nonoss117
e56d29febb Translated using Weblate (French)
Currently translated at 100.0% (335 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-14 19:32:13 +01:00
gallegonovato
610ad9819a Translated using Weblate (Spanish)
Currently translated at 100.0% (335 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-14 19:32:13 +01:00
shamoon
2c6b2a1474 Merge pull request #999 from benphelps/add-grafana-widget
Add grafana widget
2023-02-14 10:32:07 -08:00
shamoon
460983b741 Add grafana stats 2023-02-14 10:30:05 -08:00
shamoon
c1f22b3e2c Cleanup grafana widget + fix labels 2023-02-14 10:30:05 -08:00
Mbarmem
cd7d7ba729 Add Grafana widget 2023-02-14 10:30:05 -08:00
shamoon
f74275293a Prefer swarm task containers locally for status / stats 2023-02-14 10:09:12 -08:00
Anonymous
8a6343dee7 Translated using Weblate (Thai)
Currently translated at 14.0% (47 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-14 05:23:13 +01:00
Anonymous
d7671149b7 Translated using Weblate (Latvian)
Currently translated at 35.5% (119 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-02-14 05:23:13 +01:00
Anonymous
db2063a3ee Translated using Weblate (Japanese)
Currently translated at 4.4% (15 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-02-14 05:23:12 +01:00
Anonymous
ed2e15f8c3 Translated using Weblate (Ukrainian)
Currently translated at 98.8% (331 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-14 05:23:12 +01:00
Anonymous
69640fea19 Translated using Weblate (Esperanto)
Currently translated at 30.7% (103 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-02-14 05:23:12 +01:00
Anonymous
7b6a0aa86f Translated using Weblate (Hindi)
Currently translated at 2.6% (9 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-02-14 05:23:11 +01:00
Anonymous
aa3d3ff208 Translated using Weblate (Malay)
Currently translated at 75.5% (253 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-02-14 05:23:11 +01:00
Anonymous
a8c3ecb00c Translated using Weblate (Danish)
Currently translated at 59.1% (198 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-02-14 05:23:10 +01:00
Anonymous
35b533b3f0 Translated using Weblate (Czech)
Currently translated at 67.1% (225 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-02-14 05:23:10 +01:00
Anonymous
e433c195e8 Translated using Weblate (Arabic)
Currently translated at 78.2% (262 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-02-14 05:23:10 +01:00
Anonymous
c799f1207f Translated using Weblate (Serbian)
Currently translated at 2.6% (9 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-02-14 05:23:09 +01:00
Anonymous
ab7a73dae6 Translated using Weblate (Turkish)
Currently translated at 94.6% (317 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-14 05:23:09 +01:00
Anonymous
8ec4291753 Translated using Weblate (Bulgarian)
Currently translated at 13.7% (46 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-02-14 05:23:08 +01:00
Anonymous
d5c99a9582 Translated using Weblate (Telugu)
Currently translated at 64.7% (217 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-02-14 05:23:08 +01:00
Anonymous
e729a75975 Translated using Weblate (Finnish)
Currently translated at 53.1% (178 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-02-14 05:23:07 +01:00
Anonymous
55f3a68b5f Translated using Weblate (Yue)
Currently translated at 35.2% (118 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue/
2023-02-14 05:23:07 +01:00
Anonymous
33a3d9bcff Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.6% (173 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-02-14 05:23:07 +01:00
Anonymous
b5e8284d7f Translated using Weblate (Romanian)
Currently translated at 40.8% (137 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-02-14 05:23:06 +01:00
Anonymous
1497e4dbd5 Translated using Weblate (Hebrew)
Currently translated at 30.1% (101 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-02-14 05:23:06 +01:00
Anonymous
615a0c419c Translated using Weblate (Hungarian)
Currently translated at 32.2% (108 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-02-14 05:23:06 +01:00
Anonymous
26b4e8adea Translated using Weblate (Croatian)
Currently translated at 85.3% (286 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-02-14 05:23:05 +01:00
Anonymous
10d5f11a9c Translated using Weblate (Swedish)
Currently translated at 39.4% (132 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-02-14 05:23:05 +01:00
Anonymous
e241e4c683 Translated using Weblate (Polish)
Currently translated at 85.0% (285 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-02-14 05:23:05 +01:00
Anonymous
049dda86e3 Translated using Weblate (Catalan)
Currently translated at 77.0% (258 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-02-14 05:23:04 +01:00
Anonymous
78088afb9c Translated using Weblate (Chinese (Traditional))
Currently translated at 93.7% (314 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-02-14 05:23:04 +01:00
Anonymous
75e310c19e Translated using Weblate (Dutch)
Currently translated at 26.2% (88 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-02-14 05:23:03 +01:00
Anonymous
eed83c4a98 Translated using Weblate (Vietnamese)
Currently translated at 13.1% (44 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-02-14 05:23:03 +01:00
Anonymous
9d22af1166 Translated using Weblate (Norwegian Bokmål)
Currently translated at 23.5% (79 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-02-14 05:23:03 +01:00
Anonymous
06761a38c0 Translated using Weblate (Italian)
Currently translated at 85.9% (288 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-02-14 05:23:02 +01:00
Anonymous
338d723ffd Translated using Weblate (Chinese (Simplified))
Currently translated at 98.8% (331 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-14 05:23:02 +01:00
Anonymous
5d57892db4 Translated using Weblate (Russian)
Currently translated at 14.3% (48 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-02-14 05:23:02 +01:00
Anonymous
107993821a Translated using Weblate (Portuguese)
Currently translated at 76.4% (256 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-02-14 05:23:01 +01:00
Anonymous
6f6b35d790 Translated using Weblate (French)
Currently translated at 98.8% (331 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-14 05:23:01 +01:00
Anonymous
e362ed129d Translated using Weblate (Spanish)
Currently translated at 98.8% (331 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-14 05:23:01 +01:00
Anonymous
65065fed17 Translated using Weblate (German)
Currently translated at 68.0% (228 of 335 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-02-14 05:23:00 +01:00
shamoon
ebe58769f6 fix fileflows widget labels 2023-02-13 20:22:15 -08:00
beucismis
2e54f586a2 Translated using Weblate (Turkish)
Currently translated at 95.7% (317 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-02-13 23:39:56 +01:00
shamoon
d07b508990 Merge pull request #990 from Mbarmem/main
Add FileFlows widget
2023-02-13 00:14:00 -08:00
shamoon
598815ba5c fileflows code cleanup 2023-02-13 00:13:31 -08:00
Mbarmem
6bb94dc185 Add FileFlows widget 2023-02-13 00:13:31 -08:00
shamoon
aabd05a0cb Merge pull request #988 from vorotynsky/fix-footer 2023-02-12 07:54:26 -08:00
Vorotynsky Maxim
f558d27e8c Move the footer to the bottom 2023-02-12 15:32:50 +01:00
mspzyzh
220f662d10 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-12 12:46:37 +01:00
mspzyzh
2fb33d048b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-12 07:32:12 +01:00
mspzyzh
a3d56e2d4b Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-12 07:21:51 +01:00
mspzyzh
caecfaa87d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-12 06:40:34 +01:00
mspzyzh
7cf92d5a92 Translated using Weblate (Chinese (Simplified))
Currently translated at 98.7% (327 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-12 06:14:48 +01:00
Lei Seaks
b619fe95d1 Translated using Weblate (Chinese (Simplified))
Currently translated at 94.8% (314 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-11 04:23:55 +01:00
Jason Fischer
e1f0e3814a Merge pull request #954 from benphelps/rewrite-rutorrent-proxy
Feat: rewrite rutorrent proxy
2023-02-09 21:00:31 -08:00
Jason Fischer
8d7f41388c Merge pull request #975 from jameswynn/kubernetes-ping
Added support for "ping" configuration in kubernetes ingress annotations
2023-02-09 20:56:23 -08:00
James Wynn
b4cdb03228 Added support for "ping" configuration in kubernetes ingress annotations 2023-02-09 17:09:59 -06:00
Phongsakorn Wisetthon
0de278802b Translated using Weblate (Thai)
Currently translated at 14.1% (47 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-09 10:38:54 +01:00
zhangnew
64704a1559 Translated using Weblate (Chinese (Simplified))
Currently translated at 94.5% (313 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-02-09 10:38:54 +01:00
shamoon
668df2d773 Merge pull request #964 from chain710/fixsetcookie 2023-02-08 19:14:57 -08:00
shamoon
3600e5487d Apply suggestions from #964 code review 2023-02-08 08:30:53 -08:00
chain710
f109ffa9bc cookieJar.setCookieSync ignore error
cookieJar.setCookieSync crash node when error, like:
```
uncaughtException: Error: Cookie not in this host's domain. Cookie:example.com Request:127.0.0.1
```
2023-02-08 20:33:11 +08:00
shamoon
73c8ff7ee6 Use buildtime in config hash 2023-02-08 00:37:46 -08:00
shamoon
7b474d4cef Revert "Merge pull request #609 from benphelps/fix-576"
This reverts commit a7f290dfdd, reversing
changes made to cf38395100.
2023-02-08 00:19:33 -08:00
Phongsakorn Wisetthon
02b0604ad7 Translated using Weblate (Thai)
Currently translated at 9.9% (33 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-08 06:47:34 +01:00
Anonymous
845c7bbdcc Translated using Weblate (Thai)
Currently translated at 100.0% (0 of 0 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-02-08 06:35:55 +01:00
Dan
1d23cad458 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-02-08 06:35:51 +01:00
Nonoss117
babaa0705a Translated using Weblate (French)
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-02-08 06:35:50 +01:00
gallegonovato
6a8f0f7814 Translated using Weblate (Spanish)
Currently translated at 100.0% (331 of 331 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-02-08 06:35:50 +01:00
Phongsakorn Wisetthon
23f3a5f404 Added translation using Weblate (Thai) 2023-02-08 06:35:21 +01:00
shamoon
b2211bcdfd rewrite rutorrent proxy 2023-02-06 14:23:30 -08:00
79 changed files with 3425 additions and 502 deletions

26
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,26 @@
## Proposed change
<!--
Please include a summary of the change. Screenshots and / or videos can also be helpful if appropriate.
New service widgets should include example(s) of relevant relevant API output as well as a PR to the docs for the new widget. See the development guidelines for new widgets: https://gethomepage.dev/en/more/development/#service-widget-guidelines
-->
Closes # (issue)
## Type of change
<!--
What type of change does your PR introduce to Homepage?
-->
- [ ] New service widget
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Other (please explain)
## Checklist:
- [ ] If adding a service widget or a change that requires it, I have added a corresponding PR to the [documentation](https://github.com/benphelps/homepage-docs) here:
- [ ] If applicable, I have checked that all tests pass with e.g. `pnpm lint`.
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.

View File

@@ -29,7 +29,6 @@
"react-dom": "^18.2.0",
"react-i18next": "^11.18.6",
"react-icons": "^4.4.0",
"rutorrent-promise": "^2.0.0",
"shvl": "^3.0.0",
"swr": "^1.3.0",
"tough-cookie": "^4.1.2",

47
pnpm-lock.yaml generated
View File

@@ -33,7 +33,6 @@ specifiers:
react-dom: ^18.2.0
react-i18next: ^11.18.6
react-icons: ^4.4.0
rutorrent-promise: ^2.0.0
shvl: ^3.0.0
swr: ^1.3.0
tailwind-scrollbar: ^2.0.1
@@ -63,7 +62,6 @@ dependencies:
react-dom: 18.2.0_react@18.2.0
react-i18next: 11.18.6_ulhmqqxshznzmtuvahdi5nasbq
react-icons: 4.4.0_react@18.2.0
rutorrent-promise: 2.0.0
shvl: 3.0.0
swr: 1.3.0_react@18.2.0
tough-cookie: 4.1.2
@@ -1582,15 +1580,6 @@ packages:
mime-types: 2.1.35
dev: false
/form-data/3.0.1:
resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==}
engines: {node: '>= 6'}
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
mime-types: 2.1.35
dev: false
/fraction.js/4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: true
@@ -2299,18 +2288,6 @@ packages:
- babel-plugin-macros
dev: false
/node-fetch/2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
encoding:
optional: true
dependencies:
whatwg-url: 5.0.0
dev: false
/node-os-utils/1.3.7:
resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==}
dev: false
@@ -2836,15 +2813,6 @@ packages:
queue-microtask: 1.2.3
dev: true
/rutorrent-promise/2.0.0:
resolution: {integrity: sha512-ip6FxYM/BFxRgYSWr+2gZ0ao9LsJ1vJYWyFVnTkSmZrp4Cwa3CFpdxMi/5aZsUf1qve2CY9P4GLvrACx+PZ6yQ==}
dependencies:
form-data: 3.0.1
node-fetch: 2.6.7
transitivePeerDependencies:
- encoding
dev: false
/safe-buffer/5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: false
@@ -3207,10 +3175,6 @@ packages:
url-parse: 1.5.10
dev: false
/tr46/0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
/triple-beam/1.3.0:
resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==}
dev: false
@@ -3346,17 +3310,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
/webidl-conversions/3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: false
/whatwg-url/5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
dev: false
/which-boxed-primitive/1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies:

View File

@@ -283,7 +283,9 @@
"bookmark": "مفضلة",
"service": "خدمة",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "نظام",
@@ -468,5 +470,54 @@
"days": "Days",
"volumeAvailable": "Available",
"uptime": "Uptime"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"down": "Offline",
"grace": "In Grace Period",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Marcador",
"service": "Servei",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sistema",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -15,10 +15,10 @@
"missing_type": "Chybí typ widgetu: {{type}}",
"api_error": "Chyba API",
"status": "Status",
"information": "Information",
"information": "Informace",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
"response_data": "Data odpovědi"
},
"weather": {
"current": "Aktuální poloha",
@@ -52,7 +52,7 @@
"up": "BĚŽÍ",
"down": "NEBĚŽÍ",
"wait": "Počkejte prosím",
"empty_data": "Subsystem status unknown"
"empty_data": "Status podsystému neznámý"
},
"docker": {
"rx": "RX",
@@ -60,8 +60,8 @@
"mem": "RAM",
"cpu": "CPU",
"offline": "Offline",
"error": "Error",
"unknown": "Unknown"
"error": "Chyba",
"unknown": "Neznámý"
},
"emby": {
"playing": "Přehrává",
@@ -150,7 +150,7 @@
"pending": "Čeká",
"approved": "Schváleno",
"available": "Dostupný",
"processing": "Processing"
"processing": "Zpracováváno"
},
"pihole": {
"queries": "Dotazy",
@@ -295,7 +295,9 @@
"bookmark": "Záložka",
"service": "Služba",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"update_available": "Dostupná aktualizace",
@@ -317,8 +319,8 @@
"indexers": "Indexery"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
"nothing_streaming": "Žádné aktivní streams",
"please_wait": "Prosím vyčkejte"
},
"pyload": {
"speed": "Speed",
@@ -336,8 +338,8 @@
"hd": "HD"
},
"ping": {
"error": "Error",
"ping": "Ping"
"error": "Chyba",
"ping": "Odezva"
},
"scrutiny": {
"passed": "Passed",
@@ -349,22 +351,22 @@
"total": "Total"
},
"deluge": {
"upload": "Upload",
"upload": "Nahrávání",
"leech": "Leech",
"seed": "Seed",
"download": "Download"
"download": "Stahování"
},
"flood": {
"download": "Download",
"upload": "Upload",
"download": "Stahování",
"upload": "Nahrávání",
"leech": "Leech",
"seed": "Seed"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
"queue": "Fronta",
"processed": "Zpracováno",
"errored": "Chybné",
"saved": "Uložené"
},
"miniflux": {
"read": "Read",
@@ -379,15 +381,15 @@
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
"connectedAp": "Připojené APs",
"activeUser": "Aktivní zařízení",
"alerts": "Upozornění",
"connectedGateway": "Připojené brány",
"connectedSwitches": "Připojené přepínače"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"download": "Stahování",
"upload": "Nahrávání",
"leech": "Leech",
"seed": "Seed"
},
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_down": "Targets Down",
"targets_total": "Total Targets",
"targets_up": "Targets Up"
}
}

View File

@@ -291,7 +291,9 @@
"bookmark": "Bogmærker",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"watchtower": {
"containers_scanned": "Scannet",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"totalalerts": "Total Alerts",
"dashboards": "Dashboards",
"datasources": "Data Sources",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"memoryusage": "Memory Usage",
"cpuload": "Cpu Load",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Lesezeichen",
"service": "Dienst",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"grace": "In Grace Period",
"new": "New",
"up": "Online",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

55
public/locales/en/common.json Normal file → Executable file
View File

@@ -286,7 +286,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Sunny",
@@ -354,6 +356,16 @@
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
@@ -477,5 +489,44 @@
"photos": "Photos",
"videos": "Videos",
"people": "People"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}
}

View File

@@ -239,7 +239,9 @@
"bookmark": "Bookmark",
"service": "Servo",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Suna",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"activeusers": "Active Users",
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -140,7 +140,7 @@
"transmission": {
"download": "Bajada",
"upload": "Subida",
"leech": "Leech",
"leech": "Sanguijuela",
"seed": "Semillas"
},
"jackett": {
@@ -283,7 +283,9 @@
"bookmark": "Marcadores",
"service": "Servicio",
"search": "Buscar",
"custom": "Personalizado"
"custom": "Personalizado",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sistema",
@@ -420,10 +422,10 @@
"series": "Serie"
},
"octoprint": {
"temp_bed": "Bed temp",
"temp_bed": "temperatura de la plataforma",
"printer_state": "Status",
"temp_tool": "Tool temp",
"job_completion": "Completion"
"temp_tool": "Herramienta de temperatura",
"job_completion": "Finalización"
},
"cloudflared": {
"origin_ip": "IP de origen",
@@ -465,8 +467,57 @@
"people": "Personas"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Días",
"uptime": "Funcionando",
"volumeAvailable": "Disponible"
},
"fileflows": {
"queue": "Cola",
"processing": "Procesando",
"processed": "Procesado",
"time": "Tiempo"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Fuentes de datos",
"totalalerts": "Alertas totales",
"alertstriggered": "Alertas activadas"
},
"nextcloud": {
"cpuload": "Carga de la CPU",
"memoryusage": "Uso de la memoria",
"freespace": "Espacio libre",
"activeusers": "Usuarios activos"
},
"kopia": {
"status": "Estado",
"size": "Tamaño",
"lastrun": "Última ejecución",
"nextrun": "Siguiente ejecución",
"failed": "Fallido"
},
"unmanic": {
"active_workers": "Trabajadores en activo",
"total_workers": "Total de trabajadores",
"records_total": "Duración de la cola"
},
"healthchecks": {
"new": "Nuevo",
"up": "Conectado",
"down": "Desconectado",
"grace": "En Periodo de Gracia",
"paused": "Pausado",
"status": "Estado",
"last_ping": "Último Ping",
"never": "Aún no hay pings"
},
"pterodactyl": {
"servers": "Servidores",
"nodes": "Nodos"
},
"prometheus": {
"targets_up": "Objetivos arriba",
"targets_down": "Objetivos abajo",
"targets_total": "Objetivos totales"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -17,7 +17,7 @@
"used": "Utilisé",
"load": "Charge",
"cpu": "CPU",
"mem": "MEM"
"mem": "MÉM"
},
"docker": {
"rx": "Rx",
@@ -283,7 +283,9 @@
"bookmark": "Signet",
"service": "Service",
"search": "Recherche",
"custom": "Personnalisé"
"custom": "Personnalisé",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Système",
@@ -465,8 +467,57 @@
"people": "Personnes"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Jours",
"uptime": "Fonctionnement",
"volumeAvailable": "Disponible"
},
"fileflows": {
"queue": "Queue",
"processing": "Traitement",
"processed": "Traité",
"time": "Temps"
},
"grafana": {
"dashboards": "Tableau de bord",
"datasources": "Sources données",
"totalalerts": "Total alertes",
"alertstriggered": "Alertes déclenchées"
},
"nextcloud": {
"freespace": "Espace Libre",
"activeusers": "Utilisateurs Actifs",
"cpuload": "Charge Cpu",
"memoryusage": "Utilisation Mémoire"
},
"kopia": {
"status": "Statut",
"size": "Taille",
"lastrun": "Dernière exécution",
"nextrun": "Prochaine exécution",
"failed": "En erreur"
},
"unmanic": {
"active_workers": "En cours",
"total_workers": "Total",
"records_total": "En attente"
},
"healthchecks": {
"new": "Nouveau",
"up": "En ligne",
"grace": "En Période de Grâce",
"down": "Hors ligne",
"paused": "En Pause",
"status": "Statut",
"last_ping": "Dernier Ping",
"never": "Pas de Ping"
},
"pterodactyl": {
"servers": "Serveurs",
"nodes": "Nœuds"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -229,7 +229,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Sunny",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Straničnik",
"service": "Usluga",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sustav",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"alertstriggered": "Alerts Triggered",
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Segnalibro",
"service": "Servizio",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sistema",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"memoryusage": "Memory Usage",
"cpuload": "Cpu Load",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Sunny",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"never": "No pings yet",
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -277,7 +277,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Saulains",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -66,7 +66,9 @@
"bookmark": "Tandabuku",
"service": "Servis",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-day": "Terik",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Zakładka",
"service": "Usługi",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"uptime": "Uptime",
"volumeAvailable": "Available",
"days": "Days"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -33,14 +33,14 @@
"status": "Status",
"information": "Informação",
"url": "URL",
"raw_error": "Raw Error",
"raw_error": "Erro Bruto",
"response_data": "Dados de Resposta"
},
"weather": {
"current": "Localização atual",
"allow": "Clique para permitir",
"updating": "Atualizando",
"wait": "Aguarde, por favor"
"wait": "Por favor aguarde"
},
"search": {
"placeholder": "Buscar…"
@@ -134,7 +134,7 @@
},
"pihole": {
"queries": "Consultas",
"blocked": "Bloquado",
"blocked": "Bloqueados",
"gravity": "Gravity"
},
"adguard": {
@@ -165,9 +165,9 @@
},
"prowlarr": {
"enableIndexers": "Indexadores",
"numberOfGrabs": "Pegos",
"numberOfGrabs": "Buscas",
"numberOfQueries": "Consultas",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailGrabs": "Buscas sem êxito",
"numberOfFailQueries": "Consultas Falhas"
},
"jackett": {
@@ -182,11 +182,11 @@
"authentik": {
"users": "Usuários",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
"failedLoginsLast24H": "Logins Falhos (24h)"
},
"proxmox": {
"mem": "Memória",
"cpu": "Processador",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
@@ -199,13 +199,13 @@
"wlan_users": "Usuarios WLAN",
"up": "LIGADO",
"down": "CÁIDO",
"wait": "Por favor guarde",
"wait": "Por favor aguarde",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Dispositivos",
"lan_devices": "Dispositivos LAN",
"wlan_devices": "Dispositivos WLAN",
"empty_data": "Subsystem status unknown"
"empty_data": "Status de Subsistema Desconhecido"
},
"plex": {
"streams": "Transmissões ativas",
@@ -215,105 +215,107 @@
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
"wait": "Por favor aguarde"
},
"changedetectionio": {
"totalObserved": "Observados",
"diffsDetected": "Mudanças"
},
"wmo": {
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"1-night": "Principalmente Limpo",
"2-day": "Parcialmente Nublado",
"2-night": "Parcialmente nublado",
"3-day": "Nublado",
"3-night": "Nublado",
"45-day": "Névoa",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail",
"45-night": "Névoa",
"48-day": "Névoa",
"48-night": "Névoa",
"56-night": "Leve Garoa Congelante",
"57-day": "Garoa Congelante",
"99-day": "Trovoada Com Granizo",
"99-night": "Trovoada Com Granizo",
"0-day": "Ensolarado",
"53-day": "Drizzle",
"53-day": "Garoando",
"0-night": "Limpo",
"1-day": "Mainly Sunny",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail"
"1-day": "Principalmente Ensolarado",
"51-day": "Leve Garoa",
"51-night": "Leve Garoa",
"53-night": "Garoando",
"55-day": "Garoa Pesada",
"55-night": "Garoa Pesada",
"56-day": "Leve Garoa Congelante",
"57-night": "Garoa Congelante",
"61-day": "Chuva Leve",
"61-night": "Chuva Leve",
"63-day": "Chuva",
"63-night": "Chuva",
"65-day": "Chuva Pesada",
"65-night": "Chuva Pesada",
"66-day": "Chuva Congelante",
"66-night": "Chuva Congelante",
"67-day": "Chuva Congelante",
"67-night": "Chuva Congelante",
"71-day": "Neve Leve",
"71-night": "Neve Leve",
"73-day": "Neve",
"73-night": "Neve",
"75-day": "Neve Pesada",
"75-night": "Neve Pesada",
"77-day": "Grãos de Neve",
"77-night": "Grãos de Neve",
"80-day": "Chuviscos Leve",
"80-night": "Chuviscos Leve",
"81-day": "Chuviscos",
"81-night": "Chuviscos",
"82-day": "Chuviscos Pesado",
"82-night": "Chuviscos Pesado",
"85-day": "Precipitação de Neve",
"85-night": "Precipitação de Neve",
"86-day": "Precipitação de Neve",
"86-night": "Precipitação de Neve",
"95-day": "Trovoada",
"95-night": "Trovoada",
"96-day": "Trovoada Com Granizo",
"96-night": "Trovoada Com Granizo"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"bookmark": "Favorito",
"service": "Serviço",
"search": "Busca",
"custom": "Personalizado",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"available_update": "Sistema",
"updates": "Atualizações",
"update_available": "Atualização Disponível",
"up_to_date": "Atualizado",
"child_bridges": "Pontes Filhas",
"child_bridges_status": "{{ok}}/{{total}}"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
"approvedPushes": "Aprovado",
"rejectedPushes": "Rejeitado",
"filters": "Filtros",
"indexers": "Indexadores"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
"containers_scanned": "Escaneado",
"containers_updated": "Atualizado",
"containers_failed": "Falha"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
"downloads": "Fila",
"videos": "Vídeos",
"channels": "Canais",
"playlists": "Listas"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"load": "Carga do Sistema",
"uptime": "Tempo Ativo",
"alerts": "Alertas",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"navidrome": {
@@ -321,18 +323,18 @@
"please_wait": "Por favor aguarde"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"speed": "Velocidade",
"active": "Ativo",
"queue": "Fila",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"public_ip": "IP Público",
"region": "Região",
"country": "País"
},
"hdhomerun": {
"channels": "Channels",
"channels": "Canais",
"hd": "HD"
},
"ping": {
@@ -340,12 +342,12 @@
"ping": "Ping"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
"passed": "Passou",
"failed": "Falha",
"unknown": "Desconhecido"
},
"paperlessngx": {
"inbox": "Inbox",
"inbox": "Caixa de Entrada",
"total": "Total"
},
"deluge": {
@@ -371,8 +373,8 @@
"unread": "Não Lidos"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
"wait": "Por favor aguarde",
"no_devices": "Nenhum dado de dispositivo recebido"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
@@ -392,81 +394,130 @@
"seed": "Seed"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
"cpuLoad": "Carga de CPU",
"memoryUsed": "Memória Utilizada",
"uptime": "Tempo Ativo",
"numberOfLeases": "Concessões"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
"streams_all": "Todos Fluxos",
"streams_active": "Fluxos Ativos",
"streams_xepg": "Canais XEPG"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"cpu": "Carga de CPU",
"memory": "Memória Ativa",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
"printer_state": "Estado da Impressora",
"print_status": "Status da Impressora",
"print_progress": "Progresso",
"layers": "Camadas"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"wanted": "Desejado",
"queued": "Na fila",
"series": "Séries"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
"temp_tool": "Temp. Ferramenta",
"temp_bed": "Temp. Cama",
"job_completion": "Conclusão"
},
"cloudflared": {
"origin_ip": "Origin IP",
"origin_ip": "IP Origem",
"status": "Status"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"datastore_usage": "Armaz. de Dados",
"failed_tasks_24h": "Tarefas Falhas 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
"memory_usage": "Memória"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
"users": "Usuários",
"photos": "Fotos",
"videos": "Vídeos",
"storage": "Armazenamento"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"up": "Sites no Ar",
"down": "Sites Fora do Ar",
"uptime": "Tempo Ativo",
"incident": "Incidente",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
"libraries": "Bibliotecas",
"series": "Séries",
"books": "Livros"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
"series": "Séries",
"issues": "Problemas",
"wanted": "Desejado"
},
"photoprism": {
"videos": "Videos",
"albums": "Albums",
"photos": "Photos",
"people": "People"
"videos": "Vídeos",
"albums": "Álbuns",
"photos": "Fotos",
"people": "Pessoa"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Dias",
"uptime": "Tempo Ativo",
"volumeAvailable": "Disponível"
},
"fileflows": {
"queue": "Fila",
"processing": "Processando",
"processed": "Processado",
"time": "Hora"
},
"grafana": {
"dashboards": "Painéis",
"datasources": "Origem de Dados",
"totalalerts": "Total Alertas",
"alertstriggered": "Alertas Disparados"
},
"nextcloud": {
"cpuload": "Carga de CPU",
"memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre",
"activeusers": "Usuários Ativos"
},
"kopia": {
"status": "Status",
"size": "Tamanho",
"lastrun": "Ultima Execução",
"nextrun": "Próxima Execução",
"failed": "Falha"
},
"unmanic": {
"active_workers": "Workers Ativos",
"total_workers": "Total Workers",
"records_total": "Comprimento da Fila"
},
"healthchecks": {
"new": "Novo",
"up": "Online",
"grace": "Em Período Gratuito",
"down": "Offline",
"paused": "Pausado",
"status": "Status",
"last_ping": "Ultimo Ping",
"never": "Nenhum ping ainda"
},
"pterodactyl": {
"servers": "Servidores",
"nodes": "Nós"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -296,7 +296,9 @@
"bookmark": "Marcador",
"service": "Serviço",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sistema",
@@ -477,5 +479,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"never": "No pings yet",
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"update_available": "Update Available",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"activeusers": "Active Users",
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"nodes": "Nodes",
"servers": "Servers"
},
"prometheus": {
"targets_total": "Total Targets",
"targets_up": "Targets Up",
"targets_down": "Targets Down"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "బుక్మార్క్",
"service": "సేవ",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"url": "URL",
"visit": "Visit"
},
"homebridge": {
"available_update": "వ్యవస్థ",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"cpuload": "Cpu Load",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -0,0 +1,523 @@
{
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
},
"npm": {
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Total"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"30days": "30 Days"
},
"pyload": {
"queue": "Queue",
"total": "Total",
"speed": "Speed",
"active": "Active"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"hd": "HD"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "เมม",
"cpu": "ซีพียู",
"offline": "ออฟไลน์",
"error": "ข้อผิดพลาด",
"unknown": "ไม่ทราบ"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"unifi": {
"days": "วัน",
"wan": "WAN",
"lan": "แลน",
"wlan": "WLAN",
"devices": "อุปกรณ์",
"lan_devices": "อุปกรณ์แลน",
"wlan_devices": "WLAN Devices",
"lan_users": "LAN Users",
"wlan_users": "WLAN Users",
"up": "UP",
"down": "DOWN",
"wait": "Please wait",
"empty_data": "Subsystem status unknown",
"users": "ผู้ใช้",
"uptime": "เวลาทำงานของระบบ"
},
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"api_error": "API มีข้อผิดพลาด",
"information": "ข้อมูล",
"status": "สถานะ",
"url": "URL",
"raw_error": "ข้อมูลต้นฉบับผิดพลาด",
"response_data": "ข้อมูลการตอบกลับ"
},
"weather": {
"current": "สถานที่ปัจจุบัน",
"allow": "คลิกเพื่ออนุญาต",
"updating": "กำลังปรับปรุง",
"wait": "โปรดรอ"
},
"search": {
"placeholder": "ค้นหา…"
},
"resources": {
"cpu": "ซีพียู",
"mem": "เมม",
"total": "ทั้งหมด",
"free": "ฟรี",
"used": "ใช้แล้ว",
"load": "โหลด"
},
"ping": {
"error": "ข้อผิดพลาด",
"ping": "ปิง"
},
"emby": {
"playing": "กำลังเล่น",
"transcoding": "การแปลงรหัส",
"bitrate": "อัตราบิต",
"no_active": "ไม่มีสตรีมที่ใช้งานอยู่"
},
"deluge": {
"download": "ดาวน์โหลด",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"flood": {
"download": "ดาวน์โหลด",
"upload": "อัพโหลด",
"leech": "Leech",
"seed": "Seed"
},
"changedetectionio": {
"totalObserved": "Total Observed",
"diffsDetected": "Diffs Detected"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
"rate": "Rate",
"remaining": "Remaining",
"downloaded": "Downloaded"
},
"plex": {
"streams": "Active Streams",
"movies": "Movies",
"tv": "TV Shows"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"timeleft": "Time Left"
},
"rutorrent": {
"active": "Active",
"upload": "Upload",
"download": "Download"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"readarr": {
"queued": "Queued",
"books": "Books",
"wanted": "Wanted"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"traefik": {
"routers": "Routers",
"services": "Services",
"middleware": "Middleware"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
},
"ombi": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"overseerr": {
"pending": "Pending",
"processing": "Processing",
"approved": "Approved",
"available": "Available"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
"gravity": "Gravity"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
},
"speedtest": {
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"portainer": {
"running": "Running",
"stopped": "Stopped",
"total": "Total"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
},
"prowlarr": {
"enableIndexers": "Indexers",
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
},
"jackett": {
"configured": "Configured",
"errored": "Errored"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
"numConnections": "Connections",
"dataRelayed": "Relayed",
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"authentik": {
"users": "Users",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
},
"proxmox": {
"mem": "MEM",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"67-day": "Freezing Rain",
"0-day": "Sunny",
"0-night": "Clear",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"3-day": "Cloudy",
"3-night": "Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"67-night": "Freezing Rain",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
},
"homebridge": {
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"available_update": "System"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
},
"uptimekuma": {
"up": "Sites Up",
"down": "เว็บไซต์ ล่ม",
"uptime": "เวลาทำงาน",
"incident": "Incident",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -3,10 +3,10 @@
"missing_type": "Kayıp Araç Türü: {{type}}",
"api_error": "API Hatası",
"status": "Durum",
"information": "Information",
"information": "Bilgi",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
"raw_error": "Ham Hata",
"response_data": "Yanıt Verisi"
},
"weather": {
"current": "Mevcut Konum",
@@ -18,7 +18,7 @@
"placeholder": "Ara…"
},
"resources": {
"cpu": "İşlemci",
"cpu": "CPU",
"total": "Toplam",
"free": "Boşta",
"used": "Kullanımda",
@@ -40,7 +40,7 @@
"devices": "Aygıtlar",
"lan_devices": "LAN Aygıtları",
"wlan_devices": "WLAN Aygıtları",
"empty_data": "Subsystem status unknown"
"empty_data": "Alt sistem durumu bilinmiyor"
},
"docker": {
"rx": "Gelen Veri",
@@ -48,8 +48,8 @@
"mem": "Bellek",
"cpu": "İşlemci",
"offline": "Çevrimdışı",
"error": "Error",
"unknown": "Unknown"
"error": "Hata",
"unknown": "Bilinmiyor"
},
"emby": {
"playing": "Oynatılıyor",
@@ -91,7 +91,7 @@
},
"qbittorrent": {
"download": "İndirme",
"upload": "Yükleme",
"upload": "Yükle",
"leech": "İsteyen",
"seed": "Sunan"
},
@@ -134,7 +134,7 @@
"pending": "Bekliyor",
"approved": "Onaylı",
"available": "Kullanılabilir",
"processing": "Processing"
"processing": "İşleniyor"
},
"pihole": {
"queries": "Sorgular",
@@ -282,8 +282,10 @@
"quicklaunch": {
"bookmark": "Yer İmi",
"service": "Hizmet",
"search": "Search",
"custom": "Custom"
"search": "Ara",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Sistem",
@@ -327,146 +329,195 @@
"total": "Toplam"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"public_ip": "ık IP",
"region": "Bölge",
"country": "Ülke"
},
"hdhomerun": {
"channels": "Channels",
"channels": "Kanallar",
"hd": "HD"
},
"ping": {
"error": "Error",
"error": "Hata",
"ping": "Ping"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
"passed": "Geçti",
"failed": "Başarısız",
"unknown": "Bilinmeyen"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
"inbox": "Gelen Kutusu",
"total": "Toplam"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"seed": "Seed"
"seed": "Tohum"
},
"flood": {
"download": "Download",
"upload": "Upload",
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"seed": "Seed"
"seed": "Tohum"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
"queue": "Sıra",
"processed": "İşlendi",
"errored": "Hatalı",
"saved": "Kaydedildi"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
"read": "Oku",
"unread": "Okunmamış"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
"wait": "Lütfen Bekle",
"no_devices": "Cihaz Verisi Alınamadı"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
"connectedAp": "Bağlı AP'ler",
"activeUser": "Aktif cihazlar",
"alerts": "Alarmlar",
"connectedGateway": "Bağlı ağ geçitleri",
"connectedSwitches": "Bağlı anahtarlar"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"seed": "Seed"
"seed": "Tohum"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"cpuLoad": "CPU Yükü",
"memoryUsed": "Bellek Kullanımı",
"uptime": "Çalışma Süresi",
"numberOfLeases": "Leases"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
"streams_all": "Tüm Akışlar",
"streams_active": "Aktif Akışlar",
"streams_xepg": "XEPG Kanalları"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
"cpu": "CPU Yükü",
"memory": "Aktif Bellek",
"wanUpload": "WAN Yükleme",
"wanDownload": "WAN İndirme"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
"printer_state": "Yazıcı Durumu",
"print_status": "Yazıcı Durumu",
"print_progress": "İlerleme",
"layers": "Katmanlar"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"queued": "Kuyrukta",
"series": "Seri"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"printer_state": "Durum",
"temp_tool": "Araç sıcaklığı",
"temp_bed": "Yatak sıcaklığı",
"job_completion": "Completion"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
"status": "Durum"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
"memory_usage": "Bellek"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
"users": "Kullanıcılar",
"photos": "Fotoğraflar",
"videos": "Videolar",
"storage": "Depo"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"uptime": "Çalışma Süresi",
"incident": "Incident",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"libraries": "Kütüphane",
"series": "Series",
"books": "Books"
"books": "Kitaplar"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
"series": "Seriler",
"issues": "Sorunlar",
"wanted": "Aranan"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
"albums": "Albümler",
"photos": "Fotoğraflar",
"videos": "Videolar",
"people": "İnsan"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Gün",
"uptime": "Çalışma Süresi",
"volumeAvailable": "Mevcut"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -128,7 +128,7 @@
"free": "Вільно",
"used": "Використано",
"load": "Навантаження",
"mem": "MEM"
"mem": "Пам'ять"
},
"unifi": {
"users": "Користувачі",
@@ -345,7 +345,9 @@
"bookmark": "Закладка",
"service": "Сервіс",
"search": "Пошук",
"custom": "Користувацький"
"custom": "Користувацький",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "Система",
@@ -465,8 +467,57 @@
"people": "Люди"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "Днів",
"uptime": "Час роботи",
"volumeAvailable": "Доступно"
},
"fileflows": {
"queue": "Черга",
"processing": "Обробка",
"processed": "Оброблено",
"time": "Час"
},
"grafana": {
"dashboards": "Інформаційні панелі",
"datasources": "Джерела даних",
"totalalerts": "Всього сповіщень",
"alertstriggered": "Спрацювали сповіщення"
},
"nextcloud": {
"cpuload": "Навантаження Cpu",
"memoryusage": "Використання пам'яті",
"freespace": "Вільного місця",
"activeusers": "Активні користувачі"
},
"kopia": {
"status": "Статус",
"size": "Розмір",
"lastrun": "Останній запуск",
"nextrun": "Наступний запуск",
"failed": "Помилка"
},
"unmanic": {
"active_workers": "Активні працівники",
"total_workers": "Всього робітників",
"records_total": "Довжина черги"
},
"healthchecks": {
"new": "Новий",
"up": "Онлайн",
"down": "Офлайн",
"grace": "У пільговий період",
"paused": "Призупинено",
"status": "Стан",
"last_ping": "Останній пінг",
"never": "Пінгів ще немає"
},
"pterodactyl": {
"servers": "Сервери",
"nodes": "Вузли"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -283,7 +283,9 @@
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom"
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -468,5 +470,54 @@
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"fileflows": {
"queue": "Queue",
"processed": "Processed",
"time": "Time",
"processing": "Processing"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed",
"status": "Status",
"size": "Size"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -16,8 +16,8 @@
"free": "空闲",
"used": "已用",
"load": "负载",
"cpu": "CPU",
"mem": "MEM"
"cpu": "处理器",
"mem": "内存"
},
"docker": {
"rx": "接收",
@@ -187,8 +187,8 @@
"proxmox": {
"mem": "内存",
"cpu": "处理器",
"lxc": "LXC",
"vms": "VMs"
"lxc": "容器",
"vms": "虚拟机"
},
"unifi": {
"users": "用户",
@@ -230,8 +230,8 @@
"45-day": "有雾",
"48-day": "有雾",
"51-day": "小雨",
"73-night": "Snow",
"75-day": "Heavy Snow",
"73-night": "中雪",
"75-day": "大雪",
"1-night": "大部晴朗",
"2-day": "多云",
"2-night": "多云",
@@ -256,10 +256,10 @@
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"75-night": "Heavy Snow",
"71-day": "小雪",
"71-night": "小雪",
"73-day": "中雪",
"75-night": "大雪",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
@@ -282,8 +282,10 @@
"quicklaunch": {
"bookmark": "书签",
"service": "服务",
"search": "Search",
"custom": "Custom"
"search": "搜索",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
@@ -311,8 +313,8 @@
"playlists": "Playlists"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"load": "系统负载",
"uptime": "运行时间",
"alerts": "警报",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
@@ -392,10 +394,10 @@
"seed": "做种"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
"cpuLoad": "处理器负载",
"memoryUsed": "内存使用",
"uptime": "运行时间",
"numberOfLeases": "已连接"
},
"xteve": {
"streams_all": "All Streams",
@@ -403,10 +405,10 @@
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
"cpu": "处理器负载",
"memory": "空闲内存",
"wanUpload": "WAN上传",
"wanDownload": "WAN下载"
},
"moonraker": {
"printer_state": "Printer State",
@@ -430,10 +432,10 @@
"status": "Status"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
"datastore_usage": "数据存储",
"failed_tasks_24h": "24h失败任务",
"cpu_usage": "处理器",
"memory_usage": "内存"
},
"immich": {
"users": "Users",
@@ -442,31 +444,80 @@
"storage": "Storage"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"up": "在线网站",
"down": "离线网站",
"uptime": "运行时间",
"incident": "严重事件",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
"libraries": "书库",
"series": "系列",
"books": "书刊"
},
"mylar": {
"series": "Series",
"series": "系列",
"issues": "Issues",
"wanted": "Wanted"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
"albums": "相册",
"photos": "照片",
"videos": "视频",
"people": "人物"
},
"diskstation": {
"uptime": "Uptime",
"volumeAvailable": "Available",
"days": "Days"
"uptime": "运行时间",
"volumeAvailable": "剩余存储",
"days": ""
},
"fileflows": {
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Time"
},
"grafana": {
"totalalerts": "Total Alerts",
"dashboards": "Dashboards",
"datasources": "Data Sources",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -49,7 +49,7 @@
"used": "已使用",
"load": "負載",
"cpu": "CPU",
"mem": "MEM"
"mem": "記憶體"
},
"nzbget": {
"rate": "速率",
@@ -197,15 +197,15 @@
"wan": "WAN",
"lan_users": "LAN使用者",
"wlan_users": "WLAN使用者",
"up": "UP",
"down": "DOWN",
"up": "上線",
"down": "離線",
"wait": "請稍後",
"lan": "LAN",
"wlan": "WLAN",
"devices": "設備",
"lan_devices": "LAN設備",
"wlan_devices": "WLAN設備",
"empty_data": "Subsystem status unknown"
"empty_data": "子系統狀態未知"
},
"plex": {
"streams": "正在播放",
@@ -283,7 +283,9 @@
"bookmark": "書籤",
"service": "服務",
"search": "搜尋",
"custom": "自訂"
"custom": "自訂",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "系統",
@@ -404,7 +406,7 @@
},
"opnsense": {
"cpu": "CPU負載",
"memory": "Active Memory",
"memory": "記憶體",
"wanUpload": "WAN上傳",
"wanDownload": "WAN下載"
},
@@ -454,19 +456,68 @@
"books": "書刊"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
"series": "系列",
"issues": "出版",
"wanted": "關注中"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
"albums": "相簿",
"photos": "照片",
"videos": "影片",
"people": "人物"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
"days": "",
"uptime": "運行時間",
"volumeAvailable": "剩餘容量"
},
"fileflows": {
"queue": "佇列",
"processing": "處理中",
"processed": "已處理",
"time": "時間"
},
"grafana": {
"dashboards": "控制面板",
"datasources": "數據來源",
"totalalerts": "警報總數",
"alertstriggered": "觸發的警報"
},
"nextcloud": {
"cpuload": "處理器負載",
"memoryusage": "記憶體用量",
"freespace": "可用空間",
"activeusers": "活躍用戶"
},
"kopia": {
"status": "狀態",
"size": "檔案大小",
"lastrun": "上次運行",
"nextrun": "下次運行",
"failed": "失敗"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"healthchecks": {
"new": "新建立",
"up": "上線",
"grace": "延緩中",
"down": "離線",
"paused": "擱置中",
"status": "狀態",
"last_ping": "上次檢查",
"never": "尚未檢查"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
}
}

View File

@@ -6,14 +6,16 @@ import ResolvedIcon from "./resolvedicon";
import { SettingsContext } from "utils/contexts/settings";
export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchDescriptions, searchProvider}) {
export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchProvider}) {
const { t } = useTranslation();
const { settings } = useContext(SettingsContext);
const { searchDescriptions, hideVisitURL } = settings?.quicklaunch ? settings.quicklaunch : { searchDescriptions: false, hideVisitURL: false };
const searchField = useRef();
const [results, setResults] = useState([]);
const [currentItemIndex, setCurrentItemIndex] = useState(null);
const [url, setUrl] = useState(null);
function openCurrentItem(newWindow) {
const result = results[currentItemIndex];
@@ -29,7 +31,16 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
}, [close, setSearchString, setCurrentItemIndex]);
function handleSearchChange(event) {
setSearchString(event.target.value.toLowerCase())
const rawSearchString = event.target.value.toLowerCase();
try {
if (!/.+[.:].+/g.test(rawSearchString)) throw new Error(); // basic test for probably a url
let urlString = rawSearchString;
if (urlString.indexOf('http') !== 0) urlString = `https://${rawSearchString}`;
setUrl(new URL(urlString)); // basic validation
} catch (e) {
setUrl(null);
}
setSearchString(rawSearchString);
}
function handleSearchKeyDown(event) {
@@ -76,6 +87,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
if (searchDescriptions) {
newResults = newResults.sort((a, b) => b.priority - a.priority);
}
if (searchProvider) {
newResults.push(
{
@@ -86,13 +98,23 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
)
}
if (!hideVisitURL && url) {
newResults.unshift(
{
href: url.toString(),
name: `${t("quicklaunch.visit")} URL`,
type: 'url',
}
)
}
setResults(newResults);
if (newResults.length) {
setCurrentItemIndex(0);
}
}
}, [searchString, servicesAndBookmarks, searchDescriptions, searchProvider, t]);
}, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchProvider, url, t]);
const [hidden, setHidden] = useState(true);

View File

@@ -91,7 +91,7 @@ export default function Item({ service }) {
<span className="sr-only">View container stats</span>
</button>
)}
{service.app && (
{(service.app && !service.external) && (
<button
type="button"
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}

View File

@@ -12,7 +12,7 @@ export default function Status({ service }) {
</div>
}
if (data && data.status === "running") {
if (data && data.status?.includes("running")) {
if (data.health === "starting") {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.health}>
@@ -36,7 +36,7 @@ export default function Status({ service }) {
);
}
if (data && (data.status === "not found" || data.status === "exited")) {
if (data && (data.status === "not found" || data.status === "exited" || data.status?.startsWith("partial"))) {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden" title={data.status}>
<div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{data.status}</div>

View File

@@ -53,17 +53,25 @@ export default async function handler(req, res) {
})
.catch(() => []);
// For now we are only interested in the first one (in case replicas > 1).
// TODO: Show the result for all replicas/containers?
const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
// We can only get stats for 'local' containers so try to find one
const localContainerIDs = containers.map(c => c.Id);
const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
if (taskContainerId) {
const container = docker.getContainer(taskContainerId);
const stats = await container.stats({ stream: false });
try {
const container = docker.getContainer(taskContainerId);
const stats = await container.stats({ stream: false });
return res.status(200).json({
stats,
});
return res.status(200).json({
stats,
});
} catch (e) {
return res.status(200).json({
error: "Unable to retrieve stats"
})
}
}
}

View File

@@ -44,32 +44,65 @@ export default async function handler(req, res) {
}
if (dockerArgs.swarm) {
const tasks = await docker.listTasks({
const serviceInfo = await docker.getService(containerName).inspect()
.catch(() => undefined);
if (!serviceInfo) {
return res.status(404).send({
status: "not found",
});
}
const tasks = await docker
.listTasks({
filters: {
service: [containerName],
// A service can have several offline containers, we only look for an active one.
"desired-state": ["running"],
},
})
.catch(() => []);
// For now we are only interested in the first one (in case replicas > 1).
// TODO: Show the result for all replicas/containers?
const taskContainerId = tasks.at(0)?.Status?.ContainerStatus?.ContainerID;
if (taskContainerId) {
const container = docker.getContainer(taskContainerId);
const info = await container.inspect();
return res.status(200).json({
status: info.State.Status,
health: info.State.Health?.Status,
});
if (serviceInfo.Spec.Mode?.Replicated) {
// Replicated service, check n replicas
const replicas = parseInt(serviceInfo.Spec.Mode?.Replicated?.Replicas, 10);
if (tasks.length === replicas) {
return res.status(200).json({
status: `running ${tasks.length}/${replicas}`,
});
}
if (tasks.length > 0) {
return res.status(200).json({
status: `partial ${tasks.length}/${replicas}`,
});
}
} else {
// Global service, prefer 'local' containers
const localContainerIDs = containers.map(c => c.Id);
const task = tasks.find(t => localContainerIDs.includes(t.Status?.ContainerStatus?.ContainerID)) ?? tasks.at(0);
const taskContainerId = task?.Status?.ContainerStatus?.ContainerID;
if (taskContainerId) {
try {
const container = docker.getContainer(taskContainerId);
const info = await container.inspect();
return res.status(200).json({
status: info.State.Status,
health: info.State.Health?.Status,
});
} catch (e) {
if (task) {
return res.status(200).json({
status: task.Status.State
})
}
}
}
}
}
return res.status(200).send({
error: "not found",
return res.status(404).send({
status: "not found",
});
} catch (e) {
logger.error(e);

View File

@@ -19,7 +19,10 @@ export default async function handler(req, res) {
return hash(readFileSync(configYaml, "utf8"));
});
const combinedHash = hash(hashes.join(""));
// this ties hash to specific build which should force revaliation between versions
const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length ? process.env.NEXT_PUBLIC_BUILDTIME : '';
const combinedHash = hash(hashes.join("") + buildTime);
res.send({
hash: combinedHash,

View File

@@ -32,6 +32,7 @@ export default async function handler(req, res) {
}
req.method = mapping?.method || "GET";
if (mapping?.body) req.body = mapping?.body;
req.query.endpoint = endpoint;
if (req.query.segments) {

View File

@@ -100,7 +100,7 @@ function Index({ initialSettings, fallback }) {
localStorage.setItem("hash", hashData.hash);
}
if (!initialSettings.isValid || (previousHash && previousHash !== hashData.hash)) {
if (previousHash && previousHash !== hashData.hash) {
setStale(true);
localStorage.setItem("hash", hashData.hash);
@@ -112,7 +112,7 @@ function Index({ initialSettings, fallback }) {
}
}
}
}, [hashData, initialSettings]);
}, [hashData]);
if (stale) {
return (
@@ -175,7 +175,7 @@ function Home({ initialSettings }) {
const { data: services } = useSWR("/api/services");
const { data: bookmarks } = useSWR("/api/bookmarks");
const { data: widgets } = useSWR("/api/widgets");
const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()]
useEffect(() => {
@@ -252,7 +252,7 @@ function Home({ initialSettings }) {
/>
<meta name="theme-color" content={themes[initialSettings.color || "slate"][initialSettings.theme || "dark"]} />
</Head>
<div className="relative container m-auto flex flex-col justify-between z-10">
<div className="relative container m-auto flex flex-col justify-between z-10 h-full">
<div
className={classNames(
"flex flex-row flex-wrap justify-between",
@@ -265,7 +265,6 @@ function Home({ initialSettings }) {
setSearchString={setSearchString}
isOpen={searching}
close={setSearching}
searchDescriptions={settings.quicklaunch?.searchDescriptions}
searchProvider={settings.quicklaunch?.hideInternetSearch ? null : searchProvider}
/>
{widgets && (
@@ -310,7 +309,7 @@ function Home({ initialSettings }) {
</div>
<div className="flex p-8 pt-4 w-full justify-end">
<Version />
{!initialSettings?.hideVersion && <Version />}
</div>
</div>
</>

View File

@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { join } from "path";
import { existsSync, copyFile, readFileSync, statSync } from "fs";
import { existsSync, copyFile, readFileSync } from "fs";
import yaml from "js-yaml";
@@ -32,18 +32,5 @@ export function getSettings() {
const settingsYaml = join(process.cwd(), "config", "settings.yaml");
const fileContents = readFileSync(settingsYaml, "utf8");
let stats;
try {
stats = statSync(settingsYaml);
} catch (e) {
stats = {};
}
const yamlLoaded = yaml.load(fileContents) ?? {};
return {
...yamlLoaded,
isValid: fileContents !== "-\n" && stats.size !== 2 // see https://github.com/benphelps/homepage/pull/609
};
return yaml.load(fileContents) ?? {};
}

View File

@@ -164,10 +164,17 @@ export async function servicesFromKubernetes() {
weight: ingress.metadata.annotations[`${ANNOTATION_BASE}/weight`] || '0',
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || '',
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || '',
external: false,
};
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
constructedService.external = String(ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true"
}
if (ingress.metadata.annotations[ANNOTATION_POD_SELECTOR]) {
constructedService.podSelector = ingress.metadata.annotations[ANNOTATION_POD_SELECTOR];
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
constructedService.ping = ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`];
}
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
shvl.set(constructedService, annotation.replace(`${ANNOTATION_BASE}/`, ""), ingress.metadata.annotations[annotation]);

View File

@@ -53,3 +53,12 @@ export function jsonArrayTransform(data, transform) {
export function jsonArrayFilter(data, filter) {
return jsonArrayTransform(data, (items) => items.filter(filter));
}
export function sanitizeErrorURL(errorURL) {
// Dont display sensitive params on frontend
const url = new URL(errorURL);
["apikey", "api_key", "token", "t"].forEach(key => {
if (url.searchParams.has(key)) url.searchParams.set(key, "***")
});
return url.toString();
}

View File

@@ -34,6 +34,6 @@ export function addCookieToJar(url, headers) {
}
for (let i = 0; i < cookies.length; i += 1) {
cookieJar.setCookieSync(cookies[i], url.toString());
cookieJar.setCookieSync(cookies[i], url.toString(), { ignoreError: true });
}
}

View File

@@ -1,5 +1,5 @@
import getServiceWidget from "utils/config/service-helpers";
import { formatApiCall } from "utils/proxy/api-helpers";
import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
import validateWidgetData from "utils/proxy/validate-widget-data";
import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
@@ -44,8 +44,9 @@ export default async function credentialedProxyHandler(req, res, map) {
} else if (widget.type === "miniflux") {
headers["X-Auth-Token"] = `${widget.key}`;
} else if (widget.type === "cloudflared") {
headers["X-Auth-Email"] = `${widget.email}`;
headers["X-Auth-Key"] = `${widget.key}`;
headers.Authorization = `Bearer ${widget.key}`;
} else if (widget.type === "pterodactyl") {
headers.Authorization = `Bearer ${widget.key}`;
} else {
headers["X-API-Key"] = `${widget.key}`;
}
@@ -68,7 +69,10 @@ export default async function credentialedProxyHandler(req, res, map) {
}
if (!validateWidgetData(widget, endpoint, data)) {
return res.status(500).json({error: {message: "Invalid data", url, data}});
if (data.error && data.error.url) {
data.error.url = sanitizeErrorURL(url);
}
return res.status(500).json({error: {message: "Invalid data", url: sanitizeErrorURL(url), data}});
}
if (status === 200 && map) {

View File

@@ -1,5 +1,5 @@
import getServiceWidget from "utils/config/service-helpers";
import { formatApiCall } from "utils/proxy/api-helpers";
import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
import validateWidgetData from "utils/proxy/validate-widget-data";
import { httpProxy } from "utils/proxy/http";
import createLogger from "utils/logger";
@@ -27,15 +27,23 @@ export default async function genericProxyHandler(req, res, map) {
};
}
const [status, contentType, data] = await httpProxy(url, {
const params = {
method: req.method,
headers,
});
}
if (req.body) {
params.body = req.body;
}
const [status, contentType, data] = await httpProxy(url, params);
let resultData = data;
if (!validateWidgetData(widget, endpoint, resultData)) {
return res.status(status).json({error: {message: "Invalid data", url, data: resultData}});
if (resultData.error && resultData.error.url) {
resultData.error.url = sanitizeErrorURL(url);
}
return res.status(status).json({error: {message: "Invalid data", url: sanitizeErrorURL(url), data: resultData}});
}
if (status === 200 && map) {
@@ -50,7 +58,7 @@ export default async function genericProxyHandler(req, res, map) {
if (status >= 400) {
logger.debug("HTTP Error %d calling %s//%s%s...", status, url.protocol, url.hostname, url.pathname);
return res.status(status).json({error: {message: "HTTP Error", url, data}});
return res.status(status).json({error: {message: "HTTP Error", url: sanitizeErrorURL(url), data}});
}
return res.status(status).send(resultData);

View File

@@ -14,15 +14,20 @@ const components = {
docker: dynamic(() => import("./docker/component")),
kubernetes: dynamic(() => import("./kubernetes/component")),
emby: dynamic(() => import("./emby/component")),
fileflows: dynamic(() => import("./fileflows/component")),
flood: dynamic(() => import("./flood/component")),
gluetun: dynamic(() => import("./gluetun/component")),
gotify: dynamic(() => import("./gotify/component")),
grafana: dynamic(() => import("./grafana/component")),
hdhomerun: dynamic(() => import("./hdhomerun/component")),
homebridge: dynamic(() => import("./homebridge/component")),
healthchecks: dynamic(() => import("./healthchecks/component")),
immich: dynamic(() => import("./immich/component")),
jackett: dynamic(() => import("./jackett/component")),
jellyfin: dynamic(() => import("./emby/component")),
jellyseerr: dynamic(() => import("./jellyseerr/component")),
komga: dynamic(() => import("./komga/component")),
kopia: dynamic(() => import("./kopia/component")),
lidarr: dynamic(() => import("./lidarr/component")),
mastodon: dynamic(() => import("./mastodon/component")),
medusa: dynamic(() => import("./medusa/component")),
@@ -31,6 +36,7 @@ const components = {
moonraker: dynamic(() => import("./moonraker/component")),
mylar: dynamic(() => import("./mylar/component")),
navidrome: dynamic(() => import("./navidrome/component")),
nextcloud: dynamic(() => import("./nextcloud/component")),
nextdns: dynamic(() => import("./nextdns/component")),
npm: dynamic(() => import("./npm/component")),
nzbget: dynamic(() => import("./nzbget/component")),
@@ -45,8 +51,10 @@ const components = {
pihole: dynamic(() => import("./pihole/component")),
plex: dynamic(() => import("./plex/component")),
portainer: dynamic(() => import("./portainer/component")),
prometheus: dynamic(() => import("./prometheus/component")),
prowlarr: dynamic(() => import("./prowlarr/component")),
proxmox: dynamic(() => import("./proxmox/component")),
pterodactyl: dynamic(() => import("./pterodactyl/component")),
pyload: dynamic(() => import("./pyload/component")),
qbittorrent: dynamic(() => import("./qbittorrent/component")),
radarr: dynamic(() => import("./radarr/component")),
@@ -64,10 +72,10 @@ const components = {
tubearchivist: dynamic(() => import("./tubearchivist/component")),
truenas: dynamic(() => import("./truenas/component")),
unifi: dynamic(() => import("./unifi/component")),
unmanic: dynamic(() => import("./unmanic/component")),
uptimekuma: dynamic(() => import("./uptimekuma/component")),
watchtower: dynamic(() => import("./watchtower/component")),
xteve: dynamic(() => import("./xteve/component")),
immich: dynamic(() => import("./immich/component")),
uptimekuma: dynamic(() => import("./uptimekuma/component")),
};
export default components;

View File

@@ -22,7 +22,7 @@ export default function Component({ service }) {
return <Container error={finalError} />;
}
if (statusData && statusData.status !== "running") {
if (statusData && !(statusData.status.includes("running") || statusData.status.includes("partial"))) {
return (
<Container>
<Block label={t("widget.status")} value={t("docker.offline")} />

View File

@@ -0,0 +1,37 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: fileflowsData, error: fileflowsError } = useWidgetAPI(widget, "status");
if (fileflowsError) {
return <Container error={fileflowsError} />;
}
if (!fileflowsData) {
return (
<Container service={service}>
<Block label="fileflows.queue" />
<Block label="fileflows.processing" />
<Block label="fileflows.processed" />
<Block label="fileflows.time" />
</Container>
);
}
return (
<Container service={service}>
<Block label="fileflows.queue" value={t("common.number", { value: fileflowsData.queue })} />
<Block label="fileflows.processing" value={t("common.number", { value: fileflowsData.processing })} />
<Block label="fileflows.processed" value={t("common.number", { value: fileflowsData.processed })} />
<Block label="fileflows.time" value={fileflowsData.time?.length ? fileflowsData.time : "0:00"} />
</Container>
);
}

14
src/widgets/fileflows/widget.js Executable file
View File

@@ -0,0 +1,14 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
"status": {
endpoint: "status",
},
},
};
export default widget;

View File

@@ -45,9 +45,9 @@ export default function Component({ service }) {
return (
<Container service={service}>
<Block label="flood.leech" value={t("common.number", { value: leech })} />
<Block label="flood.download" value={t("common.bitrate", { value: rateDl })} />
<Block label="flood.download" value={t("common.byterate", { value: rateDl })} />
<Block label="flood.seed" value={t("common.number", { value: completed })} />
<Block label="flood.upload" value={t("common.bitrate", { value: rateUl })} />
<Block label="flood.upload" value={t("common.byterate", { value: rateUl })} />
</Container>
);
}

View File

@@ -0,0 +1,37 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats");
const { data: alertsData, error: alertsError } = useWidgetAPI(widget, "alerts");
if (statsError || alertsError) {
return <Container error={statsError ?? alertsError} />;
}
if (!statsData || !alertsData) {
return (
<Container service={service}>
<Block label="grafana.dashboards" />
<Block label="grafana.datasources" />
<Block label="grafana.totalalerts" />
<Block label="grafana.alertstriggered" />
</Container>
);
}
return (
<Container service={service}>
<Block label="grafana.dashboards" value={t("common.number", { value: statsData.dashboards })} />
<Block label="grafana.datasources" value={t("common.number", { value: statsData.datasources })} />
<Block label="grafana.totalalerts" value={t("common.number", { value: statsData.alerts })} />
<Block label="grafana.alertstriggered" value={t("common.number", { value: alertsData.filter(a => a.state === "alerting").length })} />
</Container>
);
}

20
src/widgets/grafana/widget.js Executable file
View File

@@ -0,0 +1,20 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
alerts: {
endpoint: "alerts",
},
stats: {
endpoint: "admin/stats",
validate: [
"dashboards"
]
},
},
};
export default widget;

View File

@@ -0,0 +1,54 @@
import { useTranslation } from "next-i18next";
import { i18n } from "../../../next-i18next.config";
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
function formatDate(dateString) {
const date = new Date(dateString);
const now = new Date();
let dateOptions = {
month: "numeric",
day: "numeric",
hour: "numeric",
minute: "numeric",
};
if (date.getFullYear() === now.getFullYear() && date.getMonth() === now.getMonth() && date.getDate() === now.getDate()) {
dateOptions = { timeStyle: "short" };
}
return new Intl.DateTimeFormat(i18n.language, dateOptions).format(date);
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data, error } = useWidgetAPI(widget, "checks");
if (error) {
return <Container error={error} />;
}
if (!data) {
return (
<Container service={service}>
<Block label={t("healthchecks.status")} />
<Block label={t("healthchecks.last_ping")} />
</Container>
);
}
return (
<Container service={service}>
<Block label={t("healthchecks.status")} value={t(`healthchecks.${data.status}`)} />
<Block
label={t("healthchecks.last_ping")}
value={data.last_ping ? formatDate(data.last_ping) : t("healthchecks.never")}
/>
</Container>
);
}

View File

@@ -0,0 +1,18 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v2/{endpoint}/{uuid}",
proxyHandler: credentialedProxyHandler,
mappings: {
checks: {
endpoint: "checks",
validate: [
"status",
"last_ping",
]
},
},
};
export default widget;

View File

@@ -50,7 +50,7 @@ async function apiCall(widget, endpoint, service) {
headers,
});
if (status === 401) {
if (status === 401 || status === 403) {
logger.debug("Homebridge API rejected the request, attempting to obtain new session token");
const { accessToken } = login(widget, service);
headers.Authorization = `Bearer ${accessToken}`;
@@ -63,7 +63,8 @@ async function apiCall(widget, endpoint, service) {
}
if (status !== 200) {
logger.error("Error getting data from Homebridge: %d. Data: %s", status, data);
logger.error("Error getting data from Homebridge: %s status %d. Data: %s", url, status, data);
return { status, contentType, data: null, responseHeaders };
}
return { status, contentType, data: JSON.parse(data.toString()), responseHeaders };

68
src/widgets/kopia/component.jsx Executable file
View File

@@ -0,0 +1,68 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
function relativeDate(date) {
const seconds = Math.abs(Math.floor((new Date() - date) / 1000));
let interval = Math.abs(seconds / 31536000);
if (interval > 1) {
return `${Math.floor(interval)} y`;
}
interval = seconds / 2592000;
if (interval > 1) {
return `${Math.floor(interval)} mo`;
}
interval = seconds / 86400;
if (interval > 1) {
return `${Math.floor(interval)} d`;
}
interval = seconds / 3600;
if (interval > 1) {
return `${Math.floor(interval)} h`;
}
interval = seconds / 60;
if (interval > 1) {
return `${Math.floor(interval)} m`;
}
return `${Math.floor(seconds)} s`;
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (statusError) {
return <Container error={statusError} />;
}
const source = statusData?.sources[0];
if (!statusData || !source) {
return (
<Container service={service}>
<Block label="kopia.status" />
<Block label="kopia.size" />
<Block label="kopia.lastrun" />
<Block label="kopia.nextrun" />
</Container>
);
}
const lastRun = source.lastSnapshot.stats.errorCount === 0 ? new Date(source.lastSnapshot.startTime) : t("kopia.failed");
const nextTime = source.nextSnapshotTime ? new Date(source.nextSnapshotTime) : null;
return (
<Container service={service}>
<Block label="kopia.status" value={ source.status } />
<Block label="kopia.size" value={t("common.bbytes", { value: source.lastSnapshot.stats.totalSize, maximumFractionDigits: 1 })} />
<Block label="kopia.lastrun" value={ relativeDate(lastRun) } />
{nextTime && <Block label="kopia.nextrun" value={ relativeDate(nextTime) } />}
</Container>
);
}

14
src/widgets/kopia/widget.js Executable file
View File

@@ -0,0 +1,14 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
status: {
endpoint: "api/v1/sources",
},
},
};
export default widget;

View File

@@ -0,0 +1,39 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: nextcloudData, error: nextcloudError } = useWidgetAPI(widget, "serverinfo");
if (nextcloudError) {
return <Container error={nextcloudError} />;
}
if (!nextcloudData) {
return (
<Container service={service}>
<Block label="nextcloud.cpuload" />
<Block label="nextcloud.memoryusage" />
<Block label="nextcloud.freespace" />
<Block label="nextcloud.activeusers" />
</Container>
);
}
const nextcloudInfo = nextcloudData.ocs.data.nextcloud;
const memoryUsage = 100 * ((parseFloat(nextcloudInfo.system.mem_total) - parseFloat(nextcloudInfo.system.mem_free)) / parseFloat(nextcloudInfo.system.mem_total));
return (
<Container service={service}>
<Block label="nextcloud.cpuload" value={t("common.percent", { value: nextcloudInfo.system.cpuload[0] })} />
<Block label="nextcloud.memoryusage" value={t("common.percent", { value:memoryUsage })} />
<Block label="nextcloud.freespace" value={t("common.bbytes", { value: nextcloudInfo.system.freespace, maximumFractionDigits: 1 })} />
<Block label="nextcloud.activeusers" value={t("common.number", { value: nextcloudData.ocs.data.activeUsers.last5minutes })} />
</Container>
);
}

14
src/widgets/nextcloud/widget.js Executable file
View File

@@ -0,0 +1,14 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
serverinfo: {
endpoint: "ocs/v2.php/apps/serverinfo/api/v1/info?format=json",
},
},
};
export default widget;

View File

@@ -33,7 +33,6 @@ export default function Component({ service }) {
<Block label="omada.activeUser" value={t( "common.number", { value: omadaData.activeUser })} />
<Block label="omada.alerts" value={t( "common.number", { value: omadaData.alerts })} />
{ omadaData.connectedGateways > 0 && <Block label="omada.connectedGateway" value={t("common.number", { value: omadaData.connectedGateways})} /> }
{ omadaData.connectedSwitches > 0 && <Block label="omada.connectedSwitches" value={t("common.number", { value: omadaData.connectedSwitches})} /> }
</Container>
);
}

View File

@@ -0,0 +1,38 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: targetsData, error: targetsError } = useWidgetAPI(widget, "targets");
if (targetsError) {
return <Container error={targetsError} />;
}
if (!targetsData) {
return (
<Container service={service}>
<Block label="prometheus.targets_up" />
<Block label="prometheus.targets_down" />
<Block label="prometheus.targets_total" />
</Container>
);
}
const upCount = targetsData.data.activeTargets.filter(a => a.health === "up").length;
const downCount = targetsData.data.activeTargets.filter(a => a.health === "down").length;
const totalCount = targetsData.data.activeTargets.length;
return (
<Container service={service}>
<Block label="prometheus.targets_up" value={t("common.number", { value: upCount })} />
<Block label="prometheus.targets_down" value={t("common.number", { value: downCount })} />
<Block label="prometheus.targets_total" value={t("common.number", { value: totalCount })} />
</Container>
);
}

View File

@@ -0,0 +1,17 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/v1/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
targets: {
endpoint: "targets",
validate: [
"data"
]
},
},
};
export default widget;

View File

@@ -8,18 +8,15 @@ export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexer");
const { data: grabsData, error: grabsError } = useWidgetAPI(widget, "indexerstats");
if (indexersError || grabsError) {
const finalError = indexersError ?? grabsError;
return <Container error={finalError} />;
if (grabsError) {
return <Container error={grabsError} />;
}
if (!indexersData || !grabsData) {
if (!grabsData) {
return (
<Container service={service}>
<Block label="prowlarr.enableIndexers" />
<Block label="prowlarr.numberOfGrabs" />
<Block label="prowlarr.numberOfQueries" />
<Block label="prowlarr.numberOfFailGrabs" />
@@ -28,8 +25,6 @@ export default function Component({ service }) {
);
}
const indexers = indexersData?.filter((indexer) => indexer.enable === true);
let numberOfGrabs = 0;
let numberOfQueries = 0;
let numberOfFailedGrabs = 0;
@@ -43,7 +38,6 @@ export default function Component({ service }) {
return (
<Container service={service}>
<Block label="prowlarr.enableIndexers" value={t("common.number", { value: indexers.length })} />
<Block label="prowlarr.numberOfGrabs" value={t("common.number", { value: numberOfGrabs })} />
<Block label="prowlarr.numberOfQueries" value={t("common.number", { value: numberOfQueries })} />
<Block label="prowlarr.numberOfFailGrabs" value={t("common.number", { value: numberOfFailedGrabs })} />

View File

@@ -0,0 +1,34 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const {widget} = service;
const {data: nodesData, error: nodesError} = useWidgetAPI(widget, "nodes");
if (nodesError) {
return <Container error={ nodesError } />;
}
if (!nodesData) {
return (
<Container service={service}>
<Block label="pterodactyl.nodes" />
<Block label="pterodactyl.servers" />
</Container>
);
}
const totalServers = nodesData.data.reduce((total, node) =>
node.attributes?.relationships?.servers?.data?.length ?? 0 + total, 0);
return (
<Container service={service}>
<Block label="pterodactyl.nodes" value={nodesData.data.length} />
<Block label="pterodactyl.servers" value={totalServers} />
</Container>
);
}

View File

@@ -0,0 +1,17 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/application/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
nodes: {
endpoint: "nodes?include=servers",
validate: [
"data"
]
},
},
};
export default widget;

View File

@@ -1,6 +1,48 @@
import RuTorrent from "rutorrent-promise";
import getServiceWidget from "utils/config/service-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
import { formatApiCall } from "utils/proxy/api-helpers";
import createLogger from "utils/logger";
const logger = createLogger("rutorrentProxyHandler");
// from https://github.com/ctessier/node-rutorrent-promise/blob/next/utils.js
const getTorrentInfo = (data) => ({
'd.is_open': data[0],
'd.is_hash_checking': data[1],
'd.is_hash_checked': data[2],
'd.get_state': data[3],
'd.get_name': data[4],
'd.get_size_bytes': data[5],
'd.get_completed_chunks': data[6],
'd.get_size_chunks': data[7],
'd.get_bytes_done': data[8],
'd.get_up_total': data[9],
'd.get_ratio': data[10],
'd.get_up_rate': data[11],
'd.get_down_rate': data[12],
'd.get_chunk_size': data[13],
'd.get_custom1': data[14],
'd.get_peers_accounted': data[15],
'd.get_peers_not_connected': data[16],
'd.get_peers_connected': data[17],
'd.get_peers_complete': data[18],
'd.get_left_bytes': data[19],
'd.get_priority': data[20],
'd.get_state_changed': data[21],
'd.get_skip_total': data[22],
'd.get_hashing': data[23],
'd.get_chunks_hashed': data[24],
'd.get_base_path': data[25],
'd.get_creation_date': data[26],
'd.get_tracker_focus': data[27],
'd.is_active': data[28],
'd.get_message': data[29],
'd.get_custom2': data[30],
'd.get_free_diskspace': data[31],
'd.is_private': data[32],
'd.is_multi_file': data[33],
});
export default async function rutorrentProxyHandler(req, res) {
const { group, service } = req.query;
@@ -9,27 +51,35 @@ export default async function rutorrentProxyHandler(req, res) {
const widget = await getServiceWidget(group, service);
if (widget) {
const constructedUrl = new URL(widget.url);
const api = widgets?.[widget.type]?.api;
const url = new URL(formatApiCall(api, { ...widget }));
let rtPort = constructedUrl.port;
if (rtPort === '') {
rtPort = constructedUrl.protocol === "https:" ? 443 : 80;
const headers = {}
if (widget.username) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
const rutorrent = new RuTorrent({
host: constructedUrl.hostname,
port: rtPort,
path: constructedUrl.pathname,
ssl: constructedUrl.protocol === "https:",
username: widget.username,
password: widget.password,
const [status, , data] = await httpProxy(url, {
method: "POST",
headers,
body: 'mode=list'
});
const data = await rutorrent.get(["d.get_down_rate", "d.get_up_rate", "d.get_state"]);
if (status !== 200) {
logger.error("HTTP Error %d calling %s", status, url.toString());
return res.status(status).json({error: {message: "HTTP Error", url, data}});
}
return res.status(200).send(data);
try {
const rawData = JSON.parse(data);
const parsedData = Object.keys(rawData.t).map((hashString) => getTorrentInfo(rawData.t[hashString]));
return res.status(200).send(parsedData);
} catch (e) {
return res.status(500).json({error: {message: e?.toString() ?? 'Error parsing rutorrent data', url, data}});
}
}
}
return res.status(400).json({ error: "Invalid proxy service type" });
return res.status(500).json({ error: "Invalid proxy service type" });
}

View File

@@ -36,9 +36,9 @@ export default function Component({ service }) {
return (
<Container service={service}>
<Block label="transmission.leech" value={t("common.number", { value: leech })} />
<Block label="transmission.download" value={t("common.bitrate", { value: rateDl * 8 })} />
<Block label="transmission.download" value={t("common.byterate", { value: rateDl })} />
<Block label="transmission.seed" value={t("common.number", { value: completed })} />
<Block label="transmission.upload" value={t("common.bitrate", { value: rateUl * 8 })} />
<Block label="transmission.upload" value={t("common.byterate", { value: rateUl })} />
</Container>
);
}

View File

@@ -42,12 +42,15 @@ async function getWidget(req) {
return widget;
}
async function login(widget) {
async function login(widget, csrfToken) {
const endpoint = (widget.prefix === udmpPrefix) ? "auth/login" : "login";
const api = widgets?.[widget.type]?.api?.replace("{prefix}", ""); // no prefix for login url
const loginUrl = new URL(formatApiCall(api, { endpoint, ...widget }));
const loginBody = { username: widget.username, password: widget.password, remember: true };
const headers = { "Content-Type": "application/json" };
if (csrfToken) {
headers["X-CSRF-TOKEN"] = csrfToken;
}
const [status, contentType, data, responseHeaders] = await httpProxy(loginUrl, {
method: "POST",
body: JSON.stringify(loginBody),
@@ -70,6 +73,7 @@ export default async function unifiProxyHandler(req, res) {
let [status, contentType, data, responseHeaders] = [];
let prefix = cache.get(`${prefixCacheKey}.${service}`);
let csrfToken;
if (prefix === null) {
// auto detect if we're talking to a UDM Pro, and cache the result so that we
// don't make two requests each time data from Unifi is required
@@ -77,12 +81,12 @@ export default async function unifiProxyHandler(req, res) {
prefix = "";
if (responseHeaders?.["x-csrf-token"]) {
prefix = udmpPrefix;
csrfToken = responseHeaders["x-csrf-token"];
}
cache.put(`${prefixCacheKey}.${service}`, prefix);
}
widget.prefix = prefix;
const { endpoint } = req.query;
const url = new URL(formatApiCall(api, { endpoint, ...widget }));
const params = { method: "GET", headers: {} };
@@ -92,7 +96,10 @@ export default async function unifiProxyHandler(req, res) {
if (status === 401) {
logger.debug("Unifi isn't logged in or rejected the reqeust, attempting login.");
[status, contentType, data, responseHeaders] = await login(widget);
if (responseHeaders?.["x-csrf-token"]) {
csrfToken = responseHeaders["x-csrf-token"];
}
[status, contentType, data, responseHeaders] = await login(widget, csrfToken);
if (status !== 200) {
logger.error("HTTP %d logging in to Unifi. Data: %s", status, data);

View File

@@ -0,0 +1,33 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { widget } = service;
const { data: workersData, error: workersError } = useWidgetAPI(widget, "workers");
const { data: pendingData, error: pendingError } = useWidgetAPI(widget, "pending");
if (workersError || pendingError) {
const finalError = workersError ?? pendingError;
return <Container error={finalError} />;
}
if (!workersData || !pendingData) {
return (
<Container service={service}>
<Block label="unmanic.active_workers" />
<Block label="unmanic.total_workers" />
<Block label="unmanic.records_total" />
</Container>
);
}
return (
<Container service={service}>
<Block label="unmanic.active_workers" value={workersData.active_workers} />
<Block label="unmanic.total_workers" value={workersData.total_workers} />
<Block label="unmanic.records_total" value={pendingData.recordsTotal} />
</Container>
);
}

View File

@@ -0,0 +1,27 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: "{url}/unmanic/api/v2/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
workers: {
endpoint: "workers/status",
map: (data) => ({
total_workers: (asJson(data).workers_status).length,
active_workers: (asJson(data).workers_status).filter(worker => !worker.idle).length,
})
},
pending: {
method: "POST",
body: "{}",
endpoint: "pending/tasks",
validate: [
"recordsTotal"
]
},
},
};
export default widget;

View File

@@ -9,14 +9,19 @@ import deluge from "./deluge/widget";
import diskstation from "./diskstation/widget";
import downloadstation from "./downloadstation/widget";
import emby from "./emby/widget";
import fileflows from "./fileflows/widget";
import flood from "./flood/widget";
import gluetun from "./gluetun/widget";
import gotify from "./gotify/widget";
import grafana from "./grafana/widget";
import hdhomerun from "./hdhomerun/widget";
import homebridge from "./homebridge/widget";
import healthchecks from "./healthchecks/widget";
import immich from "./immich/widget";
import jackett from "./jackett/widget";
import jellyseerr from "./jellyseerr/widget";
import komga from "./komga/widget";
import kopia from "./kopia/widget";
import lidarr from "./lidarr/widget";
import mastodon from "./mastodon/widget";
import medusa from "./medusa/widget";
@@ -25,6 +30,7 @@ import mikrotik from "./mikrotik/widget";
import moonraker from "./moonraker/widget";
import mylar from "./mylar/widget";
import navidrome from "./navidrome/widget";
import nextcloud from "./nextcloud/widget";
import nextdns from "./nextdns/widget";
import npm from "./npm/widget";
import nzbget from "./nzbget/widget";
@@ -39,8 +45,10 @@ import proxmoxbackupserver from "./proxmoxbackupserver/widget";
import pihole from "./pihole/widget";
import plex from "./plex/widget";
import portainer from "./portainer/widget";
import prometheus from "./prometheus/widget";
import prowlarr from "./prowlarr/widget";
import proxmox from "./proxmox/widget";
import pterodactyl from "./pterodactyl/widget";
import pyload from "./pyload/widget";
import qbittorrent from "./qbittorrent/widget";
import radarr from "./radarr/widget";
@@ -58,10 +66,10 @@ import transmission from "./transmission/widget";
import tubearchivist from "./tubearchivist/widget";
import truenas from "./truenas/widget";
import unifi from "./unifi/widget";
import unmanic from "./unmanic/widget";
import uptimekuma from "./uptimekuma/widget";
import watchtower from "./watchtower/widget";
import xteve from "./xteve/widget";
import immich from "./immich/widget";
import uptimekuma from "./uptimekuma/widget";
const widgets = {
adguard,
@@ -75,15 +83,20 @@ const widgets = {
diskstation,
downloadstation,
emby,
fileflows,
flood,
gluetun,
gotify,
grafana,
hdhomerun,
homebridge,
healthchecks,
immich,
jackett,
jellyfin: emby,
jellyseerr,
komga,
kopia,
lidarr,
mastodon,
medusa,
@@ -92,6 +105,7 @@ const widgets = {
moonraker,
mylar,
navidrome,
nextcloud,
nextdns,
npm,
nzbget,
@@ -106,8 +120,10 @@ const widgets = {
pihole,
plex,
portainer,
prometheus,
prowlarr,
proxmox,
pterodactyl,
pyload,
qbittorrent,
radarr,
@@ -126,10 +142,10 @@ const widgets = {
truenas,
unifi,
unifi_console: unifi,
unmanic,
uptimekuma,
watchtower,
xteve,
immich,
uptimekuma,
};
export default widgets;