Compare commits

...

43 Commits

Author SHA1 Message Date
shamoon
a06964dd17 Merge branch dev into main
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-11-24 09:08:01 -08:00
github-actions[bot]
cb45d89163 New Crowdin translations by GitHub Action (#4053)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-11-24 09:01:47 -08:00
shamoon
1656f02418 Merge branch 'dev' 2024-11-24 08:16:04 -08:00
shamoon
ba5e6dec07 Documentation: Add missing wan option for opnsense widget
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-11-22 13:23:07 -08:00
Simon Emms
56972535c7 Documentation: additional explainer for the pod-selector (#4316)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-11-22 07:41:48 -08:00
Urs Kröll
2b8647b2ef Feature: gitlab service widget (#4317)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-22 07:07:17 -08:00
Florian Geckeler
94bbcbe1fb Feature: Spoolman Widget (#3959)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-21 15:32:04 -08:00
Felix Cornelius
4a3a4c846e Feature: Add ArgoCD widget (#4305)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-19 13:59:52 -08:00
shamoon
adde687331 Try publish to docker hub
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-11-18 08:17:00 -08:00
shamoon
250351f735 Fix: use duration for audiobookshelf books too
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
See #4228
2024-11-17 16:16:18 -08:00
dhenry437
e730a0ceb0 Documentation: Highlight Unifi widget needs local account (#4290)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-13 06:57:03 -08:00
shamoon
d82fbc3026 Enhancement: allow widgets to specify default headers, fix buffer error output (#4287)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-11-12 22:34:26 -08:00
shamoon
535be37bef Fix: fix some instances of HTTTP 2024-11-12 22:31:36 -08:00
Abey Thomas
d87d347aa3 Documentation: corrections Beszel widget docs (#4282)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-12 06:19:04 -08:00
robo
99b50b4faf Feature: suwayomi Service Widget (#4273)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-11 17:52:51 -08:00
John
1a22065c3a Fix: use session_key instead of Id in tautulli component to resolve unique key warning (#4278) 2024-11-11 17:15:26 -08:00
Felix Cornelius
e938c3ac1e Feature: Prometheus Metric service widget (#4269)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-11-11 16:42:14 -08:00
Carlo
ef9068c5bb Documentation: change authentik port to generic placeholder (#4272) 2024-11-10 19:26:40 -08:00
ChainSauz
85637f2979 Documentation: Update opnsense.md privileges section for OPNSense 24.7.x (#4264)
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-11-09 04:15:22 -08:00
shamoon
794ec127cd Enhancement: quicklaunch fill search suggestion on arrowright (#4256)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-11-06 10:24:09 -08:00
shamoon
912ae0adfc Feature: Beszel service widget (#4251)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-11-05 12:48:43 -08:00
shamoon
7c3dcf20ef Create reaction-comments.yml 2024-11-05 11:11:01 -08:00
erelender
c12a5c01f6 Feature: Headscale Service Widget (#4247)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-11-05 09:02:33 -08:00
dependabot[bot]
6fd2b6b6dc Chore(deps-dev): Bump eslint-plugin-import from 2.30.0 to 2.31.0 (#4236)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 09:38:19 -07:00
dependabot[bot]
bf0a766302 Chore(deps-dev): Bump typescript from 5.6.2 to 5.6.3 (#4234)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 09:28:10 -07:00
dependabot[bot]
be4da9d010 Chore(deps): Bump urbackup-server-api from 0.52.0 to 0.52.1 (#4233)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 09:25:47 -07:00
dependabot[bot]
b7ca6244dd Chore(deps-dev): Bump tailwindcss from 3.4.13 to 3.4.14 (#4232)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-01 09:25:25 -07:00
shamoon
e6cf86ed4a Enhancement: use duration for audiobookshelf tottal, refactor uptime (#4229)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-10-31 22:09:23 -07:00
shamoon
3736c1fcab Fix: use same unit default for openmeteo widget and api (#4227)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-10-31 12:20:08 -07:00
Yordis Prieto
3af86ffebb Fix: text overflowing in bookmarks (#4217)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Co-Authored-By: shamoon <4887959+shamoon@users.noreply.github.com>
2024-10-29 21:18:28 -07:00
shamoon
0aea6a6c3f Fix: pyload widget - encode proxy params (#4210)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-10-28 15:37:18 -07:00
shamoon
01cb9e8830 Documentation: add correct pihole v6 password info
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-10-28 12:27:31 -07:00
Konrad Jasiński
a938f8b9fa Documentation: Typo in LubeLogger widget documentation (#4205) 2024-10-28 12:27:31 -07:00
shamoon
261c907f52 Documentation: add correct pihole v6 password info 2024-10-28 12:27:11 -07:00
Konrad Jasiński
2a6debbc79 Documentation: Typo in LubeLogger widget documentation (#4205) 2024-10-28 07:58:24 -07:00
shamoon
f473569cb2 Update PR guidelines
Some checks are pending
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
2024-10-27 20:16:43 -07:00
shamoon
e9a31bafab Update PR guidelines 2024-10-27 20:16:32 -07:00
Mark
bf2efce74d Chore: filter Radarr movie response (#4199)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-10-26 20:24:46 -07:00
Niklas Schäffer
7cbba1ff90 Fix: remove deprecated meta tag (#4191)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-10-25 03:08:39 -07:00
Marco Hofmann
6e8fe45818 Documentation: fix typo in zabbix doc (#4178) 2024-10-23 06:58:35 -07:00
shamoon
c347677402 Remove a random commented out line 2024-10-16 16:14:17 -07:00
shamoon
fd75f22e16 Merge branch 'main' into dev 2024-10-16 07:58:21 -07:00
shamoon
aac573a48d Enhancement: npm widget support ≥ v2.12 (#4140) 2024-10-16 07:57:35 -07:00
110 changed files with 4023 additions and 624 deletions

View File

@@ -26,8 +26,6 @@ on:
merge_group:
env:
# Use docker.io for Docker Hub if empty
REGISTRY: ghcr.io
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
@@ -66,14 +64,6 @@ 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
@@ -99,9 +89,15 @@ jobs:
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
registry: ghcr.io
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
@@ -109,7 +105,9 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
images: |
${{ env.IMAGE_NAME }}
ghcr.io/${{ env.IMAGE_NAME }}
flavor: |
latest=auto
@@ -133,19 +131,6 @@ 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

20
.github/workflows/reaction-comments.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: 'Reaction Comments'
on:
issue_comment:
types: [created, edited]
pull_request_review_comment:
types: [created, edited]
schedule:
- cron: '0 0 * * *'
permissions:
actions: write
issues: write
pull-requests: write
jobs:
action:
runs-on: ubuntu-latest
steps:
- uses: dessant/reaction-comments@v4

View File

@@ -100,6 +100,8 @@ 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:

View File

@@ -48,15 +48,14 @@ self-hosted / open-source alternative, we ask that any widgets, etc. are develop
## New Feature Guidelines
- New features should be linked to an existing feature request with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
- If you have ideas for a larger feature, please open a discussion first.
- Please note that though it is a requirement, a discussion with 10 'up-votes' in no way guarantees that a PR will be merged.
- New features should usually be linked to an existing feature request. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
- If you have ideas for a larger feature you may want to open a discussion first.
## Service Widget Guidelines
To ensure cohesiveness of various widgets, the following should be used as a guide for developing new widgets:
- Please only submit widgets that have been requested and have at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of service widgets that might only benefit a small number of users.
- Please only submit widgets that target a feature request discussion with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of service widgets that might only benefit a small number of users.
- Note that we reserve the right to decline widgets for projects that are very young (eg < ~1y) or those with a small reach (eg low GitHub stars). Again, this is in an effort to keep overall widget maintenance under control.
- Widgets should be only one row of blocks
- Widgets should be no more than 4 blocks wide and generally conform to the styling / design choices of other widgets

View File

@@ -71,7 +71,7 @@ Homepage provides a set of common translations that you can use in your widgets.
| `common.ms` | `1,000 ms` | Format a number in milliseconds. |
| `common.date` | `2024-01-01` | Format a date. |
| `common.relativeDate` | `1 day ago` | Format a relative date. |
| `common.uptime` | `1 day, 1 hour` | Format an uptime. |
| `common.duration` | `1 day, 1 hour` | Format an duration. |
### Text

View File

@@ -5,7 +5,11 @@ 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

@@ -0,0 +1,33 @@
---
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:22070
url: http://authentik.host.or.ip:port
key: api_token
```

View File

@@ -0,0 +1,22 @@
---
title: Beszel
description: Beszel Widget Configuration
---
Learn more about [Beszel](https://github.com/henrygd/beszel)
The widget has two modes, a single system with detailed info if `systemId` is provided, or an overview of all systems if `systemId` is not provided.
The `systemID` in the `id` field on the collections page of Beszel.
Allowed fields for 'overview' mode: `["systems", "up"]`
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`
```yaml
widget:
type: beszel
url: http://beszel.host.or.ip
username: username # email
password: password
systemId: systemId # optional
```

View File

@@ -0,0 +1,20 @@
---
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

@@ -0,0 +1,19 @@
---
title: Headscale
description: Headscale Widget Configuration
---
Learn more about [Headscale](https://headscale.net/).
You will need to generate an API access token from the [command line](https://headscale.net/ref/remote-cli/#create-an-api-key) using `headscale apikeys create` command.
To find your node ID, you can use `headscale nodes list` command.
Allowed fields: `["name", "address", "last_seen", "status"]`.
```yaml
widget:
type: headscale
nodeId: nodeid
key: headscaleapiaccesstoken
```

View File

@@ -8,12 +8,14 @@ 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)
- [Autobrr](autobrr.md)
- [Azure DevOps](azuredevops.md)
- [Bazarr](bazarr.md)
- [Beszel](beszel.md)
- [Caddy](caddy.md)
- [Calendar](calendar.md)
- [Calibre-Web](calibre-web.md)
@@ -39,11 +41,13 @@ 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)
- [Grafana](grafana.md)
- [HDHomeRun](hdhomerun.md)
- [Headscale](headscale.md)
- [Healthchecks](healthchecks.md)
- [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md)
@@ -96,6 +100,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Plex](plex.md)
- [Portainer](portainer.md)
- [Prometheus](prometheus.md)
- [Prometheus Metric](prometheusmetric.md)
- [Prowlarr](prowlarr.md)
- [Proxmox](proxmox.md)
- [Proxmox Backup Server](proxmoxbackupserver.md)

View File

@@ -8,7 +8,7 @@ Learn more about [LubeLogger](https://github.com/hargata/lubelog) (v1.3.7 or hig
The widget comes in two 'flavors', one shows data for all vehicles or for just a specific vehicle with the `vehicleID` parameter.
Allowed fields: `["vehicles", "serviceRecords", "reminders"]`.
For the single-vehicle version: `["vehicle", "serviceRecords", "reminders", "nextReminder"]
For the single-vehicle version: `["vehicle", "serviceRecords", "reminders", "nextReminder"]`.
```yaml
widget:

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
- Status: Traffic Graph / Reporting: Traffic (OPNSENSE 24.7.x)
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,4 +20,5 @@ widget:
url: http://opnsense.host.or.ip
username: key
password: secret
wan: opt1 # optional, defaults to wan
```

View File

@@ -14,5 +14,5 @@ widget:
type: pihole
url: http://pi.hole.or.ip
version: 6 # required if running v6 or higher, defaults to 5
key: yourpiholeapikey # optional
key: yourpiholeapikey # optional, in v6 can be your password or app password
```

View File

@@ -0,0 +1,67 @@
---
title: Prometheus Metric
description: Prometheus Metric Widget Configuration
---
Learn more about [Querying Prometheus](https://prometheus.io/docs/prometheus/latest/querying/basics/).
This widget can show metrics for your service defined by PromQL queries which are requested from a running Prometheus instance.
Quries can be defined in the `metrics` array of the widget along with a label to be used to present the metric value. You can optionally specify a global `refreshInterval` in milliseconds and/or define the `refreshInterval` per metric. Inside the optional `format` object of a metric various formatting styles and transformations can be applied (see below).
```yaml
widget:
type: prometheusmetric
url: https://prometheus.host.or.ip
refreshInterval: 10000 # optional - in milliseconds, defaults to 10s
metrics:
- label: Metric 1
query: alertmanager_alerts{state="active"}
- label: Metric 2
query: apiserver_storage_size_bytes{node="mynode"}
format:
type: bytes
- label: Metric 3
query: avg(prometheus_notifications_latency_seconds)
format:
type: number
suffix: s
options:
maximumFractionDigits: 4
- label: Metric 4
query: time()
refreshInterval: 1000 # will override global refreshInterval
format:
type: date
scale: 1000
options:
timeStyle: medium
```
## Formatting
Supported values for `format.type` are `text`, `number`, `percent`, `bytes`, `bits`, `bbytes`, `bbits`, `byterate`, `bibyterate`, `bitrate`, `bibitrate`, `date`, `duration`, `relativeDate`, and `text` which is the default.
The `dateStyle` and `timeStyle` options of the `date` format are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) and the `style` and `numeric` options of `relativeDate` are passed to [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat). For the `number` format, options of [Intl.NumberFormat](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat) can be used, e.g. `maximumFractionDigits` or `minimumFractionDigits`.
### Data Transformation
You can manipulate your metric value with the following tools: `scale`, `prefix` and `suffix`, for example:
```yaml
- query: my_custom_metric{}
label: Metric 1
format:
type: number
scale: 1000 # multiplies value by a number or fraction string e.g. 1/16
- query: my_custom_metric{}
label: Metric 2
format:
type: number
prefix: "$" # prefixes value with given string
- query: my_custom_metric{}
label: Metric 3
format:
type: number
suffix: "€" # suffixes value with given string
```

View File

@@ -0,0 +1,15 @@
---
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

@@ -0,0 +1,20 @@
---
title: Suwayomi
description: Suwayomi Widget Configuration
---
Learn more about [Suwayomi](https://github.com/Suwayomi/Suwayomi-Server).
Allowed fields: ["download", "nondownload", "read", "unread", "downloadedread", "downloadedunread", "nondownloadedread", "nondownloadedunread"]
The widget defaults to the first four above. If more than four fields are provided, only the first 4 are displayed.
Category IDs can be obtained from the url when navigating to it, `?tab={categoryID}`.
```yaml
widget:
type: suwayomi
url: http://suwayomi.host.or.ip
username: username #optional
password: password #optional
category: 0 #optional, defaults to all categories
```

View File

@@ -7,7 +7,11 @@ 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) Zibbax server version 7.0.
Learn more about [Zabbix](https://github.com/zabbix/zabbix). The widget supports (at least) Zabbix server version 7.0.
---

View File

@@ -31,12 +31,14 @@ 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
- widgets/services/autobrr.md
- widgets/services/azuredevops.md
- widgets/services/bazarr.md
- widgets/services/beszel.md
- widgets/services/caddy.md
- widgets/services/calendar.md
- widgets/services/calibre-web.md
@@ -62,11 +64,13 @@ 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
- widgets/services/grafana.md
- widgets/services/hdhomerun.md
- widgets/services/headscale.md
- widgets/services/healthchecks.md
- widgets/services/homeassistant.md
- widgets/services/homebox.md
@@ -119,6 +123,7 @@ nav:
- widgets/services/plex.md
- widgets/services/portainer.md
- widgets/services/prometheus.md
- widgets/services/prometheusmetric.md
- widgets/services/prowlarr.md
- widgets/services/proxmox.md
- widgets/services/proxmoxbackupserver.md
@@ -134,6 +139,7 @@ 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

@@ -84,12 +84,12 @@ function prettyBytes(number, options) {
return `${prefix + numberString} ${unit}`;
}
function uptime(uptimeInSeconds, i18next) {
const mo = Math.floor(uptimeInSeconds / (3600 * 24 * 31));
const d = Math.floor((uptimeInSeconds % (3600 * 24 * 31)) / (3600 * 24));
const h = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600);
const m = Math.floor((uptimeInSeconds % 3600) / 60);
const s = Math.floor(uptimeInSeconds % 60);
function duration(durationInSeconds, i18next) {
const mo = Math.floor(durationInSeconds / (3600 * 24 * 31));
const d = Math.floor((durationInSeconds % (3600 * 24 * 31)) / (3600 * 24));
const h = Math.floor((durationInSeconds % (3600 * 24)) / 3600);
const m = Math.floor((durationInSeconds % 3600) / 60);
const s = Math.floor(durationInSeconds % 60);
const moDisplay = mo > 0 ? mo + i18next.t("common.months") : "";
const dDisplay = d > 0 ? d + i18next.t("common.days") : "";
@@ -156,7 +156,7 @@ module.exports = {
i18next.services.formatter.add("relativeDate", (value, lng, options) =>
relativeDate(new Date(value), new Intl.RelativeTimeFormat(lng, { ...options })),
);
i18next.services.formatter.add("uptime", (value, lng) => uptime(value, i18next));
i18next.services.formatter.add("duration", (value, lng) => duration(value, i18next));
},
type: "3rdParty",
},

46
package-lock.json generated
View File

@@ -36,7 +36,7 @@
"swr": "^1.3.0",
"systeminformation": "^5.23.2",
"tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.52.0",
"urbackup-server-api": "^0.52.1",
"winston": "^3.11.0",
"xml-js": "^1.6.11"
},
@@ -47,7 +47,7 @@
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.37.1",
@@ -55,8 +55,8 @@
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.13",
"typescript": "^5.6.2"
"tailwindcss": "^3.4.14",
"typescript": "^5.6.3"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"
@@ -3135,11 +3135,10 @@
}
},
"node_modules/eslint-module-utils": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz",
"integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==",
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
"integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^3.2.7"
},
@@ -3163,11 +3162,10 @@
}
},
"node_modules/eslint-plugin-import": {
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
"integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
"version": "2.31.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
"integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.8",
@@ -3177,7 +3175,7 @@
"debug": "^3.2.7",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.9",
"eslint-module-utils": "^2.9.0",
"eslint-module-utils": "^2.12.0",
"hasown": "^2.0.2",
"is-core-module": "^2.15.1",
"is-glob": "^4.0.3",
@@ -3186,13 +3184,14 @@
"object.groupby": "^1.0.3",
"object.values": "^1.2.0",
"semver": "^6.3.1",
"string.prototype.trimend": "^1.0.8",
"tsconfig-paths": "^3.15.0"
},
"engines": {
"node": ">=4"
},
"peerDependencies": {
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
}
},
"node_modules/eslint-plugin-import/node_modules/debug": {
@@ -7713,9 +7712,9 @@
}
},
"node_modules/tailwindcss": {
"version": "3.4.13",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
"integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
"version": "3.4.14",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
"dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -8102,9 +8101,9 @@
}
},
"node_modules/typescript": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -8186,10 +8185,9 @@
}
},
"node_modules/urbackup-server-api": {
"version": "0.52.0",
"resolved": "https://registry.npmjs.org/urbackup-server-api/-/urbackup-server-api-0.52.0.tgz",
"integrity": "sha512-KfroCFZEWCuCkWye1F1JwI2fkO1za/Mf1a8TNGTujzxU0ZGzDqhA1zCOcvV97q7nH1TKFNpw5tMZ06fSCKv2UA==",
"license": "MIT",
"version": "0.52.1",
"resolved": "https://registry.npmjs.org/urbackup-server-api/-/urbackup-server-api-0.52.1.tgz",
"integrity": "sha512-gAxF9MdXxnceqUr/1Uj2LuGZQb/bvZ3Ply9zH/UTSWGkwKL5C0qMPrBvKRyTHbPMG/NBuHF6BzavkF7GNvOLew==",
"dependencies": {
"async-mutex": "^0.5.0",
"node-fetch": "^2.7.0"

View File

@@ -38,7 +38,7 @@
"swr": "^1.3.0",
"systeminformation": "^5.23.2",
"tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.52.0",
"urbackup-server-api": "^0.52.1",
"winston": "^3.11.0",
"xml-js": "^1.6.11"
},
@@ -49,7 +49,7 @@
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.37.1",
@@ -57,8 +57,8 @@
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.13",
"typescript": "^5.6.2"
"tailwindcss": "^3.4.14",
"typescript": "^5.6.3"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"

172
pnpm-lock.yaml generated
View File

@@ -93,8 +93,8 @@ importers:
specifier: ^4.1.3
version: 4.1.4
urbackup-server-api:
specifier: ^0.52.0
version: 0.52.0
specifier: ^0.52.1
version: 0.52.1
winston:
specifier: ^3.11.0
version: 3.14.2
@@ -108,7 +108,7 @@ importers:
devDependencies:
'@tailwindcss/forms':
specifier: ^0.5.8
version: 0.5.9(tailwindcss@3.4.13)
version: 0.5.9(tailwindcss@3.4.14)
autoprefixer:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.47)
@@ -117,16 +117,16 @@ importers:
version: 8.57.1
eslint-config-airbnb:
specifier: ^19.0.4
version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1)
version: 19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1)
eslint-config-next:
specifier: ^14.2.3
version: 14.2.8(eslint@8.57.1)(typescript@5.6.2)
version: 14.2.8(eslint@8.57.1)(typescript@5.6.3)
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@8.57.1)
eslint-plugin-import:
specifier: ^2.29.1
version: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
specifier: ^2.31.0
version: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y:
specifier: ^6.8.0
version: 6.10.0(eslint@8.57.1)
@@ -147,13 +147,13 @@ importers:
version: 3.3.3
tailwind-scrollbar:
specifier: ^3.0.5
version: 3.1.0(tailwindcss@3.4.13)
version: 3.1.0(tailwindcss@3.4.14)
tailwindcss:
specifier: ^3.4.13
version: 3.4.13
specifier: ^3.4.14
version: 3.4.14
typescript:
specifier: ^5.6.2
version: 5.6.2
specifier: ^5.6.3
version: 5.6.3
packages:
@@ -1077,6 +1077,27 @@ packages:
eslint-plugin-import-x:
optional: true
eslint-module-utils@2.12.0:
resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: '*'
eslint-import-resolver-node: '*'
eslint-import-resolver-typescript: '*'
eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
eslint:
optional: true
eslint-import-resolver-node:
optional: true
eslint-import-resolver-typescript:
optional: true
eslint-import-resolver-webpack:
optional: true
eslint-module-utils@2.9.0:
resolution: {integrity: sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==}
engines: {node: '>=4'}
@@ -1098,12 +1119,12 @@ packages:
eslint-import-resolver-webpack:
optional: true
eslint-plugin-import@2.30.0:
resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==}
eslint-plugin-import@2.31.0:
resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
@@ -1151,6 +1172,7 @@ packages:
eslint@8.57.1:
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
hasBin: true
espree@9.6.1:
@@ -2510,8 +2532,8 @@ packages:
peerDependencies:
tailwindcss: 3.x
tailwindcss@3.4.13:
resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==}
tailwindcss@3.4.14:
resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -2624,8 +2646,8 @@ packages:
resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
typescript@5.6.3:
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
engines: {node: '>=14.17'}
hasBin: true
@@ -2649,8 +2671,8 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
urbackup-server-api@0.52.0:
resolution: {integrity: sha512-KfroCFZEWCuCkWye1F1JwI2fkO1za/Mf1a8TNGTujzxU0ZGzDqhA1zCOcvV97q7nH1TKFNpw5tMZ06fSCKv2UA==}
urbackup-server-api@0.52.1:
resolution: {integrity: sha512-gAxF9MdXxnceqUr/1Uj2LuGZQb/bvZ3Ply9zH/UTSWGkwKL5C0qMPrBvKRyTHbPMG/NBuHF6BzavkF7GNvOLew==}
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -2956,10 +2978,10 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
'@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)':
'@tailwindcss/forms@0.5.9(tailwindcss@3.4.14)':
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.13
tailwindcss: 3.4.14
'@tanstack/react-virtual@3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@@ -3015,13 +3037,13 @@ snapshots:
'@types/triple-beam@1.3.5': {}
'@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)':
'@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)':
dependencies:
'@eslint-community/regexpp': 4.11.0
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/type-utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/type-utils': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.6
eslint: 8.57.1
@@ -3029,22 +3051,22 @@ snapshots:
ignore: 5.3.2
natural-compare: 1.4.0
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.6.2)
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
'@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3)':
dependencies:
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.3)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.6
eslint: 8.57.1
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
@@ -3053,21 +3075,21 @@ snapshots:
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0
'@typescript-eslint/type-utils@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
'@typescript-eslint/type-utils@7.2.0(eslint@8.57.1)(typescript@5.6.3)':
dependencies:
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.3)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
debug: 4.3.6
eslint: 8.57.1
ts-api-utils: 1.3.0(typescript@5.6.2)
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.2.0': {}
'@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2)':
'@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.3)':
dependencies:
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0
@@ -3076,20 +3098,20 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.6.2)
ts-api-utils: 1.3.0(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
'@typescript-eslint/utils@7.2.0(eslint@8.57.1)(typescript@5.6.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.3)
eslint: 8.57.1
semver: 7.6.3
transitivePeerDependencies:
@@ -3759,41 +3781,41 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint@8.57.1):
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1):
dependencies:
confusing-browser-globals: 1.0.11
eslint: 8.57.1
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
object.assign: 4.1.5
object.entries: 1.1.8
semver: 6.3.1
eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1):
eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1):
dependencies:
eslint: 8.57.1
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint@8.57.1)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
object.assign: 4.1.5
object.entries: 1.1.8
eslint-config-next@14.2.8(eslint@8.57.1)(typescript@5.6.2):
eslint-config-next@14.2.8(eslint@8.57.1)(typescript@5.6.3):
dependencies:
'@next/eslint-plugin-next': 14.2.8
'@rushstack/eslint-patch': 1.10.4
'@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
optionalDependencies:
typescript: 5.6.2
typescript: 5.6.3
transitivePeerDependencies:
- eslint-import-resolver-webpack
- eslint-plugin-import-x
@@ -3811,37 +3833,48 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1):
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.6
enhanced-resolve: 5.17.1
eslint: 8.57.1
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
fast-glob: 3.3.2
get-tsconfig: 4.8.0
is-bun-module: 1.1.0
is-glob: 4.0.3
optionalDependencies:
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
eslint-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1):
eslint-module-utils@2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1)
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
eslint-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -3852,7 +3885,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -3861,9 +3894,10 @@ snapshots:
object.groupby: 1.0.3
object.values: 1.2.0
semver: 6.3.1
string.prototype.trimend: 1.0.8
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -5355,11 +5389,11 @@ snapshots:
systeminformation@5.23.5: {}
tailwind-scrollbar@3.1.0(tailwindcss@3.4.13):
tailwind-scrollbar@3.1.0(tailwindcss@3.4.14):
dependencies:
tailwindcss: 3.4.13
tailwindcss: 3.4.14
tailwindcss@3.4.13:
tailwindcss@3.4.14:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -5454,9 +5488,9 @@ snapshots:
triple-beam@1.4.1: {}
ts-api-utils@1.3.0(typescript@5.6.2):
ts-api-utils@1.3.0(typescript@5.6.3):
dependencies:
typescript: 5.6.2
typescript: 5.6.3
ts-interface-checker@0.1.13: {}
@@ -5515,7 +5549,7 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
typescript@5.6.2: {}
typescript@5.6.3: {}
unbox-primitive@1.0.2:
dependencies:
@@ -5536,7 +5570,7 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.0
urbackup-server-api@0.52.0:
urbackup-server-api@0.52.1:
dependencies:
async-mutex: 0.5.0
node-fetch: 2.7.0

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "ma",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -947,11 +957,55 @@
"disaster": "Ramp"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "ش",
"days": "ي",
"hours": "س",
@@ -309,6 +309,16 @@
"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": "تنتهي",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "ч",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mes",
"days": "d",
"hours": "h",
@@ -227,8 +227,8 @@
"seed": "Llavors"
},
"develancacheui": {
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "Bytes trobats a la memòria cau",
"cachemissbytes": "Bytes no trobats a la memòria cau"
},
"downloadstation": {
"download": "Descarregar",
@@ -309,6 +309,16 @@
"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",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Consultes",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Èxits",
"totalServerFailure": "Fallades",
"totalNxDomain": "Dominis NX",
"totalRefused": "Rebutjat",
"totalAuthoritative": "Autoritatiu",
"totalRecursive": "Recursiu",
"totalCached": "A la memòria cau",
"totalBlocked": "Bloquejat",
"totalDropped": "Dropped",
"totalDropped": "Abandonat",
"totalClients": "Clients"
},
"tdarr": {
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "Plataformes",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "Jocs",
"saves": "Partides desades",
"states": "Estats",
"screenshots": "Captures de pantalla",
"totalfilesize": "Tamany total"
},
"mailcow": {
"domains": "Dominis",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Bústies",
"mails": "Correus",
"storage": "Emmagatzematge"
},
"netdata": {
@@ -934,24 +944,68 @@
"version": "Versió"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "Enllaços",
"collections": "Col·leccions",
"tags": "Etiquetes"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "No classificat",
"information": "Informació",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Avís",
"average": "Mitjana",
"high": "Alt",
"disaster": "Desastre"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "měs.",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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ší",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mnd",
"days": "d",
"hours": "t",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "Mo.",
"days": "d",
"hours": "h",
@@ -305,10 +305,20 @@
"ping": "Ping"
},
"portainer": {
"running": "Werden ausgeführt",
"running": "Wird 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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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": "Λήγει",
@@ -953,5 +963,49 @@
"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

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -959,5 +969,43 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "me",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "j",
"hours": "h",
@@ -227,8 +227,8 @@
"seed": "Seed"
},
"develancacheui": {
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "Octets de la mémoire cache",
"cachemissbytes": "Octets manquants du cache"
},
"downloadstation": {
"download": "Récep.",
@@ -309,6 +309,16 @@
"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",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Requêtes",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Effectué avec succès",
"totalServerFailure": "Échecs",
"totalNxDomain": "Domaines NX",
"totalRefused": "Refusés",
"totalAuthoritative": "Autoritaire",
"totalRecursive": "Récursif",
"totalCached": "Mis en cache",
"totalBlocked": "Bloqué",
"totalDropped": "Dropped",
"totalDropped": "Abandonné",
"totalClients": "Clients"
},
"tdarr": {
@@ -756,7 +766,7 @@
"books": "Livres",
"authors": "Auteurs",
"categories": "Catégories",
"series": "Séries"
"series": "Séries TV"
},
"jdownloader": {
"downloadCount": "En attente",
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "Plateformes",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "Jeux",
"saves": "Sauvegardes",
"states": "États",
"screenshots": "Captures d'écran",
"totalfilesize": "Taille totale"
},
"mailcow": {
"domains": "Domaines",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Boites mail",
"mails": "Courriels",
"storage": "Stockage"
},
"netdata": {
@@ -922,36 +932,80 @@
"upload": "Envoi"
},
"stocks": {
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
"stocks": "Actions",
"loading": "Chargement",
"open": "Ouvert - Marché américain",
"closed": "Fermé - marché américain",
"invalidConfiguration": "Configuration invalide"
},
"frigate": {
"cameras": "Cameras",
"cameras": "Caméras",
"uptime": "Démarré depuis",
"version": "Version"
},
"linkwarden": {
"links": "Links",
"links": "Liens",
"collections": "Collections",
"tags": "Étiquettes"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Non classé",
"information": "Informations",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Attention",
"average": "Moyenne",
"high": "Élevé",
"disaster": ""
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "माह",
"days": "d",
"hours": "घं.",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mj",
"days": "dan(a)",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -844,11 +854,11 @@
},
"romm": {
"platforms": "Platforme",
"totalRoms": "Games",
"totalRoms": "Igre",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"screenshots": "Snimke ekrana",
"totalfilesize": "Ukupna veličina"
},
"mailcow": {
"domains": "Domene",
@@ -929,19 +939,19 @@
"invalidConfiguration": "Invalid Configuration"
},
"frigate": {
"cameras": "Cameras",
"cameras": "Kamere",
"uptime": "Vrijeme rada",
"version": "Verzija"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "Poveznice",
"collections": "Zbirke",
"tags": "Oznake"
},
"zabbix": {
"unclassified": "Not classified",
"information": "Informacije",
"warning": "Warning",
"warning": "Upozorenje",
"average": "Average",
"high": "High",
"disaster": "Disaster"
@@ -950,8 +960,52 @@
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"reminders": "Podsjetnici",
"nextReminder": "Sljedeći podsjetnik",
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "hó",
"days": "n",
"hours": "ó",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "bulan",
"days": "h",
"hours": "j",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "g",
"hours": "o",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "月",
"days": "日",
"hours": "時間",
@@ -309,6 +309,16 @@
"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": "失効",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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": "만료",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "bln",
"days": "h",
"hours": "j",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mnd",
"days": "d",
"hours": "u",
@@ -309,6 +309,16 @@
"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",
@@ -852,7 +862,7 @@
},
"mailcow": {
"domains": "Domeinen",
"mailboxes": "Mailboxes",
"mailboxes": "Mailboxen",
"mails": "Mails",
"storage": "Opslag"
},
@@ -947,11 +957,55 @@
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mnd",
"days": "d",
"hours": "t",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mc",
"days": "d",
"hours": "g",
@@ -309,6 +309,16 @@
"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",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Zapytania",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Sukces",
"totalServerFailure": "Porażki",
"totalNxDomain": "Domeny NX",
"totalRefused": "Odrzucone",
"totalAuthoritative": "Autorytatywne",
"totalRecursive": "Rekursywne",
"totalCached": "Zbuforowane",
"totalBlocked": "Zablokowane",
"totalDropped": "Dropped",
"totalDropped": "Upuszczone",
"totalClients": "Klienci"
},
"tdarr": {
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "Platformy",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "Gry",
"saves": "Zapisy",
"states": "Stany",
"screenshots": "Screeny",
"totalfilesize": "Rozmiar całkowity"
},
"mailcow": {
"domains": "Domeny",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Skrzynki",
"mails": "Poczta",
"storage": "Pamięć"
},
"netdata": {
@@ -939,12 +949,12 @@
"tags": "Tagi"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Niezaklasyfikowane",
"information": "Informacje",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Ostrzeżenie",
"average": "Średnia",
"high": "Wysokie",
"disaster": "Katastrofa"
},
"lubelogger": {
"vehicle": "Vehicle",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mês",
"days": "d",
"hours": "h",
@@ -30,9 +30,9 @@
"response_data": "Dados da Resposta"
},
"weather": {
"current": "Localização atual",
"current": "Localização actual",
"allow": "Clique para permitir",
"updating": "Atualizando",
"updating": "A actualizar",
"wait": "Por favor aguarde"
},
"search": {
@@ -79,7 +79,7 @@
"starting": "A iniciar",
"unhealthy": "Não-saudável",
"not_found": "Não Encontrado",
"exited": "Encerrado",
"exited": "Saiu",
"partial": "Parcial"
},
"ping": {
@@ -117,10 +117,10 @@
"evcc": {
"pv_power": "Produção",
"battery_soc": "Bateria",
"grid_power": "Grade",
"grid_power": "Grelha",
"home_power": "Consumo",
"charge_power": "Carregador",
"watt_hour": "Kw"
"watt_hour": "Wh"
},
"flood": {
"download": "Descarregar",
@@ -129,16 +129,16 @@
"seed": "Semente"
},
"freshrss": {
"subscriptions": "Assinaturas",
"subscriptions": "Subscrições",
"unread": "Não lida"
},
"fritzbox": {
"connectionStatus": "Estado",
"connectionStatusUnconfigured": "Não configurado",
"connectionStatusUnconfigured": "Desconfigurado",
"connectionStatusConnecting": "A conectar",
"connectionStatusAuthenticating": "Autenticando",
"connectionStatusAuthenticating": "A Autenticar",
"connectionStatusPendingDisconnect": "Desconexão pendente",
"connectionStatusDisconnecting": "Desconectando",
"connectionStatusDisconnecting": "A Desconectar",
"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 atuais",
"requests_failed": "Solicitações com falha"
"requests": "Solicitações actuais",
"requests_failed": "Solicitações falhadas"
},
"changedetectionio": {
"totalObserved": "Total Observado",
"diffsDetected": "Diferenças Detetadas"
"diffsDetected": "Diferenças Detectadas"
},
"channelsdvrserver": {
"shows": "Shows",
"shows": "Séries",
"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 Plex"
"plex_connection_error": "Verifique a conexão do Plex"
},
"omada": {
"connectedAp": "APs Ligados",
@@ -182,10 +182,10 @@
"nzbget": {
"rate": "Taxa",
"remaining": "Restante",
"downloaded": "Baixado"
"downloaded": "Descarregado"
},
"plex": {
"streams": "Streams Ativas",
"streams": "Streams Activas",
"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": "Ativo",
"active": "Activo",
"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": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "Bytes de Acerto na Memória transitória",
"cachemissbytes": "Bytes de Falha de Memória transitória"
},
"downloadstation": {
"download": "Descarregar",
@@ -237,54 +237,54 @@
"seed": "Semente"
},
"sonarr": {
"wanted": "Desejada",
"queued": "Em fila",
"wanted": "Desejados",
"queued": "Em fila de espera",
"series": "Séries",
"queue": "Fila",
"unknown": "Desconhecido"
},
"radarr": {
"wanted": "Desejada",
"missing": "Faltando",
"queued": "Em fila",
"wanted": "Desejados",
"missing": "Em falta",
"queued": "Em fila de espera",
"movies": "Filmes",
"queue": "Fila",
"unknown": "Desconhecido"
},
"lidarr": {
"wanted": "Desejada",
"queued": "Em fila",
"wanted": "Desejados",
"queued": "Em fila de espera",
"artists": "Artistas"
},
"readarr": {
"wanted": "Desejada",
"queued": "Em fila",
"wanted": "Desejados",
"queued": "Em fila de espera",
"books": "Livros"
},
"bazarr": {
"missingEpisodes": "Episódios Faltantes",
"missingMovies": "Filmes Faltantes"
"missingEpisodes": "Episódios em Falta",
"missingMovies": "Filmes em Falta"
},
"ombi": {
"pending": "Pendente",
"approved": "Aprovada",
"approved": "Aprovado",
"available": "Disponível"
},
"jellyseerr": {
"pending": "Pendente",
"approved": "Aprovada",
"approved": "Aprovado",
"available": "Disponível"
},
"overseerr": {
"pending": "Pendente",
"processing": "Processando",
"approved": "Aprovada",
"processing": "A Processar",
"approved": "Aprovado",
"available": "Disponível"
},
"netalertx": {
"total": "Total",
"connected": "Conectado",
"new_devices": "Novos dispositivos",
"new_devices": "Novos Dispositivos",
"down_alerts": "Alertas de Falha"
},
"pihole": {
@@ -309,11 +309,21 @@
"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",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Consultas",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Sucesso",
"totalServerFailure": "Falhas",
"totalNxDomain": "Domínios NX",
"totalRefused": "Recusado",
"totalAuthoritative": "Autoritário",
"totalRecursive": "Recursivo",
"totalCached": "Em Memória transitória",
"totalBlocked": "Bloqueado",
"totalDropped": "Dropped",
"totalDropped": "Perdidos",
"totalClients": "Clientes"
},
"tdarr": {
@@ -345,19 +355,19 @@
"traefik": {
"routers": "Roteadores",
"services": "Serviços",
"middleware": "Software Middleware"
"middleware": "Middleware"
},
"navidrome": {
"nothing_streaming": "Sem streams ativas",
"please_wait": "Por favor aguarde"
"please_wait": "Por Favor, Aguarde"
},
"npm": {
"enabled": "Ativo",
"enabled": "Activo",
"disabled": "Desabilitado",
"total": "Total"
},
"coinmarketcap": {
"configure": "Configurar uma ou mais moedas",
"configure": "Configure uma ou mais criptomoedas para rastrear",
"1hour": "1 Hora",
"1day": "1 Dia",
"7days": "7 Dias",
@@ -391,8 +401,8 @@
"domain_count": "Domínios"
},
"medusa": {
"wanted": "Desejada",
"queued": "Em fila",
"wanted": "Desejados",
"queued": "Em fila de espera",
"series": "Séries"
},
"minecraft": {
@@ -408,8 +418,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",
@@ -440,7 +450,7 @@
"quicklaunch": {
"bookmark": "Marcador",
"service": "Serviço",
"search": "Busca",
"search": "Pesquisa",
"custom": "Personalizado",
"visit": "Visitar",
"url": "Endereço URL",
@@ -449,7 +459,7 @@
"wmo": {
"0-day": "Solarengo",
"0-night": "Limpo",
"1-day": "Maioritariamente ensolarado",
"1-day": "Maioritariamente Solarengo",
"1-night": "Maioritariamente Limpo",
"2-day": "Parcialmente Nublado",
"2-night": "Parcialmente Nublado",
@@ -487,16 +497,16 @@
"75-night": "Neve forte",
"77-day": "Grãos de Neve",
"77-night": "Grãos de Neve",
"80-day": "Neve fraca",
"80-night": "Neve fraca",
"80-day": "Chuviscos Leves",
"80-night": "Chuviscos Leves",
"81-day": "Chuviscos",
"81-night": "Chuviscos",
"82-day": "Chuviscos fortes",
"82-night": "Chuviscos fortes",
"85-day": "Precipitação de Neve",
"85-night": "Precipitação de Neve",
"86-day": "Precipitação de Neve",
"86-night": "Precipitação de Neve",
"85-day": "Chuva de Neve",
"85-night": "Chuva de Neve",
"86-day": "Chuva de Neve",
"86-night": "Chuva de Neve",
"95-day": "Trovoada",
"95-night": "Trovoada",
"96-day": "Trovoada com granizo",
@@ -506,10 +516,10 @@
},
"homebridge": {
"available_update": "Sistema",
"updates": "Atualizações",
"updates": "Actualizações",
"update_available": "Atualização disponível",
"up_to_date": "Atualizado",
"child_bridges": "Pontes Filhas",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pendente",
@@ -518,12 +528,12 @@
"healthchecks": {
"new": "Novo",
"up": "Up",
"grace": "Em Período Gratuito",
"grace": "Em Período de Graça",
"down": "Down",
"paused": "Pausado",
"paused": "Pausa",
"status": "Estado",
"last_ping": "Ultimo Ping",
"never": "Nenhum ping ainda"
"never": "Nenhum Ping ainda"
},
"watchtower": {
"containers_scanned": "Verificado",
@@ -531,7 +541,7 @@
"containers_failed": "Falhou"
},
"autobrr": {
"approvedPushes": "Aprovada",
"approvedPushes": "Aprovado",
"rejectedPushes": "Rejeitado",
"filters": "Filtros",
"indexers": "Indexadores"
@@ -549,7 +559,7 @@
},
"pyload": {
"speed": "Velocidade",
"active": "Ativo",
"active": "Activo",
"queue": "Fila",
"total": "Total"
},
@@ -588,8 +598,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",
@@ -599,7 +609,7 @@
},
"xteve": {
"streams_all": "Todos os Streams",
"streams_active": "Streams Ativas",
"streams_active": "Streams Activas",
"streams_xepg": "Canais XEPG"
},
"opendtu": {
@@ -637,7 +647,7 @@
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Utilização",
"disk": "Utilização do Disco",
"wanIP": "WAN IP"
},
"proxmoxbackupserver": {
@@ -678,17 +688,17 @@
"mylar": {
"series": "Séries",
"issues": "Problemas",
"wanted": "Desejada"
"wanted": "Desejados"
},
"photoprism": {
"albums": "Álbuns",
"photos": "Fotos",
"videos": "Vídeos",
"people": "Pessoa"
"people": "Pessoas"
},
"fileflows": {
"queue": "Fila",
"processing": "Processando",
"processing": "A Processar",
"processed": "Processado",
"time": "Hora"
},
@@ -696,13 +706,13 @@
"dashboards": "Painéis",
"datasources": "Origem de Dados",
"totalalerts": "Total Alertas",
"alertstriggered": "Alertas Disparados"
"alertstriggered": "Alertas Desencadeados"
},
"nextcloud": {
"cpuload": "Carga de CPU",
"memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre",
"activeusers": "Utilizadores Ativos",
"activeusers": "Utilizadores Activos",
"numfiles": "Ficheiros",
"numshares": "Itens partilhados"
},
@@ -724,7 +734,7 @@
},
"prometheus": {
"targets_up": "Alvo ativo",
"targets_down": "Alvo inativo",
"targets_down": "Alvo Inactivo",
"targets_total": "Total de Alvos"
},
"gatus": {
@@ -735,7 +745,7 @@
"ghostfolio": {
"gross_percent_today": "Hoje",
"gross_percent_1y": "Um ano",
"gross_percent_max": "Todo o tempo"
"gross_percent_max": "Desde Sempre"
},
"audiobookshelf": {
"podcasts": "Podcasts",
@@ -750,7 +760,7 @@
},
"whatsupdocker": {
"monitoring": "A monitorizar",
"updates": "Atualizações"
"updates": "Actualizações"
},
"calibreweb": {
"books": "Livros",
@@ -772,14 +782,14 @@
"result": "Resultado",
"status": "Estado",
"buildId": "ID da compilação",
"succeeded": "Com êxito",
"succeeded": "Bem sucedido",
"notStarted": "Não Iniciado",
"failed": "Falhou",
"canceled": "Cancelado",
"inProgress": "Em progresso",
"totalPrs": "Total de PRs",
"myPrs": "Meus PRs",
"approved": "Aprovada"
"myPrs": "Os Meus PRs",
"approved": "Aprovado"
},
"gamedig": {
"status": "Estado",
@@ -787,7 +797,7 @@
"offline": "Desligado",
"name": "Nome",
"map": "Mapa",
"currentPlayers": "Jogadores atuais",
"currentPlayers": "Jogadores actuais",
"players": "Reprodutores",
"maxPlayers": "Máximo de Jogadores",
"bots": "Bots",
@@ -796,7 +806,7 @@
"urbackup": {
"ok": "Ok",
"errored": "Erros",
"noRecent": "Desatualizado",
"noRecent": "Desactualizado",
"totalUsed": "Espaço utilizado"
},
"mealie": {
@@ -806,7 +816,7 @@
"tags": "Etiquetas"
},
"openmediavault": {
"downloading": "A transferir",
"downloading": "A descarregar",
"total": "Total",
"running": "A correr",
"stopped": "Parado",
@@ -824,14 +834,14 @@
"uptimerobot": {
"status": "Estado",
"uptime": "Ligado",
"lastDown": "Última inatividade",
"downDuration": "Duração de inatividade",
"lastDown": "Última Inactividade",
"downDuration": "Duração de Inactividade",
"sitesUp": "Sites no Ar",
"sitesDown": "Sites Fora do Ar",
"paused": "Pausado",
"paused": "Pausa",
"notyetchecked": "Ainda não verificado",
"up": "Up",
"seemsdown": "Parece Baixo",
"seemsdown": "Parece em Baixo",
"down": "Down",
"unknown": "Desconhecido"
},
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "Plataformas",
"totalRoms": "Games",
"totalRoms": "Jogos",
"saves": "Saves",
"states": "States",
"states": "Estados",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalfilesize": "Tamanho Total"
},
"mailcow": {
"domains": "Domínios",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Caixas de Correio",
"mails": "E-mails",
"storage": "Armazenamento"
},
"netdata": {
@@ -881,7 +891,7 @@
"images": "Imagens",
"imageSize": "Tamanho das imagens",
"galleries": "Galerias",
"performers": "Artistas",
"performers": "Artistas de palco",
"studios": "Estúdios",
"movies": "Filmes",
"tags": "Etiquetas",
@@ -906,14 +916,14 @@
},
"wgeasy": {
"connected": "Conectado",
"enabled": "Ativo",
"enabled": "Activo",
"disabled": "Desabilitado",
"total": "Total"
},
"swagdashboard": {
"proxied": "Com proxy",
"auth": "Com Autorização",
"outdated": "Desatualizado",
"outdated": "Desactualizado",
"banned": "Banido"
},
"myspeed": {
@@ -922,36 +932,80 @@
"upload": "Carregar"
},
"stocks": {
"stocks": "Ações",
"loading": "Carregando",
"stocks": "Acções",
"loading": "A carregar",
"open": "Aberto - Mercado dos EUA",
"closed": "Fechado - Mercado dos EUA",
"invalidConfiguration": "Configuração inválida"
"invalidConfiguration": "Configuração Inválida"
},
"frigate": {
"cameras": "Câmaras",
"cameras": "Câmeras",
"uptime": "Ligado",
"version": "Versão"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"collections": "Colecções",
"tags": "Etiquetas"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Não Classificados",
"information": "Informação",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Avisos",
"average": "Média",
"high": "Elevado",
"disaster": "Desastre"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "M",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "мес",
"days": "дней",
"hours": "час",
@@ -227,8 +227,8 @@
"seed": "Сид"
},
"develancacheui": {
"cachehitbytes": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "Хит байты кэша",
"cachemissbytes": "Мисс байты кэша"
},
"downloadstation": {
"download": "Скачивание",
@@ -284,7 +284,7 @@
"netalertx": {
"total": "Всего",
"connected": "Подключено",
"new_devices": "Новое устройство",
"new_devices": "Новые устройства",
"down_alerts": "Оповещение о недоступности"
},
"pihole": {
@@ -309,6 +309,16 @@
"stopped": "Остановлено",
"total": "Всего"
},
"suwayomi": {
"download": "Загружено",
"nondownload": "Незагруженные",
"read": "Прочитано",
"unread": "Не прочитано",
"downloadedread": "Загруженные и прочитанные",
"downloadedunread": "Загруженные и непрочитанные",
"nondownloadedread": "Незагруженные и прочитанные",
"nondownloadedunread": "Незагруженные и непрочитанные"
},
"tailscale": {
"address": "Адрес",
"expires": "Истекает",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Запросы",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Успешные",
"totalServerFailure": "Ошибки",
"totalNxDomain": "NX домены",
"totalRefused": "Отказано",
"totalAuthoritative": "Авторитетные",
"totalRecursive": "Рекурсивные",
"totalCached": "Кэш",
"totalBlocked": "Заблокировано",
"totalDropped": "Dropped",
"totalDropped": "Отброшенные",
"totalClients": "Клиенты"
},
"tdarr": {
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "Платформы",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "Игры",
"saves": "Сейвы",
"states": "Состояния",
"screenshots": "Скриншоты",
"totalfilesize": "Общий объем"
},
"mailcow": {
"domains": "Домены",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Почтовые ящики",
"mails": "Письма",
"storage": "Хранилище"
},
"netdata": {
@@ -902,7 +912,7 @@
},
"crowdsec": {
"alerts": "Предупреждения",
"bans": "Запреты"
"bans": "Блокировки"
},
"wgeasy": {
"connected": "Подключено",
@@ -911,10 +921,10 @@
"total": "Всего"
},
"swagdashboard": {
"proxied": "Proxied",
"auth": "With Auth",
"outdated": "Outdated",
"banned": "Banned"
"proxied": "Прокси",
"auth": "С Авторизацией",
"outdated": "Устаревшие",
"banned": "Заблокированные"
},
"myspeed": {
"ping": "Пинг",
@@ -922,36 +932,80 @@
"upload": "Загрузка"
},
"stocks": {
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
"stocks": "Акции",
"loading": "Загрузка",
"open": "Открыто - Рынок США",
"closed": "Закрыто - рынок США",
"invalidConfiguration": "Неверная конфигурация"
},
"frigate": {
"cameras": "Cameras",
"cameras": "Камеры",
"uptime": "Время работы",
"version": "Версия"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "Ссылки",
"collections": "Коллекции",
"tags": "Теги"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Не классифицировано",
"information": "Информация",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Предупреждение",
"average": "Средняя",
"high": "Высокая",
"disaster": "Чрезвычайная"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mes",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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ší",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mes",
"days": "d",
"hours": "u",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mån",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "ay",
"days": "g",
"hours": "sa",
@@ -309,6 +309,16 @@
"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",
@@ -853,7 +863,7 @@
"mailcow": {
"domains": "Etki Alanları",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mails": "Postalar",
"storage": "Depo"
},
"netdata": {
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"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": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "Кеш-хіт байт",
"cachemissbytes": "Кеш-міс байт"
},
"downloadstation": {
"download": "Завантаження",
"upload": "Відправлення",
"download": "Завантажено",
"upload": "Відправлено",
"leech": "Ліч",
"seed": "Сід"
},
@@ -300,8 +300,8 @@
"latency": "Затримка"
},
"speedtest": {
"upload": "Відправлення",
"download": "Завантаження",
"upload": "Відправлено",
"download": "Завантажено",
"ping": "Пінг"
},
"portainer": {
@@ -309,6 +309,16 @@
"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": "Дійсний до",
@@ -325,15 +335,15 @@
},
"technitium": {
"totalQueries": "Запити",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Успішно",
"totalServerFailure": "Помилки",
"totalNxDomain": "NX Домени",
"totalRefused": "Відмовлено",
"totalAuthoritative": "Авторитетні",
"totalRecursive": "Рекурсивні",
"totalCached": "Кешовані",
"totalBlocked": "Заблоковано",
"totalDropped": "Dropped",
"totalDropped": "Видалені",
"totalClients": "Клієнти"
},
"tdarr": {
@@ -424,12 +434,12 @@
"temp": "Температура",
"_temp": "Темп.",
"warn": "Увага",
"uptime": "Відправка",
"uptime": "Онлайн",
"total": "Усього",
"free": "Вільно",
"used": "Використано",
"days": "д",
"hours": "г",
"days": нів",
"hours": "год",
"crit": "Крит",
"read": "Прочитано",
"write": "Написати",
@@ -815,77 +825,77 @@
},
"openwrt": {
"uptime": "Час роботи",
"cpuLoad": "CPU Load Avg (5m)",
"cpuLoad": "Сер. навантаження ЦП (5 хв)",
"up": "Онлайн",
"down": "Офлайн",
"bytesTx": "Transmitted",
"bytesTx": "Передано",
"bytesRx": "Отримано"
},
"uptimerobot": {
"status": "Стан",
"uptime": "Час роботи",
"lastDown": "Last Downtime",
"downDuration": "Downtime Duration",
"lastDown": "Останній час простою",
"downDuration": "Тривалість простою",
"sitesUp": "Активні сайти",
"sitesDown": "Неактивні сайти",
"paused": "Призупинено",
"notyetchecked": "Not Yet Checked",
"notyetchecked": "Ще не перевірено",
"up": "Онлайн",
"seemsdown": "Seems Down",
"seemsdown": "Вірогідно в простої",
"down": "Офлайн",
"unknown": "Невідомий"
},
"calendar": {
"inCinemas": "In cinemas",
"physicalRelease": "Physical release",
"digitalRelease": "Digital release",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
"inCinemas": "У кінотеатрах",
"physicalRelease": "Фізичний реліз",
"digitalRelease": "Цифровий реліз",
"noEventsToday": "Події на сьогодні відсутні",
"noEventsFound": "Події не знайдено"
},
"romm": {
"platforms": "Platforms",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"platforms": "Платформи",
"totalRoms": "Ігри",
"saves": "Збереження",
"states": "Штати",
"screenshots": "Знімки екрану",
"totalfilesize": "Загальний обсяг"
},
"mailcow": {
"domains": "Домени",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Пошта",
"mails": "Листи",
"storage": "Сховище"
},
"netdata": {
"warnings": "Попередження",
"criticals": "Criticals"
"criticals": "Критичні"
},
"plantit": {
"events": "Events",
"plants": "Plants",
"events": "Події",
"plants": "Рослини",
"photos": "Фотографії",
"species": "Species"
"species": "Види"
},
"gitea": {
"notifications": "Сповіщення",
"issues": "Питання",
"pulls": "Pull Requests"
"pulls": "Pull-запити"
},
"stash": {
"scenes": "Scenes",
"scenesPlayed": "Scenes Played",
"playCount": "Total Plays",
"playDuration": "Time Watched",
"sceneSize": "Scenes Size",
"sceneDuration": "Scenes Duration",
"images": "Images",
"imageSize": "Images Size",
"galleries": "Galleries",
"scenes": "Сцени",
"scenesPlayed": "Зіграні сцени",
"playCount": "Всього п'єс",
"playDuration": "Переглянуто",
"sceneSize": "Розміри сцен",
"sceneDuration": "Тривалість сцен",
"images": "Зображення",
"imageSize": "Розміри зображень",
"galleries": "Галереї",
"performers": "Виконавці",
"studios": "Studios",
"studios": "Студії",
"movies": "Фільми",
"tags": "Теги",
"oCount": "O Count"
"oCount": "Кількість O"
},
"tandoor": {
"users": "Користувачі",
@@ -893,16 +903,16 @@
"keywords": "Ключові слова"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"items": "Речі",
"totalWithWarranty": "З гарантією",
"locations": "Місцезнаходження",
"labels": "Мітки",
"users": "Користувачі",
"totalValue": "Total Value"
"totalValue": "Загальне значення"
},
"crowdsec": {
"alerts": "Оповіщення",
"bans": "Bans"
"bans": "Блокування"
},
"wgeasy": {
"connected": "З'єднано",
@@ -911,21 +921,21 @@
"total": "Усього"
},
"swagdashboard": {
"proxied": "Proxied",
"auth": "With Auth",
"outdated": "Outdated",
"banned": "Banned"
"proxied": "Пропущено через проксі",
"auth": "З аутентифікацією",
"outdated": "Застаріле",
"banned": "Заблоковано"
},
"myspeed": {
"ping": "Пінг",
"download": "Завантаження",
"upload": "Відправлення"
"download": "Завантажено",
"upload": "Відправлено"
},
"stocks": {
"stocks": "Stocks",
"stocks": "Акції",
"loading": "Завантажую",
"open": "Open - US Market",
"closed": "Closed - US Market",
"open": "Відкрито - ринок США",
"closed": "Закрито - ринок США",
"invalidConfiguration": "Неприпустима конфігурація"
},
"frigate": {
@@ -934,24 +944,68 @@
"version": "Версія"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "Посилання",
"collections": "Колекції",
"tags": "Теги"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Не визначено",
"information": "Інформація",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Попередження",
"average": "Середнє",
"high": "Високе",
"disaster": "Катастрофа"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "mo",
"days": "d",
"hours": "h",
@@ -309,6 +309,16 @@
"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",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "月",
"days": "天",
"hours": "小時",
@@ -309,6 +309,16 @@
"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": "已失效",
@@ -953,5 +963,49 @@
"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}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"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": "Cache Hit Bytes",
"cachemissbytes": "Cache Miss Bytes"
"cachehitbytes": "缓存命中字节",
"cachemissbytes": "缓存Bytes失败"
},
"downloadstation": {
"download": "下载",
@@ -309,6 +309,16 @@
"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": "失效",
@@ -327,7 +337,7 @@
"totalQueries": "查询",
"totalNoError": "成功",
"totalServerFailure": "失败",
"totalNxDomain": "NX Domains",
"totalNxDomain": "",
"totalRefused": "已拒绝",
"totalAuthoritative": "权威",
"totalRecursive": "递归",
@@ -724,7 +734,7 @@
},
"prometheus": {
"targets_up": "目标上线",
"targets_down": "离线目标",
"targets_down": "目标离线",
"targets_total": "总目标"
},
"gatus": {
@@ -844,16 +854,16 @@
},
"romm": {
"platforms": "平台",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "游戏数",
"saves": "已保存",
"states": "状态",
"screenshots": "屏幕截图",
"totalfilesize": "总大小"
},
"mailcow": {
"domains": "域",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "邮箱",
"mails": "邮件",
"storage": "储存空间"
},
"netdata": {
@@ -922,36 +932,80 @@
"upload": "上传速率"
},
"stocks": {
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
"stocks": "库存",
"loading": "正在加载",
"open": "打開-美国商店",
"closed": "关闭-美国市场",
"invalidConfiguration": "无效配置"
},
"frigate": {
"cameras": "Cameras",
"cameras": "摄像头",
"uptime": "运行时间",
"version": "版本"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "链接",
"collections": "收藏",
"tags": "Tags"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "未分类",
"information": "信息",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "警告",
"average": "平均红包",
"high": "",
"disaster": "灾难"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"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"
}
}

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}",
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}",
"duration": "{{value, duration}}",
"months": "月",
"days": "天",
"hours": "小時",
@@ -309,6 +309,16 @@
"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": "已失效",
@@ -953,5 +963,49 @@
"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

@@ -20,7 +20,7 @@ export default function BookmarksGroup({ bookmarks, layout, disableCollapse, gro
className={classNames(
"bookmark-group",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1",
layout?.header === false ? "flex-1 px-1 -my-1 overflow-hidden" : "flex-1 p-1 overflow-hidden",
)}
>
<Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}>

View File

@@ -29,9 +29,9 @@ export default function Item({ bookmark }) {
)}
{!bookmark.icon && bookmark.abbr}
</div>
<div className="flex-1 flex items-center justify-between rounded-r-md bookmark-text">
<div className="flex-1 grow pl-3 py-2 text-xs bookmark-name">{bookmark.name}</div>
<div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs bookmark-description">
<div className="flex-1 overflow-hidden flex items-center justify-between rounded-r-md bookmark-text">
<div className="pl-3 py-2 text-xs bookmark-name">{bookmark.name}</div>
<div className="shrink truncate px-2 py-2 text-theme-500 dark:text-theme-300 text-xs bookmark-description">
{description}
</div>
</div>

View File

@@ -98,6 +98,12 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
} else if (event.key === "ArrowUp" && currentItemIndex > 0) {
setCurrentItemIndex(currentItemIndex - 1);
event.preventDefault();
} else if (
event.key === "ArrowRight" &&
results[currentItemIndex] &&
results[currentItemIndex].type === "searchSuggestion"
) {
setSearchString(results[currentItemIndex].name);
}
}

View File

@@ -25,7 +25,7 @@ export default function Uptime({ refresh = 1500 }) {
return (
<Resource
icon={FaRegClock}
value={t("common.uptime", { value: data.uptime })}
value={t("common.duration", { value: data.uptime })}
label={t("resources.uptime")}
percentage={percent}
/>

View File

@@ -8,7 +8,7 @@ export default function Document() {
name="description"
content="A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="manifest" href="/site.webmanifest?v=4" crossOrigin="use-credentials" />
</Head>
<body>

View File

@@ -2,7 +2,7 @@ import cachedFetch from "utils/proxy/cached-fetch";
export default async function handler(req, res) {
const { latitude, longitude, units, cache, timezone } = req.query;
const degrees = units === "imperial" ? "fahrenheit" : "celsius";
const degrees = units === "metric" ? "celsius" : "fahrenheit";
const timezeone = timezone ?? "auto";
const apiUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=sunrise,sunset&current_weather=true&temperature_unit=${degrees}&timezone=${timezeone}`;
return res.send(await cachedFetch(apiUrl, cache));

View File

@@ -368,6 +368,9 @@ export function cleanServiceGroups(groups) {
repositoryId,
userEmail,
// beszel
systemId,
// calendar
firstDayInWeek,
integrations,
@@ -415,7 +418,7 @@ export function cleanServiceGroups(groups) {
pointsLimit,
diskUnits,
// glances, customapi, iframe
// glances, customapi, iframe, prometheusmetric
refreshInterval,
// hdhomerun
@@ -458,6 +461,9 @@ export function cleanServiceGroups(groups) {
// opnsense, pfsense
wan,
// prometheusmetric
metrics,
// proxmox
node,
@@ -486,6 +492,9 @@ export function cleanServiceGroups(groups) {
// technitium
range,
// spoolman
spoolIds,
} = cleanedService.widget;
let fieldsList = fields;
@@ -511,6 +520,10 @@ export function cleanServiceGroups(groups) {
if (repositoryId) cleanedService.widget.repositoryId = repositoryId;
}
if (type === "beszel") {
if (systemId) cleanedService.widget.systemId = systemId;
}
if (type === "coinmarketcap") {
if (currency) cleanedService.widget.currency = currency;
if (symbols) cleanedService.widget.symbols = symbols;
@@ -639,6 +652,13 @@ export function cleanServiceGroups(groups) {
if (type === "vikunja") {
if (enableTaskList !== undefined) cleanedService.widget.enableTaskList = !!enableTaskList;
}
if (type === "prometheusmetric") {
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

@@ -36,9 +36,11 @@ export default async function credentialedProxyHandler(req, res, map) {
headers["X-gotify-Key"] = `${widget.key}`;
} else if (
[
"argocd",
"authentik",
"cloudflared",
"ghostfolio",
"headscale",
"linkwarden",
"mealie",
"netalertx",
@@ -92,6 +94,8 @@ 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

@@ -23,7 +23,7 @@ export default async function genericProxyHandler(req, res, map) {
formatApiCall(widgets[widget.type].api, { endpoint, ...widget }).replace(/(?<=\?.*)\?/g, "&"),
);
const headers = req.extraHeaders ?? widget.headers ?? {};
const headers = req.extraHeaders ?? widget.headers ?? widgets[widget.type].headers ?? {};
if (widget.username && widget.password) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
@@ -75,7 +75,13 @@ export default async function genericProxyHandler(req, res, map) {
url.port ? `:${url.port}` : "",
url.pathname,
);
return res.status(status).json({ error: { message: "HTTP Error", url: sanitizeErrorURL(url), resultData } });
return res.status(status).json({
error: {
message: "HTTP Error",
url: sanitizeErrorURL(url),
resultData: Buffer.isBuffer(resultData) ? Buffer.from(resultData).toString() : resultData,
},
});
}
return res.status(status).send(resultData);

View File

@@ -0,0 +1,52 @@
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

@@ -0,0 +1,14 @@
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

@@ -39,21 +39,15 @@ export default function Component({ service }) {
<Block label="audiobookshelf.podcasts" value={t("common.number", { value: totalPodcasts })} />
<Block
label="audiobookshelf.podcastsDuration"
value={t("common.number", {
value: totalPodcastsDuration / 60,
maximumFractionDigits: 0,
style: "unit",
unit: "minute",
value={t("common.duration", {
value: totalPodcastsDuration,
})}
/>
<Block label="audiobookshelf.books" value={t("common.number", { value: totalBooks })} />
<Block
label="audiobookshelf.booksDuration"
value={t("common.number", {
value: totalBooksDuration / 60,
maximumFractionDigits: 0,
style: "unit",
unit: "minute",
value={t("common.duration", {
value: totalBooksDuration,
})}
/>
</Container>

View File

@@ -0,0 +1,60 @@
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 { systemId } = widget;
const { data: systems, error: systemsError } = useWidgetAPI(widget, "systems");
const MAX_ALLOWED_FIELDS = 4;
if (!widget.fields?.length > 0) {
widget.fields = systemId ? ["name", "status", "cpu", "memory"] : ["systems", "up"];
}
if (widget.fields?.length > MAX_ALLOWED_FIELDS) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
}
if (systemsError) {
return <Container service={service} error={systemsError} />;
}
if (!systems) {
return (
<Container service={service}>
<Block label="beszel.systems" />
<Block label="beszel.up" />
</Container>
);
}
if (systemId) {
const system = systems.items.find((item) => item.id === systemId);
return (
<Container service={service}>
<Block label="beszel.name" value={system.name} />
<Block label="beszel.status" value={t(`beszel.${system.status}`)} />
<Block label="beszel.updated" value={t("common.relativeDate", { value: system.updated })} />
<Block label="beszel.cpu" value={t("common.percent", { value: system.info.cpu, maximumFractionDigits: 2 })} />
<Block label="beszel.memory" value={t("common.percent", { value: system.info.mp, maximumFractionDigits: 2 })} />
<Block label="beszel.disk" value={t("common.percent", { value: system.info.dp, maximumFractionDigits: 2 })} />
<Block label="beszel.network" value={t("common.percent", { value: system.info.b, maximumFractionDigits: 2 })} />
</Container>
);
}
const upTotal = systems.items.filter((item) => item.status === "up").length;
return (
<Container service={service}>
<Block label="beszel.systems" value={systems.totalItems} />
<Block label="beszel.up" value={`${upTotal} / ${systems.totalItems}`} />
</Container>
);
}

View File

@@ -0,0 +1,99 @@
import cache from "memory-cache";
import getServiceWidget from "utils/config/service-helpers";
import { formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
import createLogger from "utils/logger";
const proxyName = "beszelProxyHandler";
const tokenCacheKey = `${proxyName}__token`;
const logger = createLogger(proxyName);
async function login(loginUrl, username, password, service) {
const authResponse = await httpProxy(loginUrl, {
method: "POST",
body: JSON.stringify({ identity: username, password }),
headers: {
"Content-Type": "application/json",
},
});
const status = authResponse[0];
let data = authResponse[2];
try {
data = JSON.parse(Buffer.from(authResponse[2]).toString());
if (status === 200) {
cache.put(`${tokenCacheKey}.${service}`, data.token);
}
} catch (e) {
logger.error(`Error ${status} logging into beszel`, JSON.stringify(authResponse[2]));
}
return [status, data.token ?? data];
}
export default async function beszelProxyHandler(req, res) {
const { group, service, endpoint } = req.query;
if (group && service) {
const widget = await getServiceWidget(group, service);
if (!widgets?.[widget.type]?.api) {
return res.status(403).json({ error: "Service does not support API calls" });
}
if (widget) {
const url = new URL(formatApiCall(widgets[widget.type].api, { endpoint, ...widget }));
const loginUrl = formatApiCall(widgets[widget.type].api, { endpoint: "admins/auth-with-password", ...widget });
let status;
let data;
let token = cache.get(`${tokenCacheKey}.${service}`);
if (!token) {
[status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) {
logger.debug(`HTTP ${status} logging into npm api: ${token}`);
return res.status(status).send(token);
}
}
[status, , data] = await httpProxy(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
});
if (status === 403) {
logger.debug(`HTTP ${status} retrieving data from npm api, logging in and trying again.`);
cache.del(`${tokenCacheKey}.${service}`);
[status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) {
logger.debug(`HTTP ${status} logging into npm api: ${data}`);
return res.status(status).send(data);
}
// eslint-disable-next-line no-unused-vars
[status, , data] = await httpProxy(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
});
}
if (status !== 200) {
return res.status(status).send(data);
}
return res.send(data);
}
}
return res.status(400).json({ error: "Invalid proxy service type" });
}

View File

@@ -0,0 +1,14 @@
import beszelProxyHandler from "./proxy";
const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: beszelProxyHandler,
mappings: {
systems: {
endpoint: "collections/systems/records?page=1&perPage=500&sort=%2Bcreated",
},
},
};
export default widget;

View File

@@ -21,7 +21,7 @@ export default async function calendarProxyHandler(req, res) {
if (contentType) res.setHeader("Content-Type", contentType);
if (status !== 200) {
logger.debug(`HTTTP ${status} retrieving data from integration URL ${integration.url} : ${data}`);
logger.debug(`HTTP ${status} retrieving data from integration URL ${integration.url} : ${data}`);
return res.status(status).send(data);
}

View File

@@ -2,12 +2,14 @@ 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")),
autobrr: dynamic(() => import("./autobrr/component")),
azuredevops: dynamic(() => import("./azuredevops/component")),
bazarr: dynamic(() => import("./bazarr/component")),
beszel: dynamic(() => import("./beszel/component")),
caddy: dynamic(() => import("./caddy/component")),
calendar: dynamic(() => import("./calendar/component")),
calibreweb: dynamic(() => import("./calibreweb/component")),
@@ -36,11 +38,13 @@ 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")),
grafana: dynamic(() => import("./grafana/component")),
hdhomerun: dynamic(() => import("./hdhomerun/component")),
headscale: dynamic(() => import("./headscale/component")),
peanut: dynamic(() => import("./peanut/component")),
homeassistant: dynamic(() => import("./homeassistant/component")),
homebox: dynamic(() => import("./homebox/component")),
@@ -93,6 +97,7 @@ const components = {
plex: dynamic(() => import("./plex/component")),
portainer: dynamic(() => import("./portainer/component")),
prometheus: dynamic(() => import("./prometheus/component")),
prometheusmetric: dynamic(() => import("./prometheusmetric/component")),
prowlarr: dynamic(() => import("./prowlarr/component")),
proxmox: dynamic(() => import("./proxmox/component")),
pterodactyl: dynamic(() => import("./pterodactyl/component")),
@@ -107,10 +112,12 @@ 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")),
swagdashboard: dynamic(() => import("./swagdashboard/component")),
suwayomi: dynamic(() => import("./suwayomi/component")),
tailscale: dynamic(() => import("./tailscale/component")),
tandoor: dynamic(() => import("./tandoor/component")),
tautulli: dynamic(() => import("./tautulli/component")),

View File

@@ -40,7 +40,7 @@ export default function Component({ service }) {
/>
<Block
label="frigate.uptime"
value={t("common.uptime", {
value={t("common.duration", {
value: data.uptime,
})}
/>

View File

@@ -44,7 +44,7 @@ export default function Component({ service }) {
return (
<Container service={service}>
<Block label="fritzbox.connectionStatus" value={t(`fritzbox.connectionStatus${fritzboxData.connectionStatus}`)} />
<Block label="fritzbox.uptime" value={t("common.uptime", { value: fritzboxData.uptime })} />
<Block label="fritzbox.uptime" value={t("common.duration", { value: fritzboxData.uptime })} />
<Block label="fritzbox.maxDown" value={t("common.byterate", { value: fritzboxData.maxDown / 8, decimals: 1 })} />
<Block label="fritzbox.maxUp" value={t("common.byterate", { value: fritzboxData.maxUp / 8, decimals: 1 })} />
<Block label="fritzbox.down" value={t("common.byterate", { value: fritzboxData.down, decimals: 1 })} />

View File

@@ -0,0 +1,36 @@
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

@@ -0,0 +1,13 @@
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

@@ -0,0 +1,43 @@
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: nodeData, error: nodeError } = useWidgetAPI(widget, "node");
if (nodeError) {
return <Container service={service} error={nodeError} />;
}
if (!nodeData) {
return (
<Container service={service}>
<Block label="headscale.name" />
<Block label="headscale.address" />
<Block label="headscale.last_seen" />
<Block label="headscale.status" />
</Container>
);
}
const {
givenName,
ipAddresses: [address],
lastSeen,
online,
} = nodeData.node;
return (
<Container service={service}>
<Block label="headscale.name" value={givenName} />
<Block label="headscale.address" value={address} />
<Block label="headscale.last_seen" value={t("common.relativeDate", { value: lastSeen })} />
<Block label="headscale.status" value={t(online ? "headscale.online" : "headscale.offline")} />
</Container>
);
}

View File

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

View File

@@ -21,8 +21,8 @@ export default function Component({ service }) {
);
}
const enabled = infoData.filter((c) => c.enabled === 1).length;
const disabled = infoData.filter((c) => c.enabled === 0).length;
const enabled = infoData.filter((c) => !!c.enabled).length;
const disabled = infoData.filter((c) => !c.enabled).length;
const total = infoData.length;
return (

View File

@@ -30,7 +30,7 @@ async function login(loginUrl, username, password, service) {
cache.put(`${tokenCacheKey}.${service}`, data.token, expiration - 5 * 60 * 1000); // expiration -5 minutes
}
} catch (e) {
logger.error(`Error ${status} logging into npm`, authResponse[2]);
logger.error(`Error ${status} logging into npm`, JSON.stringify(authResponse[2]));
}
return [status, data.token ?? data];
}
@@ -50,19 +50,18 @@ export default async function npmProxyHandler(req, res) {
const loginUrl = `${widget.url}/api/tokens`;
let status;
let contentType;
let data;
let token = cache.get(`${tokenCacheKey}.${service}`);
if (!token) {
[status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) {
logger.debug(`HTTTP ${status} logging into npm api: ${token}`);
logger.debug(`HTTP ${status} logging into npm api: ${token}`);
return res.status(status).send(token);
}
}
[status, contentType, data] = await httpProxy(url, {
[status, , data] = await httpProxy(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
@@ -71,17 +70,17 @@ export default async function npmProxyHandler(req, res) {
});
if (status === 403) {
logger.debug(`HTTTP ${status} retrieving data from npm api, logging in and trying again.`);
logger.debug(`HTTP ${status} retrieving data from npm api, logging in and trying again.`);
cache.del(`${tokenCacheKey}.${service}`);
[status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) {
logger.debug(`HTTTP ${status} logging into npm api: ${data}`);
logger.debug(`HTTP ${status} logging into npm api: ${data}`);
return res.status(status).send(data);
}
// eslint-disable-next-line no-unused-vars
[status, contentType, data] = await httpProxy(url, {
[status, , data] = await httpProxy(url, {
method: "GET",
headers: {
"Content-Type": "application/json",

View File

@@ -138,7 +138,7 @@ export default async function omadaProxyHandler(req, res) {
const sitesResponseData = JSON.parse(data);
if (status !== 200 || sitesResponseData.errorCode > 0) {
logger.debug(`HTTTP ${status} getting sites list: ${sitesResponseData.msg}`);
logger.debug(`HTTP ${status} getting sites list: ${sitesResponseData.msg}`);
return res
.status(status)
.json({ error: { message: "Error getting sites list", url, data: sitesResponseData } });

View File

@@ -20,7 +20,7 @@ export default function Component({ service }) {
return (
<Container service={service}>
<Block label="openwrt.uptime" value={t("common.uptime", { value: uptime })} />
<Block label="openwrt.uptime" value={t("common.duration", { value: uptime })} />
<Block label="openwrt.cpuLoad" value={cpuLoad} />
</Container>
);

View File

@@ -0,0 +1,116 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
function formatValue(t, metric, rawValue) {
if (!metric?.format) return rawValue;
if (!rawValue) return "-";
let value = rawValue;
// Scale the value. Accepts either a number to multiply by or a string
// like "12/345".
const scale = metric?.format?.scale;
if (typeof scale === "number") {
value *= scale;
} else if (typeof scale === "string" && scale.includes("/")) {
const parts = scale.split("/");
const numerator = parts[0] ? parseFloat(parts[0]) : 1;
const denominator = parts[1] ? parseFloat(parts[1]) : 1;
value = (value * numerator) / denominator;
} else {
value = parseFloat(value);
}
// Format the value using a known type and optional options.
switch (metric?.format?.type) {
case "text":
break;
default:
value = t(`common.${metric.format.type}`, { value, ...metric.format?.options });
}
// Apply fixed prefix.
const prefix = metric?.format?.prefix;
if (prefix) {
value = `${prefix}${value}`;
}
// Apply fixed suffix.
const suffix = metric?.format?.suffix;
if (suffix) {
value = `${value}${suffix}`;
}
return value;
}
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { metrics = [], refreshInterval = 10000 } = widget;
let prometheusmetricError;
const prometheusmetricData = new Map(
metrics.slice(0, 4).map((metric) => {
// disable the rule that hooks should not be called from a callback,
// because we don't need a strong guarantee of hook execution order here.
// eslint-disable-next-line react-hooks/rules-of-hooks
const { data: resultData, error: resultError } = useWidgetAPI(widget, "query", {
query: metric.query,
refreshInterval: Math.max(1000, metric.refreshInterval ?? refreshInterval),
});
if (resultError) {
prometheusmetricError = resultError;
}
return [metric.key ?? metric.label, resultData];
}),
);
if (prometheusmetricError) {
return <Container service={service} error={prometheusmetricError} />;
}
if (!prometheusmetricData) {
return (
<Container service={service}>
{metrics.slice(0, 4).map((item) => (
<Block label={item.label} key={item.label} />
))}
</Container>
);
}
function getResultValue(data) {
// Fetches the first metric result from the Prometheus query result data.
// The first element in the result value is the timestamp which is ignored here.
const resultType = data?.data?.resultType;
const result = data?.data?.result;
switch (resultType) {
case "vector":
return result?.[0]?.value?.[1];
case "scalar":
return result?.[1];
default:
return "";
}
}
return (
<Container service={service}>
{metrics.map((metric) => (
<Block
label={metric.label}
key={metric.key ?? metric.label}
value={formatValue(t, metric, getResultValue(prometheusmetricData.get(metric.key ?? metric.label)))}
/>
))}
</Container>
);
}

View File

@@ -0,0 +1,16 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/v1/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
query: {
method: "GET",
endpoint: "query",
params: ["query"],
},
},
};
export default widget;

View File

@@ -15,7 +15,7 @@ async function fetchFromPyloadAPI(url, sessionId, params, service) {
const options = {
body: params
? Object.keys(params)
.map((prop) => `${prop}=${params[prop]}`)
.map((prop) => `${prop}=${encodeURIComponent(params[prop])}`)
.join("&")
: `session=${sessionId}`,
method: "POST",

View File

@@ -12,7 +12,10 @@ const widget = {
wanted: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile && item.isAvailable).length,
have: jsonArrayFilter(data, (item) => item.hasFile).length,
missing: jsonArrayFilter(data, (item) => item.monitored && !item.hasFile).length,
all: asJson(data),
all: asJson(data).map((entry) => ({
title: entry.title,
id: entry.id,
})),
}),
},
"queue/status": {

View File

@@ -0,0 +1,63 @@
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>
);
}

Some files were not shown because too many files have changed in this diff Show More