Compare commits

..

22 Commits

Author SHA1 Message Date
djeinstine
af75f33e62 update kubernetes.md with gateway-api configuration. 2024-11-13 10:35:07 +00:00
djeinstine
c32f1f1d59 Merge branch 'gethomepage:dev' into integration 2024-11-13 10:33:10 +01:00
djeinstine
11c6f587ab Fix lint issues 2024-11-13 09:11:05 +00:00
djeinstine
a44e6a8f4b Fix null config issue 2024-11-13 09:08:27 +00:00
djeinstine
9b06761964 Fix linting issues 2024-11-13 09:03:39 +00:00
djeinstine
01e30f2ecb Fix linting issues 2024-11-13 08:17:41 +00:00
djeinstine
9326155ab8 Merge branch 'gethomepage:dev' into integration 2024-11-12 20:07:41 +01:00
djeinstine
11c3127aad Merge branch 'gethomepage:dev' into integration 2024-11-11 10:48:31 +01:00
djeinstine
94a934ec65 Applied pnpm prettier rules to code. 2024-11-11 09:31:18 +00:00
djeinstine
ac997ea841 Applied ESLint rules to code. Plus minor rewrite. 2024-11-11 09:29:47 +00:00
djeinstine
60eee26ac4 Add gateway api to docs. And ESLint rules. 2024-11-10 20:21:00 +00:00
djeinstine
c584d5d020 revert docker publish 2024-11-09 20:04:16 +00:00
djeinstine
3d462e5958 trigger docker action 2024-11-09 19:34:45 +00:00
djeinstine
bd1c11a716 trigger docker publish 2024-11-09 19:33:02 +00:00
djeinstine
bbb1ef5a55 Applied prettier to code 2024-11-09 19:30:09 +00:00
djeinstine
cb2c7b9147 fix linter error 2024-11-08 15:13:06 +00:00
djeinstine
d65cb638be Moved crd checker to kubernetes-routes 2024-11-08 15:08:01 +00:00
djeinstine
9367fd761b getUrlSchema now uses async call 2024-11-08 14:23:57 +00:00
djeinstine
29993dad3a Cleaned comments. 2024-11-07 19:52:39 +00:00
djeinstine
a15b5bd692 First step of integrating gateway-api with homepage. 2024-11-06 11:15:52 +00:00
djeinstine
f7810cb67a Merge remote-tracking branch 'origin/dev' into integration 2024-11-06 09:37:33 +00:00
djeinstine
02e1104452 replaced getKubeConfig with getKubeArguments to be in line with getDockerArguments 2024-10-17 13:56:35 +00:00
75 changed files with 807 additions and 3196 deletions

View File

@@ -26,6 +26,8 @@ on:
merge_group:
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
@@ -64,6 +66,14 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
# Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@main
with:
cosign-release: 'v1.13.1' # optional
# Setup QEMU
# https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- name: Setup QEMU
@@ -89,15 +99,9 @@ jobs:
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
@@ -105,9 +109,7 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: |
${{ env.IMAGE_NAME }}
ghcr.io/${{ env.IMAGE_NAME }}
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: |
latest=auto
@@ -131,6 +133,19 @@ jobs:
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
# Sign the resulting Docker image digest except on PRs.
# This will only write to the public Rekor transparency log when the Docker
# repository is public to avoid leaking data. If you would like to publish
# transparency data even for private images, pass --force to cosign below.
# https://github.com/sigstore/cosign
# - name: Sign the published Docker image
# if: ${{ github.event_name != 'pull_request' }}
# env:
# COSIGN_EXPERIMENTAL: "true"
# # This step uses the identity token to provision an ephemeral certificate
# # against the sigstore community Fulcio instance.
# run: echo "${{ steps.meta.outputs.tags }}" | xargs -I {} cosign sign {}@${{ steps.build-and-push.outputs.digest }}
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896

View File

@@ -8,6 +8,7 @@ The Kubernetes connectivity has the following requirements:
- Kubernetes 1.19+
- Metrics Service
- An Ingress controller
- Optionally: Gateway-API
The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from:
@@ -19,6 +20,12 @@ The Kubernetes connection is configured in the `kubernetes.yaml` file. There are
mode: default
```
To enable Kubernetes gateway-api compatibility, add the following setting:
```yaml
route: gateway
```
## Services
Once the Kubernetes connection is configured, individual services can be configured to pull statistics. Only CPU and Memory are currently supported.
@@ -100,8 +107,6 @@ If you are using multiple instances of homepage, an `instance` annotation can be
If you have a single service that needs to be shown on multiple specific instances of homepage (but not on all of them), the service can be annotated by multiple `instance.name` annotations, where `name` can be the names of your specific multiple homepage instances. For example, a service that is annotated with `gethomepage.dev/instance.public: ""` and `gethomepage.dev/instance.internal: ""` will be shown on `public` and `internal` homepage instances.
Use the `gethomepage.dev/pod-selector` selector to specify the pod used for the health check. For example, a service that is annotated with `gethomepage.dev/pod-selector: app.kubernetes.io/name=deployment` would link to a pod with the label `app.kubernetes.io/name: deployment`.
### Traefik IngressRoute support
Homepage can also read ingresses defined using the Traefik IngressRoute custom resource definition. Due to the complex nature of Traefik routing rules, it is required for the `gethomepage.dev/href` annotation to be set:
@@ -142,6 +147,10 @@ spec:
If the `href` attribute is not present, Homepage will ignore the specific IngressRoute.
### Gateway API HttpRoute support
Homepage also features automatic service discovery for gateway-api. Service definitions are read by annotating the HttpRoute custom resource definition and are indentical to the Ingress example as defined in [Automatic Service Discovery](#automatic-service-discovery).
## Caveats
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.

View File

@@ -215,6 +215,15 @@ rules:
verbs:
- get
- list
# if using gateway api add the following:
# - apiGroups:
# - gateway.networking.k8s.io
# resources:
# - httproutes
# - gateways
# verbs:
# - get
# - list
- apiGroups:
- metrics.k8s.io
resources:

View File

@@ -5,11 +5,7 @@ description: Unifi Controller Information Widget Configuration
_(Find the Unifi Controller service widget [here](../services/unifi-controller.md))_
You can display general connectivity status from your Unifi (Network) Controller.
!!!
When authenticating you will want to use a local account that has at least read privileges.
You can display general connectivity status from your Unifi (Network) Controller. When authenticating you will want to use a local account that has at least read privileges.
An optional 'site' parameter can be supplied, if it is not the widget will use the default site for the controller.

View File

@@ -1,33 +0,0 @@
---
title: ArgoCD
description: ArgoCD Widget Configuration
---
Learn more about [ArgoCD](https://argo-cd.readthedocs.io/en/stable/).
Allowed fields (limited to a max of 4): `["apps", "synced", "outOfSync", "healthy", "progressing", "degraded", "suspended", "missing"]`
```yaml
widget:
type: argocd
url: http://argocd.host.or.ip:port
key: argocdapikey
```
You can generate an API key either by creating a bearer token for an existing account, see [Authorization](https://argo-cd.readthedocs.io/en/latest/developer-guide/api-docs/#authorization) (not recommended) or create a new local user account with limited privileges and generate an authentication token for this account. To do this the steps are:
- [Create a new local user](https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#create-new-user) and give it the `apiKey` capability
- Setup [RBAC configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/#rbac-configuration) for your the user and give it readonly access to your ArgoCD resources, e.g. by giving it the `role:readonly` role.
- In your ArgoCD project under _Settings / Accounts_ open the newly created account and in the _Tokens_ section click on _Generate New_ to generate an access token, optionally specifying an expiry date.
If you installed ArgoCD via the official Helm chart, the account creation and rbac config can be achived by overriding these helm values:
```yaml
configs:
cm:
accounts.readonly: apiKey
rbac:
policy.csv: "g, readonly, role:readonly"
```
This creates a new account called `readonly` and attaches the `role:readonly` role to it.

View File

@@ -20,6 +20,6 @@ Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`.
```yaml
widget:
type: authentik
url: http://authentik.host.or.ip:port
url: http://authentik.host.or.ip:22070
key: api_token
```

View File

