Compare commits

...

14 Commits

Author SHA1 Message Date
github-actions[bot]
0af975b3d9 New Crowdin translations by GitHub Action (#3096)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-03-24 00:09:15 -07:00
shamoon
01a2495e47 Fix: correctly handle direct tab navigation with encoded chars (#3172) 2024-03-23 23:22:27 -07:00
SunnyCloudy
e4b4eba445 Fix: Glances widget display (#3164)
Co-Authored-By: shamoon <4887959+shamoon@users.noreply.github.com>
2024-03-23 23:21:02 -07:00
Dawud
885b2624a8 Enhancement: support Jackett widget with admin password (#3097) (#3165)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-03-23 01:34:07 -07:00
Joseph M
f06214a295 Documentation: note that "issue" permissions are also required for Gitea widget (#3157) 2024-03-21 11:59:31 -07:00
zmweske
7627f9c5a7 Documentation: add info re pfSense API token auth (#3145) 2024-03-20 13:21:56 -07:00
she11sh0cked
556450c8de Fix: log error when getting services from Docker server fails (#3147) 2024-03-20 07:26:11 -07:00
Lukas H
edc38c93e2 Documentation: fix minor typo (#3136) 2024-03-18 15:56:04 -07:00
shamoon
b9e1a514cb Update settings.md 2024-03-17 08:06:49 -07:00
shamoon
7e0fbed06b Remove commented out code 2024-03-15 07:23:19 -07:00
Rob Gonnella
358633638f Documentation: Adds sticky cookie note for k8s multiple replica setups (#3120) 2024-03-14 21:07:35 -07:00
shamoon
fa1d343f2a Documentation: add optional auth to whatsupdocker documentation
Co-Authored-By: zmweske <31971632+zmweske@users.noreply.github.com>
2024-03-14 21:07:35 -07:00
RoboMagus
247f73f0db Fix: Add alternative 'offline' status to EspHome widget (#3107) 2024-03-11 07:06:27 -07:00
shamoon
54db9ac551 Fix: field parsing fails with docker labels (#3101) 2024-03-10 22:27:38 -07:00
61 changed files with 803 additions and 314 deletions

View File

@@ -85,7 +85,7 @@ Or you may pass the path to a local image relative to the `/app/public` director
## Theme ## Theme
You can configure a fixed them (and disable the theme switcher) by passing the `theme` option, like so: You can configure a fixed theme (and disable the theme switcher) by passing the `theme` option, like so:
```yaml ```yaml
theme: dark # or light theme: dark # or light
@@ -211,13 +211,13 @@ layout:
### Five Columns ### Five Columns
You can add a fifth column (when `style: columns` which is default) by adding: You can add a fifth column to services (when `style: columns` which is default) by adding:
```yaml ```yaml
fiveColumns: true fiveColumns: true
``` ```
By default homepage will max out at 4 columns for column style By default homepage will max out at 4 columns for services with `columns` style
### Collapsible sections ### Collapsible sections

View File

@@ -361,3 +361,33 @@ spec:
port: port:
number: 3000 number: 3000
``` ```
### Multiple Replicas
If you plan to deploy homepage with a replica count greater than 1, you may
want to consider enabling sticky sessions on the homepage route. This will
prevent unnecessary re-renders on page loads and window / tab focusing. The
procedure for enabling sticky sessions depends on your Ingress controller. Below
is an example using Traefik as the Ingress controller.
```
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: homepage.example.com
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`homepage.example.com`)
services:
- kind: Service
name: homepage
port: 3000
sticky:
cookie:
httpOnly: true
secure: true
sameSite: none
```

View File

@@ -7,7 +7,10 @@ Learn more about [ESPHome](https://esphome.io/).
Show the number of ESPHome devices based on their state. Show the number of ESPHome devices based on their state.
Allowed fields: `["total", "online", "offline", "unknown"]`. Allowed fields: `["total", "online", "offline", "offline_alt", "unknown"]` (maximum of 4).
By default ESPHome will only mark devices as `offline` if their address cannot be pinged. If it has an invalid config or its name cannot be resolved (by DNS) its status will be marked as `unknown`.
To group both `offline` and `unknown` devices together, users should use the `offline_alt` field instead. This sums all devices that are _not_ online together.
```yaml ```yaml
widget: widget:

View File

@@ -5,7 +5,7 @@ description: Gitea Widget Configuration
Learn more about [Gitea](https://gitea.com). Learn more about [Gitea](https://gitea.com).
API token requires `notifications` and `repository` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens.
Allowed fields: ["notifications", "issues", "pulls"] Allowed fields: ["notifications", "issues", "pulls"]

View File

@@ -19,6 +19,8 @@ widget:
password: pass # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances
metric: cpu metric: cpu
diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
refreshInterval: 5000 # optional - in milliseconds, defaults to 1000 or more, depending on the metric
pointsLimit: 15 # optional, defaults to 15
``` ```
_Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_ _Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_

View File

@@ -5,7 +5,7 @@ description: Jackett Widget Configuration
Learn more about [Jackett](https://github.com/Jackett/Jackett). Learn more about [Jackett](https://github.com/Jackett/Jackett).
Jackett must not have any authentication for the widget to work. If Jackett has an admin password set, you must set the `password` field for the widget to work.
Allowed fields: `["configured", "errored"]`. Allowed fields: `["configured", "errored"]`.
@@ -13,5 +13,5 @@ Allowed fields: `["configured", "errored"]`.
widget: widget:
type: jackett type: jackett
url: http://jackett.host.or.ip url: http://jackett.host.or.ip
key: jackettapikey password: jackettadminpassword # optional
``` ```

View File

@@ -9,9 +9,9 @@ This widget requires the installation of the [pfsense-api](https://github.com/ja
Once pfSense API is installed, you can set the API to be read-only in System > API > Settings. Once pfSense API is installed, you can set the API to be read-only in System > API > Settings.
Currently the only supported authentication mode is 'Local Database'. There are two currently supported authentication modes: 'Local Database' and 'API Token'. For 'Local Database', use `username` and `password` with the credentials of an admin user. For 'API Token', utilize the `headers` parameter with `client_token` and `client_id` obtained from pfSense as shown below. Do not use both headers and username / password.
WAN interface to monitor can be defined by updating the `wan` param. The interface to monitor is defined by updating the `wan` parameter. It should be referenced as it is shown under Interfaces > Assignments in pfSense.
Load is returned instead of cpu utilization. This is a limitation in the pfSense API due to the complexity of this calculation. This may become available in future versions. Load is returned instead of cpu utilization. This is a limitation in the pfSense API due to the complexity of this calculation. This may become available in future versions.
@@ -21,7 +21,10 @@ Allowed fields: `["load", "memory", "temp", "wanStatus", "wanIP", "disk"]` (maxi
widget: widget:
type: pfsense type: pfsense
url: http://pfsense.host.or.ip:port url: http://pfsense.host.or.ip:port
username: user username: user # optional, or API token
password: pass password: pass # optional, or API token
headers: # optional, or username/password
Authorization: client_id client_token
wan: igb0 wan: igb0
fields: ["load", "memory", "temp", "wanStatus"] # optional
``` ```

View File

@@ -1,11 +1,9 @@
--- ---
title: Whats Up Docker title: What's Up Docker
description: WhatsUpDocker Widget Configuration description: What's Up Docker Widget Configuration
--- ---
Learn more about [Whats Up Docker](https://github.com/fmartinou/whats-up-docker). Learn more about [What's Up Docker](https://github.com/fmartinou/whats-up-docker).
Currently requires unauthenticated whatsupdocker instance.
Allowed fields: `["monitoring", "updates"]`. Allowed fields: `["monitoring", "updates"]`.
@@ -13,4 +11,6 @@ Allowed fields: `["monitoring", "updates"]`.
widget: widget:
type: whatsupdocker type: whatsupdocker
url: http://whatsupdocker:port url: http://whatsupdocker:port
username: username # optional
password: password # optional
``` ```

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Vanlyn", "offline": "Vanlyn",
"offline_alt": "Vanlyn",
"online": "Aanlyn", "online": "Aanlyn",
"total": "Totaal", "total": "Totaal",
"unknown": "Onbekend" "unknown": "Onbekend"
@@ -863,5 +864,13 @@
"users": "Gebruikers", "users": "Gebruikers",
"recipes": "Resepte", "recipes": "Resepte",
"keywords": "Sleutelwoorde" "keywords": "Sleutelwoorde"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "Met Waarborg",
"locations": "Plekke",
"labels": "Etikette",
"users": "Gebruikers",
"totalValue": "Totale Waarde"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "غير متصل", "offline": "غير متصل",
"offline_alt": "غير متصل",
"online": "مُتّصل", "online": "مُتّصل",
"total": "المجموع", "total": "المجموع",
"unknown": "مجهول" "unknown": "مجهول"
@@ -863,5 +864,13 @@
"users": "المستخدمون", "users": "المستخدمون",
"recipes": "وصفات", "recipes": "وصفات",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "المستخدمون",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Изключен", "offline": "Изключен",
"offline_alt": "Изключен",
"online": "Online", "online": "Online",
"total": "Общо", "total": "Общо",
"unknown": "Неизв." "unknown": "Неизв."
@@ -863,5 +864,13 @@
"users": "Потребители", "users": "Потребители",
"recipes": "Рецепти", "recipes": "Рецепти",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Потребители",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Fora de línia", "offline": "Fora de línia",
"offline_alt": "Fora de línia",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Desconegut" "unknown": "Desconegut"
@@ -863,5 +864,13 @@
"users": "Usuaris", "users": "Usuaris",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Usuaris",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Celkem", "total": "Celkem",
"unknown": "Neznámý" "unknown": "Neznámý"
@@ -863,5 +864,13 @@
"users": "Uživatelé", "users": "Uživatelé",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Uživatelé",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Ukendt" "unknown": "Ukendt"
@@ -863,5 +864,13 @@
"users": "Brugere", "users": "Brugere",
"recipes": "Opskrifter", "recipes": "Opskrifter",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Brugere",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Gesamt", "total": "Gesamt",
"unknown": "Unbekannt" "unknown": "Unbekannt"
@@ -863,5 +864,13 @@
"users": "Benutzer", "users": "Benutzer",
"recipes": "Rezepte", "recipes": "Rezepte",
"keywords": "Schlagwörter" "keywords": "Schlagwörter"
},
"homebox": {
"items": "Objekte",
"totalWithWarranty": "Mit Garantie",
"locations": "Orte",
"labels": "Labels",
"users": "Benutzer",
"totalValue": "Gesamtwert"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Εκτός σύνδεσης", "offline": "Εκτός σύνδεσης",
"offline_alt": "Εκτός σύνδεσης",
"online": "Συνδεδεμένοι", "online": "Συνδεδεμένοι",
"total": "Σύνολο", "total": "Σύνολο",
"unknown": "Άγνωστο" "unknown": "Άγνωστο"
@@ -863,5 +864,13 @@
"users": "Χρήστες", "users": "Χρήστες",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Χρήστες",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Unknown" "unknown": "Unknown"

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Malkonekta", "offline": "Malkonekta",
"offline_alt": "Malkonekta",
"online": "Online", "online": "Online",
"total": "Totalo", "total": "Totalo",
"unknown": "Nekonata" "unknown": "Nekonata"
@@ -863,5 +864,13 @@
"users": "Uzantoj", "users": "Uzantoj",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Uzantoj",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Desconectado", "offline": "Desconectado",
"offline_alt": "Desconectado",
"online": "En línea", "online": "En línea",
"total": "Total", "total": "Total",
"unknown": "Desconocido" "unknown": "Desconocido"
@@ -544,7 +545,7 @@
"channels": "Canales", "channels": "Canales",
"hd": "Alta definición", "hd": "Alta definición",
"tunerCount": "Tuners", "tunerCount": "Tuners",
"channelNumber": "Channel", "channelNumber": "Canal",
"channelNetwork": "Network", "channelNetwork": "Network",
"signalStrength": "Strength", "signalStrength": "Strength",
"signalQuality": "Quality", "signalQuality": "Quality",
@@ -850,9 +851,9 @@
"playDuration": "Time Watched", "playDuration": "Time Watched",
"sceneSize": "Scenes Size", "sceneSize": "Scenes Size",
"sceneDuration": "Scenes Duration", "sceneDuration": "Scenes Duration",
"images": "Images", "images": "Imágenes",
"imageSize": "Images Size", "imageSize": "Images Size",
"galleries": "Galleries", "galleries": "Galerías",
"performers": "Performers", "performers": "Performers",
"studios": "Studios", "studios": "Studios",
"movies": "Películas", "movies": "Películas",
@@ -863,5 +864,13 @@
"users": "Usuarios", "users": "Usuarios",
"recipes": "Recetas", "recipes": "Recetas",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "Con Garantía",
"locations": "Ubicaciones",
"labels": "Labels",
"users": "Usuarios",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Guztira", "total": "Guztira",
"unknown": "Ezezaguna" "unknown": "Ezezaguna"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Yhteensä", "total": "Yhteensä",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Hors ligne", "offline": "Hors ligne",
"offline_alt": "Hors ligne",
"online": "En ligne", "online": "En ligne",
"total": "Total", "total": "Total",
"unknown": "Inconnu" "unknown": "Inconnu"
@@ -863,5 +864,13 @@
"users": "Utilisateurs", "users": "Utilisateurs",
"recipes": "Recettes", "recipes": "Recettes",
"keywords": "Mots-clés" "keywords": "Mots-clés"
},
"homebox": {
"items": "Objets",
"totalWithWarranty": "Avec garantie",
"locations": "Emplacements",
"labels": "Étiquettes",
"users": "Utilisateurs",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "כבוי", "offline": "כבוי",
"offline_alt": "כבוי",
"online": "Online", "online": "Online",
"total": "סה\"כ", "total": "סה\"כ",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -11,14 +11,14 @@
"percent": "{{value, percent}}", "percent": "{{value, percent}}",
"number": "{{value, number}}", "number": "{{value, number}}",
"ms": "{{value, number}}", "ms": "{{value, number}}",
"date": "{{value, date}}", "date": "{value, date}",
"relativeDate": "{{value, relativeDate}}", "relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}", "uptime": "{{value, uptime}}",
"months": "mo", "months": "माह",
"days": "d", "days": "d",
"hours": "h", "hours": "घं.",
"minutes": "m", "minutes": "m",
"seconds": "s" "seconds": "पल"
}, },
"widget": { "widget": {
"missing_type": "Missing Widget Type: {{type}}", "missing_type": "Missing Widget Type: {{type}}",
@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Unknown" "unknown": "Unknown"
@@ -411,7 +412,7 @@
"free": "Free", "free": "Free",
"used": "Used", "used": "Used",
"days": "d", "days": "d",
"hours": "h", "hours": "घं.",
"crit": "Crit", "crit": "Crit",
"read": "Read", "read": "Read",
"write": "Write", "write": "Write",
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Ukupno", "total": "Ukupno",
"unknown": "Nepoznato" "unknown": "Nepoznato"
@@ -863,5 +864,13 @@
"users": "Korisnici", "users": "Korisnici",
"recipes": "Recepti", "recipes": "Recepti",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Korisnici",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Nem elérhető", "offline": "Nem elérhető",
"offline_alt": "Nem elérhető",
"online": "Csatlakozva", "online": "Csatlakozva",
"total": "Összes", "total": "Összes",
"unknown": "Ismeretlen" "unknown": "Ismeretlen"
@@ -124,8 +125,8 @@
"flood": { "flood": {
"download": "Letöltés", "download": "Letöltés",
"upload": "Feltöltés", "upload": "Feltöltés",
"leech": "Letöltés", "leech": "Leech",
"seed": "Feltöltés" "seed": "Seed"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Előfizetések", "subscriptions": "Előfizetések",
@@ -202,14 +203,14 @@
"transmission": { "transmission": {
"download": "Letöltés", "download": "Letöltés",
"upload": "Feltöltés", "upload": "Feltöltés",
"leech": "Letöltés", "leech": "Leech",
"seed": "Feltöltés" "seed": "Seed"
}, },
"qbittorrent": { "qbittorrent": {
"download": "Letöltés", "download": "Letöltés",
"upload": "Feltöltés", "upload": "Feltöltés",
"leech": "Letöltés", "leech": "Leech",
"seed": "Feltöltés" "seed": "Seed"
}, },
"qnap": { "qnap": {
"cpuUsage": "Processzor Használat", "cpuUsage": "Processzor Használat",
@@ -222,14 +223,14 @@
"deluge": { "deluge": {
"download": "Letöltés", "download": "Letöltés",
"upload": "Feltöltés", "upload": "Feltöltés",
"leech": "Letöltés", "leech": "Leech",
"seed": "Feltöltés" "seed": "Seed"
}, },
"downloadstation": { "downloadstation": {
"download": "Letöltés", "download": "Letöltés",
"upload": "Feltöltés", "upload": "Feltöltés",
"leech": "Letöltés", "leech": "Leech",
"seed": "Feltöltés" "seed": "Seed"
}, },
"sonarr": { "sonarr": {
"wanted": "Keresett", "wanted": "Keresett",
@@ -396,7 +397,7 @@
"proxmox": { "proxmox": {
"mem": "RAM", "mem": "RAM",
"cpu": "Processzor", "cpu": "Processzor",
"lxc": "LXC", "lxc": "LXC-k",
"vms": "VM-ek" "vms": "VM-ek"
}, },
"glances": { "glances": {
@@ -525,7 +526,7 @@
"playlists": "Lejátszási listák" "playlists": "Lejátszási listák"
}, },
"truenas": { "truenas": {
"load": "Rendszerterheltség", "load": "Rendszerterhelés",
"uptime": "Üzemidő", "uptime": "Üzemidő",
"alerts": "Riasztások" "alerts": "Riasztások"
}, },
@@ -543,14 +544,14 @@
"hdhomerun": { "hdhomerun": {
"channels": "Csatornák", "channels": "Csatornák",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "Tuner-ek",
"channelNumber": "Channel", "channelNumber": "Csatorna",
"channelNetwork": "Network", "channelNetwork": "Hálózat",
"signalStrength": "Strength", "signalStrength": "Erősség",
"signalQuality": "Quality", "signalQuality": "Minőség",
"symbolQuality": "Quality", "symbolQuality": "Minőség",
"networkRate": "Bitráta", "networkRate": "Bitráta",
"clientIP": "Client" "clientIP": "Kliens"
}, },
"scrutiny": { "scrutiny": {
"passed": "Megfelelt", "passed": "Megfelelt",
@@ -797,10 +798,10 @@
}, },
"openwrt": { "openwrt": {
"uptime": "Üzemidő", "uptime": "Üzemidő",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "Átlag CPU terhelés (5p)",
"up": "Fel", "up": "Fel",
"down": "Le", "down": "Le",
"bytesTx": "Transmitted", "bytesTx": "Továbbított",
"bytesRx": "Fogadott" "bytesRx": "Fogadott"
}, },
"uptimerobot": { "uptimerobot": {
@@ -833,35 +834,43 @@
"criticals": "Kritikusok" "criticals": "Kritikusok"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Események",
"plants": "Plants", "plants": "Növények",
"photos": "Fényképek", "photos": "Fényképek",
"species": "Species" "species": "Fajok"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Üzenetek",
"issues": "Problémák", "issues": "Problémák",
"pulls": "Pull Requests" "pulls": "Pull request-ek"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Jelenetek",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Lejátszott jelenetek",
"playCount": "Total Plays", "playCount": "Összes leátszás",
"playDuration": "Time Watched", "playDuration": "Nézett idő",
"sceneSize": "Scenes Size", "sceneSize": "Jelenetek mérete",
"sceneDuration": "Scenes Duration", "sceneDuration": "Jelenetek hossza",
"images": "Images", "images": "Képek",
"imageSize": "Images Size", "imageSize": "Képek mérete",
"galleries": "Galleries", "galleries": "Galériák",
"performers": "Performers", "performers": "Előadók",
"studios": "Studios", "studios": "Stúdiók",
"movies": "Film", "movies": "Film",
"tags": "Címkék", "tags": "Címkék",
"oCount": "O Count" "oCount": "O szám"
}, },
"tandoor": { "tandoor": {
"users": "Felhasználók", "users": "Felhasználók",
"recipes": "Receptek", "recipes": "Receptek",
"keywords": "Keywords" "keywords": "Kulcsszavak"
},
"homebox": {
"items": "Tárgyak",
"totalWithWarranty": "Garanciával",
"locations": "Helyek",
"labels": "Címkék",
"users": "Felhasználók",
"totalValue": "Teljes érték"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Tidak Diketahui" "unknown": "Tidak Diketahui"
@@ -863,5 +864,13 @@
"users": "Pengguna", "users": "Pengguna",
"recipes": "Resep", "recipes": "Resep",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Pengguna",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Non in linea", "offline": "Non in linea",
"offline_alt": "Non in linea",
"online": "Online", "online": "Online",
"total": "Totale", "total": "Totale",
"unknown": "Sconosciuto" "unknown": "Sconosciuto"
@@ -863,5 +864,13 @@
"users": "Utenti", "users": "Utenti",
"recipes": "Ricette", "recipes": "Ricette",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Utenti",
"totalValue": "Total Value"
} }
} }

View File

@@ -14,7 +14,7 @@
"date": "{{value, date}}", "date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}", "relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}", "uptime": "{{value, uptime}}",
"months": "mo", "months": "",
"days": "日", "days": "日",
"hours": "時間", "hours": "時間",
"minutes": "分", "minutes": "分",
@@ -92,7 +92,7 @@
"siteMonitor": { "siteMonitor": {
"http_status": "HTTP ステータス", "http_status": "HTTP ステータス",
"error": "エラー", "error": "エラー",
"response": "Response", "response": "応答",
"down": "下へ", "down": "下へ",
"up": "上へ", "up": "上へ",
"not_available": "利用できません。" "not_available": "利用できません。"
@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "オフライン", "offline": "オフライン",
"offline_alt": "オフライン",
"online": "オンライン", "online": "オンライン",
"total": "合計", "total": "合計",
"unknown": "不明" "unknown": "不明"
@@ -133,21 +134,21 @@
}, },
"fritzbox": { "fritzbox": {
"connectionStatus": "状態", "connectionStatus": "状態",
"connectionStatusUnconfigured": "Unconfigured", "connectionStatusUnconfigured": "未設定",
"connectionStatusConnecting": "Connecting", "connectionStatusConnecting": "接続中",
"connectionStatusAuthenticating": "Authenticating", "connectionStatusAuthenticating": "認証中",
"connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusPendingDisconnect": "接続を切断する",
"connectionStatusDisconnecting": "Disconnecting", "connectionStatusDisconnecting": "接続を切断中",
"connectionStatusDisconnected": "Disconnected", "connectionStatusDisconnected": "切断されました",
"connectionStatusConnected": "接続済み", "connectionStatusConnected": "接続済み",
"uptime": "稼働時間", "uptime": "稼働時間",
"maxDown": "Max. Down", "maxDown": "最大ダウン",
"maxUp": "Max. Up", "maxUp": "最大アップ",
"down": "下へ", "down": "下へ",
"up": "上へ", "up": "上へ",
"received": "受信済み", "received": "受信済み",
"sent": "送信済み", "sent": "送信済み",
"externalIPAddress": "Ext. IP" "externalIPAddress": "退出ID"
}, },
"caddy": { "caddy": {
"upstreams": "アップストリーム", "upstreams": "アップストリーム",
@@ -543,7 +544,7 @@
"hdhomerun": { "hdhomerun": {
"channels": "チャンネル", "channels": "チャンネル",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "チューナー",
"channelNumber": "チャンネル", "channelNumber": "チャンネル",
"channelNetwork": "ネットワーク", "channelNetwork": "ネットワーク",
"signalStrength": "強さ", "signalStrength": "強さ",
@@ -562,7 +563,7 @@
"total": "合計" "total": "合計"
}, },
"peanut": { "peanut": {
"battery_charge": "Battery Charge", "battery_charge": "バッテリー充電",
"ups_load": "UPS 負荷", "ups_load": "UPS 負荷",
"ups_status": "UPS 状態", "ups_status": "UPS 状態",
"online": "オンライン", "online": "オンライン",
@@ -825,43 +826,51 @@
"noEventsFound": "予定が見つかりません" "noEventsFound": "予定が見つかりません"
}, },
"romm": { "romm": {
"platforms": "Platforms", "platforms": "プラットフォーム",
"totalRoms": "Total ROMs" "totalRoms": "ROMの合計"
}, },
"netdata": { "netdata": {
"warnings": "警告", "warnings": "警告",
"criticals": "重大" "criticals": "重大"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "イベント",
"plants": "Plants", "plants": "植物",
"photos": "写真", "photos": "写真",
"species": "Species" "species": ""
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "通知",
"issues": "課題", "issues": "課題",
"pulls": "Pull Requests" "pulls": "プルリクエスト"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "シーン",
"scenesPlayed": "Scenes Played", "scenesPlayed": "再生されたシーン",
"playCount": "Total Plays", "playCount": "合計再生数",
"playDuration": "Time Watched", "playDuration": "視聴時間",
"sceneSize": "Scenes Size", "sceneSize": "シーンサイズ",
"sceneDuration": "Scenes Duration", "sceneDuration": "シーンの長さ",
"images": "Images", "images": "画像",
"imageSize": "Images Size", "imageSize": "画像サイズ",
"galleries": "Galleries", "galleries": "ギャラリー",
"performers": "Performers", "performers": "出演者",
"studios": "Studios", "studios": "スタジオ",
"movies": "映画", "movies": "映画",
"tags": "タグ", "tags": "タグ",
"oCount": "O Count" "oCount": "O カウント"
}, },
"tandoor": { "tandoor": {
"users": "ユーザ", "users": "ユーザ",
"recipes": "レシピ", "recipes": "レシピ",
"keywords": "Keywords" "keywords": "キーワード"
},
"homebox": {
"items": "アイテム",
"totalWithWarranty": "保証付き",
"locations": "場所",
"labels": "ラベル",
"users": "ユーザ",
"totalValue": "合計値"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "중지", "offline": "중지",
"offline_alt": "중지",
"online": "Online", "online": "Online",
"total": "총합", "total": "총합",
"unknown": "알 수 없음" "unknown": "알 수 없음"
@@ -863,5 +864,13 @@
"users": "사용자", "users": "사용자",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "사용자",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Bezsaistē", "offline": "Bezsaistē",
"offline_alt": "Bezsaistē",
"online": "Online", "online": "Online",
"total": "Kopā", "total": "Kopā",
"unknown": "Nezināms" "unknown": "Nezināms"
@@ -863,5 +864,13 @@
"users": "Lietotāji", "users": "Lietotāji",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Lietotāji",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Luar talian", "offline": "Luar talian",
"offline_alt": "Luar talian",
"online": "Dalam Talian", "online": "Dalam Talian",
"total": "Jumlah", "total": "Jumlah",
"unknown": "Tidak Diketahui" "unknown": "Tidak Diketahui"
@@ -863,5 +864,13 @@
"users": "Pengguna", "users": "Pengguna",
"recipes": "Resipi", "recipes": "Resipi",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Pengguna",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Onbereikbaar", "offline": "Onbereikbaar",
"offline_alt": "Onbereikbaar",
"online": "Bereikbaar", "online": "Bereikbaar",
"total": "Totaal", "total": "Totaal",
"unknown": "Onbekend" "unknown": "Onbekend"
@@ -863,5 +864,13 @@
"users": "Gebruikers", "users": "Gebruikers",
"recipes": "Recepten", "recipes": "Recepten",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "Met garantie",
"locations": "Locaties",
"labels": "Labels",
"users": "Gebruikers",
"totalValue": "Totale waarde"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Nieosiągalny", "offline": "Nieosiągalny",
"offline_alt": "Nieosiągalny",
"online": "Dostępny", "online": "Dostępny",
"total": "Całkowite", "total": "Całkowite",
"unknown": "Nieznany" "unknown": "Nieznany"
@@ -863,5 +864,13 @@
"users": "Użytkownicy", "users": "Użytkownicy",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Użytkownicy",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Desligado", "offline": "Desligado",
"offline_alt": "Desligado",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Desconhecido" "unknown": "Desconhecido"
@@ -863,5 +864,13 @@
"users": "Utilizadores", "users": "Utilizadores",
"recipes": "Receitas", "recipes": "Receitas",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Utilizadores",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Desligado", "offline": "Desligado",
"offline_alt": "Desligado",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Desconhecido" "unknown": "Desconhecido"
@@ -863,5 +864,13 @@
"users": "Utilizadores", "users": "Utilizadores",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Utilizadores",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Necunoscut" "unknown": "Necunoscut"
@@ -863,5 +864,13 @@
"users": "Utilizatori", "users": "Utilizatori",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Utilizatori",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Не в сети", "offline": "Не в сети",
"offline_alt": "Не в сети",
"online": "В сети", "online": "В сети",
"total": "Всего", "total": "Всего",
"unknown": "Неизвестен" "unknown": "Неизвестен"
@@ -830,38 +831,46 @@
}, },
"netdata": { "netdata": {
"warnings": "Предупреждения", "warnings": "Предупреждения",
"criticals": "Криты" "criticals": "Критические"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "События",
"plants": "Plants", "plants": "Растения",
"photos": "Фото", "photos": "Фото",
"species": "Species" "species": "Виды"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Уведомления",
"issues": "Вопросы", "issues": "Вопросы",
"pulls": "Pull Requests" "pulls": "Запросы на слияние (Pull Request)"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Сцены",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Проигранных сцен",
"playCount": "Total Plays", "playCount": "Всего проиграно",
"playDuration": "Time Watched", "playDuration": "Просмотрено времени",
"sceneSize": "Scenes Size", "sceneSize": "Размер сцены",
"sceneDuration": "Scenes Duration", "sceneDuration": "Длительность сцен",
"images": "Images", "images": "Изображения",
"imageSize": "Images Size", "imageSize": "Размер изображений",
"galleries": "Galleries", "galleries": "Галереи",
"performers": "Performers", "performers": "Исполнители",
"studios": "Studios", "studios": "Студии",
"movies": "Фильмы", "movies": "Фильмы",
"tags": "Теги", "tags": "Теги",
"oCount": "O Count" "oCount": "0"
}, },
"tandoor": { "tandoor": {
"users": "Пользователи", "users": "Пользователи",
"recipes": "Рецепты", "recipes": "Рецепты",
"keywords": "Keywords" "keywords": "Ключевые слова"
},
"homebox": {
"items": "Элементы",
"totalWithWarranty": "С гарантией",
"locations": "Местоположения",
"labels": "Ярлыки",
"users": "Пользователи",
"totalValue": "Общая стоимость"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Nedostupný", "offline": "Nedostupný",
"offline_alt": "Nedostupný",
"online": "Online", "online": "Online",
"total": "Celkovo", "total": "Celkovo",
"unknown": "Neznáme" "unknown": "Neznáme"
@@ -833,28 +834,28 @@
"criticals": "Kritické" "criticals": "Kritické"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Udalosti",
"plants": "Plants", "plants": "Rastliny",
"photos": "Fotografie", "photos": "Fotografie",
"species": "Species" "species": "Druhy"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Oznámenia",
"issues": "Problémy", "issues": "Problémy",
"pulls": "Pull Requests" "pulls": "Pull requesty"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scény",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Scenes Played",
"playCount": "Total Plays", "playCount": "Celkovo prehraní",
"playDuration": "Time Watched", "playDuration": "Pozeraný čas",
"sceneSize": "Scenes Size", "sceneSize": "Veľkosť obrazovky",
"sceneDuration": "Scenes Duration", "sceneDuration": "Dĺžka scény",
"images": "Images", "images": "Obrázky",
"imageSize": "Images Size", "imageSize": "Veľkosť obrázkov",
"galleries": "Galleries", "galleries": "Galérie",
"performers": "Performers", "performers": "Herci",
"studios": "Studios", "studios": "Štúdiá",
"movies": "Filmy", "movies": "Filmy",
"tags": "Štítky", "tags": "Štítky",
"oCount": "O Count" "oCount": "O Count"
@@ -862,6 +863,14 @@
"tandoor": { "tandoor": {
"users": "Používatelia", "users": "Používatelia",
"recipes": "Recepty", "recipes": "Recepty",
"keywords": "Keywords" "keywords": "Kľúčové slová"
},
"homebox": {
"items": "Položky",
"totalWithWarranty": "So zárukou",
"locations": "Umiestnenia",
"labels": "Labels",
"users": "Používatelia",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Ni povezan", "offline": "Ni povezan",
"offline_alt": "Ni povezan",
"online": "Na spletu", "online": "Na spletu",
"total": "Skupaj", "total": "Skupaj",
"unknown": "Neznano" "unknown": "Neznano"
@@ -863,5 +864,13 @@
"users": "Uporabniki", "users": "Uporabniki",
"recipes": "Recepti", "recipes": "Recepti",
"keywords": "Ključne besede" "keywords": "Ključne besede"
},
"homebox": {
"items": "Predmeti",
"totalWithWarranty": "Z garancijo",
"locations": "Lokacije",
"labels": "Oznake",
"users": "Uporabniki",
"totalValue": "Skupna vrednost"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Offline", "offline": "Offline",
"offline_alt": "Offline",
"online": "Online", "online": "Online",
"total": "Total", "total": "Total",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Användare", "users": "Användare",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Användare",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "ఆఫ్‌లైన్", "offline": "ఆఫ్‌లైన్",
"offline_alt": "ఆఫ్‌లైన్",
"online": "Online", "online": "Online",
"total": "మొత్తం", "total": "మొత్తం",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "వినియోగదారులు", "users": "వినియోగదారులు",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "వినియోగదారులు",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "ออฟไลน์", "offline": "ออฟไลน์",
"offline_alt": "ออฟไลน์",
"online": "Online", "online": "Online",
"total": "ทั้งหมด", "total": "ทั้งหมด",
"unknown": "ไม่ทราบ" "unknown": "ไม่ทราบ"
@@ -863,5 +864,13 @@
"users": "ผู้ใช้", "users": "ผู้ใช้",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "ผู้ใช้",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Çevrimdışı", "offline": "Çevrimdışı",
"offline_alt": "Çevrimdışı",
"online": "Çevrimiçi", "online": "Çevrimiçi",
"total": "Toplam", "total": "Toplam",
"unknown": "Bilinmiyor" "unknown": "Bilinmiyor"
@@ -136,18 +137,18 @@
"connectionStatusUnconfigured": "Yapılandırılmamış", "connectionStatusUnconfigured": "Yapılandırılmamış",
"connectionStatusConnecting": "Bağlanıyor", "connectionStatusConnecting": "Bağlanıyor",
"connectionStatusAuthenticating": "Kimlik doğrulanıyor", "connectionStatusAuthenticating": "Kimlik doğrulanıyor",
"connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor",
"connectionStatusDisconnecting": "Bağlantı kesiliyor...", "connectionStatusDisconnecting": "Bağlantı kesiliyor...",
"connectionStatusDisconnected": "Bağlantı kesildi", "connectionStatusDisconnected": "Bağlantı kesildi",
"connectionStatusConnected": "Bağlandı", "connectionStatusConnected": "Bağlandı",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"maxDown": "Max. Down", "maxDown": "Max. Indirme",
"maxUp": "Max. Up", "maxUp": "Max. Gönderme",
"down": "İndirme", "down": "İndirme",
"up": "Yükleme", "up": "Yükleme",
"received": "Alınan", "received": "Alınan",
"sent": "Gönderilen", "sent": "Gönderilen",
"externalIPAddress": "Ext. IP" "externalIPAddress": "Harici IP"
}, },
"caddy": { "caddy": {
"upstreams": "Akış", "upstreams": "Akış",
@@ -169,7 +170,7 @@
"transcoding": "Dönüştürülüyor", "transcoding": "Dönüştürülüyor",
"bitrate": "Bit Oranı", "bitrate": "Bit Oranı",
"no_active": "Aktif akış yok", "no_active": "Aktif akış yok",
"plex_connection_error": "Check Plex Connection" "plex_connection_error": "Plex Bağlantısı Kontrol Ediliyor"
}, },
"omada": { "omada": {
"connectedAp": "Bağlı AP'ler", "connectedAp": "Bağlı AP'ler",
@@ -426,7 +427,7 @@
"custom": "Özel", "custom": "Özel",
"visit": "Ziyaret", "visit": "Ziyaret",
"url": "URL", "url": "URL",
"searchsuggestion": "Suggestion" "searchsuggestion": "Öneri"
}, },
"wmo": { "wmo": {
"0-day": "Güneşli", "0-day": "Güneşli",
@@ -498,14 +499,14 @@
"down": "İndirme" "down": "İndirme"
}, },
"healthchecks": { "healthchecks": {
"new": "New", "new": "Yeni",
"up": "Yükleme", "up": "Yükleme",
"grace": "In Grace Period", "grace": "Tolerans Döneminde",
"down": "İndirme", "down": "İndirme",
"paused": "Paused", "paused": "Durduruldu",
"status": "Durum", "status": "Durum",
"last_ping": "Son Ping", "last_ping": "Son Ping",
"never": "No pings yet" "never": "Henüz ping yok"
}, },
"watchtower": { "watchtower": {
"containers_scanned": "Tarandı", "containers_scanned": "Tarandı",
@@ -543,14 +544,14 @@
"hdhomerun": { "hdhomerun": {
"channels": "Kanallar", "channels": "Kanallar",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "Ayarlayıcılar",
"channelNumber": "Channel", "channelNumber": "Kanal",
"channelNetwork": "Network", "channelNetwork": "",
"signalStrength": "Strength", "signalStrength": "Sağlamlık",
"signalQuality": "Quality", "signalQuality": "Kalite",
"symbolQuality": "Quality", "symbolQuality": "Kalite",
"networkRate": "Bit Oranı", "networkRate": "Bit Oranı",
"clientIP": "Client" "clientIP": "Alıcı"
}, },
"scrutiny": { "scrutiny": {
"passed": "Geçti", "passed": "Geçti",
@@ -563,11 +564,11 @@
}, },
"peanut": { "peanut": {
"battery_charge": "Pil Yüzdesi", "battery_charge": "Pil Yüzdesi",
"ups_load": "UPS Load", "ups_load": "UPS Yükü",
"ups_status": "UPS Status", "ups_status": "UPS Durumu",
"online": "Çevrimiçi", "online": "Çevrimiçi",
"on_battery": "Pilde", "on_battery": "Pilde",
"low_battery": "Low Battery" "low_battery": "Düşük Pil"
}, },
"nextdns": { "nextdns": {
"wait": "Lütfen Bekleyin", "wait": "Lütfen Bekleyin",
@@ -577,7 +578,7 @@
"cpuLoad": "CPU Yükü", "cpuLoad": "CPU Yükü",
"memoryUsed": "Bellek Kullanımı", "memoryUsed": "Bellek Kullanımı",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"numberOfLeases": "Leases" "numberOfLeases": "Kiralama"
}, },
"xteve": { "xteve": {
"streams_all": "Tüm Akışlar", "streams_all": "Tüm Akışlar",
@@ -585,9 +586,9 @@
"streams_xepg": "XEPG Kanalları" "streams_xepg": "XEPG Kanalları"
}, },
"opendtu": { "opendtu": {
"yieldDay": "Today", "yieldDay": "Bugün",
"absolutePower": "Power", "absolutePower": "Güç",
"relativePower": "Power %", "relativePower": "Güç %",
"limit": "Limit" "limit": "Limit"
}, },
"opnsense": { "opnsense": {
@@ -606,25 +607,25 @@
"printer_state": "Durum", "printer_state": "Durum",
"temp_tool": "Araç sıcaklığı", "temp_tool": "Araç sıcaklığı",
"temp_bed": "Yatak sıcaklığı", "temp_bed": "Yatak sıcaklığı",
"job_completion": "Completion" "job_completion": "Tamamlanma"
}, },
"cloudflared": { "cloudflared": {
"origin_ip": "Origin IP", "origin_ip": "Gerçek IP",
"status": "Durum" "status": "Durum"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Ort. Yükleme",
"memory": "Mem Usage", "memory": "Bellek Kullanımı",
"wanStatus": "WAN Status", "wanStatus": "WAN Durumu",
"up": "Yükleme", "up": "Yükleme",
"down": "İndirme", "down": "İndirme",
"temp": "Sıcaklık", "temp": "Sıcaklık",
"disk": "Disk Usage", "disk": "Disk Kullanımı",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
"datastore_usage": "Datastore", "datastore_usage": "Veri deposu",
"failed_tasks_24h": "Failed Tasks 24h", "failed_tasks_24h": "Başarısız Görevler 24h",
"cpu_usage": "CPU", "cpu_usage": "CPU",
"memory_usage": "Bellek" "memory_usage": "Bellek"
}, },
@@ -638,14 +639,14 @@
"up": "Sites Up", "up": "Sites Up",
"down": "Sites Down", "down": "Sites Down",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"incident": "Incident", "incident": "Olay",
"m": "dk" "m": "dk"
}, },
"atsumeru": { "atsumeru": {
"series": "Diziler", "series": "Diziler",
"archives": "Archives", "archives": "Arşivler",
"chapters": "Chapters", "chapters": "Bölümler",
"categories": "Categories" "categories": "Kategoriler"
}, },
"komga": { "komga": {
"libraries": "Kütüphane", "libraries": "Kütüphane",
@@ -672,42 +673,42 @@
"queue": "Kuyruk", "queue": "Kuyruk",
"processing": "İşleniyor", "processing": "İşleniyor",
"processed": "İşlendi", "processed": "İşlendi",
"time": "Time" "time": "Zaman"
}, },
"grafana": { "grafana": {
"dashboards": "Dashboards", "dashboards": "Kontrol Paneli",
"datasources": "Data Sources", "datasources": "Veri Kaynakları",
"totalalerts": "Total Alerts", "totalalerts": "Toplam Uyarılar",
"alertstriggered": "Alerts Triggered" "alertstriggered": "Uyarılar Tetiklendi"
}, },
"nextcloud": { "nextcloud": {
"cpuload": "Cpu Load", "cpuload": "Cpu Yükü",
"memoryusage": "Memory Usage", "memoryusage": "Bellek Kullanımı",
"freespace": "Free Space", "freespace": "Boş Alan",
"activeusers": "Active Users", "activeusers": "Aktif Kullanıcılar",
"numfiles": "Files", "numfiles": "Dosyalar",
"numshares": "Shared Items" "numshares": "Paylaşılan Öğeler"
}, },
"kopia": { "kopia": {
"status": "Durum", "status": "Durum",
"size": "Size", "size": "Boyut",
"lastrun": "Last Run", "lastrun": "Son Çalışma",
"nextrun": "Next Run", "nextrun": "Sonraki Çalışma",
"failed": "Başarısız" "failed": "Başarısız"
}, },
"unmanic": { "unmanic": {
"active_workers": "Active Workers", "active_workers": "Aktif Kullanıcılar",
"total_workers": "Total Workers", "total_workers": "Toplam Kullanıcılar",
"records_total": "Queue Length" "records_total": "Sıra Uzunluğu"
}, },
"pterodactyl": { "pterodactyl": {
"servers": "Servers", "servers": "Sunucular",
"nodes": "Nodes" "nodes": "Düğümler"
}, },
"prometheus": { "prometheus": {
"targets_up": "Targets Up", "targets_up": "Targets Up",
"targets_down": "Targets Down", "targets_down": "Targets Down",
"targets_total": "Total Targets" "targets_total": "Toplam Hedef"
}, },
"gatus": { "gatus": {
"up": "Sites Up", "up": "Sites Up",
@@ -715,50 +716,50 @@
"uptime": "Çalışma Süresi" "uptime": "Çalışma Süresi"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Bugün",
"gross_percent_1y": "One year", "gross_percent_1y": "Bir yıl",
"gross_percent_max": "All time" "gross_percent_max": "Tüm zaman"
}, },
"audiobookshelf": { "audiobookshelf": {
"podcasts": "Podcasts", "podcasts": "Podcast",
"books": "Kitaplar", "books": "Kitaplar",
"podcastsDuration": "Duration", "podcastsDuration": "Süre",
"booksDuration": "Duration" "booksDuration": "Süre"
}, },
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "People Home",
"lights_on": "Lights On", "lights_on": "ıklar Açık",
"switches_on": "Switches On" "switches_on": ""
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "İzleme",
"updates": "Güncellemeler" "updates": "Güncellemeler"
}, },
"calibreweb": { "calibreweb": {
"books": "Kitaplar", "books": "Kitaplar",
"authors": "Authors", "authors": "Yazarlar",
"categories": "Categories", "categories": "Kategoriler",
"series": "Diziler" "series": "Diziler"
}, },
"jdownloader": { "jdownloader": {
"downloadCount": "Kuyruk", "downloadCount": "Kuyruk",
"downloadBytesRemaining": "Kalan", "downloadBytesRemaining": "Kalan",
"downloadTotalBytes": "Size", "downloadTotalBytes": "Boyut",
"downloadSpeed": "Hız" "downloadSpeed": "Hız"
}, },
"kavita": { "kavita": {
"seriesCount": "Diziler", "seriesCount": "Diziler",
"totalFiles": "Files" "totalFiles": "Dosyalar"
}, },
"azuredevops": { "azuredevops": {
"result": "Result", "result": "Sonuç",
"status": "Durum", "status": "Durum",
"buildId": "Build ID", "buildId": "Build ID",
"succeeded": "Succeeded", "succeeded": "Başarılı",
"notStarted": "Not Started", "notStarted": "Henüz Başlamadı",
"failed": "Başarısız", "failed": "Başarısız",
"canceled": "Canceled", "canceled": "İptal edildi",
"inProgress": "In Progress", "inProgress": "Sürüyor",
"totalPrs": "Total PRs", "totalPrs": "Total PRs",
"myPrs": "My PRs", "myPrs": "My PRs",
"approved": "Onaylı" "approved": "Onaylı"
@@ -767,28 +768,28 @@
"status": "Durum", "status": "Durum",
"online": "Çevrimiçi", "online": "Çevrimiçi",
"offline": "Çevrimdışı", "offline": "Çevrimdışı",
"name": "Name", "name": "İsim",
"map": "Map", "map": "Harita",
"currentPlayers": "Current players", "currentPlayers": "Mevcut oyuncular",
"players": "Oyuncular", "players": "Oyuncular",
"maxPlayers": "Max players", "maxPlayers": "Maks. oyuncu",
"bots": "Bots", "bots": "Botlar",
"ping": "Gecikme" "ping": "Gecikme"
}, },
"urbackup": { "urbackup": {
"ok": "Ok", "ok": "Tamam",
"errored": "Errors", "errored": "Hatalar",
"noRecent": "Out of Date", "noRecent": "Tarihi geçmiş",
"totalUsed": "Used Storage" "totalUsed": "Kullanılan depolama alanı"
}, },
"mealie": { "mealie": {
"recipes": "Recipes", "recipes": "Tarifler",
"users": "Kullanıcılar", "users": "Kullanıcılar",
"categories": "Categories", "categories": "Kategoriler",
"tags": "Tags" "tags": "Etiketler"
}, },
"openmediavault": { "openmediavault": {
"downloading": "Downloading", "downloading": "İndiriliyor",
"total": "Toplam", "total": "Toplam",
"running": "Çalışan", "running": "Çalışan",
"stopped": "Durduruldu", "stopped": "Durduruldu",
@@ -797,71 +798,79 @@
}, },
"openwrt": { "openwrt": {
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "CPU Yükü Ortalaması (5dk)",
"up": "Yükleme", "up": "Yükleme",
"down": "İndirme", "down": "İndirme",
"bytesTx": "Transmitted", "bytesTx": "İletilen",
"bytesRx": "Alınan" "bytesRx": "Alınan"
}, },
"uptimerobot": { "uptimerobot": {
"status": "Durum", "status": "Durum",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"lastDown": "Last Downtime", "lastDown": "Son Kesinti",
"downDuration": "Downtime Duration", "downDuration": "Kesinti Süresi",
"sitesUp": "Sites Up", "sitesUp": "Sites Up",
"sitesDown": "Sites Down", "sitesDown": "Sites Down",
"paused": "Paused", "paused": "Durduruldu",
"notyetchecked": "Not Yet Checked", "notyetchecked": "Henüz Kontrol Edilmedi",
"up": "Yükleme", "up": "Yükleme",
"seemsdown": "Seems Down", "seemsdown": "Kapalı görünüyor",
"down": "İndirme", "down": "İndirme",
"unknown": "Bilinmiyor" "unknown": "Bilinmiyor"
}, },
"calendar": { "calendar": {
"inCinemas": "In cinemas", "inCinemas": "Sinemalarda",
"physicalRelease": "Physical release", "physicalRelease": "Fiziksel Yayınlanan",
"digitalRelease": "Digital release", "digitalRelease": "Dijital Yayınlanan",
"noEventsToday": "No events for today!", "noEventsToday": "Bugün için etkinlik yok!",
"noEventsFound": "No events found" "noEventsFound": "Etkinlik bulunamadı"
}, },
"romm": { "romm": {
"platforms": "Platforms", "platforms": "Platformlar",
"totalRoms": "Total ROMs" "totalRoms": "Toplam ROM'lar"
}, },
"netdata": { "netdata": {
"warnings": "Warnings", "warnings": "Uyarılar",
"criticals": "Criticals" "criticals": "Kritik"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Etkinlikler",
"plants": "Plants", "plants": "Plants",
"photos": "Fotoğraflar", "photos": "Fotoğraflar",
"species": "Species" "species": "Türler"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Bildirimler",
"issues": "Sorunlar", "issues": "Sorunlar",
"pulls": "Pull Requests" "pulls": "Değişiklik İstekleri"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Sahneler",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Oynanan Sahneler",
"playCount": "Total Plays", "playCount": "Toplam Oynatma",
"playDuration": "Time Watched", "playDuration": "İzlenen Süre",
"sceneSize": "Scenes Size", "sceneSize": "Sahne Boyutu",
"sceneDuration": "Scenes Duration", "sceneDuration": "Sahne Süresi",
"images": "Images", "images": "Görseller",
"imageSize": "Images Size", "imageSize": "Görsel Boyutu",
"galleries": "Galleries", "galleries": "Galeriler",
"performers": "Performers", "performers": "Performers",
"studios": "Studios", "studios": "Stüdyolar",
"movies": "Filmler", "movies": "Filmler",
"tags": "Tags", "tags": "Etiketler",
"oCount": "O Count" "oCount": "O Count"
}, },
"tandoor": { "tandoor": {
"users": "Kullanıcılar", "users": "Kullanıcılar",
"recipes": "Recipes", "recipes": "Tarifler",
"keywords": "Keywords" "keywords": "Anahtar Sözcükler"
},
"homebox": {
"items": "Ögeler",
"totalWithWarranty": "Garantili",
"locations": "Konum",
"labels": "Etiketler",
"users": "Kullanıcılar",
"totalValue": "Toplam Değer"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Офлайн", "offline": "Офлайн",
"offline_alt": "Офлайн",
"online": "Онлайн", "online": "Онлайн",
"total": "Усього", "total": "Усього",
"unknown": "Невідомий" "unknown": "Невідомий"
@@ -863,5 +864,13 @@
"users": "Користувачі", "users": "Користувачі",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Користувачі",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "Ngoại tuyến", "offline": "Ngoại tuyến",
"offline_alt": "Ngoại tuyến",
"online": "Online", "online": "Online",
"total": "Tổng", "total": "Tổng",
"unknown": "Unknown" "unknown": "Unknown"
@@ -863,5 +864,13 @@
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Keywords"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Users",
"totalValue": "Total Value"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "離線", "offline": "離線",
"offline_alt": "離線",
"online": "在線", "online": "在線",
"total": "全部", "total": "全部",
"unknown": "未知" "unknown": "未知"
@@ -862,6 +863,14 @@
"tandoor": { "tandoor": {
"users": "使用者", "users": "使用者",
"recipes": "食譜", "recipes": "食譜",
"keywords": "Keywords" "keywords": "關鍵字"
},
"homebox": {
"items": "項目",
"totalWithWarranty": "With Warranty",
"locations": "位置",
"labels": "標籤",
"users": "使用者",
"totalValue": "總共"
} }
} }

View File

@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "离线", "offline": "离线",
"offline_alt": "离线",
"online": "在线", "online": "在线",
"total": "总计", "total": "总计",
"unknown": "未知" "unknown": "未知"
@@ -141,13 +142,13 @@
"connectionStatusDisconnected": "未连接", "connectionStatusDisconnected": "未连接",
"connectionStatusConnected": "已连接", "connectionStatusConnected": "已连接",
"uptime": "运行时间", "uptime": "运行时间",
"maxDown": "", "maxDown": "最大下载速度",
"maxUp": "", "maxUp": "",
"down": "离线", "down": "离线",
"up": "在线", "up": "在线",
"received": "已接收", "received": "最大上传数",
"sent": "已发送", "sent": "已发送",
"externalIPAddress": "Ext. IP" "externalIPAddress": "外部IP"
}, },
"caddy": { "caddy": {
"upstreams": "上行", "upstreams": "上行",
@@ -543,8 +544,8 @@
"hdhomerun": { "hdhomerun": {
"channels": "频道", "channels": "频道",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "电台数",
"channelNumber": "Channel", "channelNumber": "频道数",
"channelNetwork": "网络", "channelNetwork": "网络",
"signalStrength": "强度", "signalStrength": "强度",
"signalQuality": "质量", "signalQuality": "质量",
@@ -801,7 +802,7 @@
"up": "在线", "up": "在线",
"down": "离线", "down": "离线",
"bytesTx": "已传输", "bytesTx": "已传输",
"bytesRx": "已接收" "bytesRx": "最大上传数"
}, },
"uptimerobot": { "uptimerobot": {
"status": "状态", "status": "状态",
@@ -833,28 +834,28 @@
"criticals": "严重" "criticals": "严重"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "事件",
"plants": "Plants", "plants": "植物",
"photos": "照片", "photos": "照片",
"species": "Species" "species": "物种"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "通知",
"issues": "出版", "issues": "出版",
"pulls": "Pull Requests" "pulls": "PR"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "场景",
"scenesPlayed": "Scenes Played", "scenesPlayed": "已播放场景",
"playCount": "Total Plays", "playCount": "播放总数",
"playDuration": "Time Watched", "playDuration": "播放时间",
"sceneSize": "Scenes Size", "sceneSize": "场景大小",
"sceneDuration": "Scenes Duration", "sceneDuration": "场景时长",
"images": "Images", "images": "图片",
"imageSize": "Images Size", "imageSize": "图像大小",
"galleries": "Galleries", "galleries": "图库",
"performers": "Performers", "performers": "演员",
"studios": "Studios", "studios": "工作室",
"movies": "电影", "movies": "电影",
"tags": "标签", "tags": "标签",
"oCount": "O Count" "oCount": "O Count"
@@ -862,6 +863,14 @@
"tandoor": { "tandoor": {
"users": "用户数", "users": "用户数",
"recipes": "食谱", "recipes": "食谱",
"keywords": "Keywords" "keywords": "关键词"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "用户数",
"totalValue": "Total Value"
} }
} }

View File

@@ -50,7 +50,7 @@
"uptime": "運作時間" "uptime": "運作時間"
}, },
"unifi": { "unifi": {
"users": "使用者", "users": "用戶",
"uptime": "運行時間", "uptime": "運行時間",
"days": "天", "days": "天",
"wan": "WAN", "wan": "WAN",
@@ -109,6 +109,7 @@
}, },
"esphome": { "esphome": {
"offline": "離線", "offline": "離線",
"offline_alt": "離線",
"online": "在線", "online": "在線",
"total": "全部", "total": "全部",
"unknown": "未知" "unknown": "未知"
@@ -368,7 +369,7 @@
"transferRate": "速率" "transferRate": "速率"
}, },
"mastodon": { "mastodon": {
"user_count": "使用者", "user_count": "用戶",
"status_count": "文章", "status_count": "文章",
"domain_count": "網域" "domain_count": "網域"
}, },
@@ -389,7 +390,7 @@
"unread": "未讀" "unread": "未讀"
}, },
"authentik": { "authentik": {
"users": "使用者", "users": "用戶",
"loginsLast24H": "登入 (過去 24 小時)", "loginsLast24H": "登入 (過去 24 小時)",
"failedLoginsLast24H": "登入失敗 (過去 24 小時)" "failedLoginsLast24H": "登入失敗 (過去 24 小時)"
}, },
@@ -629,7 +630,7 @@
"memory_usage": "記憶體" "memory_usage": "記憶體"
}, },
"immich": { "immich": {
"users": "使用者", "users": "用戶",
"photos": "照片", "photos": "照片",
"videos": "影片", "videos": "影片",
"storage": "儲存空間" "storage": "儲存空間"
@@ -783,7 +784,7 @@
}, },
"mealie": { "mealie": {
"recipes": "食譜", "recipes": "食譜",
"users": "使用者", "users": "用戶",
"categories": "類別", "categories": "類別",
"tags": "標籤" "tags": "標籤"
}, },
@@ -860,8 +861,16 @@
"oCount": "O Count" "oCount": "O Count"
}, },
"tandoor": { "tandoor": {
"users": "使用者", "users": "用戶",
"recipes": "食譜", "recipes": "食譜",
"keywords": "Keywords" "keywords": "關鍵字"
},
"homebox": {
"items": "項目",
"totalWithWarranty": "With Warranty",
"locations": "位置",
"labels": "標籤",
"users": "用戶",
"totalValue": "總共"
} }
} }

View File

@@ -3,13 +3,19 @@ import classNames from "classnames";
import { TabContext } from "utils/contexts/tab"; import { TabContext } from "utils/contexts/tab";
export function slugify(tabName) { function slugify(tabName) {
return tabName !== undefined ? encodeURIComponent(tabName.toString().replace(/\s+/g, "-").toLowerCase()) : ""; return tabName.toString().replace(/\s+/g, "-").toLowerCase();
}
export function slugifyAndEncode(tabName) {
return tabName !== undefined ? encodeURIComponent(slugify(tabName)) : "";
} }
export default function Tab({ tab }) { export default function Tab({ tab }) {
const { activeTab, setActiveTab } = useContext(TabContext); const { activeTab, setActiveTab } = useContext(TabContext);
const matchesTab = decodeURI(activeTab) === slugify(tab);
return ( return (
<li <li
key={tab} key={tab}
@@ -21,16 +27,14 @@ export default function Tab({ tab }) {
type="button" type="button"
role="tab" role="tab"
aria-controls={`#${tab}`} aria-controls={`#${tab}`}
aria-selected={activeTab === slugify(tab) ? "true" : "false"} aria-selected={matchesTab ? "true" : "false"}
className={classNames( className={classNames(
"w-full rounded-md m-1", "w-full rounded-md m-1",
activeTab === slugify(tab) matchesTab ? "bg-theme-300/20 dark:bg-white/10" : "hover:bg-theme-100/20 dark:hover:bg-white/5",
? "bg-theme-300/20 dark:bg-white/10"
: "hover:bg-theme-100/20 dark:hover:bg-white/5",
)} )}
onClick={() => { onClick={() => {
setActiveTab(slugify(tab)); setActiveTab(slugifyAndEncode(tab));
window.location.hash = `#${slugify(tab)}`; window.location.hash = `#${slugifyAndEncode(tab)}`;
}} }}
> >
{tab} {tab}

View File

@@ -84,8 +84,6 @@ export default function OpenMeteo({ options }) {
} }
}; };
// if (!requesting && !location) requestLocation();
if (!location) { if (!location) {
return ( return (
<ContainerButton <ContainerButton

View File

@@ -10,7 +10,7 @@ import { BiError } from "react-icons/bi";
import { serverSideTranslations } from "next-i18next/serverSideTranslations"; import { serverSideTranslations } from "next-i18next/serverSideTranslations";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import Tab, { slugify } from "components/tab"; import Tab, { slugifyAndEncode } from "components/tab";
import ServicesGroup from "components/services/group"; import ServicesGroup from "components/services/group";
import BookmarksGroup from "components/bookmarks/group"; import BookmarksGroup from "components/bookmarks/group";
import Widget from "components/widgets/widget"; import Widget from "components/widgets/widget";
@@ -258,13 +258,13 @@ function Home({ initialSettings }) {
useEffect(() => { useEffect(() => {
if (!activeTab) { if (!activeTab) {
const initialTab = decodeURI(asPath.substring(asPath.indexOf("#") + 1)); const initialTab = asPath.substring(asPath.indexOf("#") + 1);
setActiveTab(initialTab === "/" ? slugify(tabs["0"]) : initialTab); setActiveTab(initialTab === "/" ? slugifyAndEncode(tabs["0"]) : initialTab);
} }
}); });
const servicesAndBookmarksGroups = useMemo(() => { const servicesAndBookmarksGroups = useMemo(() => {
const tabGroupFilter = (g) => g && [activeTab, ""].includes(slugify(settings.layout?.[g.name]?.tab)); const tabGroupFilter = (g) => g && [activeTab, ""].includes(slugifyAndEncode(settings.layout?.[g.name]?.tab));
const undefinedGroupFilter = (g) => settings.layout?.[g.name] === undefined; const undefinedGroupFilter = (g) => settings.layout?.[g.name] === undefined;
const layoutGroups = Object.keys(settings.layout ?? {}) const layoutGroups = Object.keys(settings.layout ?? {})

View File

@@ -117,6 +117,8 @@ export async function servicesFromDocker() {
return { server: serverName, services: discovered.filter((filteredService) => filteredService) }; return { server: serverName, services: discovered.filter((filteredService) => filteredService) };
} catch (e) { } catch (e) {
logger.error("Error getting services from Docker server '%s': %s", serverName, e);
// a server failed, but others may succeed // a server failed, but others may succeed
return { server: serverName, services: [] }; return { server: serverName, services: [] };
} }
@@ -453,7 +455,7 @@ export function cleanServiceGroups(groups) {
let fieldsList = fields; let fieldsList = fields;
if (typeof fields === "string") { if (typeof fields === "string") {
try { try {
JSON.parse(fields); fieldsList = JSON.parse(fields);
} catch (e) { } catch (e) {
logger.error("Invalid fields list detected in config for service '%s'", service.name); logger.error("Invalid fields list detected in config for service '%s'", service.name);
fieldsList = null; fieldsList = null;

View File

@@ -103,7 +103,7 @@ export async function httpProxy(url, params = {}) {
try { try {
const [status, contentType, data, responseHeaders] = await request; const [status, contentType, data, responseHeaders] = await request;
return [status, contentType, data, responseHeaders]; return [status, contentType, data, responseHeaders, params];
} catch (err) { } catch (err) {
logger.error( logger.error(
"Error calling %s//%s%s%s...", "Error calling %s//%s%s%s...",

View File

@@ -19,6 +19,7 @@ export default function Component({ service }) {
<Container service={service}> <Container service={service}>
<Block label="esphome.online" /> <Block label="esphome.online" />
<Block label="esphome.offline" /> <Block label="esphome.offline" />
<Block label="esphome.offline_alt" />
<Block label="esphome.unknown" /> <Block label="esphome.unknown" />
<Block label="esphome.total" /> <Block label="esphome.total" />
</Container> </Container>
@@ -27,6 +28,7 @@ export default function Component({ service }) {
const total = Object.keys(resultData).length; const total = Object.keys(resultData).length;
const online = Object.entries(resultData).filter(([, v]) => v === true).length; const online = Object.entries(resultData).filter(([, v]) => v === true).length;
const notOnline = Object.entries(resultData).filter(([, v]) => v !== true).length;
const offline = Object.entries(resultData).filter(([, v]) => v === false).length; const offline = Object.entries(resultData).filter(([, v]) => v === false).length;
const unknown = Object.entries(resultData).filter(([, v]) => v === null).length; const unknown = Object.entries(resultData).filter(([, v]) => v === null).length;
@@ -34,6 +36,7 @@ export default function Component({ service }) {
<Container service={service}> <Container service={service}>
<Block label="esphome.online" value={t("common.number", { value: online })} /> <Block label="esphome.online" value={t("common.number", { value: online })} />
<Block label="esphome.offline" value={t("common.number", { value: offline })} /> <Block label="esphome.offline" value={t("common.number", { value: offline })} />
<Block label="esphome.offline_alt" value={t("common.number", { value: notOnline })} />
<Block label="esphome.unknown" value={t("common.number", { value: unknown })} /> <Block label="esphome.unknown" value={t("common.number", { value: unknown })} />
<Block label="esphome.total" value={t("common.number", { value: total })} /> <Block label="esphome.total" value={t("common.number", { value: total })} />
</Container> </Container>

View File

@@ -24,7 +24,7 @@ export default function Component({ service }) {
refreshInterval: Math.max(defaultInterval, refreshInterval), refreshInterval: Math.max(defaultInterval, refreshInterval),
}); });
const { data: systemData, error: systemError } = useWidgetAPI(service.widget, "system"); const { data: quicklookData, error: quicklookError } = useWidgetAPI(service.widget, "quicklook");
useEffect(() => { useEffect(() => {
if (data) { if (data) {
@@ -71,22 +71,15 @@ export default function Component({ service }) {
/> />
)} )}
{!chart && systemData && !systemError && ( {!chart && quicklookData && !quicklookError && (
<Block position="top-3 right-3"> <Block position="top-3 right-3">
<div className="text-xs opacity-50"> <div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name && quicklookData.cpu_name}</div>
{systemData.linux_distro && `${systemData.linux_distro} - `}
{systemData.os_version && systemData.os_version}
</div>
</Block> </Block>
)} )}
{systemData && !systemError && ( {quicklookData && !quicklookError && (
<Block position="bottom-3 left-3"> <Block position="bottom-3 left-3">
{systemData.linux_distro && chart && <div className="text-xs opacity-50">{systemData.linux_distro}</div>} {quicklookData.cpu_name && chart && <div className="text-xs opacity-50">{quicklookData.cpu_name}</div>}
{systemData.os_version && chart && <div className="text-xs opacity-50">{systemData.os_version}</div>}
{systemData.hostname && <div className="text-xs opacity-50">{systemData.hostname}</div>}
</Block> </Block>
)} )}

View File

@@ -122,7 +122,10 @@ export default function Component({ service }) {
)} )}
{!chart && quicklookData?.swap === 0 && ( {!chart && quicklookData?.swap === 0 && (
<div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div> <div className="text-[0.6rem] opacity-50">
{systemData && systemData.linux_distro && `${systemData.linux_distro} - `}
{systemData && systemData.os_version}
</div>
)} )}
<div className="w-[4rem]">{!chart && <Swap quicklookData={quicklookData} className="opacity-25" />}</div> <div className="w-[4rem]">{!chart && <Swap quicklookData={quicklookData} className="opacity-25" />}</div>
@@ -137,7 +140,7 @@ export default function Component({ service }) {
)} )}
{!chart && ( {!chart && (
<Block position="bottom-3 left-3 w-[3rem]"> <Block position="bottom-3 left-3 w-[4rem]">
<CPU quicklookData={quicklookData} className="opacity-75" /> <CPU quicklookData={quicklookData} className="opacity-75" />
</Block> </Block>
)} )}

View File

@@ -0,0 +1,68 @@
import { httpProxy } from "utils/proxy/http";
import { formatApiCall } from "utils/proxy/api-helpers";
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
import widgets from "widgets/widgets";
const logger = createLogger("jackettProxyHandler");
async function fetchJackettCookie(widget, loginURL) {
const url = new URL(formatApiCall(loginURL, widget));
const loginData = `password=${encodeURIComponent(widget.password)}`;
const [status, , , , params] = await httpProxy(url, {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: loginData,
});
if (!(status === 200) || !params?.headers?.Cookie) {
logger.error("Failed to fetch Jackett cookie, status: %d", status);
return null;
}
return params.headers.Cookie;
}
export default async function jackettProxyHandler(req, res) {
const { group, service, endpoint } = req.query;
if (!group || !service) {
logger.error("Invalid or missing service '%s' or group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" });
}
const widget = await getServiceWidget(group, service);
if (!widget || !widgets[widget.type].api) {
logger.error("Invalid or missing widget for service '%s' in group '%s'", service, group);
return res.status(400).json({ error: "Invalid widget configuration" });
}
if (widget.password) {
const jackettCookie = await fetchJackettCookie(widget, widgets[widget.type].loginURL);
if (!jackettCookie) {
return res.status(500).json({ error: "Failed to authenticate with Jackett" });
}
// Add the cookie to the widget for use in subsequent requests
widget.headers = { ...widget.headers, Cookie: jackettCookie };
}
const url = new URL(formatApiCall(widgets[widget.type].api, { endpoint, ...widget }));
try {
const [status, , data] = await httpProxy(url, {
method: "GET",
headers: widget.headers,
});
if (status !== 200) {
logger.error("Error calling Jackett API: %d. Data: %s", status, data);
return res.status(status).json({ error: "Failed to call Jackett API", data });
}
return res.status(status).send(data);
} catch (error) {
logger.error("Exception calling Jackett API: %s", error.message);
return res.status(500).json({ error: "Server error", message: error.message });
}
}

View File

@@ -1,8 +1,9 @@
import genericProxyHandler from "utils/proxy/handlers/generic"; import jackettProxyHandler from "./proxy";
const widget = { const widget = {
api: "{url}/api/v2.0/{endpoint}?apikey={key}&configured=true", api: "{url}/api/v2.0/{endpoint}?apikey={key}&configured=true",
proxyHandler: genericProxyHandler, proxyHandler: jackettProxyHandler,
loginURL: "{url}/UI/Dashboard",
mappings: { mappings: {
indexers: { indexers: {