Compare commits

...

339 Commits

Author SHA1 Message Date
shamoon
3e01fc12e4 Merge pull request #1602 from benphelps/fix/issue-1599
Fix: Retrieve ping url from config rather than as query parameter
2023-06-11 10:04:34 -07:00
shamoon
1fb7be7457 Retrieve ping url from config rather than as query parameter 2023-06-11 09:50:41 -07:00
Dan
0d6ccb036e Translated using Weblate (Ukrainian)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-06-11 16:47:46 +02:00
Nonoss117
7af36eb106 Translated using Weblate (French)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-06-11 16:47:45 +02:00
gallegonovato
1d80955649 Translated using Weblate (Spanish)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-06-11 16:47:45 +02:00
shamoon
a50e939123 Merge pull request #1596 from benphelps/revert-1574-widget-boxed
Revert "Added optional boxed styling for information widgets and refactored information widgets"
2023-06-10 23:30:55 -07:00
shamoon
6b2930ab8d Revert "Added optional boxed styling for information widgets and refactored information widgets" 2023-06-10 23:30:44 -07:00
Ben Phelps
347761fcad Merge pull request #1574 from denispapec/widget-boxed
Added optional boxed styling for information widgets and refactored information widgets
2023-06-11 08:02:20 +03:00
shamoon
2fabaa700b Merge pull request #1579 from denispapec/portainer-fix
Fixes for portainer and kubernetes and error component
2023-06-10 19:38:04 -07:00
shamoon
68b6192d8c Fix full height layout on tall screens 2023-06-09 09:01:19 -07:00
shamoon
0101e8ccb9 make portainer error detection more specific 2023-06-08 09:42:35 -07:00
shamoon
2da66b504b lint lidarr widget.js 2023-06-08 07:17:58 -07:00
Anonymous
b882065d5e Translated using Weblate (Indonesian)
Currently translated at 3.2% (15 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/
2023-06-08 16:17:16 +02:00
Anonymous
0be0fa71d3 Translated using Weblate (Slovenian)
Currently translated at 96.5% (449 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-06-08 16:17:16 +02:00
Anonymous
fe647fe67a Translated using Weblate (Greek)
Currently translated at 30.7% (143 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-06-08 16:17:16 +02:00
Anonymous
ee5fa003ee Translated using Weblate (Korean)
Currently translated at 37.2% (173 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-06-08 16:17:15 +02:00
Anonymous
19bcf40d31 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-06-08 16:17:15 +02:00
Anonymous
d06d6f7e44 Translated using Weblate (Thai)
Currently translated at 10.1% (47 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-06-08 16:17:15 +02:00
Anonymous
b5c4e36a53 Translated using Weblate (Latvian)
Currently translated at 25.3% (118 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-06-08 16:17:14 +02:00
Anonymous
4382bab64b Translated using Weblate (Japanese)
Currently translated at 80.2% (373 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-06-08 16:17:14 +02:00
Anonymous
678819d065 Translated using Weblate (Ukrainian)
Currently translated at 99.7% (464 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-06-08 16:17:14 +02:00
Anonymous
1dea651d8b Translated using Weblate (Esperanto)
Currently translated at 31.1% (145 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-06-08 16:17:13 +02:00
Anonymous
c29e351afc Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-06-08 16:17:13 +02:00
Anonymous
2493e608e8 Translated using Weblate (Malay)
Currently translated at 53.9% (251 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-06-08 16:17:13 +02:00
Anonymous
bfb326bd73 Translated using Weblate (Danish)
Currently translated at 42.3% (197 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-06-08 16:17:12 +02:00
Anonymous
fabb65995c Translated using Weblate (Czech)
Currently translated at 95.4% (444 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-06-08 16:17:12 +02:00
Anonymous
1ca12714e0 Translated using Weblate (Arabic)
Currently translated at 55.9% (260 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-06-08 16:17:12 +02:00
Anonymous
36717ede61 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-06-08 16:17:11 +02:00
Anonymous
7fc313cc73 Translated using Weblate (Turkish)
Currently translated at 84.5% (393 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-06-08 16:17:11 +02:00
Anonymous
6794fa1429 Translated using Weblate (Bulgarian)
Currently translated at 9.8% (46 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-06-08 16:17:11 +02:00
Anonymous
1097a46669 Translated using Weblate (Telugu)
Currently translated at 46.2% (215 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-06-08 16:17:10 +02:00
Anonymous
193582c8ae Translated using Weblate (Finnish)
Currently translated at 38.0% (177 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-06-08 16:17:10 +02:00
Anonymous
aacc2fae9d Translated using Weblate (Yue (Traditional))
Currently translated at 25.1% (117 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-06-08 16:17:10 +02:00
Anonymous
ac99f65188 Translated using Weblate (Portuguese (Brazil))
Currently translated at 86.8% (404 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-06-08 16:17:09 +02:00
Anonymous
1f9ee368c6 Translated using Weblate (Romanian)
Currently translated at 32.2% (150 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-06-08 16:17:09 +02:00
Anonymous
4c4da54d99 Translated using Weblate (Hebrew)
Currently translated at 21.5% (100 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-06-08 16:17:09 +02:00
Anonymous
7d51a9b10c Translated using Weblate (Hungarian)
Currently translated at 23.0% (107 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-06-08 16:17:08 +02:00
Anonymous
e9722e8946 Translated using Weblate (Croatian)
Currently translated at 98.4% (458 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-06-08 16:17:08 +02:00
Anonymous
e03c891703 Translated using Weblate (Swedish)
Currently translated at 27.9% (130 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-06-08 16:17:08 +02:00
Anonymous
10cfe20e8a Translated using Weblate (Polish)
Currently translated at 80.4% (374 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-06-08 16:17:07 +02:00
Anonymous
fd74618b8f Translated using Weblate (Catalan)
Currently translated at 55.9% (260 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-06-08 16:17:07 +02:00
Anonymous
b72d894a30 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.9% (460 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-06-08 16:17:07 +02:00
Anonymous
7ca6f36125 Translated using Weblate (Dutch)
Currently translated at 51.8% (241 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-06-08 16:17:06 +02:00
Anonymous
877a091fc0 Translated using Weblate (Vietnamese)
Currently translated at 9.4% (44 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-06-08 16:17:06 +02:00
Anonymous
6584a3194f Translated using Weblate (Norwegian Bokmål)
Currently translated at 16.9% (79 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-06-08 16:17:06 +02:00
Anonymous
8fa1831b31 Translated using Weblate (Italian)
Currently translated at 61.5% (286 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-06-08 16:17:05 +02:00
Anonymous
a01713c6e6 Translated using Weblate (Chinese (Simplified))
Currently translated at 95.2% (443 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-06-08 16:17:05 +02:00
Anonymous
637f745ee7 Translated using Weblate (Russian)
Currently translated at 88.8% (413 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-06-08 16:17:05 +02:00
Anonymous
8e89f39979 Translated using Weblate (Portuguese)
Currently translated at 86.8% (404 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-06-08 16:17:05 +02:00
Anonymous
2b0cddb05f Translated using Weblate (French)
Currently translated at 99.7% (464 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-06-08 16:17:04 +02:00
Anonymous
f780deca62 Translated using Weblate (Spanish)
Currently translated at 99.7% (464 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-06-08 16:17:04 +02:00
Anonymous
a19304e7e7 Translated using Weblate (German)
Currently translated at 98.2% (457 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-06-08 16:17:04 +02:00
Hosted Weblate
3d0cc6aeeb Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/
2023-06-08 16:16:16 +02:00
Dan
7588dd03db Translated using Weblate (Ukrainian)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-06-08 16:16:12 +02:00
Nonoss117
b934fc429d Translated using Weblate (French)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-06-08 16:16:12 +02:00
gallegonovato
07c0c0faf4 Translated using Weblate (Spanish)
Currently translated at 100.0% (465 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-06-08 16:16:12 +02:00
shamoon
350e27c32b Merge pull request #1587 from benphelps/fix/remove-lidarr-album
Change: lidarr use artist instead of album
2023-06-08 07:16:05 -07:00
shamoon
ea50a851f3 Change lidarr to artist instead of album 2023-06-08 07:15:35 -07:00
shamoon
27958c9f69 Merge pull request #1571 from rkokkelk/issue/1496
Fix: use service labels instead of container for service discovery with Docker Swarm
2023-06-08 00:35:22 -07:00
shamoon
3383b553d5 Merge pull request #1583 from benphelps/fix/issue-1577
Fix: potentially avoid `album` api call in lidarr widget, allow useWidgetAPI to not actually send a request
2023-06-07 14:23:49 -07:00
shamoon
4245f1070a fix docker service discovery, code styling 2023-06-07 14:06:23 -07:00
shamoon
c92d1caf80 Allow useWidgetAPI to not actually send a request 2023-06-07 13:43:53 -07:00
Denis Papec
91e0ec2f83 Fixes for portainer and kubernetes widget error messages, and error messages for services behind the reverse proxy
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-06-07 00:54:51 +01:00
shamoon
774ca4b3b2 Merge pull request #1575 from nathan-sankbeil/feat/gzip
Support proxying compressed responses
2023-06-06 14:11:23 -07:00
Anonymous
bcd9289849 Translated using Weblate (Indonesian)
Currently translated at 3.2% (15 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/
2023-06-06 22:33:35 +02:00
Anonymous
0e9ca01c18 Translated using Weblate (Slovenian)
Currently translated at 96.7% (450 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-06-06 22:33:35 +02:00
Anonymous
614ce65871 Translated using Weblate (Greek)
Currently translated at 30.9% (144 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-06-06 22:33:34 +02:00
Anonymous
b085a1a2d1 Translated using Weblate (Korean)
Currently translated at 37.4% (174 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-06-06 22:33:34 +02:00
Anonymous
715f3d9d27 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-06-06 22:33:34 +02:00
Anonymous
a1fedf98e5 Translated using Weblate (Thai)
Currently translated at 10.1% (47 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-06-06 22:33:33 +02:00
Anonymous
249dfa7a92 Translated using Weblate (Latvian)
Currently translated at 25.5% (119 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-06-06 22:33:33 +02:00
Anonymous
bb09d85d80 Translated using Weblate (Japanese)
Currently translated at 80.4% (374 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-06-06 22:33:32 +02:00
Anonymous
4f386bb2af Translated using Weblate (Ukrainian)
Currently translated at 99.1% (461 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-06-06 22:33:32 +02:00
Anonymous
d98607072c Translated using Weblate (Esperanto)
Currently translated at 31.3% (146 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-06-06 22:33:31 +02:00
Anonymous
93440ae8d1 Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-06-06 22:33:31 +02:00
Anonymous
0f5deba5e3 Translated using Weblate (Malay)
Currently translated at 54.1% (252 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-06-06 22:33:31 +02:00
Anonymous
e398e4acc5 Translated using Weblate (Danish)
Currently translated at 42.3% (197 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-06-06 22:33:30 +02:00
Anonymous
0447bb0413 Translated using Weblate (Czech)
Currently translated at 95.6% (445 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-06-06 22:33:30 +02:00
Anonymous
577f8fecfd Translated using Weblate (Arabic)
Currently translated at 56.1% (261 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-06-06 22:33:29 +02:00
Anonymous
9523f72c97 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-06-06 22:33:29 +02:00
Anonymous
7bcd405f77 Translated using Weblate (Turkish)
Currently translated at 84.7% (394 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-06-06 22:33:29 +02:00
Anonymous
3ab5862bf1 Translated using Weblate (Bulgarian)
Currently translated at 9.8% (46 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-06-06 22:33:28 +02:00
Anonymous
a00ef03ce5 Translated using Weblate (Telugu)
Currently translated at 46.4% (216 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-06-06 22:33:28 +02:00
Anonymous
95ecc55467 Translated using Weblate (Finnish)
Currently translated at 38.2% (178 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-06-06 22:33:27 +02:00
Anonymous
db7fdd2a4f Translated using Weblate (Yue (Traditional))
Currently translated at 25.3% (118 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-06-06 22:33:27 +02:00
Anonymous
a2a6cd150f Translated using Weblate (Portuguese (Brazil))
Currently translated at 87.0% (405 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-06-06 22:33:26 +02:00
Anonymous
26d17e9a3a Translated using Weblate (Romanian)
Currently translated at 32.4% (151 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-06-06 22:33:26 +02:00
Anonymous
46b988eeea Translated using Weblate (Hebrew)
Currently translated at 21.7% (101 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-06-06 22:33:26 +02:00
Anonymous
4682b5a9a2 Translated using Weblate (Hungarian)
Currently translated at 23.2% (108 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-06-06 22:33:25 +02:00
Anonymous
e2c8b2000f Translated using Weblate (Croatian)
Currently translated at 98.7% (459 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-06-06 22:33:25 +02:00
Anonymous
ff7ee31497 Translated using Weblate (Swedish)
Currently translated at 28.1% (131 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-06-06 22:33:24 +02:00
Anonymous
f66dc86e24 Translated using Weblate (Polish)
Currently translated at 80.6% (375 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-06-06 22:33:24 +02:00
Anonymous
a2204a3de9 Translated using Weblate (Catalan)
Currently translated at 56.1% (261 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-06-06 22:33:23 +02:00
Anonymous
4cf8302d4f Translated using Weblate (Chinese (Traditional))
Currently translated at 99.1% (461 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-06-06 22:33:23 +02:00
Anonymous
63247f3a9f Translated using Weblate (Dutch)
Currently translated at 52.0% (242 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-06-06 22:33:23 +02:00
Anonymous
51a1562ea9 Translated using Weblate (Vietnamese)
Currently translated at 9.4% (44 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-06-06 22:33:22 +02:00
Anonymous
ece83fd531 Translated using Weblate (Norwegian Bokmål)
Currently translated at 16.9% (79 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-06-06 22:33:22 +02:00
Anonymous
86cb124894 Translated using Weblate (Italian)
Currently translated at 61.7% (287 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-06-06 22:33:22 +02:00
Anonymous
4c55eee55b Translated using Weblate (Chinese (Simplified))
Currently translated at 95.4% (444 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-06-06 22:33:21 +02:00
Anonymous
3061654eeb Translated using Weblate (Russian)
Currently translated at 89.0% (414 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-06-06 22:33:21 +02:00
Anonymous
bcdbcb2cb7 Translated using Weblate (Portuguese)
Currently translated at 87.0% (405 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-06-06 22:33:21 +02:00
Anonymous
7367bd4a1f Translated using Weblate (French)
Currently translated at 99.1% (461 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-06-06 22:33:20 +02:00
Anonymous
fd0d644474 Translated using Weblate (Spanish)
Currently translated at 99.1% (461 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-06-06 22:33:20 +02:00
Anonymous
a054747285 Translated using Weblate (German)
Currently translated at 98.4% (458 of 465 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-06-06 22:33:19 +02:00
shamoon
2c62f180a9 Merge pull request #1560 from Schoggi0815/feature/sonarr-radarr-queue-list
Feature/sonarr radarr queue list
2023-06-06 13:31:13 -07:00
shamoon
dd4ee44302 Simplify sonarr / radarr queues, better handle some errors 2023-06-05 22:23:21 -07:00
nsankbeil
3a29262256 feat: support compressed responses 2023-06-05 21:44:58 -04:00
Matteo Bossi
5b3d1cc6e0 Make styling more consistent and add toggle to opt-in instead of opting out 2023-06-06 01:14:10 +02:00
Denis Papec
a55fe939cb Further improvements to simplify information widgets
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-06-05 23:18:18 +01:00
shamoon
c1a68a79ee Merge pull request #1572 from Cyb3rzombie/paperlessngx_token
Enhancement: add support for auth token in paperless-ngx widget
2023-06-05 11:06:14 -07:00
Cyb3rzombie
8f0cd7e088 Add support for auth token 2023-06-05 18:26:11 +02:00
RoyK
f656c2b46d fix(service-helper): service detection with Docker Swarm
The current implementation of service detection focusses on containers.
However when using Docker Swarm this limits automatic service detection
to the containers running on the same node as homepage (or
docker-proxy). Detecting other services in the docker swarm is with the
current implementation not possible.

This commit fixes this by getting the appropriate labels from services
when Docker swarm is configured in the config file. This ensures that
the appropriate labels are gathered from the service definition instead
of the container definiation, thus allowing for automatic service
detection for the entire Docker swarm. Please note that in order for
this to function the homepage (or dockerproxy) should be running on a
manager node. Only the manager node is able to gather all the relevant
service labels.

Fixes: #752, #970, #955, #1255, #1045, #1496
2023-06-05 16:06:14 +02:00
Milo Ivir
f05ac3247d Translated using Weblate (Croatian)
Currently translated at 99.5% (459 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-06-04 17:50:52 +02:00
Nonoss117
7e54b80d73 Translated using Weblate (French)
Currently translated at 100.0% (461 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-06-04 17:50:51 +02:00
Denis Papec
d4fd923be5 Refactored information widgets, improve widget-boxed style
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-06-03 03:01:21 +01:00
Denis Papec
c79d45f91e Add optional boxed styling and error component to information widgets
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-06-03 02:14:38 +01:00
Matteo Bossi
0eab4e7943 Fix Mobile view 2023-06-02 15:46:43 +02:00
Matteo Bossi
28e39e46ae Add queue list 2023-06-02 14:57:27 +02:00
Yıldırım Manisalı
caa1b94fd6 Translated using Weblate (Turkish)
Currently translated at 85.4% (394 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-06-01 13:50:54 +02:00
KaiYi Chang
967fd6817a Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (461 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-31 05:50:39 +02:00
liimee
f3b5d73533 Translated using Weblate (Indonesian)
Currently translated at 3.2% (15 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/
2023-05-29 08:51:30 +02:00
shamoon
18cf4e7d5d Merge pull request #1554 from mscreations/dynamic_env_vars
Enhancement: substitute environment vars in container labels
2023-05-28 23:20:16 -07:00
shamoon
56644ac487 Support env substitution for k8s 2023-05-28 23:03:04 -07:00
Jon
e6d95e29ee Translate environment vars in labels 2023-05-29 01:14:03 -04:00
shamoon
8673548c88 Merge pull request #1552 from benphelps/fix/issue-1415
Fix: Handle k8s widget metrics call fails
2023-05-28 19:57:53 -07:00
shamoon
bd5c10e907 Handle k8s widget metrics call fails 2023-05-28 19:57:39 -07:00
shamoon
2bbe5b04c7 Update bug_report.yml 2023-05-28 19:49:02 -07:00
shamoon
498089a8fa Merge pull request #1551 from benphelps/fix/issue-1547
Fix: Properly encode qbittorrent credentials
2023-05-28 19:47:24 -07:00
shamoon
0a5eb1ae75 Properly encode qbittorrent credentials 2023-05-28 19:46:28 -07:00
shamoon
6dfddf739e Merge pull request #1548 from benphelps/fix/issue-1546
Enhancement: support settings layout as a list
2023-05-28 10:04:57 -07:00
shamoon
febb4cc6d5 Support settings layout as a list 2023-05-28 09:51:44 -07:00
Anonymous
7dfa7412ef Translated using Weblate (Indonesian)
Currently translated at 100.0% (0 of 0 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/
2023-05-28 08:26:01 +02:00
liimee
665ff66217 Added translation using Weblate (Indonesian) 2023-05-28 08:24:37 +02:00
gallegonovato
37d36750de Translated using Weblate (Spanish)
Currently translated at 100.0% (461 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-27 11:50:10 +02:00
shamoon
5850a48ec9 Include right margin on greeting widget
Closes #224

Co-Authored-By: David Moor <dave@ducks-n-tworms.co.uk>
2023-05-26 08:21:02 -07:00
shamoon
1f85da934f Merge pull request #1545 from benphelps/fix/hass-custom-label-support
Fix: support using docker labels for HASS widget custom
2023-05-25 23:20:59 -07:00
shamoon
4948485c50 Support using docker labels for HASS widget custom 2023-05-25 23:15:45 -07:00
Julian Ortlieb
fc668aa9d0 Translated using Weblate (German)
Currently translated at 99.3% (458 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-05-25 11:51:47 +02:00
shamoon
f28284fa77 Merge pull request #1542 from theshaun/support_older_qnap
Correctly use sys_tempc instead of cpu_tempc in QNAP widget
2023-05-24 07:14:51 -07:00
theshaun
cd14dbde58 Correctly use sys_tempc instead of cpu_tempc 2023-05-24 20:59:34 +10:00
Dan
5ee9f46a5a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (461 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-24 06:52:52 +02:00
libook
73db271c87 Translated using Weblate (Chinese (Simplified))
Currently translated at 96.3% (444 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-24 06:52:52 +02:00
Nonoss117
864470b53c Translated using Weblate (French)
Currently translated at 100.0% (461 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-24 06:52:51 +02:00
shamoon
1b984abd91 Fix error port display, again 2023-05-23 03:37:56 -07:00
Anonymous
b960813ed9 Translated using Weblate (Slovenian)
Currently translated at 97.6% (450 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-05-22 19:52:52 +02:00
Anonymous
d6363d4636 Translated using Weblate (Greek)
Currently translated at 31.2% (144 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-22 19:52:52 +02:00
Anonymous
42681d8884 Translated using Weblate (Korean)
Currently translated at 37.7% (174 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-05-22 19:52:51 +02:00
Anonymous
7da1fd3a41 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-05-22 19:52:51 +02:00
Anonymous
1de449f925 Translated using Weblate (Thai)
Currently translated at 10.1% (47 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-05-22 19:52:51 +02:00
Anonymous
e4a3570a77 Translated using Weblate (Latvian)
Currently translated at 25.8% (119 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-05-22 19:52:50 +02:00
Anonymous
0e83953ac7 Translated using Weblate (Japanese)
Currently translated at 81.1% (374 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-05-22 19:52:50 +02:00
Anonymous
8e548fb249 Translated using Weblate (Ukrainian)
Currently translated at 97.6% (450 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-22 19:52:50 +02:00
Anonymous
c3168df04b Translated using Weblate (Esperanto)
Currently translated at 31.6% (146 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-05-22 19:52:49 +02:00
Anonymous
4b915467f2 Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-05-22 19:52:49 +02:00
Anonymous
4f53c1e4e4 Translated using Weblate (Malay)
Currently translated at 54.6% (252 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-05-22 19:52:49 +02:00
Anonymous
f3f946a649 Translated using Weblate (Danish)
Currently translated at 42.7% (197 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-05-22 19:52:48 +02:00
Anonymous
d633f70c45 Translated using Weblate (Czech)
Currently translated at 96.5% (445 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-22 19:52:48 +02:00
Anonymous
c893a6e829 Translated using Weblate (Arabic)
Currently translated at 56.6% (261 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-05-22 19:52:48 +02:00
Anonymous
ae55441f44 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-05-22 19:52:47 +02:00
Anonymous
d59dce8a36 Translated using Weblate (Turkish)
Currently translated at 68.5% (316 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-05-22 19:52:47 +02:00
Anonymous
fa3a438d30 Translated using Weblate (Bulgarian)
Currently translated at 9.9% (46 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-05-22 19:52:47 +02:00
Anonymous
c9a69c0c77 Translated using Weblate (Telugu)
Currently translated at 46.8% (216 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-05-22 19:52:46 +02:00
Anonymous
07cb004ecb Translated using Weblate (Finnish)
Currently translated at 38.6% (178 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-05-22 19:52:46 +02:00
Anonymous
678ddf9c11 Translated using Weblate (Yue (Traditional))
Currently translated at 25.5% (118 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-05-22 19:52:46 +02:00
Anonymous
618b006350 Translated using Weblate (Portuguese (Brazil))
Currently translated at 87.8% (405 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-05-22 19:52:45 +02:00
Anonymous
60c423f7cf Translated using Weblate (Romanian)
Currently translated at 32.7% (151 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-05-22 19:52:45 +02:00
Anonymous
bccef494d7 Translated using Weblate (Hebrew)
Currently translated at 21.9% (101 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-05-22 19:52:45 +02:00
Anonymous
4539ef7bb0 Translated using Weblate (Hungarian)
Currently translated at 23.4% (108 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-05-22 19:52:44 +02:00
Anonymous
abb9a6f66f Translated using Weblate (Croatian)
Currently translated at 93.9% (433 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-05-22 19:52:44 +02:00
Anonymous
98e5ceb93a Translated using Weblate (Swedish)
Currently translated at 28.4% (131 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-05-22 19:52:44 +02:00
Anonymous
fa5b4f9ebe Translated using Weblate (Polish)
Currently translated at 81.3% (375 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-05-22 19:52:43 +02:00
Anonymous
06b24907b9 Translated using Weblate (Catalan)
Currently translated at 56.6% (261 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-05-22 19:52:43 +02:00
Anonymous
2f9bec8544 Translated using Weblate (Chinese (Traditional))
Currently translated at 95.6% (441 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-22 19:52:43 +02:00
Anonymous
43a3a71f72 Translated using Weblate (Dutch)
Currently translated at 52.4% (242 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-05-22 19:52:42 +02:00
Anonymous
8261a504e4 Translated using Weblate (Vietnamese)
Currently translated at 9.5% (44 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-05-22 19:52:42 +02:00
Anonymous
a0c29cdd05 Translated using Weblate (Norwegian Bokmål)
Currently translated at 17.1% (79 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-05-22 19:52:42 +02:00
Anonymous
4c6cf7da18 Translated using Weblate (Italian)
Currently translated at 62.2% (287 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-05-22 19:52:41 +02:00
Anonymous
8cf783bf43 Translated using Weblate (Chinese (Simplified))
Currently translated at 96.3% (444 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-22 19:52:41 +02:00
Anonymous
55732ccac6 Translated using Weblate (Russian)
Currently translated at 89.8% (414 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-05-22 19:52:41 +02:00
Anonymous
33bd39301e Translated using Weblate (Portuguese)
Currently translated at 87.8% (405 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-05-22 19:52:41 +02:00
Anonymous
200706d612 Translated using Weblate (French)
Currently translated at 98.9% (456 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-22 19:52:40 +02:00
Anonymous
891f770d1e Translated using Weblate (Spanish)
Currently translated at 98.9% (456 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-22 19:52:40 +02:00
Anonymous
7b8c84df5a Translated using Weblate (German)
Currently translated at 96.3% (444 of 461 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-05-22 19:52:39 +02:00
Hosted Weblate
f29b137a9e Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/
2023-05-22 19:51:09 +02:00
Nonoss117
e97bdb9ec4 Translated using Weblate (French)
Currently translated at 100.0% (457 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-22 19:51:05 +02:00
gallegonovato
1291707e2f Translated using Weblate (Spanish)
Currently translated at 100.0% (457 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-22 19:51:05 +02:00
Georges-Antoine Assi
cdd7b2d44b Enhanced glances widget (#1534)
* Enhanced glances widget (resource match)

* Make widget clickable + cleanup helperrs

* Prevent unused glances API calls

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-05-22 10:50:58 -07:00
Anonymous
3bc750bfe7 Translated using Weblate (Slovenian)
Currently translated at 98.6% (451 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-05-21 18:14:14 +02:00
Anonymous
a5b041eb6f Translated using Weblate (Greek)
Currently translated at 31.5% (144 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-21 18:14:14 +02:00
Anonymous
f3dad538f3 Translated using Weblate (Korean)
Currently translated at 38.0% (174 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-05-21 18:14:13 +02:00
Anonymous
f61d8fb924 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-05-21 18:14:13 +02:00
Anonymous
e3fd1dfc49 Translated using Weblate (Thai)
Currently translated at 10.2% (47 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-05-21 18:14:13 +02:00
Anonymous
d00a6efc41 Translated using Weblate (Latvian)
Currently translated at 26.0% (119 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-05-21 18:14:12 +02:00
Anonymous
73b5175294 Translated using Weblate (Japanese)
Currently translated at 81.8% (374 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-05-21 18:14:12 +02:00
Anonymous
94540f828b Translated using Weblate (Ukrainian)
Currently translated at 98.6% (451 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-21 18:14:12 +02:00
Anonymous
940bb01c12 Translated using Weblate (Esperanto)
Currently translated at 32.1% (147 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-05-21 18:14:12 +02:00
Anonymous
5d2d81d0dd Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-05-21 18:14:11 +02:00
Anonymous
48f2d4348d Translated using Weblate (Malay)
Currently translated at 55.3% (253 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-05-21 18:14:11 +02:00
Anonymous
16cf1cba98 Translated using Weblate (Danish)
Currently translated at 43.3% (198 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-05-21 18:14:10 +02:00
Anonymous
982f594040 Translated using Weblate (Czech)
Currently translated at 97.5% (446 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-21 18:14:10 +02:00
Anonymous
ea025cedf0 Translated using Weblate (Arabic)
Currently translated at 57.3% (262 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-05-21 18:14:10 +02:00
Anonymous
70519a53a5 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-05-21 18:14:10 +02:00
Anonymous
551b53e143 Translated using Weblate (Turkish)
Currently translated at 69.3% (317 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-05-21 18:14:09 +02:00
Anonymous
9f75009f42 Translated using Weblate (Bulgarian)
Currently translated at 10.0% (46 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-05-21 18:14:09 +02:00
Anonymous
148710dfd8 Translated using Weblate (Telugu)
Currently translated at 47.4% (217 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-05-21 18:14:08 +02:00
Anonymous
319042ea19 Translated using Weblate (Finnish)
Currently translated at 38.9% (178 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-05-21 18:14:08 +02:00
Anonymous
a9a7a7d6b1 Translated using Weblate (Yue (Traditional))
Currently translated at 25.8% (118 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-05-21 18:14:07 +02:00
Anonymous
0bd639cad8 Translated using Weblate (Portuguese (Brazil))
Currently translated at 88.8% (406 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-05-21 18:14:07 +02:00
Anonymous
febc8eaf73 Translated using Weblate (Romanian)
Currently translated at 33.2% (152 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-05-21 18:14:07 +02:00
Anonymous
268cdcab19 Translated using Weblate (Hebrew)
Currently translated at 22.1% (101 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-05-21 18:14:06 +02:00
Anonymous
1caf6126c8 Translated using Weblate (Hungarian)
Currently translated at 23.6% (108 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-05-21 18:14:06 +02:00
Anonymous
82ae597a23 Translated using Weblate (Croatian)
Currently translated at 94.9% (434 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-05-21 18:14:05 +02:00
Anonymous
be82a83f4d Translated using Weblate (Swedish)
Currently translated at 28.8% (132 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-05-21 18:14:05 +02:00
Anonymous
1e00867697 Translated using Weblate (Polish)
Currently translated at 82.2% (376 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-05-21 18:14:05 +02:00
Anonymous
db030f2e72 Translated using Weblate (Catalan)
Currently translated at 57.3% (262 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-05-21 18:14:04 +02:00
Anonymous
03ed353762 Translated using Weblate (Chinese (Traditional))
Currently translated at 96.7% (442 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-21 18:14:03 +02:00
Anonymous
d63d62885b Translated using Weblate (Dutch)
Currently translated at 52.9% (242 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-05-21 18:14:03 +02:00
Anonymous
b23ba74cce Translated using Weblate (Vietnamese)
Currently translated at 9.6% (44 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-05-21 18:14:03 +02:00
Anonymous
4150158b8d Translated using Weblate (Norwegian Bokmål)
Currently translated at 17.2% (79 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-05-21 18:14:02 +02:00
Anonymous
fde331a2c2 Translated using Weblate (Italian)
Currently translated at 63.0% (288 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-05-21 18:14:02 +02:00
Anonymous
e40e995f66 Translated using Weblate (Chinese (Simplified))
Currently translated at 97.3% (445 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-21 18:14:01 +02:00
Anonymous
f706e4eccd Translated using Weblate (Russian)
Currently translated at 90.8% (415 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-05-21 18:14:01 +02:00
Anonymous
e5d42a65c7 Translated using Weblate (Portuguese)
Currently translated at 88.8% (406 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-05-21 18:14:01 +02:00
Anonymous
9a5d9f241a Translated using Weblate (French)
Currently translated at 98.6% (451 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-21 18:14:00 +02:00
Anonymous
b3ecf152f0 Translated using Weblate (Spanish)
Currently translated at 98.4% (450 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-21 18:14:00 +02:00
Anonymous
715d3abdb5 Translated using Weblate (German)
Currently translated at 97.3% (445 of 457 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-05-21 18:13:59 +02:00
Salvatore Gabriele La Greca
36eaaafd88 Added PiAlert widget [WIP] (#1493)
* Added PiAlert widget

* pialert: comments clean

* Syntax changes to piAlert widget

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-05-21 09:12:14 -07:00
Anonymous
c8eccc71a4 Translated using Weblate (Slovenian)
Currently translated at 99.5% (451 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-05-21 17:16:10 +02:00
Anonymous
abc4735b8f Translated using Weblate (Greek)
Currently translated at 31.7% (144 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-21 17:16:10 +02:00
Anonymous
2fe14dbd9a Translated using Weblate (Korean)
Currently translated at 38.4% (174 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-05-21 17:16:10 +02:00
Anonymous
1b9e0dbf41 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-05-21 17:16:09 +02:00
Anonymous
edbfb857f1 Translated using Weblate (Thai)
Currently translated at 10.3% (47 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-05-21 17:16:09 +02:00
Anonymous
a94fe86fb9 Translated using Weblate (Latvian)
Currently translated at 26.2% (119 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-05-21 17:16:08 +02:00
Anonymous
4f5d6ed099 Translated using Weblate (Japanese)
Currently translated at 82.5% (374 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-05-21 17:16:08 +02:00
Anonymous
e964dd5f74 Translated using Weblate (Ukrainian)
Currently translated at 99.5% (451 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-21 17:16:08 +02:00
Anonymous
40c18f2a46 Translated using Weblate (Esperanto)
Currently translated at 32.4% (147 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-05-21 17:16:07 +02:00
Anonymous
defae64b65 Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-05-21 17:16:07 +02:00
Anonymous
7a7b695c6b Translated using Weblate (Malay)
Currently translated at 55.8% (253 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-05-21 17:16:07 +02:00
Anonymous
31178f2212 Translated using Weblate (Danish)
Currently translated at 43.7% (198 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-05-21 17:16:06 +02:00
Anonymous
2b8a120a9b Translated using Weblate (Czech)
Currently translated at 98.4% (446 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-21 17:16:06 +02:00
Anonymous
3742fee9c0 Translated using Weblate (Arabic)
Currently translated at 57.8% (262 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-05-21 17:16:06 +02:00
Anonymous
a8f48920a4 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-05-21 17:16:05 +02:00
Anonymous
79a4130e1a Translated using Weblate (Turkish)
Currently translated at 69.9% (317 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-05-21 17:16:05 +02:00
Anonymous
477d48e6c7 Translated using Weblate (Bulgarian)
Currently translated at 10.1% (46 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-05-21 17:16:04 +02:00
Anonymous
fcf3499098 Translated using Weblate (Telugu)
Currently translated at 47.9% (217 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-05-21 17:16:04 +02:00
Anonymous
b3d4397961 Translated using Weblate (Finnish)
Currently translated at 39.2% (178 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-05-21 17:16:04 +02:00
Anonymous
a6e3d28cc3 Translated using Weblate (Yue (Traditional))
Currently translated at 26.0% (118 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-05-21 17:16:03 +02:00
Anonymous
c1c9e70372 Translated using Weblate (Portuguese (Brazil))
Currently translated at 89.6% (406 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-05-21 17:16:03 +02:00
Anonymous
b027772787 Translated using Weblate (Romanian)
Currently translated at 33.5% (152 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-05-21 17:16:02 +02:00
Anonymous
99c6e6c43e Translated using Weblate (Hebrew)
Currently translated at 22.2% (101 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-05-21 17:16:02 +02:00
Anonymous
1d48cf4fdc Translated using Weblate (Hungarian)
Currently translated at 23.8% (108 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-05-21 17:16:02 +02:00
Anonymous
81d4c86368 Translated using Weblate (Croatian)
Currently translated at 95.8% (434 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-05-21 17:16:01 +02:00
Anonymous
4f6afc72fc Translated using Weblate (Swedish)
Currently translated at 29.1% (132 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-05-21 17:16:01 +02:00
Anonymous
269e70a086 Translated using Weblate (Polish)
Currently translated at 83.0% (376 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-05-21 17:16:00 +02:00
Anonymous
675aaba5d4 Translated using Weblate (Catalan)
Currently translated at 57.8% (262 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-05-21 17:16:00 +02:00
Anonymous
30dc155526 Translated using Weblate (Chinese (Traditional))
Currently translated at 97.5% (442 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-21 17:16:00 +02:00
Anonymous
c7a60f5645 Translated using Weblate (Dutch)
Currently translated at 53.4% (242 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-05-21 17:15:59 +02:00
Anonymous
e439c3e5da Translated using Weblate (Vietnamese)
Currently translated at 9.7% (44 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-05-21 17:15:59 +02:00
Anonymous
3a57f9f685 Translated using Weblate (Norwegian Bokmål)
Currently translated at 17.4% (79 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-05-21 17:15:59 +02:00
Anonymous
4b4537f532 Translated using Weblate (Italian)
Currently translated at 63.5% (288 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-05-21 17:15:58 +02:00
Anonymous
80fe8ef62e Translated using Weblate (Chinese (Simplified))
Currently translated at 98.2% (445 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-21 17:15:58 +02:00
Anonymous
99d859dc08 Translated using Weblate (Russian)
Currently translated at 91.6% (415 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-05-21 17:15:58 +02:00
Anonymous
49b4997245 Translated using Weblate (Portuguese)
Currently translated at 89.6% (406 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-05-21 17:15:57 +02:00
Anonymous
2d9cf1e06a Translated using Weblate (French)
Currently translated at 99.5% (451 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-21 17:15:57 +02:00
Anonymous
ff2177fa5e Translated using Weblate (Spanish)
Currently translated at 99.3% (450 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-21 17:15:57 +02:00
Anonymous
18a597617d Translated using Weblate (German)
Currently translated at 98.2% (445 of 453 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-05-21 17:15:56 +02:00
Smexhy
5443d17bf3 Translated using Weblate (Czech)
Currently translated at 98.8% (446 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-21 17:13:48 +02:00
KaiYi Chang
d31129ee03 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.0% (442 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-21 17:13:48 +02:00
Shaun Walker
cf7c68261f Add support for QNAP instances with multiple volumes (#1528)
* Add support for pfSense API

* Fix linting issues

* remove a line

* rename cpu to load in default block

* Re-order container blocks to ensure defaults show

* clean up

* Add support for multiple volumes as well as defining the volume you want to track

* QNAP widget syntax corrections, translate invalid

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-05-21 08:13:40 -07:00
shamoon
a59e8e6efd Merge pull request #1529 from benphelps/fix/issue-1527
Fix: Add try catch for ping
2023-05-20 09:49:36 -07:00
shamoon
f1a33f10ed Add try catch for ping 2023-05-20 09:48:18 -07:00
Antonis Triantafyllopoulos
cead87dcd0 Translated using Weblate (Greek)
Currently translated at 31.9% (144 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-20 14:51:01 +02:00
gallegonovato
cb7abb62b8 Translated using Weblate (Spanish)
Currently translated at 99.7% (450 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-20 14:51:00 +02:00
shamoon
7e005e51cc Fix background filters outside viewport 2023-05-20 03:17:47 -07:00
shamoon
1ed1ce4001 Merge pull request #1526 from benphelps/fix/issue-1524
Fix: background filters are not full height
2023-05-20 02:44:12 -07:00
shamoon
8a92d92b22 Make background wrapper full height 2023-05-20 02:43:07 -07:00
shamoon
6046f7911e Merge pull request #1519 from theshaun/main
QNAP plugin, fix key expiry issue
2023-05-19 13:28:23 -07:00
shamoon
a9d3873579 QNAP widget make sure re-auth status = 200 2023-05-19 12:45:32 -07:00
theshaun
d402be2b78 clean up 2023-05-19 12:45:32 -07:00
theshaun
2ca46b595b Fix issue with key expiring and not updating correctly 2023-05-19 12:45:32 -07:00
theshaun
db2481cf0e Re-order container blocks to ensure defaults show 2023-05-19 12:45:32 -07:00
theshaun
865206802c rename cpu to load in default block 2023-05-19 12:45:32 -07:00
theshaun
668779ede1 remove a line 2023-05-19 12:45:32 -07:00
theshaun
1ca2407256 Fix linting issues 2023-05-19 12:45:32 -07:00
theshaun
3240b7a169 Add support for pfSense API 2023-05-19 12:45:32 -07:00
shamoon
4aeb3882af Merge pull request #1522 from benphelps/fix/issue-1521
Fix: Include backdrop classes in css build
2023-05-19 12:32:52 -07:00
shamoon
54ccd7ffb0 Include backdrop classes in css build 2023-05-19 12:32:18 -07:00
Andrej Kralj
411e24ef94 Translated using Weblate (Slovenian)
Currently translated at 100.0% (451 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-05-19 08:48:25 +02:00
Antonis Triantafyllopoulos
5fecf9baa7 Translated using Weblate (Greek)
Currently translated at 31.4% (142 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-19 08:48:24 +02:00
Dan
bdcd7835ac Translated using Weblate (Ukrainian)
Currently translated at 100.0% (451 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-19 08:48:24 +02:00
Smexhy
c023b414c1 Translated using Weblate (Czech)
Currently translated at 98.8% (446 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-19 08:48:23 +02:00
Nonoss117
d3f85bf628 Translated using Weblate (French)
Currently translated at 100.0% (451 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-19 08:48:23 +02:00
shamoon
ba21ae60d7 url error log 2023-05-18 00:26:32 -07:00
shamoon
328875d0f5 Merge pull request #1513 from davidosomething/fix-error-url
error hostname:port/path was missing colon
2023-05-17 18:05:03 -07:00
David O'Trakoun
4f3396cf32 error hostname:port/path was missing colon 2023-05-17 20:03:08 -04:00
shamoon
be7aa5835a Remove visiblechildren slice
Closes #1512
2023-05-17 14:23:03 -07:00
shamoon
d87c5e100d Update container.jsx 2023-05-17 13:21:50 -07:00
shamoon
ec25267235 Merge pull request #1511 from brunoccr/main
Fix Slice error on container.jsx
2023-05-17 13:21:32 -07:00
Bruno Rossetto
cc36ad19ee Fix Slice error on container.jsx 2023-05-17 17:02:46 -03:00
Anonymous
1091447b8b Translated using Weblate (Slovenian)
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-05-17 19:41:38 +02:00
Anonymous
143d684f72 Translated using Weblate (Greek)
Currently translated at 30.5% (138 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-05-17 19:41:38 +02:00
Anonymous
38ee11543a Translated using Weblate (Korean)
Currently translated at 38.5% (174 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-05-17 19:41:37 +02:00
Anonymous
f1e67f7504 Translated using Weblate (Slovak)
Currently translated at 1.9% (9 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-05-17 19:41:37 +02:00
Anonymous
43e7f9dbc0 Translated using Weblate (Thai)
Currently translated at 10.4% (47 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-05-17 19:41:36 +02:00
Anonymous
68fe6afc21 Translated using Weblate (Latvian)
Currently translated at 26.3% (119 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-05-17 19:41:36 +02:00
Anonymous
5aaa50bae3 Translated using Weblate (Japanese)
Currently translated at 82.9% (374 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-05-17 19:41:35 +02:00
Anonymous
2896b6f4ed Translated using Weblate (Ukrainian)
Currently translated at 98.0% (442 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-05-17 19:41:35 +02:00
Anonymous
dd8e21632e Translated using Weblate (Esperanto)
Currently translated at 32.5% (147 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-05-17 19:41:35 +02:00
Anonymous
b76c132953 Translated using Weblate (Hindi)
Currently translated at 1.9% (9 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-05-17 19:41:34 +02:00
Anonymous
193338fb00 Translated using Weblate (Malay)
Currently translated at 56.0% (253 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-05-17 19:41:34 +02:00
Anonymous
5478555509 Translated using Weblate (Danish)
Currently translated at 43.9% (198 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-05-17 19:41:33 +02:00
Anonymous
9354faf485 Translated using Weblate (Czech)
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-05-17 19:41:33 +02:00
Anonymous
410d96ef03 Translated using Weblate (Arabic)
Currently translated at 58.0% (262 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-05-17 19:41:33 +02:00
Anonymous
7a48323558 Translated using Weblate (Serbian)
Currently translated at 1.9% (9 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-05-17 19:41:32 +02:00
Anonymous
b8e7979719 Translated using Weblate (Turkish)
Currently translated at 70.2% (317 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-05-17 19:41:32 +02:00
Anonymous
bf83acf066 Translated using Weblate (Bulgarian)
Currently translated at 10.1% (46 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-05-17 19:41:31 +02:00
Anonymous
a381da6a14 Translated using Weblate (Telugu)
Currently translated at 48.1% (217 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-05-17 19:41:31 +02:00
Anonymous
4bbca70c92 Translated using Weblate (Finnish)
Currently translated at 39.4% (178 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-05-17 19:41:30 +02:00
Anonymous
1fff750f6c Translated using Weblate (Yue (Traditional))
Currently translated at 26.1% (118 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-05-17 19:41:30 +02:00
Anonymous
4963eb4ec0 Translated using Weblate (Portuguese (Brazil))
Currently translated at 90.0% (406 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-05-17 19:41:30 +02:00
Anonymous
fcbeff9f2e Translated using Weblate (Romanian)
Currently translated at 33.7% (152 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-05-17 19:41:29 +02:00
Anonymous
f26ea08da8 Translated using Weblate (Hebrew)
Currently translated at 22.3% (101 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-05-17 19:41:29 +02:00
Anonymous
fb06c9d51c Translated using Weblate (Hungarian)
Currently translated at 23.9% (108 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-05-17 19:41:28 +02:00
Anonymous
e03c1ef990 Translated using Weblate (Croatian)
Currently translated at 96.2% (434 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-05-17 19:41:28 +02:00
Anonymous
c5465f8e42 Translated using Weblate (Swedish)
Currently translated at 29.2% (132 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-05-17 19:41:27 +02:00
Anonymous
7102f1bd67 Translated using Weblate (Polish)
Currently translated at 83.3% (376 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-05-17 19:41:27 +02:00
Anonymous
b0d1449481 Translated using Weblate (Catalan)
Currently translated at 58.0% (262 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-05-17 19:41:27 +02:00
Anonymous
d7191477d1 Translated using Weblate (Chinese (Traditional))
Currently translated at 92.0% (415 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-05-17 19:41:26 +02:00
Anonymous
42069d9502 Translated using Weblate (Dutch)
Currently translated at 53.6% (242 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-05-17 19:41:25 +02:00
Anonymous
65aaacd3d1 Translated using Weblate (Vietnamese)
Currently translated at 9.7% (44 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-05-17 19:41:25 +02:00
Anonymous
59e801e6cc Translated using Weblate (Norwegian Bokmål)
Currently translated at 17.5% (79 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-05-17 19:41:25 +02:00
Anonymous
cb87a0f45c Translated using Weblate (Italian)
Currently translated at 63.8% (288 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-05-17 19:41:24 +02:00
Anonymous
31ae68567e Translated using Weblate (Chinese (Simplified))
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-17 19:41:24 +02:00
Anonymous
41d04de4ff Translated using Weblate (Russian)
Currently translated at 92.0% (415 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-05-17 19:41:23 +02:00
Anonymous
03abda2242 Translated using Weblate (Portuguese)
Currently translated at 90.0% (406 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-05-17 19:41:23 +02:00
Anonymous
f30abd58e8 Translated using Weblate (French)
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-05-17 19:41:22 +02:00
Anonymous
b0f53361fc Translated using Weblate (Spanish)
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-05-17 19:41:22 +02:00
Anonymous
583caf9d9e Translated using Weblate (German)
Currently translated at 98.6% (445 of 451 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-05-17 19:41:22 +02:00
mspzyzh
dabf2b25e7 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (445 of 445 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-05-17 19:39:22 +02:00
81 changed files with 2623 additions and 574 deletions

View File

@@ -1,7 +1,7 @@
name: Bug report
description: Create a report to help us improve
title: "[Bug] "
labels: ["bug"]
labels: ["bug, unconfirmed"]
body:
- type: markdown
attributes:

View File

@@ -179,18 +179,22 @@
"sonarr": {
"wanted": "مطلوب",
"queued": "في الإنتظار",
"series": "سلسلة"
"series": "سلسلة",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "مطلوب",
"missing": "مفقود",
"queued": "في الإنتظار",
"movies": "أفلام"
"movies": "أفلام",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "مطلوب",
"queued": "في الإنتظار",
"albums": "ألبومات"
"artists": "Artists"
},
"readarr": {
"wanted": "مطلوب",
@@ -296,12 +300,16 @@
},
"glances": {
"cpu": "معالج",
"mem": "الذاكرة",
"wait": "الرجاء الإنتظار",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "مفضلة",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -117,18 +117,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"queued": "Queued",
"movies": "Movies",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"charge_power": "Charger",
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -26,7 +26,9 @@
"sonarr": {
"wanted": "Volgut",
"queued": "En cua",
"series": "Sèries"
"series": "Sèries",
"queue": "Queue",
"unknown": "Unknown"
},
"speedtest": {
"ping": "Ping",
@@ -99,7 +101,9 @@
"wanted": "Volgut",
"queued": "En cua",
"movies": "Pel·lícules",
"missing": "Faltant"
"missing": "Faltant",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Volgut",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Volgut",
"queued": "En cua",
"albums": "Àlbums"
"artists": "Artists"
},
"adguard": {
"queries": "Consultes",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Processador",
"mem": "Memòria",
"wait": "Si us plau, espereu",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total d'observats",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -30,12 +30,12 @@
"placeholder": "Hledat…"
},
"resources": {
"cpu": "PROC",
"cpu": "CPU",
"total": "Celkem",
"free": "Volné",
"used": "Využité",
"load": "Zatížení",
"mem": "PAM",
"mem": "RAM",
"max": "Max.",
"uptime": "BĚŽÍ",
"months": "měs.",
@@ -64,8 +64,8 @@
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "PAM",
"cpu": "PROC",
"mem": "RAM",
"cpu": "CPU",
"offline": "Offline",
"error": "Chyba",
"unknown": "Neznámý",
@@ -133,18 +133,22 @@
"sonarr": {
"wanted": "Hledané",
"queued": "Ve frontě",
"series": "Seriály"
"series": "Seriály",
"unknown": "Unknown",
"queue": "Queue"
},
"radarr": {
"wanted": "Hledané",
"missing": "Chybějící",
"queued": "Ve frontě",
"movies": "Filmy"
"movies": "Filmy",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Hledané",
"queued": "Ve frontě",
"albums": "Alba"
"artists": "Artists"
},
"readarr": {
"wanted": "Hledané",
@@ -175,7 +179,7 @@
"queries": "Dotazy",
"blocked": "Blokováno",
"gravity": "Gravity",
"blocked_percent": "Blokováno %"
"blocked_percent": "Blokováno"
},
"adguard": {
"queries": "Dotazy",
@@ -301,19 +305,23 @@
"failedLoginsLast24H": "Neúspěšná přihlášení (24h)"
},
"proxmox": {
"mem": "PAM",
"cpu": "PROC",
"mem": "RAM",
"cpu": "CPU",
"lxc": "LXC",
"vms": "Virtuální Stroje"
},
"glances": {
"cpu": "PROC",
"mem": "PAM",
"cpu": "CPU",
"wait": "Prosím počkejte",
"temp": "TEPLOTA",
"uptime": "BĚŽÍ",
"days": "d",
"hours": "h"
"hours": "h",
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load",
"warn": "Warn"
},
"quicklaunch": {
"bookmark": "Záložka",
@@ -324,8 +332,8 @@
"url": "URL"
},
"homebridge": {
"update_available": "Dostupná aktualizace",
"up_to_date": "Aktuální",
"update_available": "Dostupná",
"up_to_date": "Žádné",
"available_update": "Systém",
"updates": "Aktualizace",
"child_bridges": "Podřízené můstky",
@@ -369,7 +377,7 @@
"ping": "Odezva"
},
"scrutiny": {
"passed": "Přijato",
"passed": "Úspěšné",
"failed": "Neúspěšné",
"unknown": "Neznámé"
},
@@ -461,7 +469,7 @@
"proxmoxbackupserver": {
"datastore_usage": "Datové úložiště",
"failed_tasks_24h": "Neúspěšné úlohy 24h",
"cpu_usage": "PROC",
"cpu_usage": "CPU",
"memory_usage": "Paměť"
},
"immich": {
@@ -494,7 +502,7 @@
"people": "Lidé"
},
"diskstation": {
"days": "Dni",
"days": "dní",
"uptime": "Doba provozu",
"volumeAvailable": "K dispozici"
},
@@ -604,7 +612,9 @@
"memUsage": "Využití paměti",
"systemTempC": "Teplota systému",
"poolUsage": "Využití fondu",
"cpuUsage": "Využití procesoru"
"cpuUsage": "Využití procesoru",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Prům. zatížení",
@@ -620,5 +630,19 @@
"upstreams": "Odesílání dat",
"requests": "Aktuální požadavky",
"requests_failed": "Selhavší požadavky"
},
"evcc": {
"watt_hour": "Wh",
"pv_power": "Produkce",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -9,12 +9,14 @@
"queued": "I Kø",
"movies": "Film",
"wanted": "Ønskede",
"missing": "Mangler"
"missing": "Mangler",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Ønsket",
"queued": "I Kø",
"albums": "Albums"
"artists": "Artists"
},
"jellyseerr": {
"available": "Tilgængelig",
@@ -68,12 +70,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "RAM",
"wait": "Vent venligst",
"uptime": "UP",
"days": "d",
"hours": "h",
"temp": "TEMP"
"temp": "TEMP",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"wmo": {
"1-day": "Hovedsageligt solrigt",
@@ -260,7 +266,9 @@
"sonarr": {
"wanted": "Ønsket",
"queued": "I Kø",
"series": "Serier"
"series": "Serier",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Ønskede",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Gesucht",
"queued": "In Warteschlange",
"series": "Serien"
"series": "Serien",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Gesucht",
"queued": "In Warteschlange",
"movies": "Filme",
"missing": "Fehlt"
"missing": "Fehlt",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Gesucht",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Gesucht",
"queued": "In Warteschlange",
"albums": "Alben"
"artists": "Artists"
},
"adguard": {
"queries": "Anfragen",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Prozessor",
"mem": "RAM",
"wait": "Bitte warten",
"temp": "TEMP",
"uptime": "UP",
"days": "T",
"hours": "S"
"hours": "S",
"load": "Auslastung",
"warn": "Warnung",
"total": "Gesamt",
"free": "Frei",
"used": "Verwendet"
},
"changedetectionio": {
"totalObserved": "Gesamt beobachtet",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Nutzung",
"memUsage": "MEM Nutzung",
"systemTempC": "System Temp",
"poolUsage": "Pool Nutzung"
"poolUsage": "Pool Nutzung",
"volumeUsage": "Volume Usage",
"invalid": "Ungültig"
},
"pfsense": {
"load": "Durchschnittliche Last",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Aktuelle Anfragen",
"requests_failed": "Fehlgeschlagene Anfragen"
},
"evcc": {
"watt_hour": "Wh",
"pv_power": "Produktion",
"battery_soc": "Batterie",
"grid_power": "Grid",
"home_power": "Verbrauch",
"charge_power": "Ladegerät"
},
"pialert": {
"total": "Gesamt",
"connected": "Verbunden",
"new_devices": "Neue Geräte",
"down_alerts": "Down Alarme"
}
}

View File

@@ -159,21 +159,21 @@
"diffsDetected": "Εντοπίστηκαν διαφορές"
},
"tautulli": {
"playing": "Παίζει",
"transcoding": "Διακωδικοποίηση",
"playing": "Αναπαράγει",
"transcoding": "Μετακωδικοποίηση",
"bitrate": "Ρυθμός bit",
"no_active": "Δεν υπάρχουν ενεργές ροές"
},
"nzbget": {
"rate": "βαθμός",
"rate": "Ρυθμός",
"remaining": "Υπόλοιπο",
"downloaded": "Κατεβασμένο"
},
"plex": {
"streams": "Ενεργά Streams",
"streams": "Ενεργές Ροές",
"movies": "Ταινίες",
"tv": "Σειρές",
"albums": "Δίσκοι"
"tv": "Τηλεοπτικές εκπομπές",
"albums": "Άλμπουμ"
},
"sabnzbd": {
"rate": "Βαθμός",
@@ -199,14 +199,16 @@
},
"deluge": {
"download": "Κατέβασμα",
"upload": "Φόρτωση",
"upload": "Ανέβασμα",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"series": "Σειρές",
"wanted": "Επιθυμούντε",
"queued": "Σε σειρά"
"queued": "Σε σειρά",
"queue": "Queue",
"unknown": "Unknown"
},
"downloadstation": {
"download": "Μεταφόρτωση",
@@ -218,12 +220,14 @@
"wanted": "Επιθυμούντε",
"missing": "Απουσιάζει",
"queued": "Σε σειρά",
"movies": "Ταινίες"
"movies": "Ταινίες",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Θέλετε",
"queued": "Στη σειρά",
"albums": "Δίσκοι"
"artists": "Artists"
},
"readarr": {
"wanted": "Θέλετε",
@@ -355,12 +359,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "Χρήση επεξεργαστή",
"memUsage": "Χρήση μνήμης",
"systemTempC": "Θερμοκρασία συστήματος",
"poolUsage": "Χρήση πλειάδας"
"poolUsage": "Χρήση πισίνας",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -618,7 +628,21 @@
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
"requests": "Τρέχοντα αιτήματα",
"requests_failed": "Αποτυχημένα αιτήματα"
},
"evcc": {
"watt_hour": "Wh",
"pv_power": "Παραγωγή",
"battery_soc": "Μπαταρία",
"grid_power": "Πλέγμα",
"home_power": "Κατανάλωση",
"charge_power": "Φορτιστής"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -175,7 +175,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"deluge": {
"download": "Download",
@@ -192,18 +194,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -230,6 +236,12 @@
"approved": "Approved",
"available": "Available"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
@@ -349,10 +361,14 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"load": "Load",
"wait": "Please wait",
"temp": "TEMP",
"warn": "Warn",
"uptime": "UP",
"total": "Total",
"free": "Free",
"used": "Used",
"days": "d",
"hours": "h"
},

View File

@@ -131,18 +131,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Serio"
"series": "Serio",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Filmoj"
"movies": "Filmoj",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albumoj"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -252,12 +256,16 @@
},
"glances": {
"cpu": "Ĉefprocesoro",
"mem": "Memoro",
"wait": "Bonvolu atendi",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Buscando",
"queued": "En cola",
"series": "Series"
"series": "Series",
"queue": "Poner a la cola",
"unknown": "Desconocido"
},
"radarr": {
"wanted": "Buscando",
"queued": "En cola",
"movies": "Películas",
"missing": "Faltan"
"missing": "Faltan",
"queue": "Poner a la cola",
"unknown": "Desconocido"
},
"readarr": {
"wanted": "Buscando",
@@ -173,7 +177,7 @@
"lidarr": {
"queued": "En cola",
"wanted": "Buscando",
"albums": "Álbumes"
"artists": "Artistas"
},
"adguard": {
"queries": "Consultas",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Procesador",
"mem": "Memoria",
"wait": "Espera por favor",
"temp": "TEMPORAL",
"uptime": "ARRIBA",
"days": "Días",
"hours": "Horas"
"hours": "Horas",
"load": "Cargar",
"warn": "Advertir",
"total": "Total",
"free": "Libre",
"used": "Utilizado"
},
"changedetectionio": {
"totalObserved": "Total Observados",
@@ -604,7 +612,9 @@
"cpuUsage": "Uso de la Cpu",
"memUsage": "Uso de la memoria",
"systemTempC": "Temperatura del sistema",
"poolUsage": "Comprobación del uso del grupo de memoria"
"poolUsage": "Comprobación del uso del grupo de memoria",
"volumeUsage": "Volumen utilizado",
"invalid": "No válido"
},
"pfsense": {
"load": "Promedio de carga",
@@ -620,5 +630,19 @@
"upstreams": "Upstream (desarrollo de software)",
"requests": "Peticiones actuales",
"requests_failed": "Peticiones fallidas"
},
"evcc": {
"pv_power": "Producción",
"battery_soc": "Batería",
"grid_power": "Red",
"home_power": "Consumo",
"charge_power": "Cargador",
"watt_hour": "vatio-hora (Wh)"
},
"pialert": {
"total": "Total",
"connected": "Conectado",
"new_devices": "Nuevos dispositivos",
"down_alerts": "Alertas"
}
}

View File

@@ -94,18 +94,22 @@
"sonarr": {
"wanted": "Haluttu",
"queued": "Jonossa",
"series": "Sarja"
"series": "Sarja",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Haluttu",
"queued": "Jonossa",
"movies": "Elokuvia",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Haluttu",
"queued": "Jonossa",
"albums": "Albumeja"
"artists": "Artists"
},
"readarr": {
"wanted": "Haluttu",
@@ -235,11 +239,15 @@
"glances": {
"wait": "Please wait",
"cpu": "CPU",
"mem": "MEM",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"watt_hour": "Wh",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Demande",
"queued": "Attente",
"series": "Séries"
"series": "Séries",
"queue": "Attente",
"unknown": "Inconnu"
},
"radarr": {
"wanted": "Demande",
"queued": "Attente",
"movies": "Films",
"missing": "Manquant"
"missing": "Manquant",
"queue": "Attente",
"unknown": "Inconnu"
},
"readarr": {
"wanted": "Demande",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Demandé",
"queued": "En queue",
"albums": "Albums"
"artists": "Artistes"
},
"adguard": {
"queries": "Requêtes",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Cpu",
"mem": "Mém",
"wait": "Merci de patienter",
"temp": "Temp",
"uptime": "Up",
"days": "j",
"hours": "h"
"hours": "h",
"load": "Charge",
"warn": "Alerte",
"total": "Total",
"free": "Libre",
"used": "Utilisé"
},
"changedetectionio": {
"totalObserved": "Total Observé",
@@ -393,7 +401,7 @@
"queue": "À traiter",
"processed": "Traité",
"errored": "En erreur",
"saved": "Economisé"
"saved": "Libéré"
},
"miniflux": {
"read": "Lu",
@@ -604,7 +612,9 @@
"cpuUsage": "Cpu",
"memUsage": "Mém",
"systemTempC": "Temp",
"poolUsage": "Pool"
"poolUsage": "Pool",
"volumeUsage": "Volume",
"invalid": "Invalide"
},
"pfsense": {
"load": "Charge moy.",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Demandes en cours",
"requests_failed": "Demandes échouées"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Batterie",
"grid_power": "Grille",
"home_power": "Consommation",
"charge_power": "Chargeur",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connecté",
"new_devices": "Nouvel Appareil",
"down_alerts": "Alertes"
}
}

View File

@@ -94,18 +94,22 @@
"sonarr": {
"wanted": "מבוקש",
"queued": "בתור",
"series": "סדרות"
"series": "סדרות",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "מבוקש",
"queued": "בתור",
"movies": "סרטים",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "מבוקש",
"queued": "בתור",
"albums": "אלבומים"
"artists": "Artists"
},
"readarr": {
"wanted": "מבוקש",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"warn": "Warn",
"load": "Load",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -155,18 +155,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"overseerr": {
"pending": "Pending",
@@ -242,12 +246,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -125,18 +125,22 @@
"sonarr": {
"wanted": "Zatraženo",
"queued": "U redu čekanja",
"series": "Serije"
"series": "Serije",
"unknown": "Unknown",
"queue": "Queue"
},
"radarr": {
"wanted": "Zatraženo",
"queued": "U redu čekanja",
"movies": "Filmovi",
"missing": "Nedostaje"
"missing": "Nedostaje",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Zatraženo",
"queued": "U redu čekanja",
"albums": "Albumi"
"artists": "Artists"
},
"readarr": {
"wanted": "Zatraženo",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Pričekaj",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"used": "Korišteno",
"load": "Opterećenje",
"warn": "Upozori",
"total": "Ukupno",
"free": "Slobodno"
},
"changedetectionio": {
"totalObserved": "Ukupno promatrano",
@@ -474,7 +482,7 @@
"up": "Aktivne stranice",
"down": "Neaktivne stranice",
"uptime": "Radno vrijeme",
"incident": "Incident",
"incident": "Slučaj",
"m": "min"
},
"komga": {
@@ -604,21 +612,37 @@
"systemTempC": "Temperatura sustava",
"poolUsage": "Korištenje memorijskog skupa",
"cpuUsage": "Korištenje procesora",
"memUsage": "Korištenje memorije"
"memUsage": "Korištenje memorije",
"volumeUsage": "Korištenje jedinice memorije",
"invalid": "Neispravno"
},
"pfsense": {
"load": "Load Avg",
"memory": "Mem Usage",
"wanStatus": "WAN Status",
"load": "Prosječno opterećenje",
"memory": "Korištenje memorije",
"wanStatus": "Stanje WAN-a",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Usage",
"temp": "Temperatura",
"disk": "Korištenje diska",
"wanIP": "WAN IP"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
"upstreams": "Glavne grane",
"requests": "Aktualni zahtjevi",
"requests_failed": "Neuspjeli zahtjevi"
},
"evcc": {
"pv_power": "Proizvodnja",
"battery_soc": "Baterija",
"grid_power": "Raspored",
"home_power": "Potrošnja",
"charge_power": "Punjač",
"watt_hour": "Wh"
},
"pialert": {
"total": "Ukupno",
"connected": "Povezano",
"new_devices": "Novi uređaji",
"down_alerts": "Obavijest o rušenju"
}
}

View File

@@ -31,9 +31,9 @@
"healthy": "Healthy"
},
"lidarr": {
"albums": "Albumok",
"wanted": "Keresett",
"queued": "Sorban áll"
"queued": "Sorban áll",
"artists": "Artists"
},
"readarr": {
"wanted": "Keresett",
@@ -108,13 +108,17 @@
"sonarr": {
"wanted": "Keresett",
"queued": "Sorban áll",
"series": "Sorozat"
"series": "Sorozat",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Keresett",
"queued": "Sorban áll",
"movies": "Filmek",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"ombi": {
"pending": "Függőben",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -0,0 +1,648 @@
{
"nzbget": {
"downloaded": "Downloaded",
"rate": "Rate",
"remaining": "Remaining"
},
"plex": {
"streams": "Active Streams",
"albums": "Albums",
"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"
},
"qnap": {
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"systemTempC": "System Temp",
"invalid": "Invalid"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
},
"ombi": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"jellyseerr": {
"approved": "Approved",
"pending": "Pending",
"available": "Available"
},
"overseerr": {
"approved": "Approved",
"available": "Available",
"pending": "Pending",
"processing": "Processing"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
"blocked_percent": "Blocked %",
"gravity": "Gravity"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
},
"speedtest": {
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
"never": "Never",
"last_seen": "Last Seen",
"now": "Now",
"years": "{{number}}y",
"weeks": "{{number}}w",
"days": "{{number}}d",
"hours": "{{number}}h",
"minutes": "{{number}}m",
"seconds": "{{number}}s",
"ago": "{{value}} Ago"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"traefik": {
"routers": "Routers",
"services": "Services",
"middleware": "Middleware"
},
"npm": {
"disabled": "Disabled",
"enabled": "Enabled",
"total": "Total"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"30days": "30 Days"
},
"prowlarr": {
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"enableIndexers": "Indexers",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
},
"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"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
},
"authentik": {
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)",
"users": "Users"
},
"proxmox": {
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs",
"mem": "MEM"
},
"glances": {
"temp": "TEMP",
"warn": "Warn",
"uptime": "UP",
"total": "Total",
"free": "Free",
"cpu": "CPU",
"load": "Load",
"wait": "Please wait",
"used": "Used",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"wmo": {
"0-night": "Clear",
"0-day": "Sunny",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"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",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light 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",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"down": "Down"
},
"healthchecks": {
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet",
"new": "New",
"up": "Online"
},
"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;)}}"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"hd": "HD"
},
"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": {
"print_status": "Print Status",
"printer_state": "Printer State",
"print_progress": "Progress",
"layers": "Layers"
},
"octoprint": {
"printer_state": "Status",
"temp_bed": "Bed temp",
"job_completion": "Completion",
"temp_tool": "Tool temp"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
},
"pfsense": {
"load": "Load Avg",
"memory": "Mem Usage",
"wanStatus": "WAN Status",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Usage",
"wanIP": "WAN IP"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"videos": "Videos",
"storage": "Storage",
"users": "Users",
"photos": "Photos"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "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": {
"people": "People",
"albums": "Albums",
"photos": "Photos",
"videos": "Videos"
},
"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",
"numfiles": "Files",
"numshares": "Shared Items"
},
"kopia": {
"status": "Status",
"nextrun": "Next Run",
"size": "Size",
"failed": "Failed",
"lastrun": "Last Run"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"ghostfolio": {
"gross_percent_max": "All time",
"gross_percent_today": "Today",
"gross_percent_1y": "One year"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"podcastsDuration": "Duration",
"books": "Books",
"booksDuration": "Duration"
},
"homeassistant": {
"people_home": "People Home",
"lights_on": "Lights On",
"switches_on": "Switches On"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
},
"weather": {
"wait": "Harap tunggu",
"current": "Current Location",
"allow": "Click to allow",
"updating": "Updating"
},
"search": {
"placeholder": "Telusuri…"
},
"unifi": {
"lan_devices": "LAN Devices",
"wlan_devices": "WLAN Devices",
"lan_users": "LAN Users",
"users": "Users",
"uptime": "System Uptime",
"days": "Days",
"wan": "WAN",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Devices",
"wlan_users": "WLAN Users",
"up": "UP",
"down": "DOWN",
"wait": "Please wait",
"empty_data": "Subsystem status unknown"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "MEM",
"cpu": "CPU",
"running": "Running",
"offline": "Offline",
"error": "Error",
"unknown": "Unknown",
"healthy": "Healthy",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial"
},
"freshrss": {
"unread": "Unread",
"subscriptions": "Subscriptions"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"omada": {
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"portainer": {
"running": "Running",
"stopped": "Stopped",
"total": "Total"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"api_error": "API Error",
"information": "Informasi",
"status": "Status",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
},
"resources": {
"cpu": "CPU",
"mem": "MEM",
"total": "Total",
"free": "Free",
"used": "Used",
"load": "Load",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"hours": "h",
"days": "d",
"minutes": "m"
},
"ping": {
"error": "Error",
"ping": "Ping"
},
"emby": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
},
"evcc": {
"pv_power": "Production",
"home_power": "Consumption",
"charge_power": "Charger",
"battery_soc": "Battery",
"grid_power": "Grid",
"watt_hour": "Wh"
},
"flood": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"changedetectionio": {
"totalObserved": "Total Observed",
"diffsDetected": "Diffs Detected"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams"
}
}

View File

@@ -81,13 +81,17 @@
"sonarr": {
"series": "Serie",
"wanted": "Richiesti",
"queued": "In coda"
"queued": "In coda",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Richiesti",
"queued": "In coda",
"movies": "Film",
"missing": "Mancanti"
"missing": "Mancanti",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Richiesti",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Mancanti",
"queued": "In coda",
"albums": "Album"
"artists": "Artists"
},
"adguard": {
"queries": "Interrogazioni",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Attendere prego",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Totale Osservato",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -15,13 +15,17 @@
"transferRate": "レート"
},
"glances": {
"mem": "MEM",
"cpu": "CPU",
"wait": "お待ちください",
"temp": "温度",
"uptime": "UP",
"days": "日",
"hours": "時間"
"hours": "時間",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"autobrr": {
"filters": "フィルター",
@@ -189,18 +193,22 @@
"sonarr": {
"wanted": "募集中",
"queued": "待機中",
"series": "シリーズ"
"series": "シリーズ",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "募集中",
"missing": "不明",
"queued": "キュー",
"movies": "映画"
"movies": "映画",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "募集中",
"queued": "キュー",
"albums": "アルバム"
"artists": "Artists"
},
"readarr": {
"wanted": "募集中",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"up": "Up",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"watt_hour": "Wh",
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -163,18 +163,22 @@
"sonarr": {
"wanted": "요청",
"queued": "대기 중",
"series": "시리즈"
"series": "시리즈",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "요청",
"missing": "빠짐",
"queued": "대기 중",
"movies": "영화"
"movies": "영화",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "요청",
"queued": "대기 중",
"albums": "앨범"
"artists": "Artists"
},
"readarr": {
"wanted": "요청",
@@ -301,12 +305,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"temp": "Temp",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"down_alerts": "Down Alerts",
"new_devices": "New Devices"
}
}

View File

@@ -154,18 +154,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Filmas"
"movies": "Filmas",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albumi"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -290,12 +294,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"uptime": "UP",
"days": "d",
"hours": "h",
"temp": "TEMP"
"temp": "TEMP",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -33,8 +33,8 @@
},
"lidarr": {
"queued": "Dibaris Gilir",
"albums": "Album",
"wanted": "Mahu"
"wanted": "Mahu",
"artists": "Artists"
},
"readarr": {
"wanted": "Mahu",
@@ -66,12 +66,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Sila tunggu",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Tandabuku",
@@ -229,13 +233,17 @@
"sonarr": {
"wanted": "Mahu",
"queued": "Dibaris Gilir",
"series": "Bersiri"
"series": "Bersiri",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Mahu",
"missing": "Hilang",
"queued": "Dibaris Gilir",
"movies": "Filem"
"movies": "Filem",
"queue": "Queue",
"unknown": "Unknown"
},
"bazarr": {
"missingEpisodes": "Episod Yang Hilang",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Ønsket",
"queued": "I kø",
"series": "Serie"
"series": "Serie",
"unknown": "Unknown",
"queue": "Queue"
},
"radarr": {
"wanted": "Ønsket",
"queued": "I kø",
"movies": "Filmer",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Wanted",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"adguard": {
"queries": "Queries",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -82,13 +82,17 @@
"sonarr": {
"wanted": "Gezocht",
"queued": "In de wachtrij",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"movies": "Films",
"wanted": "Gezocht",
"queued": "In de wachtrij",
"missing": "Missend"
"missing": "Missend",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Gezocht",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Gezocht",
"queued": "In de wachtrij",
"albums": "Albums"
"artists": "Artists"
},
"adguard": {
"queries": "Queries",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Totaal waargenomen",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -110,18 +110,22 @@
"sonarr": {
"wanted": "Poszukiwane",
"queued": "W kolejce",
"series": "Seriale"
"series": "Seriale",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Poszukiwane",
"queued": "W kolejce",
"movies": "Filmy",
"missing": "Brakujące"
"missing": "Brakujące",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Poszukiwane",
"queued": "W kolejce",
"albums": "Albumy"
"artists": "Artists"
},
"readarr": {
"wanted": "Poszukiwane",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Procesor",
"mem": "Pamięć",
"wait": "Proszę czekać",
"temp": "TEMP",
"uptime": "CZAS",
"days": "dni",
"hours": "godz"
"hours": "godz",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"diffsDetected": "Wykryto różnic",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -112,18 +112,22 @@
"sonarr": {
"wanted": "Desejado",
"queued": "Na fila",
"series": "Séries"
"series": "Séries",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Desejado",
"queued": "Na fila",
"movies": "Filmes",
"missing": "Faltando"
"missing": "Faltando",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Desejado",
"queued": "Na fila",
"albums": "Álbuns"
"artists": "Artists"
},
"readarr": {
"wanted": "Desejado",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Por favor aguarde",
"temp": "TEMP",
"uptime": "LIGADO",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Observados",
@@ -604,7 +612,9 @@
"systemTempC": "System Temp",
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Desejada",
"queued": "Em fila",
"series": "Séries"
"series": "Séries",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Desejado",
"queued": "Fila",
"movies": "Filmes",
"missing": "Faltando"
"missing": "Faltando",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Desejados",
@@ -186,7 +190,7 @@
"lidarr": {
"queued": "Enfileirado",
"wanted": "Desejado",
"albums": "Álbuns"
"artists": "Artists"
},
"adguard": {
"queries": "Consultas",
@@ -247,12 +251,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Por favor, aguarde",
"temp": "TEMP",
"uptime": "Cima",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observado",
@@ -613,7 +621,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -629,5 +639,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -134,18 +134,22 @@
"sonarr": {
"wanted": "Dorite",
"queued": "În coadă",
"series": "Seriale"
"series": "Seriale",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"queued": "În coadă",
"wanted": "Dorite",
"movies": "Filme",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Dorite",
"queued": "În coadă",
"albums": "Albume"
"artists": "Artists"
},
"readarr": {
"wanted": "Dorite",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Procesor",
"mem": "Memorie",
"wait": "Te rugam sa astepti",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"new_devices": "New Devices",
"down_alerts": "Down Alerts",
"total": "Total",
"connected": "Connected"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Хотел",
"queued": "В очереди",
"series": "Серии"
"series": "Серии",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Хотел",
"queued": "В очереди",
"movies": "Фильмы",
"missing": "Пропущено"
"missing": "Пропущено",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Хотел",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Хотел",
"queued": "В очереди",
"albums": "Альбомы"
"artists": "Artists"
},
"adguard": {
"queries": "Запросы",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "Процессор",
"mem": "Память",
"wait": "Пожалуйста, подождите",
"temp": "Температура",
"uptime": "Работает",
"days": "д",
"hours": "ч"
"hours": "ч",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Всего наблюдаемых",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"disk": "Disk Usage",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"home_power": "Consumption",
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -273,18 +273,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -398,12 +402,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -235,18 +235,22 @@
"sonarr": {
"wanted": "Iskano",
"queued": "V vrsti",
"series": "Serije"
"series": "Serije",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Iskano",
"missing": "Manjka",
"queued": "V vrsti",
"movies": "Filmi"
"movies": "Filmi",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Iskano",
"queued": "V vrsti",
"albums": "Albumi"
"artists": "Artists"
},
"readarr": {
"wanted": "Iskano",
@@ -350,12 +354,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Prosim počakajte",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "u"
"hours": "u",
"free": "Free",
"load": "Load",
"warn": "Warn",
"total": "Total",
"used": "Used"
},
"authentik": {
"users": "Uporabniki",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU",
"memUsage": "MEM",
"systemTempC": "Temperatura",
"poolUsage": "Prostor"
"poolUsage": "Prostor",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Povp. obremenitev",
@@ -620,5 +630,19 @@
"upstreams": "Pretok gor",
"requests": "Trenutnih zahtev",
"requests_failed": "Neuspešnih zahtev"
},
"evcc": {
"pv_power": "Proizvodnja",
"battery_soc": "Baterija",
"grid_power": "Omrežje",
"home_power": "Poraba",
"charge_power": "Polnilec",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -117,18 +117,22 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"queued": "Queued",
"movies": "Movies",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"readarr": {
"wanted": "Wanted",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"memory": "Mem Usage",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -88,18 +88,22 @@
"sonarr": {
"wanted": "Eftersöker",
"queued": "I kö",
"series": "Serier"
"series": "Serier",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Eftersöker",
"queued": "I kö",
"movies": "Filmer",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Eftersöker",
"queued": "I kö",
"albums": "Album"
"artists": "Artists"
},
"readarr": {
"wanted": "Eftersökt",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Vänligen vänta",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -111,18 +111,22 @@
"sonarr": {
"wanted": "కావలెను",
"queued": "క్యూయూఎడ్",
"series": "సిరీస్"
"series": "సిరీస్",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "కావలెను",
"queued": "క్యూయూఎడ్",
"movies": "సినిమాలు",
"missing": "మిస్సింగ్"
"missing": "మిస్సింగ్",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "కావలెను",
"queued": "క్యూయూఎడ్",
"albums": "ఆల్బములు"
"artists": "Artists"
},
"bazarr": {
"missingEpisodes": "ఎపిసోడ్‌లు లేవు",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "సీపియూ",
"mem": "MEM",
"wait": "దయచేసి వేచి ఉండండి",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "మొత్తం గమనించబడింది",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -190,7 +190,9 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"queued": "Queued",
@@ -216,12 +218,14 @@
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"ombi": {
"pending": "Pending",
@@ -310,12 +314,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"quicklaunch": {
"bookmark": "Bookmark",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -24,13 +24,13 @@
"used": "Kullanımda",
"load": "Yük",
"mem": "MEM",
"temp": "TEMP",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
"temp": "Geçici",
"max": "En Yüksek",
"uptime": "Çalışma Süresi",
"months": "Ay",
"days": "Gün",
"hours": "Saat",
"minutes": "Dakika"
},
"unifi": {
"users": "Kullanıcılar",
@@ -57,23 +57,23 @@
"offline": "Çevrimdışı",
"error": "Hata",
"unknown": "Bilinmiyor",
"running": "Running",
"starting": "Starting",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",
"partial": "Partial",
"healthy": "Healthy"
"running": "Çalışan",
"starting": "Başlatılıyor",
"unhealthy": "Sağlıksız",
"not_found": "Bulunamadı",
"exited": "Durduruldu",
"partial": "Parçalı",
"healthy": "Sağlık"
},
"emby": {
"playing": "Oynatılıyor",
"transcoding": "Dönüştürülüyor",
"bitrate": "Bit Oranı",
"no_active": "Aktif akış yok",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
"movies": "Filmler",
"series": "Diziler",
"episodes": "Bölümler",
"songs": "Şarkılar"
},
"tautulli": {
"playing": "Oynatılıyor",
@@ -90,7 +90,7 @@
"streams": "Aktif Akış",
"movies": "Filmler",
"tv": "TV Showları",
"albums": "Albums"
"albums": "Albümler"
},
"sabnzbd": {
"rate": "Oran",
@@ -117,18 +117,22 @@
"sonarr": {
"wanted": "Aranan",
"queued": "Kuyrukta",
"series": "Seriler"
"series": "Seriler",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Aranan",
"queued": "Kuyrukta",
"movies": "Filmler",
"missing": "Kayıp"
"missing": "Kayıp",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Aranan",
"queued": "Kuyrukta",
"albums": "Albümler"
"artists": "Artists"
},
"readarr": {
"wanted": "Aranan",
@@ -159,7 +163,7 @@
"queries": "Sorgular",
"blocked": "Engellenen",
"gravity": "Yer Çekimi",
"blocked_percent": "Blocked %"
"blocked_percent": "Engellenen %"
},
"adguard": {
"queries": "Sorgular",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "İşlemci",
"mem": "Bellek",
"wait": "Lütfen bekleyiniz",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"temp": "Sıcaklık",
"uptime": "Çalışma Süresi",
"days": "Gün",
"hours": "Saat",
"load": "Yük",
"warn": "Uyarı",
"total": "Toplam",
"free": "Boş",
"used": "Kullanım"
},
"changedetectionio": {
"totalObserved": "Toplam Gözlenen",
@@ -307,9 +315,9 @@
"bookmark": "Yer İmi",
"service": "Hizmet",
"search": "Ara",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
"custom": "Özel",
"visit": "Ziyaret",
"url": "Link"
},
"homebridge": {
"available_update": "Sistem",
@@ -380,14 +388,14 @@
"deluge": {
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"leech": "Tüketici",
"seed": "Tohum"
},
"flood": {
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"seed": "Tohum"
"leech": "Tüketici",
"seed": "Sağlayıcı"
},
"tdarr": {
"queue": "Sıra",
@@ -417,7 +425,7 @@
"downloadstation": {
"download": "İndir",
"upload": "Yükle",
"leech": "Leech",
"leech": "Tüketici",
"seed": "Tohum"
},
"mikrotik": {
@@ -444,7 +452,7 @@
"layers": "Katmanlar"
},
"medusa": {
"wanted": "Wanted",
"wanted": "Aranan",
"queued": "Kuyrukta",
"series": "Seri"
},
@@ -550,11 +558,11 @@
"targets_total": "Total Targets"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Status",
"up": "Online",
"down": "Offline"
"players": "Oyuncular",
"version": "Versiyon",
"status": "Durum",
"up": "Çevrimiçi",
"down": "Çevrimdışı"
},
"ghostfolio": {
"gross_percent_today": "Today",
@@ -573,38 +581,40 @@
"switches_on": "Switches On"
},
"freshrss": {
"subscriptions": "Subscriptions",
"unread": "Unread"
"subscriptions": "Abonelikler",
"unread": "Okunmamış"
},
"channelsdvrserver": {
"shows": "Shows",
"recordings": "Recordings",
"scheduled": "Scheduled",
"passes": "Passes"
"shows": "Diziler",
"recordings": "Kayıtlar",
"scheduled": "Planlanmış",
"passes": "Geçilenler"
},
"whatsupdocker": {
"monitoring": "Monitoring",
"updates": "Updates"
},
"tailscale": {
"never": "Never",
"last_seen": "Last Seen",
"now": "Now",
"years": "{{number}}y",
"weeks": "{{number}}w",
"days": "{{number}}d",
"hours": "{{number}}h",
"minutes": "{{number}}m",
"seconds": "{{number}}s",
"ago": "{{value}} Ago",
"address": "Address",
"expires": "Expires"
"never": "Asla",
"last_seen": "Son Görülme",
"now": "Şimdi",
"years": "{{number}} Yıl",
"weeks": "{{number}} Hafta",
"days": "{{number}} Gün",
"hours": "{{number}} Saat",
"minutes": "{{number}} Dakika",
"seconds": "{{number}} Saniye",
"ago": "{{value}} Önce",
"address": "Adres",
"expires": "Geciken"
},
"qnap": {
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"cpuUsage": "İşlemci Kullanımı",
"memUsage": "Bellek Kullanımı",
"systemTempC": "Sistem Sıcaklığı",
"poolUsage": "Havuz Kullanımı",
"volumeUsage": "Alan Kullanımı",
"invalid": "Geçersiz"
},
"pfsense": {
"load": "Load Avg",
@@ -617,8 +627,22 @@
"wanIP": "WAN IP"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
"upstreams": "Akış",
"requests": "Anlık İstekler",
"requests_failed": "Başarısız İstekler"
},
"evcc": {
"pv_power": "Üretim",
"battery_soc": "Batarya",
"grid_power": "Güç",
"home_power": "Tüketim",
"charge_power": "Şarj",
"watt_hour": "Watt/Saat"
},
"pialert": {
"total": "Toplam",
"connected": "Bağlandı",
"new_devices": "Yeni Cihazlar",
"down_alerts": "Düşme Uyarıları"
}
}

View File

@@ -127,7 +127,7 @@
"total": "Всього",
"free": "Вільно",
"used": "Використано",
"load": "Навантаження",
"load": "Завантаження",
"mem": "Пам'ять",
"temp": "TEMP",
"max": "Max",
@@ -232,18 +232,22 @@
"sonarr": {
"wanted": "Розшукується",
"queued": "У черзі",
"series": "Серії"
"series": "Серії",
"queue": "Черга",
"unknown": "Невідомо"
},
"radarr": {
"wanted": "Розшукується",
"missing": "Відсутній",
"queued": "У черзі",
"movies": "Фільми"
"movies": "Фільми",
"queue": "Черга",
"unknown": "Невідомо"
},
"lidarr": {
"wanted": "Розшукується",
"queued": "У черзі",
"albums": "Альбоми"
"artists": "Виконавці"
},
"traefik": {
"middleware": "Проміжне програмне забезпечення",
@@ -358,12 +362,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "Пам'ять",
"wait": "Будь ласка, зачекайте",
"temp": "TEMP",
"uptime": "Відправка",
"days": "д",
"hours": "г"
"hours": "г",
"load": "Завантаження",
"warn": "Увага",
"total": "Всього",
"free": "Вільний",
"used": "Використовується"
},
"quicklaunch": {
"bookmark": "Закладка",
@@ -604,7 +612,9 @@
"cpuUsage": "Використання CPU",
"memUsage": "Використання пам'яті",
"systemTempC": "Температура системи",
"poolUsage": "Використання пулу"
"poolUsage": "Використання пулу",
"volumeUsage": "Гучність",
"invalid": "Недійсний"
},
"pfsense": {
"load": "Середнє завантаження",
@@ -617,8 +627,22 @@
"wanIP": "WAN IP"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
"upstreams": "Потоки",
"requests": "Поточні запити",
"requests_failed": "Невдалі запити"
},
"evcc": {
"pv_power": "Виробництво",
"battery_soc": "Батарея",
"grid_power": "Сітка",
"home_power": "Споживання",
"charge_power": "Зарядний пристрій",
"watt_hour": "Вт/год"
},
"pialert": {
"total": "Всього",
"connected": "Підключено",
"new_devices": "Нові пристрої",
"down_alerts": "Сповіщення про збій"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"queued": "Queued",
"movies": "Phim",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "Đang tìm",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
"artists": "Artists"
},
"adguard": {
"queries": "Queries",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -94,18 +94,22 @@
"sonarr": {
"wanted": "想睇",
"queued": "排緊隊",
"series": "電視劇"
"series": "電視劇",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "想睇",
"queued": "排緊隊",
"movies": "電影",
"missing": "Missing"
"missing": "Missing",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "想睇",
"queued": "排緊隊",
"albums": "專輯"
"artists": "Artists"
},
"readarr": {
"wanted": "想睇",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
"hours": "h",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "Total Observed",
@@ -604,7 +612,9 @@
"systemTempC": "System Temp",
"poolUsage": "Pool Usage",
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage"
"memUsage": "MEM Usage",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "Load Avg",
@@ -620,5 +630,19 @@
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -66,13 +66,17 @@
"sonarr": {
"wanted": "想看",
"queued": "排队",
"series": "系列"
"series": "系列",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "想看",
"queued": "队列",
"movies": "电影",
"missing": "丢失"
"missing": "丢失",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "订阅",
@@ -125,7 +129,7 @@
"pending": "待办",
"approved": "已批准",
"available": "可用",
"processing": "Processing"
"processing": "处理中"
},
"sabnzbd": {
"rate": "速率",
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "订阅",
"queued": "队列",
"albums": "相册"
"artists": "Artists"
},
"adguard": {
"queries": "查询",
@@ -234,12 +238,16 @@
},
"glances": {
"cpu": "处理器",
"mem": "内存",
"wait": "请稍等",
"temp": "温度",
"uptime": "运行时间",
"days": "天",
"hours": "时"
"hours": "时",
"load": "Load",
"warn": "Warn",
"total": "Total",
"free": "Free",
"used": "Used"
},
"changedetectionio": {
"totalObserved": "观察到的总数",
@@ -421,10 +429,10 @@
"seed": "做种"
},
"mikrotik": {
"cpuLoad": "处理器负载",
"memoryUsed": "内存占用",
"cpuLoad": "处理器",
"memoryUsed": "内存",
"uptime": "运行时间",
"numberOfLeases": "已连接"
"numberOfLeases": "租约"
},
"xteve": {
"streams_all": "所有播放活动",
@@ -432,15 +440,15 @@
"streams_xepg": "XEPG 频道"
},
"opnsense": {
"cpu": "处理器负载",
"memory": "空闲内存",
"cpu": "处理器",
"memory": "内存",
"wanUpload": "WAN上传",
"wanDownload": "WAN下载"
},
"moonraker": {
"printer_state": "打印机状态",
"print_status": "打印状态",
"print_progress": "Progress",
"print_progress": "打印进程",
"layers": "层"
},
"medusa": {
@@ -511,8 +519,8 @@
"alertstriggered": "触发的警报"
},
"nextcloud": {
"cpuload": "处理器负载",
"memoryusage": "内存使用",
"cpuload": "处理器",
"memoryusage": "内存",
"freespace": "剩余空间",
"activeusers": "活跃用户",
"numfiles": "Files",
@@ -550,7 +558,7 @@
"targets_total": "总目标"
},
"minecraft": {
"players": "播放中",
"players": "玩家",
"version": "版本",
"status": "状态",
"up": "在线的",
@@ -568,7 +576,7 @@
"booksDuration": "持续时间"
},
"homeassistant": {
"people_home": "People Home",
"people_home": "房间",
"lights_on": "照明开",
"switches_on": "开关开"
},
@@ -587,7 +595,7 @@
"updates": "可更新"
},
"tailscale": {
"address": "Address",
"address": "地址",
"expires": "失效",
"never": "从不",
"last_seen": "最后上线",
@@ -597,28 +605,44 @@
"seconds": "{{number}}s",
"ago": "{{value}} 以前",
"now": "现在",
"years": "{{number}}y",
"weeks": "{{number}}w"
"years": "{{number}}",
"weeks": "{{number}}"
},
"qnap": {
"cpuUsage": "处理器负载",
"memUsage": "内存占用",
"cpuUsage": "处理器",
"memUsage": "内存",
"systemTempC": "系统温度",
"poolUsage": "存储池"
"poolUsage": "存储池",
"volumeUsage": "Volume Usage",
"invalid": "Invalid"
},
"pfsense": {
"load": "平均负载",
"memory": "内存占用",
"memory": "内存",
"wanStatus": "WAN 状态",
"up": "上传",
"down": "下载",
"temp": "温度",
"disk": "磁盘使用",
"disk": "磁盘",
"wanIP": "WAN IP"
},
"caddy": {
"upstreams": "上游",
"requests": "当前请求",
"requests_failed": "失败请求"
},
"evcc": {
"pv_power": "Production",
"battery_soc": "Battery",
"grid_power": "Grid",
"home_power": "Consumption",
"charge_power": "Charger",
"watt_hour": "Wh"
},
"pialert": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
}
}

View File

@@ -6,7 +6,7 @@
"information": "資訊",
"url": "網址",
"raw_error": "原始錯誤",
"response_data": "回復數據"
"response_data": "回應資料"
},
"weather": {
"current": "目前位置",
@@ -21,14 +21,14 @@
"mem": "記憶體",
"cpu": "處理器",
"error": "錯誤",
"unknown": "未知",
"unknown": "未知",
"running": "執行中",
"starting": "啟動中",
"unhealthy": "不健康的",
"not_found": "未找到",
"exited": "已退出",
"partial": "部分",
"healthy": "健康"
"healthy": "健康"
},
"emby": {
"playing": "正在播放",
@@ -63,9 +63,9 @@
"mem": "記憶體",
"temp": "溫度",
"max": "最大",
"uptime": "運時間",
"uptime": "運時間",
"months": "月",
"days": "",
"days": "",
"hours": "時",
"minutes": "分"
},
@@ -88,12 +88,16 @@
"movies": "電影",
"wanted": "關注中",
"queued": "已加入佇列",
"missing": "缺少"
"missing": "缺少",
"queue": "Queue",
"unknown": "Unknown"
},
"sonarr": {
"wanted": "關注中",
"queued": "已加入佇列",
"series": "影集"
"series": "影集",
"queue": "Queue",
"unknown": "Unknown"
},
"readarr": {
"wanted": "關注中",
@@ -115,7 +119,7 @@
"queries": "查詢",
"blocked": "已阻擋",
"gravity": "阻擋清單",
"blocked_percent": "Blocked %"
"blocked_percent": "已封鎖 %"
},
"speedtest": {
"upload": "上行速率",
@@ -123,8 +127,8 @@
"ping": "Ping"
},
"portainer": {
"running": "運中",
"stopped": "未運行",
"running": "運中",
"stopped": "已停止",
"total": "全部"
},
"traefik": {
@@ -163,7 +167,7 @@
"seed": "已完成下載"
},
"jackett": {
"configured": "已置",
"configured": "已置",
"errored": "發生錯誤"
},
"bazarr": {
@@ -173,7 +177,7 @@
"lidarr": {
"wanted": "關注中",
"queued": "已加入佇列",
"albums": "專輯"
"artists": "Artists"
},
"adguard": {
"queries": "查詢",
@@ -200,8 +204,8 @@
},
"authentik": {
"users": "使用者",
"loginsLast24H": "登錄(24h)",
"failedLoginsLast24H": "登失敗(24h)"
"loginsLast24H": "登入 (過去 24 小時)",
"failedLoginsLast24H": "登失敗 (過去 24 小時)"
},
"proxmox": {
"mem": "記憶體",
@@ -211,19 +215,19 @@
},
"unifi": {
"users": "使用者",
"uptime": "系統運時間",
"uptime": "系統運時間",
"days": "天",
"wan": "WAN",
"lan_users": "LAN使用者",
"wlan_users": "WLAN使用者",
"lan_users": "有線使用者",
"wlan_users": "無線使用者",
"up": "上線",
"down": "離線",
"wait": "請稍後",
"lan": "LAN",
"wlan": "WLAN",
"devices": "設備",
"lan_devices": "LAN設備",
"wlan_devices": "WLAN設備",
"lan_devices": "有線設備",
"wlan_devices": "無線設備",
"empty_data": "子系統狀態未知"
},
"plex": {
@@ -234,19 +238,23 @@
},
"glances": {
"cpu": "CPU",
"mem": "記憶體",
"wait": "請稍後",
"temp": "溫度",
"uptime": "運行時間",
"days": "天",
"hours": "時"
"hours": "時",
"free": "未使用",
"used": "已使用",
"load": "負載量",
"warn": "警告",
"total": "總共"
},
"changedetectionio": {
"totalObserved": "總監測數",
"diffsDetected": "偵測到的變更"
},
"wmo": {
"0-day": "晴",
"0-day": "晴",
"0-night": "晴朗",
"71-day": "小雪",
"71-night": "小雪",
@@ -308,7 +316,7 @@
"service": "服務",
"search": "搜尋",
"custom": "自訂",
"visit": "訪",
"visit": "訪",
"url": "網址"
},
"homebridge": {
@@ -351,7 +359,7 @@
},
"pyload": {
"speed": "速度",
"active": "行中",
"active": "行中",
"queue": "佇列",
"total": "全部"
},
@@ -515,14 +523,14 @@
"memoryusage": "記憶體用量",
"freespace": "可用空間",
"activeusers": "活躍用戶",
"numfiles": "Files",
"numshares": "Shared Items"
"numfiles": "檔案",
"numshares": "已分享"
},
"kopia": {
"status": "狀態",
"size": "檔案大小",
"lastrun": "上次行",
"nextrun": "下次行",
"lastrun": "上次行",
"nextrun": "下次行",
"failed": "失敗"
},
"unmanic": {
@@ -587,38 +595,54 @@
"updates": "可更新"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
"never": "Never",
"last_seen": "Last Seen",
"now": "Now",
"years": "{{number}}y",
"hours": "{{number}}h",
"minutes": "{{number}}m",
"seconds": "{{number}}s",
"ago": "{{value}} Ago",
"weeks": "{{number}}w",
"days": "{{number}}d"
"address": "位址",
"expires": "已失效",
"never": "未曾",
"last_seen": "上次連線",
"now": "現在",
"years": "{{number}}",
"hours": "{{number}} 小時",
"minutes": "{{number}} 分鐘",
"seconds": "{{number}}",
"ago": "{{value}} ",
"weeks": "{{number}}",
"days": "{{number}}"
},
"qnap": {
"cpuUsage": "CPU Usage",
"memUsage": "MEM Usage",
"systemTempC": "System Temp",
"poolUsage": "Pool Usage"
"cpuUsage": "CPU 使用率",
"memUsage": "記憶體使用率",
"systemTempC": "系統溫度",
"poolUsage": "儲存池使用率",
"volumeUsage": "儲存區用量",
"invalid": "無效的"
},
"pfsense": {
"load": "Load Avg",
"memory": "Mem Usage",
"wanStatus": "WAN Status",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Usage",
"wanIP": "WAN IP"
"load": "平均負載量",
"memory": "記憶體使用率",
"wanStatus": "網際網路狀態",
"up": "已連線",
"down": "已離線",
"temp": "溫度",
"disk": "硬碟使用率",
"wanIP": "網際網路 IP"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Current requests",
"requests_failed": "Failed requests"
"upstreams": "上行",
"requests": "目前請求數",
"requests_failed": "失敗請求"
},
"evcc": {
"grid_power": "電網",
"home_power": "電源使用率",
"charge_power": "充電",
"pv_power": "正式環境",
"battery_soc": "電池",
"watt_hour": "瓦時 (Wh)"
},
"pialert": {
"total": "全部",
"connected": "已連線",
"new_devices": "新裝置",
"down_alerts": "離線警告"
}
}

View File

@@ -3,7 +3,7 @@ import classNames from "classnames";
import List from "components/services/list";
import ResolvedIcon from "components/resolvedicon";
export default function ServicesGroup({ services, layout, fiveColumns }) {
export default function ServicesGroup({ group, services, layout, fiveColumns }) {
return (
<div
key={services.name}
@@ -21,7 +21,7 @@ export default function ServicesGroup({ services, layout, fiveColumns }) {
}
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium">{services.name}</h2>
</div>
<List services={services.services} layout={layout} />
<List group={group} services={services.services} layout={layout} />
</div>
);
}

View File

@@ -11,7 +11,7 @@ import Kubernetes from "widgets/kubernetes/component";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
export default function Item({ service }) {
export default function Item({ service, group }) {
const hasLink = service.href && service.href !== "#";
const { settings } = useContext(SettingsContext);
const showStats = (service.showStats === false) ? false : settings.showStats;
@@ -77,7 +77,7 @@ export default function Item({ service }) {
<div className="absolute top-0 right-0 w-1/2 flex flex-row justify-end gap-2 mr-2">
{service.ping && (
<div className="flex-shrink-0 flex items-center justify-center cursor-pointer">
<Ping service={service} />
<Ping group={group} service={service.name} />
<span className="sr-only">Ping status</span>
</div>
)}

View File

@@ -14,7 +14,7 @@ const columnMap = [
"grid-cols-1 md:grid-cols-2 lg:grid-cols-8",
];
export default function List({ services, layout }) {
export default function List({ group, services, layout }) {
return (
<ul
className={classNames(
@@ -23,7 +23,7 @@ export default function List({ services, layout }) {
)}
>
{services.map((service) => (
<Item key={service.container ?? service.app ?? service.name} service={service} />
<Item key={service.container ?? service.app ?? service.name} service={service} group={group} />
))}
</ul>
);

View File

@@ -1,9 +1,9 @@
import { useTranslation } from "react-i18next";
import useSWR from "swr";
export default function Ping({ service }) {
export default function Ping({ group, service }) {
const { t } = useTranslation();
const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ping: service.ping}).toString()}`, {
const { data, error } = useSWR(`/api/ping?${new URLSearchParams({ group, service }).toString()}`, {
refreshInterval: 30000
});
@@ -23,7 +23,7 @@ export default function Ping({ service }) {
);
}
const statusText = `${service.ping}: HTTP status ${data.status}`;
const statusText = `${service}: HTTP status ${data.status}`;
if (data.status > 403) {
return (

View File

@@ -15,7 +15,9 @@ export default function Container({ error = false, children, service }) {
return <Error service={service} error={error} />
}
let visibleChildren = children;
const childrenArray = Array.isArray(children) ? children : [children];
let visibleChildren = childrenArray;
const fields = service?.widget?.fields;
const type = service?.widget?.type;
if (fields && type) {
@@ -24,7 +26,7 @@ export default function Container({ error = false, children, service }) {
// fields: [ "resources.cpu", "resources.mem", "field"]
// or even
// fields: [ "resources.cpu", "widget_type.field" ]
visibleChildren = children?.filter(child => fields.some(field => {
visibleChildren = childrenArray?.filter(child => fields.some(field => {
let fullField = field;
if (!field.includes(".")) {
fullField = `${type}.${field}`;
@@ -33,5 +35,5 @@ export default function Container({ error = false, children, service }) {
}));
}
return <div className="relative flex flex-row w-full">{visibleChildren.slice(0, 4)}</div>;
return <div className="relative flex flex-row w-full">{visibleChildren}</div>;
}

View File

@@ -9,10 +9,12 @@ function displayData(data) {
return (data.type === 'Buffer') ? Buffer.from(data).toString() : JSON.stringify(data, 4);
}
export default function Error({ error: err }) {
export default function Error({ error }) {
const { t } = useTranslation();
const { error } = err?.data ?? { error: err };
if (error?.data?.error) {
error = error.data.error; // eslint-disable-line no-param-reassign
}
return (
<details className="px-1 pb-1">

View File

@@ -1,11 +1,14 @@
import useSWR from "swr";
import { useContext } from "react";
import { BiError } from "react-icons/bi";
import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu } from "react-icons/fi";
import { FiCpu, FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next";
import UsageBar from "../resources/usage-bar";
import { SettingsContext } from "utils/contexts/settings";
const cpuSensorLabels = ["cpu_thermal", "Core", "Tctl"];
function convertToFahrenheit(t) {
@@ -14,6 +17,7 @@ function convertToFahrenheit(t) {
export default function Widget({ options }) {
const { t, i18n } = useTranslation();
const { settings } = useContext(SettingsContext);
const { data, error } = useSWR(
`/api/widgets/glances?${new URLSearchParams({ lang: i18n.language, ...options }).toString()}`, {
@@ -88,8 +92,16 @@ export default function Widget({ options }) {
}
const tempPercent = Math.round((mainTemp / maxTemp) * 100);
let disks = [];
if (options.disk) {
disks = Array.isArray(options.disk)
? options.disk.map((disk) => data.fs.find((d) => d.mnt_point === disk)).filter((d) => d)
: [data.fs.find((d) => d.mnt_point === options.disk)].filter((d) => d);
}
return (
<div className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap ml-4">
<a href={options.url} target={settings.target ?? "_blank"} className="flex flex-col max-w:full sm:basis-auto self-center grow-0 flex-wrap">
<div className="flex flex-row self-center flex-wrap justify-between">
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FiCpu className="text-theme-800 dark:text-theme-200 w-5 h-5" />
@@ -97,7 +109,7 @@ export default function Widget({ options }) {
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.quicklook.cpu,
value: data.cpu.total,
style: "unit",
unit: "percent",
maximumFractionDigits: 0,
@@ -105,7 +117,20 @@ export default function Widget({ options }) {
</div>
<div className="pr-1">{t("glances.cpu")}</div>
</div>
<UsageBar percent={data.quicklook.cpu} />
{options.expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.number", {
value: data.load.min15,
style: "unit",
unit: "percent",
maximumFractionDigits: 0,
})}
</div>
<div className="pr-1">{t("glances.load")}</div>
</span>
)}
<UsageBar percent={data.cpu.total} />
</div>
</div>
<div className="flex-none flex flex-row items-center mr-3 py-1.5">
@@ -113,18 +138,46 @@ export default function Widget({ options }) {
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">
{t("common.number", {
value: data.quicklook.mem,
style: "unit",
unit: "percent",
maximumFractionDigits: 0,
{t("common.bytes", {
value: data.mem.free,
maximumFractionDigits: 1,
binary: true,
})}
</div>
<div className="pr-1">{t("glances.mem")}</div>
<div className="pr-1">{t("glances.free")}</div>
</div>
<UsageBar percent={data.quicklook.mem} />
{options.expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.bytes", {
value: data.mem.total,
maximumFractionDigits: 1,
binary: true,
})}
</div>
<div className="pr-1">{t("glances.total")}</div>
</span>
)}
<UsageBar percent={data.mem.percent} />
</div>
</div>
{disks.map((disk) => (
<div key={disk.mnt_point} className="flex-none flex flex-row items-center mr-3 py-1.5">
<FiHardDrive className="text-theme-800 dark:text-theme-200 w-5 h-5" />
<div className="flex flex-col ml-3 text-left min-w-[85px]">
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5">{t("common.bytes", { value: disk.free })}</div>
<div className="pr-1">{t("glances.free")}</div>
</span>
{options.expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">{t("common.bytes", { value: disk.size })}</div>
<div className="pr-1">{t("glances.total")}</div>
</span>
)}
<UsageBar percent={disk.percent} />
</div>
</div>))}
{options.cputemp && mainTemp > 0 &&
(<div className="flex-none flex flex-row items-center mr-3 py-1.5">
<FaThermometerHalf className="text-theme-800 dark:text-theme-200 w-5 h-5" />
@@ -140,6 +193,19 @@ export default function Widget({ options }) {
</div>
<div className="pr-1">{t("glances.temp")}</div>
</span>
{options.expanded && (
<span className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
<div className="pl-0.5 pr-1">
{t("common.number", {
value: maxTemp,
maximumFractionDigits: 1,
style: "unit",
unit
})}
</div>
<div className="pr-1">{t("glances.warn")}</div>
</span>
)}
<UsageBar percent={tempPercent} />
</div>
</div>)}
@@ -160,6 +226,6 @@ export default function Widget({ options }) {
{options.label && (
<div className="pt-1 text-center text-theme-800 dark:text-theme-200 text-xs">{options.label}</div>
)}
</div>
</a>
);
}

View File

@@ -13,7 +13,7 @@ export default function Greeting({ options }) {
if (options.text) {
return (
<div className="flex flex-row items-center justify-start">
<span className={`text-theme-800 dark:text-theme-200 ${textSizes[options.text_size || "xl"]}`}>
<span className={`text-theme-800 dark:text-theme-200 mr-3 ${textSizes[options.text_size || "xl"]}`}>
{options.text}
</span>
</div>

View File

@@ -0,0 +1,18 @@
export default function QueueEntry({ title, activity, timeLeft, progress}) {
return (
<div className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex">
<div
className="absolute h-5 rounded-md bg-theme-200 dark:bg-theme-900/40 z-0 -ml-1"
style={{
width: `${progress}%`,
}}
/>
<div className="text-xs z-10 self-center ml-2 relative h-4 grow mr-2">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{title}</div>
</div>
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
{timeLeft ? `${activity} - ${timeLeft}` : activity}
</div>
</div>
);
}

View File

@@ -1,12 +1,22 @@
import { performance } from "perf_hooks";
import { getServiceItem } from "utils/config/service-helpers";
import createLogger from "utils/logger";
import { httpProxy } from "utils/proxy/http";
const logger = createLogger("ping");
export default async function handler(req, res) {
const { ping: pingURL } = req.query;
const { group, service } = req.query;
const serviceItem = await getServiceItem(group, service);
if (!serviceItem) {
logger.debug(`No service item found for group ${group} named ${service}`);
return res.status(400).send({
error: "Unable to find service, see log for details.",
});
}
const { ping: pingURL } = serviceItem;
if (!pingURL) {
logger.debug("No ping URL specified");
@@ -14,22 +24,29 @@ export default async function handler(req, res) {
error: "No ping URL given",
});
}
let startTime = performance.now();
let [status] = await httpProxy(pingURL, {
method: "HEAD"
});
let endTime = performance.now();
if (status > 403) {
// try one more time as a GET in case HEAD is rejected for whatever reason
startTime = performance.now();
[status] = await httpProxy(pingURL);
endTime = performance.now();
}
return res.status(200).json({
status,
latency: endTime - startTime
});
try {
let startTime = performance.now();
let [status] = await httpProxy(pingURL, {
method: "HEAD"
});
let endTime = performance.now();
if (status > 403) {
// try one more time as a GET in case HEAD is rejected for whatever reason
startTime = performance.now();
[status] = await httpProxy(pingURL);
endTime = performance.now();
}
return res.status(200).json({
status,
latency: endTime - startTime
});
} catch (e) {
logger.debug("Error attempting ping: %s", JSON.stringify(e));
return res.status(400).send({
error: 'Error attempting ping, see logs.',
});
}
}

View File

@@ -40,20 +40,32 @@ async function retrieveFromGlancesAPI(privateWidgetOptions, endpoint) {
}
export default async function handler(req, res) {
const { index } = req.query;
const { index, cputemp: includeCpuTemp, uptime: includeUptime, disk: includeDisks } = req.query;
const privateWidgetOptions = await getPrivateWidgetOptions("glances", index);
try {
const quicklookData = await retrieveFromGlancesAPI(privateWidgetOptions, "quicklook");
const cpuData = await retrieveFromGlancesAPI(privateWidgetOptions, "cpu");
const loadData = await retrieveFromGlancesAPI(privateWidgetOptions, "load");
const memoryData = await retrieveFromGlancesAPI(privateWidgetOptions, "mem");
const data = {
quicklook: quicklookData
cpu: cpuData,
load: loadData,
mem: memoryData,
}
// Disabled by default, dont call unless needed
if (includeUptime) {
data.uptime = await retrieveFromGlancesAPI(privateWidgetOptions, "uptime");
}
if (includeCpuTemp) {
data.sensors = await retrieveFromGlancesAPI(privateWidgetOptions, "sensors");
}
if (includeDisks) {
data.fs = await retrieveFromGlancesAPI(privateWidgetOptions, "fs");
}
data.uptime = await retrieveFromGlancesAPI(privateWidgetOptions, "uptime");
data.sensors = await retrieveFromGlancesAPI(privateWidgetOptions, "sensors");
return res.status(200).send(data);
} catch (e) {

View File

@@ -52,18 +52,25 @@ export default async function handler(req, res) {
memTotal += mem;
});
const nodeMetrics = await metricsApi.getNodeMetrics();
nodeMetrics.items.forEach((nodeMetric) => {
const cpu = parseCpu(nodeMetric.usage.cpu);
const mem = parseMemory(nodeMetric.usage.memory);
cpuUsage += cpu;
memUsage += mem;
nodeMap[nodeMetric.metadata.name].cpu.load = cpu;
nodeMap[nodeMetric.metadata.name].cpu.percent = (cpu / nodeMap[nodeMetric.metadata.name].cpu.total) * 100;
nodeMap[nodeMetric.metadata.name].memory.used = mem;
nodeMap[nodeMetric.metadata.name].memory.free = nodeMap[nodeMetric.metadata.name].memory.total - mem;
nodeMap[nodeMetric.metadata.name].memory.percent = (mem / nodeMap[nodeMetric.metadata.name].memory.total) * 100;
});
try {
const nodeMetrics = await metricsApi.getNodeMetrics();
nodeMetrics.items.forEach((nodeMetric) => {
const cpu = parseCpu(nodeMetric.usage.cpu);
const mem = parseMemory(nodeMetric.usage.memory);
cpuUsage += cpu;
memUsage += mem;
nodeMap[nodeMetric.metadata.name].cpu.load = cpu;
nodeMap[nodeMetric.metadata.name].cpu.percent = (cpu / nodeMap[nodeMetric.metadata.name].cpu.total) * 100;
nodeMap[nodeMetric.metadata.name].memory.used = mem;
nodeMap[nodeMetric.metadata.name].memory.free = nodeMap[nodeMetric.metadata.name].memory.total - mem;
nodeMap[nodeMetric.metadata.name].memory.percent = (mem / nodeMap[nodeMetric.metadata.name].memory.total) * 100;
});
} catch (error) {
logger.error("Error getting metrics, ensure you have metrics-server installed: s", JSON.stringify(error));
return res.status(500).send({
error: "Error getting metrics, check logs for more details"
});
}
const cluster = {
cpu: {

View File

@@ -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 h-full">
<div className="relative container m-auto flex flex-col justify-start z-10 h-full">
<div
className={classNames(
"flex flex-row flex-wrap justify-between",
@@ -289,7 +289,7 @@ function Home({ initialSettings }) {
{services?.length > 0 && (
<div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
{services.map((group) => (
<ServicesGroup key={group.name} services={group} layout={initialSettings.layout?.[group.name]} fiveColumns={settings.fiveColumns} />
<ServicesGroup key={group.name} group={group.name} services={group} layout={initialSettings.layout?.[group.name]} fiveColumns={settings.fiveColumns} />
))}
</div>
)}
@@ -302,14 +302,16 @@ function Home({ initialSettings }) {
</div>
)}
<div className="flex p-8 pb-0 w-full justify-end">
{!initialSettings?.color && <ColorToggle />}
<Revalidate />
{!initialSettings?.theme && <ThemeToggle />}
</div>
<div className="flex flex-col mt-auto p-8 w-full">
<div className="flex w-full justify-end">
{!initialSettings?.color && <ColorToggle />}
<Revalidate />
{!initialSettings?.theme && <ThemeToggle />}
</div>
<div className="flex p-8 pt-4 w-full justify-end">
{!initialSettings?.hideVersion && <Version />}
<div className="flex mt-4 w-full justify-end">
{!initialSettings?.hideVersion && <Version />}
</div>
</div>
</div>
</>
@@ -359,6 +361,7 @@ export default function Wrapper({ initialSettings, fallback }) {
<div
id="inner_wrapper"
className={classNames(
'fixed overflow-auto w-full h-full',
backgroundBlur && `backdrop-blur${initialSettings.background.blur.length ? '-' : ""}${initialSettings.background.blur}`,
backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`,
backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`,

View File

@@ -65,5 +65,20 @@ export function getSettings() {
const settingsYaml = join(process.cwd(), "config", "settings.yaml");
const rawFileContents = readFileSync(settingsYaml, "utf8");
const fileContents = substituteEnvironmentVars(rawFileContents);
return yaml.load(fileContents) ?? {};
const initialSettings = yaml.load(fileContents) ?? {};
if (initialSettings.layout) {
// support yaml list but old spec was object so convert to that
// see https://github.com/benphelps/homepage/issues/1546
if (Array.isArray(initialSettings.layout)) {
const layoutItems = initialSettings.layout
initialSettings.layout = {}
layoutItems.forEach(i => {
const name = Object.keys(i)[0]
initialSettings.layout[name] = i[name]
})
}
}
return initialSettings
}

View File

@@ -63,10 +63,10 @@ export async function servicesFromDocker() {
const serviceServers = await Promise.all(
Object.keys(servers).map(async (serverName) => {
try {
const isSwarm = !!servers[serverName].swarm;
const docker = new Docker(getDockerArguments(serverName).conn);
const containers = await docker.listContainers({
all: true,
});
const listProperties = { all: true };
const containers = await ((isSwarm) ? docker.listServices(listProperties) : docker.listContainers(listProperties));
// bad docker connections can result in a <Buffer ...> object?
// in any case, this ensures the result is the expected array
@@ -76,17 +76,19 @@ export async function servicesFromDocker() {
const discovered = containers.map((container) => {
let constructedService = null;
const containerLabels = isSwarm ? shvl.get(container, 'Spec.Labels') : container.Labels;
const containerName = isSwarm ? shvl.get(container, 'Spec.Name') : container.Names[0];
Object.keys(container.Labels).forEach((label) => {
Object.keys(containerLabels).forEach((label) => {
if (label.startsWith("homepage.")) {
if (!constructedService) {
constructedService = {
container: container.Names[0].replace(/^\//, ""),
container: containerName.replace(/^\//, ""),
server: serverName,
type: 'service'
};
}
shvl.set(constructedService, label.replace("homepage.", ""), container.Labels[label]);
shvl.set(constructedService, label.replace("homepage.", ""), substituteEnvironmentVars(containerLabels[label]));
}
});
@@ -168,14 +170,14 @@ export async function servicesFromKubernetes() {
.filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/href`])
ingressList.items.push(...traefikServices);
}
if (!ingressList) {
return [];
}
const services = ingressList.items
.filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === 'true')
.map((ingress) => {
const constructedService = {
let constructedService = {
app: ingress.metadata.name,
namespace: ingress.metadata.namespace,
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
@@ -202,6 +204,12 @@ export async function servicesFromKubernetes() {
}
});
try {
constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService)));
} catch (e) {
logger.error("Error attempting k8s environment variable substitution.");
}
return constructedService;
});
@@ -270,7 +278,8 @@ export function cleanServiceGroups(groups) {
wan, // opnsense widget, pfsense widget
enableBlocks, // emby/jellyfin
enableNowPlaying,
volume, // diskstation widget
volume, // diskstation widget,
enableQueue, // sonarr/radarr
} = cleanedService.widget;
const fieldsList = typeof fields === 'string' ? JSON.parse(fields) : fields;
@@ -306,7 +315,10 @@ export function cleanServiceGroups(groups) {
if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks);
if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying);
}
if (type === "diskstation") {
if (["sonarr", "radarr"].includes(type)) {
if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue);
}
if (["diskstation", "qnap"].includes(type)) {
if (volume) cleanedService.widget.volume = volume;
}
}
@@ -316,16 +328,13 @@ export function cleanServiceGroups(groups) {
}));
}
export default async function getServiceWidget(group, service) {
export async function getServiceItem(group, service) {
const configuredServices = await servicesFromConfig();
const serviceGroup = configuredServices.find((g) => g.name === group);
if (serviceGroup) {
const serviceEntry = serviceGroup.services.find((s) => s.name === service);
if (serviceEntry) {
const { widget } = serviceEntry;
return widget;
}
if (serviceEntry) return serviceEntry;
}
const discoveredServices = await servicesFromDocker();
@@ -333,20 +342,24 @@ export default async function getServiceWidget(group, service) {
const dockerServiceGroup = discoveredServices.find((g) => g.name === group);
if (dockerServiceGroup) {
const dockerServiceEntry = dockerServiceGroup.services.find((s) => s.name === service);
if (dockerServiceEntry) {
const { widget } = dockerServiceEntry;
return widget;
}
if (dockerServiceEntry) return dockerServiceEntry;
}
const kubernetesServices = await servicesFromKubernetes();
const kubernetesServiceGroup = kubernetesServices.find((g) => g.name === group);
if (kubernetesServiceGroup) {
const kubernetesServiceEntry = kubernetesServiceGroup.services.find((s) => s.name === service);
if (kubernetesServiceEntry) {
const { widget } = kubernetesServiceEntry;
return widget;
}
if (kubernetesServiceEntry) return kubernetesServiceEntry;
}
return false;
}
export default async function getServiceWidget(group, service) {
const serviceItem = await getServiceItem(group, service);
if (serviceItem) {
const { widget } = serviceItem;
return widget;
}
return false;

View File

@@ -5,8 +5,6 @@ import yaml from "js-yaml";
import checkAndCopyConfig, { substituteEnvironmentVars } from "utils/config/config";
const exemptWidgets = ["search"];
export async function widgetsFromConfig() {
checkAndCopyConfig("widgets.yaml");
@@ -32,15 +30,17 @@ export async function cleanWidgetGroups(widgets) {
return widgets.map((widget, index) => {
const sanitizedOptions = widget.options;
const optionKeys = Object.keys(sanitizedOptions);
if (!exemptWidgets.includes(widget.type)) {
["url", "username", "password", "key"].forEach((pO) => {
if (optionKeys.includes(pO)) {
// allow URL in search
if (widget.type !== "search" && pO !== "key") {
delete sanitizedOptions[pO];
}
}
});
// delete private options from the sanitized options
["username", "password", "key"].forEach((pO) => {
if (optionKeys.includes(pO)) {
delete sanitizedOptions[pO];
}
});
// delete url from the sanitized options if the widget is not a search or glances widgeth
if (widget.type !== "search" && widget.type !== "glances" && optionKeys.includes("url")) {
delete sanitizedOptions.url;
}
return {
@@ -78,4 +78,4 @@ export async function getPrivateWidgetOptions(type, widgetIndex) {
});
return (type !== undefined && widgetIndex !== undefined) ? privateOptions.find(o => o.type === type && o.options.index === parseInt(widgetIndex, 10))?.options : privateOptions;
}
}

View File

@@ -55,6 +55,12 @@ export default async function credentialedProxyHandler(req, res, map) {
} else {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
} else if (widget.type === "paperlessngx") {
if (widget.key) {
headers.Authorization = `Token ${widget.key}`;
} else {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
} else {
headers["X-API-Key"] = `${widget.key}`;
}

View File

@@ -57,7 +57,14 @@ export default async function genericProxyHandler(req, res, map) {
}
if (status >= 400) {
logger.debug("HTTP Error %d calling %s//%s%s%s...", status, url.protocol, url.hostname, url.port, url.pathname);
logger.debug(
"HTTP Error %d calling %s//%s%s%s...",
status,
url.protocol,
url.hostname,
url.port ? `:${url.port}` : '',
url.pathname
);
return res.status(status).json({error: {message: "HTTP Error", url: sanitizeErrorURL(url), resultData}});
}

View File

@@ -1,5 +1,7 @@
/* eslint-disable prefer-promise-reject-errors */
/* eslint-disable no-param-reassign */
import { createUnzip } from "node:zlib";
import { http, https } from "follow-redirects";
import { addCookieToJar, setCookieHeader } from "./cookie-jar";
@@ -28,12 +30,19 @@ function handleRequest(requestor, url, params) {
const request = requestor.request(url, params, (response) => {
const data = [];
const contentEncoding = response.headers['content-encoding']?.trim().toLowerCase();
response.on("data", (chunk) => {
let responseContent = response;
if (contentEncoding === 'gzip' || contentEncoding === 'deflate') {
responseContent = createUnzip();
response.pipe(responseContent);
}
responseContent.on("data", (chunk) => {
data.push(chunk);
});
response.on("end", () => {
responseContent.on("end", () => {
addCookieToJar(url, response.headers);
resolve([response.statusCode, response.headers["content-type"], Buffer.concat(data), response.headers]);
});
@@ -81,7 +90,13 @@ export async function httpProxy(url, params = {}) {
return [status, contentType, data, responseHeaders];
}
catch (err) {
logger.error("Error calling %s//%s%s%s...", constructedUrl.protocol, constructedUrl.hostname, constructedUrl.port, constructedUrl.pathname);
logger.error(
"Error calling %s//%s%s%s...",
constructedUrl.protocol,
constructedUrl.hostname,
constructedUrl.port ? `:${constructedUrl.port}` : '',
constructedUrl.pathname
);
logger.error(err);
return [500, "application/json", { error: {message: err?.message ?? "Unknown error", url, rawError: err} }, null];
}

View File

@@ -7,7 +7,11 @@ export default function useWidgetAPI(widget, ...options) {
if (options && options[1]?.refreshInterval) {
config.refreshInterval = options[1].refreshInterval;
}
const { data, error, mutate } = useSWR(formatProxyUrl(widget, ...options), config);
let url = formatProxyUrl(widget, ...options)
if (options[0] === "") {
url = null
}
const { data, error, mutate } = useSWR(url, config);
// make the data error the top-level error
return { data, error: data?.error ?? error, mutate }
}

View File

@@ -16,7 +16,12 @@ export default function Component({ service }) {
}
if (!data) {
return <Container service={service} />;
return (
<Container service={service}>
<Block label="changedetectionio.diffsDetected" />
<Block label="changedetectionio.totalObserved" />
</Container>
);
}
const totalObserved = Object.keys(data).length;

View File

@@ -57,6 +57,7 @@ const components = {
pfsense: dynamic(() => import("./pfsense/component")),
photoprism: dynamic(() => import("./photoprism/component")),
proxmoxbackupserver: dynamic(() => import("./proxmoxbackupserver/component")),
pialert: dynamic(() => import("./pialert/component")),
pihole: dynamic(() => import("./pihole/component")),
plex: dynamic(() => import("./plex/component")),
portainer: dynamic(() => import("./portainer/component")),

View File

@@ -71,6 +71,14 @@ export default async function homeassistantProxyHandler(req, res) {
let queries = defaultQueries;
if (!widget.fields && widget.custom) {
if (typeof widget.custom === 'string') {
try {
widget.custom = JSON.parse(widget.custom)
} catch (error) {
logger.debug("Error parsing HASS widget custom label: %s", JSON.stringify(error));
return res.status(400).json({ error: "Error parsing widget custom label" });
}
}
queries = widget.custom.slice(0, 4);
}

View File

@@ -16,7 +16,7 @@ export default function Component({ service }) {
`/api/kubernetes/stats/${widget.namespace}/${widget.app}?${podSelectorString}`);
if (statsError || statusError) {
return <Container service={service} error={t("widget.api_error")} />;
return <Container service={service} error={statsError ?? statusError} />;
}
if (statusData && statusData.status !== "running") {

View File

@@ -9,21 +9,21 @@ export default function Component({ service }) {
const { widget } = service;
const { data: albumsData, error: albumsError } = useWidgetAPI(widget, "album");
const { data: artistsData, error: artistsError } = useWidgetAPI(widget, "artist");
const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing");
const { data: queueData, error: queueError } = useWidgetAPI(widget, "queue/status");
if (albumsError || wantedError || queueError) {
const finalError = albumsError ?? wantedError ?? queueError;
if (artistsError || wantedError || queueError) {
const finalError = artistsError ?? wantedError ?? queueError;
return <Container service={service} error={finalError} />;
}
if (!albumsData || !wantedData || !queueData) {
if (!artistsData || !wantedData || !queueData) {
return (
<Container service={service}>
<Block label="lidarr.wanted" />
<Block label="lidarr.queued" />
<Block label="lidarr.albums" />
<Block label="lidarr.artists" />
</Container>
);
}
@@ -32,7 +32,7 @@ export default function Component({ service }) {
<Container service={service}>
<Block label="lidarr.wanted" value={t("common.number", { value: wantedData.totalRecords })} />
<Block label="lidarr.queued" value={t("common.number", { value: queueData.totalCount })} />
<Block label="lidarr.albums" value={t("common.number", { value: albumsData.have })} />
<Block label="lidarr.artists" value={t("common.number", { value: artistsData.length })} />
</Container>
);
}

View File

@@ -1,16 +1,12 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import { jsonArrayFilter } from "utils/proxy/api-helpers";
const widget = {
api: "{url}/api/v1/{endpoint}?apikey={key}",
proxyHandler: genericProxyHandler,
mappings: {
album: {
endpoint: "album",
map: (data) => ({
have: jsonArrayFilter(data, (item) => item?.statistics?.percentOfTracks === 100).length,
}),
artist: {
endpoint: "artist",
},
"wanted/missing": {
endpoint: "wanted/missing",

View File

@@ -1,8 +1,8 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: genericProxyHandler,
proxyHandler: credentialedProxyHandler,
mappings: {
"statistics": {

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: pialertData, error: pialertError } = useWidgetAPI(widget, "data");
if (pialertError) {
return <Container service={service} error={pialertError} />;
}
if (!pialertData) {
return (
<Container service={service}>
<Block label="pialert.total" />
<Block label="pialert.connected" />
<Block label="pialert.new_devices" />
<Block label="pialert.down_alerts" />
</Container>
);
}
return (
<Container service={service}>
<Block label="pialert.total" value={t("common.number", { value: parseInt(pialertData[0], 10) })} />
<Block label="pialert.connected" value={t("common.number", { value: parseInt(pialertData[1], 10) })} />
<Block label="pialert.new_devices" value={t("common.number", { value: parseInt(pialertData[3], 10) })} />
<Block label="pialert.down_alerts" value={t("common.number", { value: parseInt(pialertData[4], 10) })} />
</Container>
);
}

View File

@@ -0,0 +1,14 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/php/server/devices.php?action=getDevicesTotals",
proxyHandler: genericProxyHandler,
mappings: {
"data": {
endpoint: "data",
},
},
};
export default widget;

View File

@@ -1,12 +1,8 @@
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: containersData, error: containersError } = useWidgetAPI(widget, "docker/containers/json", {
@@ -27,8 +23,9 @@ export default function Component({ service }) {
);
}
if (containersData.error) {
return <Container service={service} error={t("widget.api_error")} />;
if (containersData.error || containersData.message) {
// containersData can be itself an error object e.g. if environment fails
return <Container service={service} error={ containersData?.error ?? containersData } />;
}
const running = containersData.filter((c) => c.State === "running").length;

View File

@@ -8,7 +8,7 @@ const logger = createLogger("qbittorrentProxyHandler");
async function login(widget) {
logger.debug("qBittorrent is rejecting the request, logging in.");
const loginUrl = new URL(`${widget.url}/api/v2/auth/login`).toString();
const loginBody = `username=${encodeURI(widget.username)}&password=${encodeURI(widget.password)}`;
const loginBody = `username=${encodeURIComponent(widget.username)}&password=${encodeURIComponent(widget.password)}`;
const loginParams = {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },

View File

@@ -23,7 +23,7 @@ export default function Component({ service }) {
<Block label="qnap.cpuUsage" />
<Block label="qnap.memUsage" />
<Block label="qnap.systemTempC" />
<Block label="qnap.poolUsage" />
<Block label={(widget.volume) ? "qnap.volumeUsage" : "qnap.poolUsage" } />
</Container>
);
}
@@ -31,10 +31,30 @@ export default function Component({ service }) {
const cpuUsage = statusData.system.cpu_usage._cdata.replace(' %','');
const totalMemory = statusData.system.total_memory._cdata;
const freeMemory = statusData.system.free_memory._cdata;
const systemTempC = statusData.system.cpu_tempc._text;
const systemTempC = statusData.system.sys_tempc._text;
let volumeTotalSize = 0;
let volumeFreeSize = 0;
let validVolume = true;
const volumeTotalSize = statusData.volume.volumeUse.total_size._cdata;
const volumeFreeSize = statusData.volume.volumeUse.free_size._cdata;
if (Array.isArray(statusData.volume.volumeUseList.volumeUse)) {
if (widget.volume) {
const volumeSelected = statusData.volume.volumeList.volume.findIndex(vl => vl.volumeLabel._cdata === widget.volume);
if (volumeSelected !== -1) {
volumeTotalSize = statusData.volume.volumeUseList.volumeUse[volumeSelected].total_size._cdata;
volumeFreeSize = statusData.volume.volumeUseList.volumeUse[volumeSelected].free_size._cdata;
} else {
validVolume = false;
}
} else {
statusData.volume.volumeUseList.volumeUse.forEach((volume) => {
volumeTotalSize += parseInt(volume.total_size._cdata, 10);
volumeFreeSize += parseInt(volume.free_size._cdata, 10);
});
}
} else {
volumeTotalSize = statusData.volume.volumeUseList.volumeUse.total_size._cdata;
volumeFreeSize = statusData.volume.volumeUseList.volumeUse.free_size._cdata;
}
return (
<Container service={service}>
@@ -51,8 +71,8 @@ export default function Component({ service }) {
value={t("common.number", { value: systemTempC, maximumFractionDigits: 1, style: "unit", unit: "celsius" })}
/>
<Block
label="qnap.poolUsage"
value={t("common.percent", { value: (((volumeTotalSize - volumeFreeSize) / volumeTotalSize) * 100).toFixed(0) })}
label={(widget.volume) ? "qnap.volumeUsage" : "qnap.poolUsage" }
value={(validVolume) ? t("common.percent", { value: (((volumeTotalSize - volumeFreeSize) / volumeTotalSize) * 100).toFixed(0) }) : t("qnap.invalid") }
/>
</Container>
);

View File

@@ -57,8 +57,23 @@ async function apiCall(widget, endpoint, service) {
return { status, contentType, data: null, responseHeaders };
}
const dataDecoded = xml2json(data.toString(), { compact: true });
return { status, contentType, data: JSON.parse(dataDecoded.toString()), responseHeaders };
let dataDecoded = JSON.parse(xml2json(data.toString(), { compact: true }).toString());
if (dataDecoded.QDocRoot.authPassed._cdata === '0') {
logger.error("QNAP API rejected the request, attempting to obtain new session token");
key = await login(widget, service);
apiUrl = new URL(formatApiCall(`${endpoint}&sid=${key}`, widget));
[status, contentType, data, responseHeaders] = await httpProxy(apiUrl);
if (status !== 200) {
logger.error("Error getting data from QNAP: %s status %d. Data: %s", apiUrl, status, data);
return { status, contentType, data: null, responseHeaders };
}
dataDecoded = JSON.parse(xml2json(data.toString(), { compact: true }).toString());
}
return { status, contentType, data: dataDecoded, responseHeaders };
}
export default async function qnapProxyHandler(req, res) {
@@ -84,6 +99,6 @@ export default async function qnapProxyHandler(req, res) {
return res.status(200).send({
system: systemStatsData.QDocRoot.func.ownContent.root,
volume: volumeStatsData.QDocRoot.volumeUseList
volume: volumeStatsData.QDocRoot
});
}

View File

@@ -1,22 +1,41 @@
import { useTranslation } from "next-i18next";
import { useCallback } from 'react';
import QueueEntry from "../../components/widgets/queue/queueEntry";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
function getProgress(sizeLeft, size) {
return sizeLeft === 0 ? 100 : (1 - sizeLeft / size) * 100
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movie");
const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue/status");
const { data: queueDetailsData, error: queueDetailsError } = useWidgetAPI(widget, "queue/details");
if (moviesError || queuedError) {
const finalError = moviesError ?? queuedError;
const formatDownloadState = useCallback((downloadState) => {
switch (downloadState) {
case "importPending":
return "import pending";
case "failedPending":
return "failed pending";
default:
return downloadState;
}
}, []);
if (moviesError || queuedError || queueDetailsError) {
const finalError = moviesError ?? queuedError ?? queueDetailsError;
return <Container service={service} error={finalError} />;
}
if (!moviesData || !queuedData) {
if (!moviesData || !queuedData || !queueDetailsData) {
return (
<Container service={service}>
<Block label="radarr.wanted" />
@@ -27,12 +46,27 @@ export default function Component({ service }) {
);
}
const enableQueue = widget?.enableQueue && Array.isArray(queueDetailsData) && queueDetailsData.length > 0;
return (
<Container service={service}>
<Block label="radarr.wanted" value={t("common.number", { value: moviesData.wanted })} />
<Block label="radarr.missing" value={t("common.number", { value: moviesData.missing })} />
<Block label="radarr.queued" value={t("common.number", { value: queuedData.totalCount })} />
<Block label="radarr.movies" value={t("common.number", { value: moviesData.have })} />
</Container>
<>
<Container service={service}>
<Block label="radarr.wanted" value={t("common.number", { value: moviesData.wanted })} />
<Block label="radarr.missing" value={t("common.number", { value: moviesData.missing })} />
<Block label="radarr.queued" value={t("common.number", { value: queuedData.totalCount })} />
<Block label="radarr.movies" value={t("common.number", { value: moviesData.have })} />
</Container>
{enableQueue &&
queueDetailsData.map((queueEntry) => (
<QueueEntry
progress={getProgress(queueEntry.sizeLeft, queueEntry.size)}
timeLeft={queueEntry.timeLeft}
title={moviesData.all.find((entry) => entry.id === queueEntry.movieId)?.title ?? t("radarr.unknown")}
activity={formatDownloadState(queueEntry.trackedDownloadState)}
key={`${queueEntry.movieId}-${queueEntry.sizeLeft}`}
/>
))
}
</>
);
}

View File

@@ -1,5 +1,5 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import { jsonArrayFilter } from "utils/proxy/api-helpers";
import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers";
const widget = {
api: "{url}/api/v3/{endpoint}?apikey={key}",
@@ -12,6 +12,7 @@ const widget = {
wanted: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile && item.isAvailable).length,
have: jsonArrayFilter(data, (item) => item.hasFile).length,
missing: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile).length,
all: asJson(data),
}),
},
"queue/status": {
@@ -20,6 +21,37 @@ const widget = {
"totalCount"
]
},
"queue/details": {
endpoint: "queue/details",
map: (data) => asJson(data).map((entry) => ({
trackedDownloadState: entry.trackedDownloadState,
trackedDownloadStatus: entry.trackedDownloadStatus,
timeLeft: entry.timeleft,
size: entry.size,
sizeLeft: entry.sizeleft,
movieId: entry.movieId ?? entry.id,
status: entry.status
})).sort((a, b) => {
const downloadingA = a.trackedDownloadState === "downloading"
const downloadingB = b.trackedDownloadState === "downloading"
if (downloadingA && !downloadingB) {
return -1;
}
if (downloadingB && !downloadingA) {
return 1;
}
const percentA = a.sizeLeft / a.size;
const percentB = b.sizeLeft / b.size;
if (percentA < percentB) {
return -1;
}
if (percentA > percentB) {
return 1;
}
return 0;
})
},
},
};

View File

@@ -1,9 +1,26 @@
import { useTranslation } from "next-i18next";
import { useCallback } from 'react';
import QueueEntry from "../../components/widgets/queue/queueEntry";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
function getProgress(sizeLeft, size) {
return sizeLeft === 0 ? 100 : (1 - sizeLeft / size) * 100
}
function getTitle(queueEntry, seriesData) {
let title = ''
const seriesTitle = seriesData.find((entry) => entry.id === queueEntry.seriesId)?.title;
if (seriesTitle) title += `${seriesTitle}: `;
const { episodeTitle } = queueEntry;
if (episodeTitle) title += episodeTitle;
if (title === '') return null;
return title;
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
@@ -11,13 +28,25 @@ export default function Component({ service }) {
const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing");
const { data: queuedData, error: queuedError } = useWidgetAPI(widget, "queue");
const { data: seriesData, error: seriesError } = useWidgetAPI(widget, "series");
const { data: queueDetailsData, error: queueDetailsError } = useWidgetAPI(widget, "queue/details");
if (wantedError || queuedError || seriesError) {
const finalError = wantedError ?? queuedError ?? seriesError;
const formatDownloadState = useCallback((downloadState) => {
switch (downloadState) {
case "importPending":
return "import pending";
case "failedPending":
return "failed pending";
default:
return downloadState;
}
}, []);
if (wantedError || queuedError || seriesError || queueDetailsError) {
const finalError = wantedError ?? queuedError ?? seriesError ?? queueDetailsError;
return <Container service={service} error={finalError} />;
}
if (!wantedData || !queuedData || !seriesData) {
if (!wantedData || !queuedData || !seriesData || !queueDetailsData) {
return (
<Container service={service}>
<Block label="sonarr.wanted" />
@@ -27,11 +56,26 @@ export default function Component({ service }) {
);
}
const enableQueue = widget?.enableQueue && Array.isArray(queueDetailsData) && queueDetailsData.length > 0;
return (
<Container service={service}>
<Block label="sonarr.wanted" value={t("common.number", { value: wantedData.totalRecords })} />
<Block label="sonarr.queued" value={t("common.number", { value: queuedData.totalRecords })} />
<Block label="sonarr.series" value={t("common.number", { value: seriesData.total })} />
</Container>
<>
<Container service={service}>
<Block label="sonarr.wanted" value={t("common.number", { value: wantedData.totalRecords })} />
<Block label="sonarr.queued" value={t("common.number", { value: queuedData.totalRecords })} />
<Block label="sonarr.series" value={t("common.number", { value: seriesData.length })} />
</Container>
{enableQueue &&
queueDetailsData.map((queueEntry) => (
<QueueEntry
progress={getProgress(queueEntry.sizeLeft, queueEntry.size)}
timeLeft={queueEntry.timeLeft}
title={getTitle(queueEntry, seriesData) ?? t("sonarr.unknown")}
activity={formatDownloadState(queueEntry.trackedDownloadState)}
key={`${queueEntry.seriesId}-${queueEntry.sizeLeft}`}
/>
))
}
</>
);
}

View File

@@ -8,9 +8,10 @@ const widget = {
mappings: {
series: {
endpoint: "series",
map: (data) => ({
total: asJson(data).length,
})
map: (data) => asJson(data).map((entry) => ({
title: entry.title,
id: entry.id
}))
},
queue: {
endpoint: "queue",
@@ -24,6 +25,39 @@ const widget = {
"totalRecords"
]
},
"queue/details": {
endpoint: "queue/details",
map: (data) => asJson(data).map((entry) => ({
trackedDownloadState: entry.trackedDownloadState,
trackedDownloadStatus: entry.trackedDownloadStatus,
timeLeft: entry.timeleft,
size: entry.size,
sizeLeft: entry.sizeleft,
seriesId: entry.seriesId,
episodeTitle: entry.episode?.title ?? entry.title,
episodeId: entry.episodeId ?? entry.id,
status: entry.status,
})).sort((a, b) => {
const downloadingA = a.trackedDownloadState === "downloading"
const downloadingB = b.trackedDownloadState === "downloading"
if (downloadingA && !downloadingB) {
return -1;
}
if (downloadingB && !downloadingA) {
return 1;
}
const percentA = a.sizeLeft / a.size;
const percentB = b.sizeLeft / b.size;
if (percentA < percentB) {
return -1;
}
if (percentA > percentB) {
return 1;
}
return 0;
})
}
},
};

View File

@@ -51,6 +51,7 @@ import paperlessngx from "./paperlessngx/widget";
import pfsense from "./pfsense/widget";
import photoprism from "./photoprism/widget";
import proxmoxbackupserver from "./proxmoxbackupserver/widget";
import pialert from "./pialert/widget";
import pihole from "./pihole/widget";
import plex from "./plex/widget";
import portainer from "./portainer/widget";
@@ -138,6 +139,7 @@ const widgets = {
pfsense,
photoprism,
proxmoxbackupserver,
pialert,
pihole,
plex,
portainer,

View File

@@ -32,4 +32,27 @@ module.exports = {
},
},
plugins: [tailwindForms, tailwindScrollbars],
};
// always include these in build as classes are dynamically constructed
safelist: [
'backdrop-blur',
'backdrop-blur-sm',
'backdrop-blur-md',
'backdrop-blur-xl',
'backdrop-saturate-0',
'backdrop-saturate-50',
'backdrop-saturate-100',
'backdrop-saturate-150',
'backdrop-saturate-200',
'backdrop-brightness-0',
'backdrop-brightness-50',
'backdrop-brightness-75',
'backdrop-brightness-90',
'backdrop-brightness-95',
'backdrop-brightness-100',
'backdrop-brightness-105',
'backdrop-brightness-110',
'backdrop-brightness-125',
'backdrop-brightness-150',
'backdrop-brightness-200',
],
}