@@ -1,20 +0,0 @@
---
title: Gitlab
description: Gitlab Widget Configuration
---
Learn more about [Gitlab](https://gitlab.com).
API requires a personal access token with either `read_api` or `api` permission. See the [gitlab documentation](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token) for details on generating one.
Your Gitlab user ID can be found on [your profile page](https://support.circleci.com/hc/en-us/articles/20761157174043-How-to-find-your-GitLab-User-ID).
Allowed fields: `["events", "issues", "merges", "projects"]`.
```yaml
widget:
type: gitlab
url: http://gitlab.host.or.ip:port
key: personal-access-token
user_id: 123456
```

View File

@@ -8,7 +8,6 @@ search:
You can also find a list of all available service widgets in the sidebar navigation.
- [Adguard Home](adguard-home.md)
- [ArgoCD](argocd.md)
- [Atsumeru](atsumeru.md)
- [Audiobookshelf](audiobookshelf.md)
- [Authentik](authentik.md)
@@ -41,7 +40,6 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Gatus](gatus.md)
- [Ghostfolio](ghostfolio.md)
- [Gitea](gitea.md)
- [Gitlab](gitlab.md)
- [Glances](glances.md)
- [Gluetun](gluetun.md)
- [Gotify](gotify.md)

View File

@@ -8,7 +8,7 @@ Learn more about [OPNSense](https://opnsense.org/).
The API key & secret can be generated via the webui by creating a new user at _System/Access/Users_. Ensure "Generate a scrambled password to prevent local database logins for this user" is checked and then edit the effective privileges selecting **only**:
- Diagnostics: System Activity
- Status: Traffic Graph / Reporting: Traffic (OPNSENSE 24.7.x)
- Status: Traffic Graph
Finally, create a new API key which will download an `apikey.txt` file with your key and secret in it. Use the values as the username and password fields, respectively, in your homepage config.
@@ -20,5 +20,4 @@ widget:
url: http://opnsense.host.or.ip
username: key
password: secret
wan: opt1 # optional, defaults to wan
```

View File

@@ -1,15 +0,0 @@
---
title: Spoolman
description: Spoolman Widget Configuration
---
Learn more about [Spoolman](https://github.com/Donkie/Spoolman).
4 spools are displayed by default. If more than 4 spools are configured in spoolman you can use the spoolIds configuration option to control which are displayed.
```yaml
widget:
type: spoolman
url: http://spoolman.host.or.ip
spoolIds: [1, 2, 3, 4] # optional
```

View File

@@ -7,11 +7,7 @@ Learn more about [Unifi Controller](https://ui.com/).
_(Find the Unifi Controller information widget [here](../info/unifi_controller.md))_
You can display general connectivity status from your Unifi (Network) Controller.
!!!
When authenticating you will want to use a local account that has at least read privileges.
You can display general connectivity status from your Unifi (Network) Controller. When authenticating you will want to use a local account that has at least read privileges.
An optional 'site' parameter can be supplied, if it is not the widget will use the default site for the controller.

View File

@@ -3,7 +3,7 @@ title: Zabbix
description: Zabbix Widget Configuration
---
Learn more about [Zabbix](https://github.com/zabbix/zabbix). The widget supports (at least) Zabbix server version 7.0.
Learn more about [Zabbix](https://github.com/zabbix/zabbix). The widget supports (at least) Zibbax server version 7.0.
---

View File

@@ -23,6 +23,12 @@ Set the `mode` in the `kubernetes.yaml` to `cluster`.
mode: default
```
To enable Kubernetes gateway-api compatibility, set `route` to `gateway`.
```yaml
route: gateway
```
## Widgets
The Kubernetes widget can show a high-level overview of the cluster,

View File

@@ -31,7 +31,6 @@ nav:
- "Service Widgets":
- widgets/services/index.md
- widgets/services/adguard-home.md
- widgets/services/argocd.md
- widgets/services/atsumeru.md
- widgets/services/audiobookshelf.md
- widgets/services/authentik.md
@@ -64,7 +63,6 @@ nav:
- widgets/services/gatus.md
- widgets/services/ghostfolio.md
- widgets/services/gitea.md
- widgets/services/gitlab.md
- widgets/services/glances.md
- widgets/services/gluetun.md
- widgets/services/gotify.md
@@ -139,7 +137,6 @@ nav:
- widgets/services/scrutiny.md
- widgets/services/sonarr.md
- widgets/services/speedtest-tracker.md
- widgets/services/spoolman.md
- widgets/services/stash.md
- widgets/services/stocks.md
- widgets/services/swagdashboard.md

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "ma",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Gestop",
"total": "Totaal"
},
"suwayomi": {
"download": "Afgelaai",
"nondownload": "Nie-Afgelaai",
"read": "Gelees",
"unread": "Ongelees",
"downloadedread": "Afgelaai & Gelees",
"downloadedunread": "Afgelaai en Ongelees",
"nondownloadedread": "Nie-Afgelaai & Gelees",
"nondownloadedunread": "Nie-Afgelaai & Ongelees"
},
"tailscale": {
"address": "Adres",
"expires": "Verval",
@@ -957,55 +947,11 @@
"disaster": "Ramp"
},
"lubelogger": {
"vehicle": "Voertuig",
"vehicles": "Voertuie",
"serviceRecords": "Diensrekords",
"reminders": "Herinneringe",
"nextReminder": "Volgende Herinnering",
"none": "Geen"
},
"vikunja": {
"projects": "Aktiewe Projekte",
"tasks7d": "Take Hierdie week",
"tasksOverdue": "Agterstallige Take",
"tasksInProgress": "Take Aan Die Gang"
},
"headscale": {
"name": "Naam",
"address": "Adres",
"last_seen": "Laaste Gesien",
"status": "Status",
"online": "Aanlyn",
"offline": "Vanlyn"
},
"beszel": {
"name": "Naam",
"systems": "Stelsels",
"up": "Op",
"status": "Status",
"updated": "Opgedateer",
"cpu": "SVE",
"memory": "GEH",
"disk": "Skyf",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Gesond",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Vermis",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Laai"
},
"gitlab": {
"groups": "Groups",
"issues": "Kwessies",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "ش",
"days": "ي",
"hours": "س",
@@ -309,16 +309,6 @@
"stopped": "متوقف",
"total": "المجموع"
},
"suwayomi": {
"download": "مُنزل",
"nondownload": "Non-Downloaded",
"read": "قراءة",
"unread": "غير مقروءة",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "عنوان",
"expires": "تنتهي",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "الاسم",
"address": "عنوان",
"last_seen": "آخر ظهور",
"status": "الحالة",
"online": "مُتّصل",
"offline": "غير متصل"
},
"beszel": {
"name": "الاسم",
"systems": "Systems",
"up": "يعمل",
"status": "الحالة",
"updated": "محدث",
"cpu": "المعالج",
"memory": "الذاكرة",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "سليم",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "مفقود",
"suspended": "Suspended"
},
"spoolman": {
"loading": "تحميل"
},
"gitlab": {
"groups": "Groups",
"issues": "المُشكِلات",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "ч",
@@ -309,16 +309,6 @@
"stopped": "Спрян",
"total": "Общо"
},
"suwayomi": {
"download": "Изтеглени",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Последно видян",
"status": "Статус",
"online": "Online",
"offline": "Изключен"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Статус",
"updated": "Updated",
"cpu": "Процесор",
"memory": "Памет",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Липсващи",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mes",
"days": "d",
"hours": "h",
@@ -227,8 +227,8 @@
"seed": "Llavors"
},
"develancacheui": {
"cachehitbytes": "Bytes trobats a la memòria cau",
"cachemissbytes": "Bytes no trobats a la memòria cau"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Descarregar",
@@ -309,16 +309,6 @@
"stopped": "Aturat",
"total": "Total"
},
"suwayomi": {
"download": "Descarregat",
"nondownload": "No descarregat",
"read": "Llegit",
"unread": "Sense llegir",
"downloadedread": "Descarregat i llegit",
"downloadedunread": "Descarregat i per llegir",
"nondownloadedread": "No descarregat i llegit",
"nondownloadedunread": "No descarregat i per llegir"
},
"tailscale": {
"address": "Adreça",
"expires": "Caduca",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Consultes",
"totalNoError": "Èxits",
"totalServerFailure": "Fallades",
"totalNxDomain": "Dominis NX",
"totalRefused": "Rebutjat",
"totalAuthoritative": "Autoritatiu",
"totalRecursive": "Recursiu",
"totalCached": "A la memòria cau",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Bloquejat",
"totalDropped": "Abandonat",
"totalDropped": "Dropped",
"totalClients": "Clients"
},
"tdarr": {
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "Plataformes",
"totalRoms": "Jocs",
"saves": "Partides desades",
"states": "Estats",
"screenshots": "Captures de pantalla",
"totalfilesize": "Tamany total"
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Dominis",
"mailboxes": "Bústies",
"mails": "Correus",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Emmagatzematge"
},
"netdata": {
@@ -944,68 +934,24 @@
"version": "Versió"
},
"linkwarden": {
"links": "Enllaços",
"collections": "Col·leccions",
"links": "Links",
"collections": "Collections",
"tags": "Etiquetes"
},
"zabbix": {
"unclassified": "No classificat",
"unclassified": "Not classified",
"information": "Informació",
"warning": "Avís",
"average": "Mitjana",
"high": "Alt",
"disaster": "Desastre"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Constàncies de manteniment",
"reminders": "Recordatoris",
"nextReminder": "Proper recordatori",
"none": "Cap"
},
"vikunja": {
"projects": "Projectes actius",
"tasks7d": "Tasques a completar aquesta setmana",
"tasksOverdue": "Tasques vençudes",
"tasksInProgress": "Tasques en marxa"
},
"headscale": {
"name": "Nom",
"address": "Adreça",
"last_seen": "Vist per darrer cop",
"status": "Estat",
"online": "En línia",
"offline": "Fora de línia"
},
"beszel": {
"name": "Nom",
"systems": "Sistemes",
"up": "Actiu",
"status": "Estat",
"updated": "Actualitzat",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disc",
"network": "XARXA"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Saludable",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Falten",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Carregant"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemes",
"merges": "Merge Requests",
"projects": "Projects"
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "měs.",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Zastaveno",
"total": "Celkem"
},
"suwayomi": {
"download": "Staženo",
"nondownload": "Non-Downloaded",
"read": "Přečteno",
"unread": "Nepřečteno",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adresa",
"expires": "Vyprší",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Adresa",
"last_seen": "Naposledy viděno",
"status": "Stav",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Stav",
"updated": "Aktualizováno",
"cpu": "CPU",
"memory": "RAM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Zdravý",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Chybějící",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problémy",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mnd",
"days": "d",
"hours": "t",
@@ -309,16 +309,6 @@
"stopped": "Stoppede",
"total": "Total"
},
"suwayomi": {
"download": "Hentet",
"nondownload": "Non-Downloaded",
"read": "Læst",
"unread": "Ulæst",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adresse",
"expires": "Udløber",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Navn",
"address": "Adresse",
"last_seen": "Sidst Set",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Navn",
"systems": "Systems",
"up": "Op",
"status": "Status",
"updated": "Opdateret",
"cpu": "CPU",
"memory": "RAM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sund",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Mangler",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemer",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "Mo.",
"days": "d",
"hours": "h",
@@ -305,20 +305,10 @@
"ping": "Ping"
},
"portainer": {
"running": "Wird ausgeführt",
"running": "Werden ausgeführt",
"stopped": "Gestoppt",
"total": "Gesamt"
},
"suwayomi": {
"download": "Heruntergeladen",
"nondownload": "Nicht heruntergeladen",
"read": "Gelesen",
"unread": "Ungelesen",
"downloadedread": "Heruntergeladen & gelesen",
"downloadedunread": "Heruntergeladen & ungelesen",
"nondownloadedread": "Nicht heruntergeladen & gelesen",
"nondownloadedunread": "Nicht heruntergeladen & ungelesen"
},
"tailscale": {
"address": "Adresse",
"expires": "Läuft ab",
@@ -963,49 +953,5 @@
"reminders": "Erinnerungen",
"nextReminder": "Nächste Erinnerung",
"none": "Keine"
},
"vikunja": {
"projects": "Aktive Projekte",
"tasks7d": "Diese Woche fällige Aufgaben",
"tasksOverdue": "Überfällige Aufgaben",
"tasksInProgress": "Aufgaben in Arbeit"
},
"headscale": {
"name": "Name",
"address": "Adresse",
"last_seen": "Zuletzt gesehen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systeme",
"up": "Senden",
"status": "Status",
"updated": "Aktualisiert",
"cpu": "CPU",
"memory": "RAM",
"disk": "Festplatte",
"network": "NET"
},
"argocd": {
"apps": "Anwendungen",
"synced": "Synchronisiert",
"outOfSync": "Nicht mehr synchronisiert",
"healthy": "Fehlerfrei",
"degraded": "Beeinträchtigt",
"progressing": "Fortschritt",
"missing": "Fehlend",
"suspended": "Unterbrochen"
},
"spoolman": {
"loading": "Wird geladen"
},
"gitlab": {
"groups": "Groups",
"issues": "Probleme",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Σταματημένο",
"total": "Σύνολο"
},
"suwayomi": {
"download": "Κατεβασμένο",
"nondownload": "Non-Downloaded",
"read": "Διαβάστηκε",
"unread": "Μη Διαβασμένο",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Διεύθυνση",
"expires": "Λήγει",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Όνομα",
"address": "Διεύθυνση",
"last_seen": "Τελευταία Σύνδεση",
"status": "Κατάσταση",
"online": "Συνδεδεμένοι",
"offline": "Εκτός σύνδεσης"
},
"beszel": {
"name": "Όνομα",
"systems": "Systems",
"up": "Ping up",
"status": "Κατάσταση",
"updated": "Ενημερώθηκε",
"cpu": "Επεξεργαστής",
"memory": "Μνήμη",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Υγειές",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Απουσιάζει",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -988,24 +988,5 @@
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Totalo"
},
"suwayomi": {
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Stato",
"online": "Online",
"offline": "Malkonekta"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Stato",
"updated": "Updated",
"cpu": "Ĉefprocesoro",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sana",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "me",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Detenido",
"total": "Total"
},
"suwayomi": {
"download": "Descargado",
"nondownload": "Non-Downloaded",
"read": "Leer",
"unread": "Sin leer",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Dirección",
"expires": "Caduca en",
@@ -963,49 +953,5 @@
"reminders": "Recordatorios",
"nextReminder": "Siguiente recordatorio",
"none": "Nada"
},
"vikunja": {
"projects": "Proyectos activos",
"tasks7d": "Tareas que vencen esta semana",
"tasksOverdue": "Tareas vencidas",
"tasksInProgress": "Tareas en progreso"
},
"headscale": {
"name": "Nombre",
"address": "Dirección",
"last_seen": "Visto por última vez",
"status": "Estado",
"online": "En línea",
"offline": "Desconectado"
},
"beszel": {
"name": "Nombre",
"systems": "Systems",
"up": "Activo",
"status": "Estado",
"updated": "Actualizado",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Saludable",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Faltantes",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Cargando"
},
"gitlab": {
"groups": "Groups",
"issues": "Números",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Guztira"
},
"suwayomi": {
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Status",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Osasuntsu",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Pysäytetty",
"total": "Yhteensä"
},
"suwayomi": {
"download": "Ladattu",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Tila",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Tila",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "j",
"hours": "h",
@@ -227,8 +227,8 @@
"seed": "Seed"
},
"develancacheui": {
"cachehitbytes": "Octets de la mémoire cache",
"cachemissbytes": "Octets manquants du cache"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Récep.",
@@ -309,16 +309,6 @@
"stopped": "Arrêté",
"total": "Total"
},
"suwayomi": {
"download": "Téléchargé",
"nondownload": "Non téléchargé",
"read": "Lu",
"unread": "Non lu",
"downloadedread": "Téléchargé et lu",
"downloadedunread": "Téléchargé et non lu",
"nondownloadedread": "Non téléchargé et lu",
"nondownloadedunread": "Non téléchargé et non lu"
},
"tailscale": {
"address": "Adresse",
"expires": "Expire",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Requêtes",
"totalNoError": "Effectué avec succès",
"totalServerFailure": "Échecs",
"totalNxDomain": "Domaines NX",
"totalRefused": "Refusés",
"totalAuthoritative": "Autoritaire",
"totalRecursive": "Récursif",
"totalCached": "Mis en cache",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Bloqué",
"totalDropped": "Abandonné",
"totalDropped": "Dropped",
"totalClients": "Clients"
},
"tdarr": {
@@ -766,7 +756,7 @@
"books": "Livres",
"authors": "Auteurs",
"categories": "Catégories",
"series": "Séries TV"
"series": "Séries"
},
"jdownloader": {
"downloadCount": "En attente",
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "Plateformes",
"totalRoms": "Jeux",
"saves": "Sauvegardes",
"states": "États",
"screenshots": "Captures d'écran",
"totalfilesize": "Taille totale"
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domaines",
"mailboxes": "Boites mail",
"mails": "Courriels",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Stockage"
},
"netdata": {
@@ -932,80 +922,36 @@
"upload": "Envoi"
},
"stocks": {
"stocks": "Actions",
"loading": "Chargement",
"open": "Ouvert - Marché américain",
"closed": "Fermé - marché américain",
"invalidConfiguration": "Configuration invalide"
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
},
"frigate": {
"cameras": "Caméras",
"cameras": "Cameras",
"uptime": "Démarré depuis",
"version": "Version"
},
"linkwarden": {
"links": "Liens",
"links": "Links",
"collections": "Collections",
"tags": "Étiquettes"
},
"zabbix": {
"unclassified": "Non classé",
"unclassified": "Not classified",
"information": "Informations",
"warning": "Attention",
"average": "Moyenne",
"high": "Élevé",
"disaster": ""
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Véhicule",
"vehicles": "Véhicules",
"serviceRecords": "Service d'enregistrements",
"reminders": "Rappels",
"nextReminder": "Prochain rappel",
"none": "Aucun"
},
"vikunja": {
"projects": "Projets actifs",
"tasks7d": "Tâches à faire cette semaine",
"tasksOverdue": "Tâches en retard",
"tasksInProgress": "Tâche en cours"
},
"headscale": {
"name": "Nom",
"address": "Adresse",
"last_seen": "Vu pour la dernière fois",
"status": "Statut",
"online": "En ligne",
"offline": "Hors ligne"
},
"beszel": {
"name": "Nom",
"systems": "Systèmes",
"up": "Up",
"status": "Statut",
"updated": "Mis à jour",
"cpu": "CPU",
"memory": "MÉM",
"disk": "Disque",
"network": "Réseau"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Fonctionnel",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Manquant",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Chargement"
},
"gitlab": {
"groups": "Groups",
"issues": "Anomalies",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "נעצר",
"total": "סה\"כ"
},
"suwayomi": {
"download": "הורד",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "סטטוס",
"online": "Online",
"offline": "כבוי"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "סטטוס",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{value, date}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "माह",
"days": "d",
"hours": "घं.",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Total"
},
"suwayomi": {
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Status",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mj",
"days": "dan(a)",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Prekinuto",
"total": "Ukupno"
},
"suwayomi": {
"download": "Preuzeto",
"nondownload": "Non-Downloaded",
"read": "Pročitano",
"unread": "Nepročitano",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adresa",
"expires": "Isteče",
@@ -854,11 +844,11 @@
},
"romm": {
"platforms": "Platforme",
"totalRoms": "Igre",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Snimke ekrana",
"totalfilesize": "Ukupna veličina"
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domene",
@@ -939,19 +929,19 @@
"invalidConfiguration": "Invalid Configuration"
},
"frigate": {
"cameras": "Kamere",
"cameras": "Cameras",
"uptime": "Vrijeme rada",
"version": "Verzija"
},
"linkwarden": {
"links": "Poveznice",
"collections": "Zbirke",
"links": "Links",
"collections": "Collections",
"tags": "Oznake"
},
"zabbix": {
"unclassified": "Not classified",
"information": "Informacije",
"warning": "Upozorenje",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
@@ -960,52 +950,8 @@
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Podsjetnici",
"nextReminder": "Sljedeći podsjetnik",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Ime",
"address": "Adresa",
"last_seen": "Zadnje viđeno",
"status": "Stanje",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Ime",
"systems": "Systems",
"up": "Dostupno",
"status": "Stanje",
"updated": "Aktualizirano",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Funkcionalno",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Nedostaje",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemi",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "hó",
"days": "n",
"hours": "ó",
@@ -309,16 +309,6 @@
"stopped": "Megállított",
"total": "Összes"
},
"suwayomi": {
"download": "Letöltött",
"nondownload": "Non-Downloaded",
"read": "Olvasott",
"unread": "Olvasatlan",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Cím",
"expires": "Lejár",
@@ -963,49 +953,5 @@
"reminders": "Emlékeztetők",
"nextReminder": "Következő emlékeztető",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Név",
"address": "Cím",
"last_seen": "Utoljára látott",
"status": "Státusz",
"online": "Csatlakozva",
"offline": "Nem elérhető"
},
"beszel": {
"name": "Név",
"systems": "Systems",
"up": "Fel",
"status": "Státusz",
"updated": "Frissített",
"cpu": "Processzor",
"memory": "RAM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Egészséges",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Hiányzik",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problémák",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "bulan",
"days": "h",
"hours": "j",
@@ -309,16 +309,6 @@
"stopped": "Terhenti",
"total": "Total"
},
"suwayomi": {
"download": "Terunduh",
"nondownload": "Non-Downloaded",
"read": "Baca",
"unread": "Belum Dibaca",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Alamat",
"expires": "Kadaluarsa",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nama",
"address": "Alamat",
"last_seen": "Terakhir terlihat",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Nama",
"systems": "Systems",
"up": "Hidup",
"status": "Status",
"updated": "Terbarui",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Lancar",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Tidak Ditemukan",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Isu",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "g",
"hours": "o",
@@ -309,16 +309,6 @@
"stopped": "Fermati",
"total": "Totale"
},
"suwayomi": {
"download": "Scaricato",
"nondownload": "Non-Downloaded",
"read": "Letti",
"unread": "Non letto",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Indirizzo",
"expires": "Scade",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nome",
"address": "Indirizzo",
"last_seen": "Ultima visualizzazione",
"status": "Stato",
"online": "Online",
"offline": "Non in linea"
},
"beszel": {
"name": "Nome",
"systems": "Systems",
"up": "Up",
"status": "Stato",
"updated": "Aggiornato",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sano",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Mancanti",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemi",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "月",
"days": "日",
"hours": "時間",
@@ -309,16 +309,6 @@
"stopped": "停止中",
"total": "合計"
},
"suwayomi": {
"download": "ダウンロード",
"nondownload": "Non-Downloaded",
"read": "既読",
"unread": "未読",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "アドレス",
"expires": "失効",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "名前",
"address": "アドレス",
"last_seen": "最終日時",
"status": "状態",
"online": "オンライン",
"offline": "オフライン"
},
"beszel": {
"name": "名前",
"systems": "Systems",
"up": "稼働",
"status": "状態",
"updated": "更新済",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "正常",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "不明",
"suspended": "Suspended"
},
"spoolman": {
"loading": "読み込み中"
},
"gitlab": {
"groups": "Groups",
"issues": "課題",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "중지",
"total": "총합"
},
"suwayomi": {
"download": "다운로드됨",
"nondownload": "Non-Downloaded",
"read": "읽음",
"unread": "미열람",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "주소",
"expires": "만료",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "이름",
"address": "주소",
"last_seen": "마지막 접속",
"status": "상태",
"online": "온라인",
"offline": "중지"
},
"beszel": {
"name": "이름",
"systems": "Systems",
"up": "Up",
"status": "상태",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "좋음",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "빠짐",
"suspended": "Suspended"
},
"spoolman": {
"loading": "로드 중"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Kopā"
},
"suwayomi": {
"download": "Lejupielādēts",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Statuss",
"online": "Online",
"offline": "Bezsaistē"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Statuss",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "bln",
"days": "h",
"hours": "j",
@@ -309,16 +309,6 @@
"stopped": "Terhenti",
"total": "Jumlah"
},
"suwayomi": {
"download": "Telah Muat Turun",
"nondownload": "Non-Downloaded",
"read": "Baca",
"unread": "Belum dibaca",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nama",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Dalam Talian",
"offline": "Luar talian"
},
"beszel": {
"name": "Nama",
"systems": "Systems",
"up": "Hidup",
"status": "Status",
"updated": "Dikemaskini",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sihat",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Hilang",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mnd",
"days": "d",
"hours": "u",
@@ -309,16 +309,6 @@
"stopped": "Gestopt",
"total": "Totaal"
},
"suwayomi": {
"download": "Gedownload",
"nondownload": "Non-Downloaded",
"read": "Gelezen",
"unread": "Ongelezen",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adres",
"expires": "Verloopt",
@@ -862,7 +852,7 @@
},
"mailcow": {
"domains": "Domeinen",
"mailboxes": "Mailboxen",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Opslag"
},
@@ -957,55 +947,11 @@
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Voertuig",
"vehicles": "Voertuigen",
"serviceRecords": "Service Historie",
"reminders": "Herinneringen",
"nextReminder": "Volgende Herinnering",
"none": "Geen"
},
"vikunja": {
"projects": "Actieve Projecten",
"tasks7d": "Taken Die Deze Week Af Moeten Zijn",
"tasksOverdue": "Achterstallige Taken",
"tasksInProgress": "Taken In Uitvoering"
},
"headscale": {
"name": "Naam",
"address": "Adres",
"last_seen": "Laatst Gezien",
"status": "Status",
"online": "Bereikbaar",
"offline": "Offline"
},
"beszel": {
"name": "Naam",
"systems": "Systems",
"up": "Online",
"status": "Status",
"updated": "Bijgewerkt",
"cpu": "CPU",
"memory": "GEH",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Gezond",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Ontbreekt",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Laden"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemen",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mnd",
"days": "d",
"hours": "t",
@@ -309,16 +309,6 @@
"stopped": "Stoppet",
"total": "Totalt"
},
"suwayomi": {
"download": "Nedlastede",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Ulest",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adresse",
"expires": "Utgår",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Navn",
"address": "Adresse",
"last_seen": "Sist sett",
"status": "Status",
"online": "På nett",
"offline": "Frakoblet"
},
"beszel": {
"name": "Navn",
"systems": "Systems",
"up": "Oppe",
"status": "Status",
"updated": "Oppdatert",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Friskt",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Mangler",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mc",
"days": "d",
"hours": "g",
@@ -309,16 +309,6 @@
"stopped": "Zatrzymane",
"total": "Całkowite"
},
"suwayomi": {
"download": "Pobrano",
"nondownload": "Non-Downloaded",
"read": "Przeczytane",
"unread": "Nieprzeczytane",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adres",
"expires": "Wygasa za",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Zapytania",
"totalNoError": "Sukces",
"totalServerFailure": "Porażki",
"totalNxDomain": "Domeny NX",
"totalRefused": "Odrzucone",
"totalAuthoritative": "Autorytatywne",
"totalRecursive": "Rekursywne",
"totalCached": "Zbuforowane",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Zablokowane",
"totalDropped": "Upuszczone",
"totalDropped": "Dropped",
"totalClients": "Klienci"
},
"tdarr": {
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "Platformy",
"totalRoms": "Gry",
"saves": "Zapisy",
"states": "Stany",
"screenshots": "Screeny",
"totalfilesize": "Rozmiar całkowity"
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domeny",
"mailboxes": "Skrzynki",
"mails": "Poczta",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Pamięć"
},
"netdata": {
@@ -949,12 +939,12 @@
"tags": "Tagi"
},
"zabbix": {
"unclassified": "Niezaklasyfikowane",
"unclassified": "Not classified",
"information": "Informacje",
"warning": "Ostrzeżenie",
"average": "Średnia",
"high": "Wysokie",
"disaster": "Katastrofa"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nazwa",
"address": "Adres",
"last_seen": "Ostatnio dostępny",
"status": "Stan",
"online": "Dostępny",
"offline": "Nieosiągalny"
},
"beszel": {
"name": "Nazwa",
"systems": "Systems",
"up": "Dostępny",
"status": "Stan",
"updated": "Zaktualizowane",
"cpu": "Procesor",
"memory": "RAM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Zdrowy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Brakujące",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Wczytywanie"
},
"gitlab": {
"groups": "Groups",
"issues": "Zgłoszenia",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mês",
"days": "d",
"hours": "h",
@@ -30,9 +30,9 @@
"response_data": "Dados da Resposta"
},
"weather": {
"current": "Localização actual",
"current": "Localização atual",
"allow": "Clique para permitir",
"updating": "A actualizar",
"updating": "Atualizando",
"wait": "Por favor aguarde"
},
"search": {
@@ -79,7 +79,7 @@
"starting": "A iniciar",
"unhealthy": "Não-saudável",
"not_found": "Não Encontrado",
"exited": "Saiu",
"exited": "Encerrado",
"partial": "Parcial"
},
"ping": {
@@ -117,10 +117,10 @@
"evcc": {
"pv_power": "Produção",
"battery_soc": "Bateria",
"grid_power": "Grelha",
"grid_power": "Grade",
"home_power": "Consumo",
"charge_power": "Carregador",
"watt_hour": "Wh"
"watt_hour": "Kw"
},
"flood": {
"download": "Descarregar",
@@ -129,16 +129,16 @@
"seed": "Semente"
},
"freshrss": {
"subscriptions": "Subscrições",
"subscriptions": "Assinaturas",
"unread": "Não lida"
},
"fritzbox": {
"connectionStatus": "Estado",
"connectionStatusUnconfigured": "Desconfigurado",
"connectionStatusUnconfigured": "Não configurado",
"connectionStatusConnecting": "A conectar",
"connectionStatusAuthenticating": "A Autenticar",
"connectionStatusAuthenticating": "Autenticando",
"connectionStatusPendingDisconnect": "Desconexão pendente",
"connectionStatusDisconnecting": "A Desconectar",
"connectionStatusDisconnecting": "Desconectando",
"connectionStatusDisconnected": "Desconectado",
"connectionStatusConnected": "Conectado",
"uptime": "Ligado",
@@ -148,19 +148,19 @@
"up": "Up",
"received": "Recebido",
"sent": "Enviado",
"externalIPAddress": "Endereço IP Externo"
"externalIPAddress": "Endereço IP externo"
},
"caddy": {
"upstreams": "Upstreams",
"requests": "Solicitações actuais",
"requests_failed": "Solicitações falhadas"
"requests": "Solicitações atuais",
"requests_failed": "Solicitações com falha"
},
"changedetectionio": {
"totalObserved": "Total Observado",
"diffsDetected": "Diferenças Detectadas"
"diffsDetected": "Diferenças Detetadas"
},
"channelsdvrserver": {
"shows": "Séries",
"shows": "Shows",
"recordings": "Gravações",
"scheduled": "Agendado",
"passes": "Passes"
@@ -170,7 +170,7 @@
"transcoding": "Transcodificação",
"bitrate": "Taxa de bits",
"no_active": "Sem streams ativas",
"plex_connection_error": "Verifique a conexão do Plex"
"plex_connection_error": "Verifique a conexão Plex"
},
"omada": {
"connectedAp": "APs Ligados",
@@ -182,10 +182,10 @@
"nzbget": {
"rate": "Taxa",
"remaining": "Restante",
"downloaded": "Descarregado"
"downloaded": "Baixado"
},
"plex": {
"streams": "Streams Activas",
"streams": "Streams Ativas",
"albums": "Álbuns",
"movies": "Filmes",
"tv": "Series de TV"
@@ -193,10 +193,10 @@
"sabnzbd": {
"rate": "Taxa",
"queue": "Fila",
"timeleft": "Tempo Restante"
"timeleft": "Tempo restante"
},
"rutorrent": {
"active": "Activo",
"active": "Ativo",
"upload": "Carregar",
"download": "Descarregar"
},
@@ -214,8 +214,8 @@
},
"qnap": {
"cpuUsage": "Utilização do CPU",
"memUsage": "Utilização de Memória",
"systemTempC": "Temperatura do Sistema",
"memUsage": "Utilização de memória",
"systemTempC": "Temperatura do sistema",
"poolUsage": "Uso de Banco",
"volumeUsage": "Uso do Volume",
"invalid": "Inválido"
@@ -227,8 +227,8 @@
"seed": "Semente"
},
"develancacheui": {
"cachehitbytes": "Bytes de Acerto na Memória transitória",
"cachemissbytes": "Bytes de Falha de Memória transitória"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Descarregar",
@@ -237,54 +237,54 @@
"seed": "Semente"
},
"sonarr": {
"wanted": "Desejados",
"queued": "Em fila de espera",
"wanted": "Desejada",
"queued": "Em fila",
"series": "Séries",
"queue": "Fila",
"unknown": "Desconhecido"
},
"radarr": {
"wanted": "Desejados",
"missing": "Em falta",
"queued": "Em fila de espera",
"wanted": "Desejada",
"missing": "Faltando",
"queued": "Em fila",
"movies": "Filmes",
"queue": "Fila",
"unknown": "Desconhecido"
},
"lidarr": {
"wanted": "Desejados",
"queued": "Em fila de espera",
"wanted": "Desejada",
"queued": "Em fila",
"artists": "Artistas"
},
"readarr": {
"wanted": "Desejados",
"queued": "Em fila de espera",
"wanted": "Desejada",
"queued": "Em fila",
"books": "Livros"
},
"bazarr": {
"missingEpisodes": "Episódios em Falta",
"missingMovies": "Filmes em Falta"
"missingEpisodes": "Episódios Faltantes",
"missingMovies": "Filmes Faltantes"
},
"ombi": {
"pending": "Pendente",
"approved": "Aprovado",
"approved": "Aprovada",
"available": "Disponível"
},
"jellyseerr": {
"pending": "Pendente",
"approved": "Aprovado",
"approved": "Aprovada",
"available": "Disponível"
},
"overseerr": {
"pending": "Pendente",
"processing": "A Processar",
"approved": "Aprovado",
"processing": "Processando",
"approved": "Aprovada",
"available": "Disponível"
},
"netalertx": {
"total": "Total",
"connected": "Conectado",
"new_devices": "Novos Dispositivos",
"new_devices": "Novos dispositivos",
"down_alerts": "Alertas de Falha"
},
"pihole": {
@@ -309,21 +309,11 @@
"stopped": "Parado",
"total": "Total"
},
"suwayomi": {
"download": "Descarregado",
"nondownload": "Non-Downloaded",
"read": "Lido",
"unread": "Não lida",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Endereço",
"expires": "Expira",
"never": "Nunca",
"last_seen": "Última Vez Visto",
"last_seen": "Última vez visto",
"now": "Agora",
"years": "{{number}}y",
"weeks": "{{number}}w",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Consultas",
"totalNoError": "Sucesso",
"totalServerFailure": "Falhas",
"totalNxDomain": "Domínios NX",
"totalRefused": "Recusado",
"totalAuthoritative": "Autoritário",
"totalRecursive": "Recursivo",
"totalCached": "Em Memória transitória",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Bloqueado",
"totalDropped": "Perdidos",
"totalDropped": "Dropped",
"totalClients": "Clientes"
},
"tdarr": {
@@ -355,19 +345,19 @@
"traefik": {
"routers": "Roteadores",
"services": "Serviços",
"middleware": "Middleware"
"middleware": "Software Middleware"
},
"navidrome": {
"nothing_streaming": "Sem streams ativas",
"please_wait": "Por Favor, Aguarde"
"please_wait": "Por favor aguarde"
},
"npm": {
"enabled": "Activo",
"enabled": "Ativo",
"disabled": "Desabilitado",
"total": "Total"
},
"coinmarketcap": {
"configure": "Configure uma ou mais criptomoedas para rastrear",
"configure": "Configurar uma ou mais moedas",
"1hour": "1 Hora",
"1day": "1 Dia",
"7days": "7 Dias",
@@ -401,8 +391,8 @@
"domain_count": "Domínios"
},
"medusa": {
"wanted": "Desejados",
"queued": "Em fila de espera",
"wanted": "Desejada",
"queued": "Em fila",
"series": "Séries"
},
"minecraft": {
@@ -418,8 +408,8 @@
},
"authentik": {
"users": "Utilizadores",
"loginsLast24H": "Inícios de Sessão (24h)",
"failedLoginsLast24H": "Inícios de Sessão Falhados (24h)"
"loginsLast24H": "Inícios de sessão (24h)",
"failedLoginsLast24H": "Inícios de sessão falhados (24h)"
},
"proxmox": {
"mem": "MEM",
@@ -450,7 +440,7 @@
"quicklaunch": {
"bookmark": "Marcador",
"service": "Serviço",
"search": "Pesquisa",
"search": "Busca",
"custom": "Personalizado",
"visit": "Visitar",
"url": "Endereço URL",
@@ -459,7 +449,7 @@
"wmo": {
"0-day": "Solarengo",
"0-night": "Limpo",
"1-day": "Maioritariamente Solarengo",
"1-day": "Maioritariamente ensolarado",
"1-night": "Maioritariamente Limpo",
"2-day": "Parcialmente Nublado",
"2-night": "Parcialmente Nublado",
@@ -497,16 +487,16 @@
"75-night": "Neve forte",
"77-day": "Grãos de Neve",
"77-night": "Grãos de Neve",
"80-day": "Chuviscos Leves",
"80-night": "Chuviscos Leves",
"80-day": "Neve fraca",
"80-night": "Neve fraca",
"81-day": "Chuviscos",
"81-night": "Chuviscos",
"82-day": "Chuviscos fortes",
"82-night": "Chuviscos fortes",
"85-day": "Chuva de Neve",
"85-night": "Chuva de Neve",
"86-day": "Chuva de Neve",
"86-night": "Chuva de Neve",
"85-day": "Precipitação de Neve",
"85-night": "Precipitação de Neve",
"86-day": "Precipitação de Neve",
"86-night": "Precipitação de Neve",
"95-day": "Trovoada",
"95-night": "Trovoada",
"96-day": "Trovoada com granizo",
@@ -516,10 +506,10 @@
},
"homebridge": {
"available_update": "Sistema",
"updates": "Actualizações",
"updates": "Atualizações",
"update_available": "Atualização disponível",
"up_to_date": "Atualizado",
"child_bridges": "Child Bridges",
"child_bridges": "Pontes Filhas",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pendente",
@@ -528,12 +518,12 @@
"healthchecks": {
"new": "Novo",
"up": "Up",
"grace": "Em Período de Graça",
"grace": "Em Período Gratuito",
"down": "Down",
"paused": "Pausa",
"paused": "Pausado",
"status": "Estado",
"last_ping": "Ultimo Ping",
"never": "Nenhum Ping ainda"
"never": "Nenhum ping ainda"
},
"watchtower": {
"containers_scanned": "Verificado",
@@ -541,7 +531,7 @@
"containers_failed": "Falhou"
},
"autobrr": {
"approvedPushes": "Aprovado",
"approvedPushes": "Aprovada",
"rejectedPushes": "Rejeitado",
"filters": "Filtros",
"indexers": "Indexadores"
@@ -559,7 +549,7 @@
},
"pyload": {
"speed": "Velocidade",
"active": "Activo",
"active": "Ativo",
"queue": "Fila",
"total": "Total"
},
@@ -598,8 +588,8 @@
"low_battery": "Bateria Fraca"
},
"nextdns": {
"wait": "Por Favor, Aguarde",
"no_devices": "Nenhum Dado do Dispositivo Recebido"
"wait": "Por favor aguarde",
"no_devices": "Nenhum dado do dispositivo recebido"
},
"mikrotik": {
"cpuLoad": "Carga do CPU",
@@ -609,7 +599,7 @@
},
"xteve": {
"streams_all": "Todos os Streams",
"streams_active": "Streams Activas",
"streams_active": "Streams Ativas",
"streams_xepg": "Canais XEPG"
},
"opendtu": {
@@ -647,7 +637,7 @@
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Utilização do Disco",
"disk": "Utilização",
"wanIP": "WAN IP"
},
"proxmoxbackupserver": {
@@ -688,17 +678,17 @@
"mylar": {
"series": "Séries",
"issues": "Problemas",
"wanted": "Desejados"
"wanted": "Desejada"
},
"photoprism": {
"albums": "Álbuns",
"photos": "Fotos",
"videos": "Vídeos",
"people": "Pessoas"
"people": "Pessoa"
},
"fileflows": {
"queue": "Fila",
"processing": "A Processar",
"processing": "Processando",
"processed": "Processado",
"time": "Hora"
},
@@ -706,13 +696,13 @@
"dashboards": "Painéis",
"datasources": "Origem de Dados",
"totalalerts": "Total Alertas",
"alertstriggered": "Alertas Desencadeados"
"alertstriggered": "Alertas Disparados"
},
"nextcloud": {
"cpuload": "Carga de CPU",
"memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre",
"activeusers": "Utilizadores Activos",
"activeusers": "Utilizadores Ativos",
"numfiles": "Ficheiros",
"numshares": "Itens partilhados"
},
@@ -734,7 +724,7 @@
},
"prometheus": {
"targets_up": "Alvo ativo",
"targets_down": "Alvo Inactivo",
"targets_down": "Alvo inativo",
"targets_total": "Total de Alvos"
},
"gatus": {
@@ -745,7 +735,7 @@
"ghostfolio": {
"gross_percent_today": "Hoje",
"gross_percent_1y": "Um ano",
"gross_percent_max": "Desde Sempre"
"gross_percent_max": "Todo o tempo"
},
"audiobookshelf": {
"podcasts": "Podcasts",
@@ -760,7 +750,7 @@
},
"whatsupdocker": {
"monitoring": "A monitorizar",
"updates": "Actualizações"
"updates": "Atualizações"
},
"calibreweb": {
"books": "Livros",
@@ -782,14 +772,14 @@
"result": "Resultado",
"status": "Estado",
"buildId": "ID da compilação",
"succeeded": "Bem sucedido",
"succeeded": "Com êxito",
"notStarted": "Não Iniciado",
"failed": "Falhou",
"canceled": "Cancelado",
"inProgress": "Em progresso",
"totalPrs": "Total de PRs",
"myPrs": "Os Meus PRs",
"approved": "Aprovado"
"myPrs": "Meus PRs",
"approved": "Aprovada"
},
"gamedig": {
"status": "Estado",
@@ -797,7 +787,7 @@
"offline": "Desligado",
"name": "Nome",
"map": "Mapa",
"currentPlayers": "Jogadores actuais",
"currentPlayers": "Jogadores atuais",
"players": "Reprodutores",
"maxPlayers": "Máximo de Jogadores",
"bots": "Bots",
@@ -806,7 +796,7 @@
"urbackup": {
"ok": "Ok",
"errored": "Erros",
"noRecent": "Desactualizado",
"noRecent": "Desatualizado",
"totalUsed": "Espaço utilizado"
},
"mealie": {
@@ -816,7 +806,7 @@
"tags": "Etiquetas"
},
"openmediavault": {
"downloading": "A descarregar",
"downloading": "A transferir",
"total": "Total",
"running": "A correr",
"stopped": "Parado",
@@ -834,14 +824,14 @@
"uptimerobot": {
"status": "Estado",
"uptime": "Ligado",
"lastDown": "Última Inactividade",
"downDuration": "Duração de Inactividade",
"lastDown": "Última inatividade",
"downDuration": "Duração de inatividade",
"sitesUp": "Sites no Ar",
"sitesDown": "Sites Fora do Ar",
"paused": "Pausa",
"paused": "Pausado",
"notyetchecked": "Ainda não verificado",
"up": "Up",
"seemsdown": "Parece em Baixo",
"seemsdown": "Parece Baixo",
"down": "Down",
"unknown": "Desconhecido"
},
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "Plataformas",
"totalRoms": "Jogos",
"totalRoms": "Games",
"saves": "Saves",
"states": "Estados",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Tamanho Total"
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domínios",
"mailboxes": "Caixas de Correio",
"mails": "E-mails",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Armazenamento"
},
"netdata": {
@@ -891,7 +881,7 @@
"images": "Imagens",
"imageSize": "Tamanho das imagens",
"galleries": "Galerias",
"performers": "Artistas de palco",
"performers": "Artistas",
"studios": "Estúdios",
"movies": "Filmes",
"tags": "Etiquetas",
@@ -916,14 +906,14 @@
},
"wgeasy": {
"connected": "Conectado",
"enabled": "Activo",
"enabled": "Ativo",
"disabled": "Desabilitado",
"total": "Total"
},
"swagdashboard": {
"proxied": "Com proxy",
"auth": "Com Autorização",
"outdated": "Desactualizado",
"outdated": "Desatualizado",
"banned": "Banido"
},
"myspeed": {
@@ -932,80 +922,36 @@
"upload": "Carregar"
},
"stocks": {
"stocks": "Acções",
"loading": "A carregar",
"stocks": "Ações",
"loading": "Carregando",
"open": "Aberto - Mercado dos EUA",
"closed": "Fechado - Mercado dos EUA",
"invalidConfiguration": "Configuração Inválida"
"invalidConfiguration": "Configuração inválida"
},
"frigate": {
"cameras": "Câmeras",
"cameras": "Câmaras",
"uptime": "Ligado",
"version": "Versão"
},
"linkwarden": {
"links": "Links",
"collections": "Colecções",
"collections": "Collections",
"tags": "Etiquetas"
},
"zabbix": {
"unclassified": "Não Classificados",
"unclassified": "Not classified",
"information": "Informação",
"warning": "Avisos",
"average": "Média",
"high": "Elevado",
"disaster": "Desastre"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Veículo",
"vehicles": "Veículos",
"serviceRecords": "Registros de Serviço",
"reminders": "Lembretes",
"nextReminder": "Próximo Lembrete",
"none": "Nenhum"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nome",
"address": "Endereço",
"last_seen": "Última Vez Visto",
"status": "Estado",
"online": "Online",
"offline": "Desligado"
},
"beszel": {
"name": "Nome",
"systems": "Systems",
"up": "Up",
"status": "Estado",
"updated": "Atualizado",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Saudável",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Em falta",
"suspended": "Suspended"
},
"spoolman": {
"loading": "A carregar"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemas",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "M",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Parado",
"total": "Total"
},
"suwayomi": {
"download": "Baixado",
"nondownload": "Non-Downloaded",
"read": "Lido",
"unread": "Não lida",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Endereço",
"expires": "Expira em",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Nome",
"address": "Endereço",
"last_seen": "Visto por último",
"status": "Status",
"online": "Disponível",
"offline": "Offline"
},
"beszel": {
"name": "Nome",
"systems": "Systems",
"up": "Ativo",
"status": "Status",
"updated": "Atualizado",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Saudável",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Faltando",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Carregando"
},
"gitlab": {
"groups": "Groups",
"issues": "Problemas",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Oprit",
"total": "Total"
},
"suwayomi": {
"download": "Descărcat",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Necitit",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Stare",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Sus",
"status": "Stare",
"updated": "Updated",
"cpu": "Procesor",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sănătos",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "мес",
"days": "дней",
"hours": "час",
@@ -227,8 +227,8 @@
"seed": "Сид"
},
"develancacheui": {
"cachehitbytes": "Хит байты кэша",
"cachemissbytes": "Мисс байты кэша"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Скачивание",
@@ -284,7 +284,7 @@
"netalertx": {
"total": "Всего",
"connected": "Подключено",
"new_devices": "Новые устройства",
"new_devices": "Новое устройство",
"down_alerts": "Оповещение о недоступности"
},
"pihole": {
@@ -309,16 +309,6 @@
"stopped": "Остановлено",
"total": "Всего"
},
"suwayomi": {
"download": "Загружено",
"nondownload": "Незагруженные",
"read": "Прочитано",
"unread": "Не прочитано",
"downloadedread": "Загруженные и прочитанные",
"downloadedunread": "Загруженные и непрочитанные",
"nondownloadedread": "Незагруженные и прочитанные",
"nondownloadedunread": "Незагруженные и непрочитанные"
},
"tailscale": {
"address": "Адрес",
"expires": "Истекает",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Запросы",
"totalNoError": "Успешные",
"totalServerFailure": "Ошибки",
"totalNxDomain": "NX домены",
"totalRefused": "Отказано",
"totalAuthoritative": "Авторитетные",
"totalRecursive": "Рекурсивные",
"totalCached": "Кэш",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Заблокировано",
"totalDropped": "Отброшенные",
"totalDropped": "Dropped",
"totalClients": "Клиенты"
},
"tdarr": {
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "Платформы",
"totalRoms": "Игры",
"saves": "Сейвы",
"states": "Состояния",
"screenshots": "Скриншоты",
"totalfilesize": "Общий объем"
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Домены",
"mailboxes": "Почтовые ящики",
"mails": "Письма",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Хранилище"
},
"netdata": {
@@ -912,7 +902,7 @@
},
"crowdsec": {
"alerts": "Предупреждения",
"bans": "Блокировки"
"bans": "Запреты"
},
"wgeasy": {
"connected": "Подключено",
@@ -921,10 +911,10 @@
"total": "Всего"
},
"swagdashboard": {
"proxied": "Прокси",
"auth": "С Авторизацией",
"outdated": "Устаревшие",
"banned": "Заблокированные"
"proxied": "Proxied",
"auth": "With Auth",
"outdated": "Outdated",
"banned": "Banned"
},
"myspeed": {
"ping": "Пинг",
@@ -932,80 +922,36 @@
"upload": "Загрузка"
},
"stocks": {
"stocks": "Акции",
"loading": "Загрузка",
"open": "Открыто - Рынок США",
"closed": "Закрыто - рынок США",
"invalidConfiguration": "Неверная конфигурация"
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
},
"frigate": {
"cameras": "Камеры",
"cameras": "Cameras",
"uptime": "Время работы",
"version": "Версия"
},
"linkwarden": {
"links": "Ссылки",
"collections": "Коллекции",
"links": "Links",
"collections": "Collections",
"tags": "Теги"
},
"zabbix": {
"unclassified": "Не классифицировано",
"unclassified": "Not classified",
"information": "Информация",
"warning": "Предупреждение",
"average": "Средняя",
"high": "Высокая",
"disaster": "Чрезвычайная"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Автомобиль",
"vehicles": "Автомобили",
"serviceRecords": "Сервисные работы",
"reminders": "Напоминания",
"nextReminder": "Следующее напоминание",
"none": "Нет"
},
"vikunja": {
"projects": "Активные Проекты",
"tasks7d": "Задачи на этой неделе",
"tasksOverdue": "Просроченные задачи",
"tasksInProgress": "Задачи в процессе"
},
"headscale": {
"name": "Имя",
"address": "Адрес",
"last_seen": "Последнее посещение",
"status": "Статус",
"online": "В сети",
"offline": "Не в сети"
},
"beszel": {
"name": "Имя",
"systems": "Системы",
"up": "Онлайн",
"status": "Статус",
"updated": "Обновленно",
"cpu": "ЦП",
"memory": "ОЗУ",
"disk": "Диск",
"network": "Сеть"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Здоровый",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Отсутствует",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Загрузка"
},
"gitlab": {
"groups": "Groups",
"issues": "Вопросы",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mes",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Zastavené",
"total": "Celkovo"
},
"suwayomi": {
"download": "Stiahnuté",
"nondownload": "Non-Downloaded",
"read": "Prečítané",
"unread": "Neprečítané",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adresa",
"expires": "Vyprší",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Meno",
"address": "Adresa",
"last_seen": "Naposledy videné",
"status": "Stav",
"online": "Online",
"offline": "Nedostupný"
},
"beszel": {
"name": "Meno",
"systems": "Systems",
"up": "Nahrávanie",
"status": "Stav",
"updated": "Aktualizované",
"cpu": "CPU",
"memory": "RAM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Zdravý",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Chýbajúce",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Problémy",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mes",
"days": "d",
"hours": "u",
@@ -309,16 +309,6 @@
"stopped": "Ustavljen",
"total": "Skupaj"
},
"suwayomi": {
"download": "Preneseno",
"nondownload": "Nepreneseno",
"read": "Prebrano",
"unread": "Neprebrano",
"downloadedread": "Preneseno in prebrano",
"downloadedunread": "Preneseno in neprebrano",
"nondownloadedread": "Nepreneseno in prebrano",
"nondownloadedunread": "Nepreneseno in neprebrano"
},
"tailscale": {
"address": "Naslov",
"expires": "Poteče",
@@ -963,49 +953,5 @@
"reminders": "Opomniki",
"nextReminder": "Naslednji opomnik",
"none": "Brez"
},
"vikunja": {
"projects": "Aktivni projekti",
"tasks7d": "Potekla opravila tega tedna",
"tasksOverdue": "Potekla opravila",
"tasksInProgress": "Tekoča opravila"
},
"headscale": {
"name": "Naziv",
"address": "Naslov",
"last_seen": "Viden",
"status": "Stanje",
"online": "Na spletu",
"offline": "Ni povezan"
},
"beszel": {
"name": "Naziv",
"systems": "Sistemi",
"up": "Povezan",
"status": "Stanje",
"updated": "Posodobljen",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "Mreža"
},
"argocd": {
"apps": "Aplikacije",
"synced": "Sinhro",
"outOfSync": "Ni sinhro",
"healthy": "Zdrav",
"degraded": "Degragirano",
"progressing": "V teku",
"missing": "Manjka",
"suspended": "Prekinjeno"
},
"spoolman": {
"loading": "Nalaganje"
},
"gitlab": {
"groups": "Groups",
"issues": "Težave",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Total"
},
"suwayomi": {
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Status",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mån",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stoppade",
"total": "Total"
},
"suwayomi": {
"download": "Nedladdat",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Status",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "ఆగిపోయినవి",
"total": "మొత్తం"
},
"suwayomi": {
"download": "డౌన్‌లోడ్ చేయబడింది",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "హోదా",
"online": "Online",
"offline": "ఆఫ్‌లైన్"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "హోదా",
"updated": "నవీకరించబడింది",
"cpu": "సీపియూ",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "మిస్సింగ్",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "ทั้งหมด"
},
"suwayomi": {
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "สถานะ",
"online": "Online",
"offline": "ออฟไลน์"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "สถานะ",
"updated": "Updated",
"cpu": "ซีพียู",
"memory": "เมม",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "ay",
"days": "g",
"hours": "sa",
@@ -309,16 +309,6 @@
"stopped": "Durduruldu",
"total": "Toplam"
},
"suwayomi": {
"download": "İndirilen",
"nondownload": "Non-Downloaded",
"read": "Okunan",
"unread": "Okunmamış",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Adres",
"expires": "Geciken",
@@ -863,7 +853,7 @@
"mailcow": {
"domains": "Etki Alanları",
"mailboxes": "Mailboxes",
"mails": "Postalar",
"mails": "Mails",
"storage": "Depo"
},
"netdata": {
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Bitişi Bu Hafta Olan Görevler",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "İsim",
"address": "Adres",
"last_seen": "Son Görülme",
"status": "Durum",
"online": "Çevrimiçi",
"offline": "Çevrimdışı"
},
"beszel": {
"name": "İsim",
"systems": "Systems",
"up": "Yükleme",
"status": "Durum",
"updated": "Güncellendi",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sağlıklı",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Eksik",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Yükleniyor"
},
"gitlab": {
"groups": "Groups",
"issues": "Sorunlar",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,10 +13,10 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "міс",
"days": нів",
"hours": "год",
"days": "д",
"hours": "г",
"minutes": "хв",
"seconds": "с"
},
@@ -47,7 +47,7 @@
"load": "Завантаження",
"temp": "Температура",
"max": "Макс.",
"uptime": "Онлайн"
"uptime": "Відправка"
},
"unifi": {
"users": "Користувачі",
@@ -61,7 +61,7 @@
"wlan_devices": "WLAN пристрої",
"lan_users": "LAN користувачі",
"wlan_users": "WLAN користувачі",
"up": "Онлайн",
"up": "Відправка",
"down": "Завантаження",
"wait": "Будь ласка, зачекайте",
"empty_data": "Статус підсистеми невідомий"
@@ -75,7 +75,7 @@
"offline": "Офлайн",
"error": "Помилка",
"unknown": "Невідомий",
"healthy": "Здоровий",
"healthy": "Здоров",
"starting": "Запуск",
"unhealthy": "Нездоровий",
"not_found": "Не знайдено",
@@ -99,7 +99,7 @@
},
"emby": {
"playing": "Відтворення",
"transcoding": "Транскодування",
"transcoding": "Перекодування",
"bitrate": "Бітрейт",
"no_active": "Немає активних потоків",
"movies": "Фільми",
@@ -123,8 +123,8 @@
"watt_hour": "Вт/год"
},
"flood": {
"download": "Завантажено",
"upload": "Відправлено",
"download": "Завантаження",
"upload": "Відправлення",
"leech": "Ліч",
"seed": "Сід"
},
@@ -142,13 +142,13 @@
"connectionStatusDisconnected": "Відключено",
"connectionStatusConnected": "З'єднано",
"uptime": "Час роботи",
"maxDown": "Макс. завантаження",
"maxDown": "Макс. зав",
"maxUp": "Макс. віддача",
"down": "Офлайн",
"up": "Онлайн",
"received": "Отримано",
"sent": "Надіслано",
"externalIPAddress": "Зовнішній IP"
"sent": "Надісл.",
"externalIPAddress": "Зовн. IP"
},
"caddy": {
"upstreams": "Потоки",
@@ -163,11 +163,11 @@
"shows": "Вистави",
"recordings": "Записи",
"scheduled": "Заплановано",
"passes": ропуски"
"passes": ерепустки"
},
"tautulli": {
"playing": "Відтворення",
"transcoding": "Транскодування",
"transcoding": "Перекодування",
"bitrate": "Бітрейт",
"no_active": "Немає активних потоків",
"plex_connection_error": "Перевірте з'єднання Plex"
@@ -197,18 +197,18 @@
},
"rutorrent": {
"active": "Активний",
"upload": "Відправлено",
"download": "Завантажено"
"upload": "Відправлення",
"download": "Завантаження"
},
"transmission": {
"download": "Завантажено",
"upload": "Відправлено",
"download": "Завантаження",
"upload": "Відправлення",
"leech": "Ліч",
"seed": "Сід"
},
"qbittorrent": {
"download": "Завантажено",
"upload": "Відправлено",
"download": "Завантаження",
"upload": "Відправлення",
"leech": "Ліч",
"seed": "Сід"
},
@@ -221,18 +221,18 @@
"invalid": "Недійсний"
},
"deluge": {
"download": "Завантажено",
"upload": "Відправлено",
"download": "Завантаження",
"upload": "Відправлення",
"leech": "Ліч",
"seed": "Сід"
},
"develancacheui": {
"cachehitbytes": "Кеш-хіт байт",
"cachemissbytes": "Кеш-міс байт"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Завантажено",
"upload": "Відправлено",
"download": "Завантаження",
"upload": "Відправлення",
"leech": "Ліч",
"seed": "Сід"
},
@@ -300,8 +300,8 @@
"latency": "Затримка"
},
"speedtest": {
"upload": "Відправлено",
"download": "Завантажено",
"upload": "Відправлення",
"download": "Завантаження",
"ping": "Пінг"
},
"portainer": {
@@ -309,16 +309,6 @@
"stopped": "Зупинено",
"total": "Усього"
},
"suwayomi": {
"download": "Завантажено",
"nondownload": "Non-Downloaded",
"read": "Прочитано",
"unread": "Не прочитано",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Адреса",
"expires": "Дійсний до",
@@ -335,15 +325,15 @@
},
"technitium": {
"totalQueries": "Запити",
"totalNoError": "Успішно",
"totalServerFailure": "Помилки",
"totalNxDomain": "NX Домени",
"totalRefused": "Відмовлено",
"totalAuthoritative": "Авторитетні",
"totalRecursive": "Рекурсивні",
"totalCached": "Кешовані",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Заблоковано",
"totalDropped": "Видалені",
"totalDropped": "Dropped",
"totalClients": "Клієнти"
},
"tdarr": {
@@ -434,12 +424,12 @@
"temp": "Температура",
"_temp": "Темп.",
"warn": "Увага",
"uptime": "Онлайн",
"uptime": "Відправка",
"total": "Усього",
"free": "Вільно",
"used": "Використано",
"days": нів",
"hours": "год",
"days": "д",
"hours": "г",
"crit": "Крит",
"read": "Прочитано",
"write": "Написати",
@@ -825,77 +815,77 @@
},
"openwrt": {
"uptime": "Час роботи",
"cpuLoad": "Сер. навантаження ЦП (5 хв)",
"cpuLoad": "CPU Load Avg (5m)",
"up": "Онлайн",
"down": "Офлайн",
"bytesTx": "Передано",
"bytesTx": "Transmitted",
"bytesRx": "Отримано"
},
"uptimerobot": {
"status": "Стан",
"uptime": "Час роботи",
"lastDown": "Останній час простою",
"downDuration": "Тривалість простою",
"lastDown": "Last Downtime",
"downDuration": "Downtime Duration",
"sitesUp": "Активні сайти",
"sitesDown": "Неактивні сайти",
"paused": "Призупинено",
"notyetchecked": "Ще не перевірено",
"notyetchecked": "Not Yet Checked",
"up": "Онлайн",
"seemsdown": "Вірогідно в простої",
"seemsdown": "Seems Down",
"down": "Офлайн",
"unknown": "Невідомий"
},
"calendar": {
"inCinemas": "У кінотеатрах",
"physicalRelease": "Фізичний реліз",
"digitalRelease": "Цифровий реліз",
"noEventsToday": "Події на сьогодні відсутні",
"noEventsFound": "Події не знайдено"
"inCinemas": "In cinemas",
"physicalRelease": "Physical release",
"digitalRelease": "Digital release",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
},
"romm": {
"platforms": "Платформи",
"totalRoms": "Ігри",
"saves": "Збереження",
"states": "Штати",
"screenshots": "Знімки екрану",
"totalfilesize": "Загальний обсяг"
"platforms": "Platforms",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Домени",
"mailboxes": "Пошта",
"mails": "Листи",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Сховище"
},
"netdata": {
"warnings": "Попередження",
"criticals": "Критичні"
"criticals": "Criticals"
},
"plantit": {
"events": "Події",
"plants": "Рослини",
"events": "Events",
"plants": "Plants",
"photos": "Фотографії",
"species": "Види"
"species": "Species"
},
"gitea": {
"notifications": "Сповіщення",
"issues": "Питання",
"pulls": "Pull-запити"
"pulls": "Pull Requests"
},
"stash": {
"scenes": "Сцени",
"scenesPlayed": "Зіграні сцени",
"playCount": "Всього п'єс",
"playDuration": "Переглянуто",
"sceneSize": "Розміри сцен",
"sceneDuration": "Тривалість сцен",
"images": "Зображення",
"imageSize": "Розміри зображень",
"galleries": "Галереї",
"scenes": "Scenes",
"scenesPlayed": "Scenes Played",
"playCount": "Total Plays",
"playDuration": "Time Watched",
"sceneSize": "Scenes Size",
"sceneDuration": "Scenes Duration",
"images": "Images",
"imageSize": "Images Size",
"galleries": "Galleries",
"performers": "Виконавці",
"studios": "Студії",
"studios": "Studios",
"movies": "Фільми",
"tags": "Теги",
"oCount": "Кількість O"
"oCount": "O Count"
},
"tandoor": {
"users": "Користувачі",
@@ -903,16 +893,16 @@
"keywords": "Ключові слова"
},
"homebox": {
"items": "Речі",
"totalWithWarranty": "З гарантією",
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Місцезнаходження",
"labels": "Мітки",
"users": "Користувачі",
"totalValue": "Загальне значення"
"totalValue": "Total Value"
},
"crowdsec": {
"alerts": "Оповіщення",
"bans": "Блокування"
"bans": "Bans"
},
"wgeasy": {
"connected": "З'єднано",
@@ -921,21 +911,21 @@
"total": "Усього"
},
"swagdashboard": {
"proxied": "Пропущено через проксі",
"auth": "З аутентифікацією",
"outdated": "Застаріле",
"banned": "Заблоковано"
"proxied": "Proxied",
"auth": "With Auth",
"outdated": "Outdated",
"banned": "Banned"
},
"myspeed": {
"ping": "Пінг",
"download": "Завантажено",
"upload": "Відправлено"
"download": "Завантаження",
"upload": "Відправлення"
},
"stocks": {
"stocks": "Акції",
"stocks": "Stocks",
"loading": "Завантажую",
"open": "Відкрито - ринок США",
"closed": "Закрито - ринок США",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Неприпустима конфігурація"
},
"frigate": {
@@ -944,68 +934,24 @@
"version": "Версія"
},
"linkwarden": {
"links": "Посилання",
"collections": "Колекції",
"links": "Links",
"collections": "Collections",
"tags": "Теги"
},
"zabbix": {
"unclassified": "Не визначено",
"unclassified": "Not classified",
"information": "Інформація",
"warning": "Попередження",
"average": "Середнє",
"high": "Високе",
"disaster": "Катастрофа"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Транспортний засіб",
"vehicles": "Транспортні засоби",
"serviceRecords": "Записи служб",
"reminders": "Нагадування",
"nextReminder": "Наступне нагадування",
"none": "Жодного"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Назва",
"address": "Адреса",
"last_seen": "Востаннє у мережі",
"status": "Стан",
"online": "Онлайн",
"offline": "Офлайн"
},
"beszel": {
"name": "Назва",
"systems": "Systems",
"up": "Онлайн",
"status": "Стан",
"updated": "Оновлено",
"cpu": "ЦП",
"memory": "ОЗП",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Здоровий",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Відсутній",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Завантажую"
},
"gitlab": {
"groups": "Groups",
"issues": "Питання",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,16 +309,6 @@
"stopped": "Stopped",
"total": "Tổng"
},
"suwayomi": {
"download": "Đã tải",
"nondownload": "Non-Downloaded",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "Address",
"expires": "Expires",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Trạng thái",
"online": "Online",
"offline": "Ngoại tuyến"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Trạng thái",
"updated": "Updated",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "月",
"days": "天",
"hours": "小時",
@@ -309,16 +309,6 @@
"stopped": "暫停",
"total": "全部"
},
"suwayomi": {
"download": "下載咗",
"nondownload": "Non-Downloaded",
"read": "已讀",
"unread": "未讀",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "位址",
"expires": "已失效",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "名稱",
"address": "位址",
"last_seen": "上次連線",
"status": "狀況",
"online": "在線",
"offline": "離線"
},
"beszel": {
"name": "名稱",
"systems": "Systems",
"up": "在線",
"status": "狀況",
"updated": "已更新",
"cpu": "CPU",
"memory": "記憶體",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "健康",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "缺少",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "出版",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "月",
"days": "日",
"hours": "时",
@@ -61,7 +61,7 @@
"wlan_devices": "无线局域网设备",
"lan_users": "局域网用户",
"wlan_users": "无线局域网用户",
"up": "运行时间",
"up": "在线",
"down": "离线",
"wait": "请稍候",
"empty_data": "子系统状态未知"
@@ -227,8 +227,8 @@
"seed": "做种"
},
"develancacheui": {
"cachehitbytes": "缓存命中字节",
"cachemissbytes": "缓存Bytes失败"
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "下载",
@@ -309,16 +309,6 @@
"stopped": "停止",
"total": "总计"
},
"suwayomi": {
"download": "下载",
"nondownload": "Non-Downloaded",
"read": "已读",
"unread": "未读",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "地址",
"expires": "失效",
@@ -337,7 +327,7 @@
"totalQueries": "查询",
"totalNoError": "成功",
"totalServerFailure": "失败",
"totalNxDomain": "",
"totalNxDomain": "NX Domains",
"totalRefused": "已拒绝",
"totalAuthoritative": "权威",
"totalRecursive": "递归",
@@ -734,7 +724,7 @@
},
"prometheus": {
"targets_up": "目标上线",
"targets_down": "目标离线",
"targets_down": "离线目标",
"targets_total": "总目标"
},
"gatus": {
@@ -854,16 +844,16 @@
},
"romm": {
"platforms": "平台",
"totalRoms": "游戏数",
"saves": "已保存",
"states": "状态",
"screenshots": "屏幕截图",
"totalfilesize": "总大小"
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "域",
"mailboxes": "邮箱",
"mails": "邮件",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "储存空间"
},
"netdata": {
@@ -932,80 +922,36 @@
"upload": "上传速率"
},
"stocks": {
"stocks": "库存",
"loading": "正在加载",
"open": "打開-美国商店",
"closed": "关闭-美国市场",
"invalidConfiguration": "无效配置"
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
},
"frigate": {
"cameras": "摄像头",
"cameras": "Cameras",
"uptime": "运行时间",
"version": "版本"
},
"linkwarden": {
"links": "链接",
"collections": "收藏",
"links": "Links",
"collections": "Collections",
"tags": "Tags"
},
"zabbix": {
"unclassified": "未分类",
"unclassified": "Not classified",
"information": "信息",
"warning": "警告",
"average": "平均红包",
"high": "",
"disaster": "灾难"
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "载具",
"vehicles": "交通工具",
"serviceRecords": "保养记录",
"reminders": "提示",
"nextReminder": "下次提醒",
"none": ""
},
"vikunja": {
"projects": "积极的项目",
"tasks7d": "本周到期的任务",
"tasksOverdue": "过期的任务",
"tasksInProgress": "正在处理的任务"
},
"headscale": {
"name": "Name",
"address": "地址",
"last_seen": "最后上线",
"status": "状态",
"online": "在线的",
"offline": "离线"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "状态",
"updated": "已升级",
"cpu": "CPU",
"memory": "内存",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "应用程序",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "健康",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "丢失",
"suspended": "Suspended"
},
"spoolman": {
"loading": "正在加载"
},
"gitlab": {
"groups": "Groups",
"issues": "问题",
"merges": "Merge Requests",
"projects": "Projects"
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"uptime": "{{value, uptime}}",
"months": "月",
"days": "天",
"hours": "小時",
@@ -309,16 +309,6 @@
"stopped": "已停止",
"total": "全部"
},
"suwayomi": {
"download": "已下載",
"nondownload": "Non-Downloaded",
"read": "已讀",
"unread": "未讀",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
},
"tailscale": {
"address": "位址",
"expires": "已失效",
@@ -963,49 +953,5 @@
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "名稱",
"address": "位址",
"last_seen": "上次連線",
"status": "狀態",
"online": "在線",
"offline": "離線"
},
"beszel": {
"name": "名稱",
"systems": "Systems",
"up": "在線",
"status": "狀態",
"updated": "已更新",
"cpu": "CPU",
"memory": "記憶體",
"disk": "Disk",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "健康",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "缺少",
"suspended": "Suspended"
},
"spoolman": {
"loading": "Loading"
},
"gitlab": {
"groups": "Groups",
"issues": "出版",
"merges": "Merge Requests",
"projects": "Projects"
}
}

View File

@@ -1,6 +1,6 @@
import { CoreV1Api, Metrics } from "@kubernetes/client-node";
import getKubeConfig from "../../../../utils/config/kubernetes";
import getKubeArguments from "../../../../utils/config/kubernetes";
import { parseCpu, parseMemory } from "../../../../utils/kubernetes/kubernetes-utils";
import createLogger from "../../../../utils/logger";
@@ -20,7 +20,7 @@ export default async function handler(req, res) {
const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`;
try {
const kc = getKubeConfig();
const kc = getKubeArguments().config;
if (!kc) {
res.status(500).send({
error: "No kubernetes configuration",

View File

@@ -1,6 +1,6 @@
import { CoreV1Api } from "@kubernetes/client-node";
import getKubeConfig from "../../../../utils/config/kubernetes";
import getKubeArguments from "../../../../utils/config/kubernetes";
import createLogger from "../../../../utils/logger";
const logger = createLogger("kubernetesStatusService");
@@ -18,7 +18,7 @@ export default async function handler(req, res) {
}
const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`;
try {
const kc = getKubeConfig();
const kc = getKubeArguments().config;
if (!kc) {
res.status(500).send({
error: "No kubernetes configuration",

View File

@@ -1,6 +1,6 @@
import { CoreV1Api, Metrics } from "@kubernetes/client-node";
import getKubeConfig from "../../../utils/config/kubernetes";
import getKubeArguments from "../../../utils/config/kubernetes";
import { parseCpu, parseMemory } from "../../../utils/kubernetes/kubernetes-utils";
import createLogger from "../../../utils/logger";
@@ -8,7 +8,7 @@ const logger = createLogger("kubernetes-widget");
export default async function handler(req, res) {
try {
const kc = getKubeConfig();
const kc = getKubeArguments().config;
if (!kc) {
return res.status(500).send({
error: "No kubernetes configuration",

View File

@@ -6,26 +6,50 @@ import { KubeConfig } from "@kubernetes/client-node";
import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config";
export default function getKubeConfig() {
const extractKubeData = (config) => {
// kubeconfig
const kc = new KubeConfig();
kc.loadFromCluster();
// route
let route = "ingress";
if (config?.route === "gateway") {
route = "gateway";
}
// traefik
let traefik = true;
if (config?.traefik === "disable") {
traefik = false;
}
return {
config: kc,
route,
traefik,
};
};
export default function getKubeArguments() {
checkAndCopyConfig("kubernetes.yaml");
const configFile = path.join(CONF_DIR, "kubernetes.yaml");
const rawConfigData = readFileSync(configFile, "utf8");
const configData = substituteEnvironmentVars(rawConfigData);
const config = yaml.load(configData);
const kc = new KubeConfig();
let kubeData;
switch (config?.mode) {
case "cluster":
kc.loadFromCluster();
kubeData = extractKubeData(config);
break;
case "default":
kc.loadFromDefault();
kubeData = extractKubeData(config);
break;
case "disabled":
default:
return null;
kubeData = { config: null };
}
return kc;
return kubeData;
}

View File

@@ -3,12 +3,11 @@ import path from "path";
import yaml from "js-yaml";
import Docker from "dockerode";
import { CustomObjectsApi, NetworkingV1Api, ApiextensionsV1Api } from "@kubernetes/client-node";
import createLogger from "utils/logger";
import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config";
import getDockerArguments from "utils/config/docker";
import getKubeConfig from "utils/config/kubernetes";
import { getUrlSchema, getRouteList } from "utils/kubernetes/kubernetes-routes";
import * as shvl from "utils/config/shvl";
const logger = createLogger("service-helpers");
@@ -151,33 +150,6 @@ export async function servicesFromDocker() {
return mappedServiceGroups;
}
function getUrlFromIngress(ingress) {
const urlHost = ingress.spec.rules[0].host;
const urlPath = ingress.spec.rules[0].http.paths[0].path;
const urlSchema = ingress.spec.tls ? "https" : "http";
return `${urlSchema}://${urlHost}${urlPath}`;
}
export async function checkCRD(kc, name) {
const apiExtensions = kc.makeApiClient(ApiextensionsV1Api);
const exist = await apiExtensions
.readCustomResourceDefinitionStatus(name)
.then(() => true)
.catch(async (error) => {
if (error.statusCode === 403) {
logger.error(
"Error checking if CRD %s exists. Make sure to add the following permission to your RBAC: %d %s %s",
name,
error.statusCode,
error.body.message,
);
}
return false;
});
return exist;
}
export async function servicesFromKubernetes() {
const ANNOTATION_BASE = "gethomepage.dev";
const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
@@ -186,128 +158,70 @@ export async function servicesFromKubernetes() {
checkAndCopyConfig("kubernetes.yaml");
try {
const kc = getKubeConfig();
if (!kc) {
const routeList = await getRouteList(ANNOTATION_BASE);
if (!routeList) {
return [];
}
const networking = kc.makeApiClient(NetworkingV1Api);
const crd = kc.makeApiClient(CustomObjectsApi);
const ingressList = await networking
.listIngressForAllNamespaces(null, null, null, null)
.then((response) => response.body)
.catch((error) => {
logger.error("Error getting ingresses: %d %s %s", error.statusCode, error.body, error.response);
logger.debug(error);
return null;
});
const traefikContainoExists = await checkCRD(kc, "ingressroutes.traefik.containo.us");
const traefikExists = await checkCRD(kc, "ingressroutes.traefik.io");
const traefikIngressListContaino = await crd
.listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes")
.then((response) => response.body)
.catch(async (error) => {
if (traefikContainoExists) {
logger.error(
"Error getting traefik ingresses from traefik.containo.us: %d %s %s",
error.statusCode,
error.body,
error.response,
);
logger.debug(error);
}
return [];
});
const traefikIngressListIo = await crd
.listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes")
.then((response) => response.body)
.catch(async (error) => {
if (traefikExists) {
logger.error(
"Error getting traefik ingresses from traefik.io: %d %s %s",
error.statusCode,
error.body,
error.response,
);
logger.debug(error);
}
return [];
});
const traefikIngressList = [...(traefikIngressListContaino?.items ?? []), ...(traefikIngressListIo?.items ?? [])];
if (traefikIngressList.length > 0) {
const traefikServices = traefikIngressList.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" &&
(!ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] ||
ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName ||
`${ANNOTATION_BASE}/instance.${instanceName}` in ingress.metadata.annotations),
)
.map((ingress) => {
let constructedService = {
app: ingress.metadata.annotations[`${ANNOTATION_BASE}/app`] || ingress.metadata.name,
namespace: ingress.metadata.namespace,
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
weight: ingress.metadata.annotations[`${ANNOTATION_BASE}/weight`] || "0",
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || "",
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || "",
external: false,
type: "service",
};
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
constructedService.external =
String(ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true";
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`] !== undefined) {
constructedService.podSelector = ingress.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`];
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
constructedService.ping = ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`];
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`]) {
constructedService.siteMonitor = ingress.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`];
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`]) {
constructedService.statusStyle = ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`];
}
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
shvl.set(
constructedService,
annotation.replace(`${ANNOTATION_BASE}/`, ""),
ingress.metadata.annotations[annotation],
);
const services = await Promise.all(
routeList
.filter(
(route) =>
route.metadata.annotations &&
route.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true" &&
(!route.metadata.annotations[`${ANNOTATION_BASE}/instance`] ||
route.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName ||
`${ANNOTATION_BASE}/instance.${instanceName}` in route.metadata.annotations),
)
.map(async (route) => {
let constructedService = {
app: route.metadata.annotations[`${ANNOTATION_BASE}/app`] || route.metadata.name,
namespace: route.metadata.namespace,
href: route.metadata.annotations[`${ANNOTATION_BASE}/href`] || (await getUrlSchema(route)),
name: route.metadata.annotations[`${ANNOTATION_BASE}/name`] || route.metadata.name,
group: route.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
weight: route.metadata.annotations[`${ANNOTATION_BASE}/weight`] || "0",
icon: route.metadata.annotations[`${ANNOTATION_BASE}/icon`] || "",
description: route.metadata.annotations[`${ANNOTATION_BASE}/description`] || "",
external: false,
type: "service",
};
if (route.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
constructedService.external =
String(route.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true";
}
});
if (route.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`] !== undefined) {
constructedService.podSelector = route.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`];
}
if (route.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
constructedService.ping = route.metadata.annotations[`${ANNOTATION_BASE}/ping`];
}
if (route.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`]) {
constructedService.siteMonitor = route.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`];
}
if (route.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`]) {
constructedService.statusStyle = route.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`];
}
Object.keys(route.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
shvl.set(
constructedService,
annotation.replace(`${ANNOTATION_BASE}/`, ""),
route.metadata.annotations[annotation],
);
}
});
try {
constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService)));
} catch (e) {
logger.error("Error attempting k8s environment variable substitution.");
logger.debug(e);
}
return constructedService;
});
try {
constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService)));
} catch (e) {
logger.error("Error attempting k8s environment variable substitution.");
logger.debug(e);
}
return constructedService;
}),
);
const mappedServiceGroups = [];
@@ -492,9 +406,6 @@ export function cleanServiceGroups(groups) {
// technitium
range,
// spoolman
spoolIds,
} = cleanedService.widget;
let fieldsList = fields;
@@ -656,9 +567,6 @@ export function cleanServiceGroups(groups) {
if (metrics) cleanedService.widget.metrics = metrics;
if (refreshInterval) cleanedService.widget.refreshInterval = refreshInterval;
}
if (type === "spoolman") {
if (spoolIds !== undefined) cleanedService.widget.spoolIds = spoolIds;
}
}
return cleanedService;

View File

View File

@@ -0,0 +1,211 @@
import { CustomObjectsApi, NetworkingV1Api, CoreV1Api, ApiextensionsV1Api } from "@kubernetes/client-node";
import getKubeArguments from "utils/config/kubernetes";
import createLogger from "utils/logger";
const logger = createLogger("service-helpers");
const kubeArguments = getKubeArguments();
const kc = kubeArguments.config;
const apiGroup = "gateway.networking.k8s.io";
const version = "v1";
let crd;
let core;
let networking;
let routingType;
let traefik;
export async function checkCRD(name) {
const apiExtensions = kc.makeApiClient(ApiextensionsV1Api);
const exist = await apiExtensions
.readCustomResourceDefinitionStatus(name)
.then(() => true)
.catch(async (error) => {
if (error.statusCode === 403) {
logger.error(
"Error checking if CRD %s exists. Make sure to add the following permission to your RBAC: %d %s %s",
name,
error.statusCode,
error.body.message,
);
}
return false;
});
return exist;
}
const getSchemaFromGateway = async (gatewayRef) => {
const schema = await crd
.getNamespacedCustomObject(apiGroup, version, gatewayRef.namespace, "gateways", gatewayRef.name)
.then((response) => {
const listner = response.body.spec.listeners.filter((listener) => listener.name === gatewayRef.sectionName)[0];
return listner.protocol.toLowerCase();
})
.catch((error) => {
logger.error("Error getting gateways: %d %s %s", error.statusCode, error.body, error.response);
logger.debug(error);
return "";
});
return schema;
};
async function getUrlFromHttpRoute(ingress) {
const urlHost = ingress.spec.hostnames[0];
const urlPath = ingress.spec.rules[0].matches[0].path.value;
const urlSchema = (await getSchemaFromGateway(ingress.spec.parentRefs[0])) ? "https" : "http";
return `${urlSchema}://${urlHost}${urlPath}`;
}
function getUrlFromIngress(ingress) {
const urlHost = ingress.spec.rules[0].host;
const urlPath = ingress.spec.rules[0].http.paths[0].path;
const urlSchema = ingress.spec.tls ? "https" : "http";
return `${urlSchema}://${urlHost}${urlPath}`;
}
async function getHttpRouteList() {
// httproutes
const getHttpRoute = async (namespace) =>
crd
.listNamespacedCustomObject(apiGroup, version, namespace, "httproutes")
.then((response) => {
const [httpRoute] = response.body.items;
return httpRoute;
})
.catch((error) => {
logger.error("Error getting httproutes: %d %s %s", error.statusCode, error.body, error.response);
logger.debug(error);
return null;
});
// namespaces
const namespaces = await core
.listNamespace()
.then((response) => response.body.items.map((ns) => ns.metadata.name))
.catch((error) => {
logger.error("Error getting namespaces: %d %s %s", error.statusCode, error.body, error.response);
logger.debug(error);
return null;
});
let httpRouteList = [];
if (namespaces) {
const httpRouteListUnfiltered = await Promise.all(
namespaces.map(async (namespace) => {
const httpRoute = await getHttpRoute(namespace);
return httpRoute;
}),
);
httpRouteList = httpRouteListUnfiltered.filter((httpRoute) => httpRoute !== undefined);
}
return httpRouteList;
}
async function getIngressList(ANNOTATION_BASE) {
const ingressList = await networking
.listIngressForAllNamespaces(null, null, null, null)
.then((response) => response.body)
.catch((error) => {
logger.error("Error getting ingresses: %d %s %s", error.statusCode, error.body, error.response);
logger.debug(error);
return null;
});
if (traefik) {
const traefikContainoExists = await checkCRD("ingressroutes.traefik.containo.us");
const traefikExists = await checkCRD("ingressroutes.traefik.io");
const traefikIngressListContaino = await crd
.listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes")
.then((response) => response.body)
.catch(async (error) => {
if (traefikContainoExists) {
logger.error(
"Error getting traefik ingresses from traefik.containo.us: %d %s %s",
error.statusCode,
error.body,
error.response,
);
logger.debug(error);
}
return [];
});
const traefikIngressListIo = await crd
.listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes")
.then((response) => response.body)
.catch(async (error) => {
if (traefikExists) {
logger.error(
"Error getting traefik ingresses from traefik.io: %d %s %s",
error.statusCode,
error.body,
error.response,
);
logger.debug(error);
}
return [];
});
const traefikIngressList = [...(traefikIngressListContaino?.items ?? []), ...(traefikIngressListIo?.items ?? [])];
if (traefikIngressList.length > 0) {
const traefikServices = traefikIngressList.filter(
(ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/href`],
);
ingressList.items.push(...traefikServices);
}
}
return ingressList.items;
}
export async function getRouteList(ANNOTATION_BASE) {
let routeList = [];
if (!kc) {
return [];
}
crd = kc.makeApiClient(CustomObjectsApi);
core = kc.makeApiClient(CoreV1Api);
networking = kc.makeApiClient(NetworkingV1Api);
routingType = kubeArguments.route;
traefik = kubeArguments.traefik;
switch (routingType) {
case "ingress":
routeList = await getIngressList(ANNOTATION_BASE);
break;
case "gateway":
routeList = await getHttpRouteList();
break;
default:
routeList = await getIngressList(ANNOTATION_BASE);
}
return routeList;
}
export async function getUrlSchema(route) {
let urlSchema;
switch (routingType) {
case "ingress":
urlSchema = getUrlFromIngress(route);
break;
case "gateway":
urlSchema = await getUrlFromHttpRoute(route);
break;
default:
urlSchema = getUrlFromIngress(route);
}
return urlSchema;
}

View File

@@ -36,7 +36,6 @@ export default async function credentialedProxyHandler(req, res, map) {
headers["X-gotify-Key"] = `${widget.key}`;
} else if (
[
"argocd",
"authentik",
"cloudflared",
"ghostfolio",
@@ -94,8 +93,6 @@ export default async function credentialedProxyHandler(req, res, map) {
}
} else if (widget.type === "wgeasy") {
headers.Authorization = widget.password;
} else if (widget.type === "gitlab") {
headers["PRIVATE-TOKEN"] = widget.key;
} else {
headers["X-API-Key"] = `${widget.key}`;
}

View File

@@ -1,52 +0,0 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { widget } = service;
if (!widget.fields) {
widget.fields = ["apps", "synced", "outOfSync", "healthy"];
}
const MAX_ALLOWED_FIELDS = 4;
if (widget.fields.length > MAX_ALLOWED_FIELDS) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
}
const { data: appsData, error: appsError } = useWidgetAPI(widget, "applications");
const appCounts = widget.fields.map((status) => {
if (status === "apps") {
return { status, count: appsData?.items?.length };
}
const count = appsData?.items?.filter(
(item) =>
item.status?.sync?.status.toLowerCase() === status.toLowerCase() ||
item.status?.health?.status.toLowerCase() === status.toLowerCase(),
).length;
return { status, count };
});
if (appsError) {
return <Container service={service} error={appsError} />;
}
if (!appsData) {
return (
<Container service={service}>
{appCounts.map((a) => (
<Block label={`argocd.${a.status}`} key={a.status} />
))}
</Container>
);
}
return (
<Container service={service}>
{appCounts.map((a) => (
<Block label={`argocd.${a.status}`} key={a.status} value={a.count} />
))}
</Container>
);
}

View File

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

View File

@@ -46,8 +46,11 @@ export default function Component({ service }) {
<Block label="audiobookshelf.books" value={t("common.number", { value: totalBooks })} />
<Block
label="audiobookshelf.booksDuration"
value={t("common.duration", {
value: totalBooksDuration,
value={t("common.number", {
value: totalBooksDuration / 60,
maximumFractionDigits: 0,
style: "unit",
unit: "minute",
})}
/>
</Container>

View File

@@ -2,7 +2,6 @@ import dynamic from "next/dynamic";
const components = {
adguard: dynamic(() => import("./adguard/component")),
argocd: dynamic(() => import("./argocd/component")),
atsumeru: dynamic(() => import("./atsumeru/component")),
audiobookshelf: dynamic(() => import("./audiobookshelf/component")),
authentik: dynamic(() => import("./authentik/component")),
@@ -38,7 +37,6 @@ const components = {
gatus: dynamic(() => import("./gatus/component")),
ghostfolio: dynamic(() => import("./ghostfolio/component")),
gitea: dynamic(() => import("./gitea/component")),
gitlab: dynamic(() => import("./gitlab/component")),
glances: dynamic(() => import("./glances/component")),
gluetun: dynamic(() => import("./gluetun/component")),
gotify: dynamic(() => import("./gotify/component")),
@@ -112,7 +110,6 @@ const components = {
scrutiny: dynamic(() => import("./scrutiny/component")),
sonarr: dynamic(() => import("./sonarr/component")),
speedtest: dynamic(() => import("./speedtest/component")),
spoolman: dynamic(() => import("./spoolman/component")),
stash: dynamic(() => import("./stash/component")),
stocks: dynamic(() => import("./stocks/component")),
strelaysrv: dynamic(() => import("./strelaysrv/component")),

View File

@@ -1,36 +0,0 @@
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: gitlabCounts, error: gitlabCountsError } = useWidgetAPI(widget, "counts");
if (gitlabCountsError) {
return <Container service={service} error={gitlabCountsError} />;
}
if (!gitlabCounts) {
return (
<Container service={service}>
<Block label="gitlab.groups" />
<Block label="gitlab.issues" />
<Block label="gitlab.merges" />
<Block label="gitlab.projects" />
</Container>
);
}
return (
<Container service={service}>
<Block label="gitlab.groups" value={t("common.number", { value: gitlabCounts.groups_count })} />
<Block label="gitlab.issues" value={t("common.number", { value: gitlabCounts.issues_count })} />
<Block label="gitlab.merges" value={t("common.number", { value: gitlabCounts.merge_requests_count })} />
<Block label="gitlab.projects" value={t("common.number", { value: gitlabCounts.projects_count })} />
</Container>
);
}

View File

@@ -1,13 +0,0 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v4/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
counts: {
endpoint: "users/{user_id}/associations_count",
},
},
};
export default widget;

View File

@@ -5,7 +5,6 @@ import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
function formatValue(t, metric, rawValue) {
if (!metric?.format) return rawValue;
if (!rawValue) return "-";
let value = rawValue;

View File

@@ -1,63 +0,0 @@
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;
// eslint-disable-next-line prefer-const
let { data: spoolData, error: spoolError } = useWidgetAPI(widget, "spools");
if (spoolError) {
return <Container service={service} error={spoolError} />;
}
if (!spoolData) {
const nBlocksGuess = widget.spoolIds?.length ?? 4;
return (
<Container service={service}>
{[...Array(nBlocksGuess)].map((_, i) => (
// eslint-disable-next-line react/no-array-index-key
<Block key={i} label="spoolman.loading" />
))}
</Container>
);
}
if (spoolData.error || spoolData.message) {
return <Container service={service} error={spoolData?.error ?? spoolData} />;
}
if (spoolData.length === 0) {
return (
<Container service={service}>
<Block label="spoolman.noSpools" />
</Container>
);
}
if (widget.spoolIds?.length) {
spoolData = spoolData.filter((spool) => widget.spoolIds.includes(spool.id));
}
if (spoolData.length > 4) {
spoolData = spoolData.slice(0, 4);
}
return (
<Container service={service}>
{spoolData.map((spool) => (
<Block
key={spool.id}
label={spool.filament.name}
value={t("common.percent", {
value: (spool.remaining_weight / spool.initial_weight) * 100,
})}
/>
))}
</Container>
);
}

View File

@@ -1,14 +0,0 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v1/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
spools: {
endpoint: "spool",
},
},
};
export default widget;

View File

@@ -1,5 +1,4 @@
import adguard from "./adguard/widget";
import argocd from "./argocd/widget";
import atsumeru from "./atsumeru/widget";
import audiobookshelf from "./audiobookshelf/widget";
import authentik from "./authentik/widget";
@@ -32,7 +31,6 @@ import gamedig from "./gamedig/widget";
import gatus from "./gatus/widget";
import ghostfolio from "./ghostfolio/widget";
import gitea from "./gitea/widget";
import gitlab from "./gitlab/widget";
import glances from "./glances/widget";
import gluetun from "./gluetun/widget";
import gotify from "./gotify/widget";
@@ -103,7 +101,6 @@ import sabnzbd from "./sabnzbd/widget";
import scrutiny from "./scrutiny/widget";
import sonarr from "./sonarr/widget";
import speedtest from "./speedtest/widget";
import spoolman from "./spoolman/widget";
import stash from "./stash/widget";
import stocks from "./stocks/widget";
import strelaysrv from "./strelaysrv/widget";
@@ -133,7 +130,6 @@ import zabbix from "./zabbix/widget";
const widgets = {
adguard,
argocd,
atsumeru,
audiobookshelf,
authentik,
@@ -165,7 +161,6 @@ const widgets = {
gatus,
ghostfolio,
gitea,
gitlab,
glances,
gluetun,
gotify,
@@ -240,7 +235,6 @@ const widgets = {
scrutiny,
sonarr,
speedtest,
spoolman,
stash,
stocks,
strelaysrv,