mirror of
https://github.com/gethomepage/homepage.git
synced 2025-07-09 03:04:18 -04:00
Merge branch 'dev'
This commit is contained in:
commit
35be5559b3
4
.github/DISCUSSION_TEMPLATE/support.yml
vendored
4
.github/DISCUSSION_TEMPLATE/support.yml
vendored
@ -4,7 +4,7 @@ body:
|
||||
value: |
|
||||
### ⚠️ Before opening a discussion:
|
||||
|
||||
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/).
|
||||
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/) and include the output of all steps below.
|
||||
- [Search existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) [and discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions) (including closed ones!).
|
||||
- type: textarea
|
||||
id: description
|
||||
@ -59,6 +59,6 @@ body:
|
||||
value: |
|
||||
## ⚠️ STOP ⚠️
|
||||
|
||||
Before you submit this support request, please ensure you have entered your configuration files and actually followed the steps from the troubleshooting guide linked above, if relevant. The troubleshooting steps often help to solve the problem.
|
||||
Before you submit this support request, please ensure you have entered your configuration files and actually followed the steps from the troubleshooting guide linked above *and posted the output*, if relevant. The troubleshooting steps often help to solve the problem or at least can help figure it out.
|
||||
|
||||
*Please remember that this project is maintained by regular people **just like you**, so if you don't take the time to fill out the requested information, don't expect a reply back.*
|
||||
|
1
.github/workflows/docker-publish.yml
vendored
1
.github/workflows/docker-publish.yml
vendored
@ -154,6 +154,7 @@ jobs:
|
||||
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
||||
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
provenance: false
|
||||
cache-from: type=local,src=/tmp/.buildx-cache
|
||||
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
||||
|
||||
|
@ -49,7 +49,7 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
|
||||
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
|
||||
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
||||
|
||||
RUN apk add --no-cache su-exec iputils-ping
|
||||
RUN apk add --no-cache su-exec iputils-ping shadow
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV HOSTNAME=0.0.0.0
|
||||
|
@ -12,10 +12,43 @@ export PGID=${PGID:-0}
|
||||
|
||||
export HOMEPAGE_BUILDTIME=$(date +%s)
|
||||
|
||||
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
|
||||
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
|
||||
# Running chown in that case (as non-root) will cause error
|
||||
[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public
|
||||
# Check ownership before chown
|
||||
if [ -e /app/config ]; then
|
||||
CURRENT_UID=$(stat -c %u /app/config)
|
||||
CURRENT_GID=$(stat -c %g /app/config)
|
||||
|
||||
if [ "$CURRENT_UID" -ne "$PUID" ] || [ "$CURRENT_GID" -ne "$PGID" ]; then
|
||||
echo "Fixing ownership of /app/config"
|
||||
if ! chown -R "$PUID:$PGID" /app/config 2>/dev/null; then
|
||||
echo "Warning: Could not chown /app/config; continuing anyway"
|
||||
fi
|
||||
else
|
||||
echo "/app/config already owned by correct UID/GID, skipping chown"
|
||||
fi
|
||||
else
|
||||
echo "/app/config does not exist; skipping ownership check"
|
||||
fi
|
||||
|
||||
# Ensure /app/config/logs exists and is owned
|
||||
if [ -n "$PUID" ] && [ -n "$PGID" ]; then
|
||||
mkdir -p /app/config/logs 2>/dev/null || true
|
||||
if [ -d /app/config/logs ]; then
|
||||
LOG_UID=$(stat -c %u /app/config/logs)
|
||||
LOG_GID=$(stat -c %g /app/config/logs)
|
||||
if [ "$LOG_UID" -ne "$PUID" ] || [ "$LOG_GID" -ne "$PGID" ]; then
|
||||
echo "Fixing ownership of /app/config/logs"
|
||||
chown -R "$PUID:$PGID" /app/config/logs 2>/dev/null || echo "Warning: Could not chown /app/config/logs"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /app/.next ]; then
|
||||
CURRENT_UID=$(stat -c %u /app/.next)
|
||||
if [ "$CURRENT_UID" -ne "$PUID" ]; then
|
||||
echo "Fixing ownership of /app/.next"
|
||||
chown -R "$PUID:$PGID" /app/.next || echo "Warning: Could not chown /app/.next"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Drop privileges (when asked to) if root, otherwise run as current user
|
||||
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
||||
|
@ -20,7 +20,7 @@ Since Docker supports connecting with TLS and client certificate authentication,
|
||||
```yaml
|
||||
my-remote-docker:
|
||||
host: 192.168.0.101
|
||||
port: 275
|
||||
port: 2375
|
||||
tls:
|
||||
keyFile: tls/key.pem
|
||||
caFile: tls/ca.pem
|
||||
@ -66,6 +66,30 @@ my-docker:
|
||||
port: 2375
|
||||
```
|
||||
|
||||
Use `protocol: https` if you’re connecting through a reverse proxy (e.g., Traefik) that serves the Docker API over HTTPS:
|
||||
|
||||
```yaml
|
||||
my-docker:
|
||||
host: dockerproxy
|
||||
port: 443
|
||||
protocol: https
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
Note: This does not require TLS certificates if the proxy handles encryption. Do not use `protocol: https` unless you’re sure the target host supports HTTPS.
|
||||
|
||||
You can also include `headers` for the connection, for example, if you are using a reverse proxy that requires authentication:
|
||||
|
||||
```yaml
|
||||
my-docker:
|
||||
host: dockerproxy
|
||||
port: 443
|
||||
protocol: https
|
||||
headers:
|
||||
Authorization: Basic <base64-encoded-credentials>
|
||||
```
|
||||
|
||||
## Using Socket Directly
|
||||
|
||||
If you'd rather use the socket directly, first make sure that you're passing the local socket into the Docker container.
|
||||
|
@ -163,6 +163,18 @@ If the `href` attribute is not present, Homepage will ignore the specific Ingres
|
||||
|
||||
Homepage also features automatic service discovery for Gateway API. Service definitions are read by annotating the HttpRoute custom resource definition and are indentical to the Ingress example as defined in [Automatic Service Discovery](#automatic-service-discovery).
|
||||
|
||||
To enable Gateway API HttpRoute update `kubernetes.yaml` to include:
|
||||
|
||||
```
|
||||
gateway: true # enable gateway-api
|
||||
```
|
||||
|
||||
#### Using the unoffocial helm chart?
|
||||
|
||||
If you are using the unofficial helm chart ensure that the `ClusterRole` has required permissions for `gateway.networking.k8s.io`.
|
||||
|
||||
See [ClusterRole and ClusterRoleBinding](../installation/k8s.md#clusterrole-and-clusterrolebinding)
|
||||
|
||||
## Caveats
|
||||
|
||||
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.
|
||||
|
@ -101,7 +101,7 @@ theme: dark # or light
|
||||
|
||||
## Color Palette
|
||||
|
||||
You can configured a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
|
||||
You can configure a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
|
||||
|
||||
```yaml
|
||||
color: slate
|
||||
|
17
docs/widgets/services/checkmk.md
Normal file
17
docs/widgets/services/checkmk.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: Checkmk
|
||||
description: Checkmk Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Checkmk](https://github.com/Checkmk/checkmk).
|
||||
|
||||
To setup authentication, follow the official [Checkmk API](https://docs.checkmk.com/latest/en/rest_api.html?lquery=api#bearerauth) documentation.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: checkmk
|
||||
url: http://checkmk.host.or.ip:port
|
||||
site: your-site-name-cla-by-default
|
||||
username: username
|
||||
password: password
|
||||
```
|
@ -14,4 +14,5 @@ widget:
|
||||
type: gamedig
|
||||
serverType: csgo # see https://github.com/gamedig/node-gamedig#games-list
|
||||
url: udp://server.host.or.ip:port
|
||||
gameToken: # optional, a token used by gamedig with certain games
|
||||
```
|
||||
|
@ -9,7 +9,7 @@ Learn more about [Gluetun](https://github.com/qdm12/gluetun).
|
||||
|
||||
Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled. By default this runs on port `8000`.
|
||||
|
||||
Allowed fields: `["public_ip", "region", "country"]`.
|
||||
Allowed fields: `["public_ip", "region", "country", "port_forwarded"]`.
|
||||
|
||||
To setup authentication, follow [the official Gluetun documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication). Note that to use the api key method, you must add the route `GET /v1/publicip/ip` to the `routes` array in your Gluetun config.toml.
|
||||
|
||||
|
18
docs/widgets/services/jellystat.md
Normal file
18
docs/widgets/services/jellystat.md
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
title: Jellystat
|
||||
description: Jellystat Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Jellystat](https://github.com/CyferShepard/Jellystat). The widget supports (at least) Jellystat version 1.1.6
|
||||
|
||||
You can create an API key from inside Jellystat at `Settings > API Key`.
|
||||
|
||||
Allowed fields: `["songs", "movies", "episodes", "other"]`.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: jellystat
|
||||
url: http://jellystat.host.or.ip
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
days: 30 # optional, defaults to 30
|
||||
```
|
18
package.json
18
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homepage",
|
||||
"version": "1.2.0",
|
||||
"version": "1.3.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
@ -13,19 +13,19 @@
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^1.7.19",
|
||||
"@kubernetes/client-node": "^1.0.0",
|
||||
"cal-parser": "^1.0.2",
|
||||
"classnames": "^2.5.1",
|
||||
"compare-versions": "^6.1.1",
|
||||
"dockerode": "^4.0.4",
|
||||
"follow-redirects": "^1.15.9",
|
||||
"gamedig": "^5.2.0",
|
||||
"i18next": "^24.2.3",
|
||||
"ical.js": "^2.1.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-rpc-2.0": "^1.7.0",
|
||||
"luxon": "^3.5.0",
|
||||
"memory-cache": "^0.2.0",
|
||||
"minecraftstatuspinger": "^1.2.2",
|
||||
"next": "^15.2.4",
|
||||
"next": "^15.3.1",
|
||||
"next-i18next": "^12.1.0",
|
||||
"ping": "^0.4.4",
|
||||
"pretty-bytes": "^6.1.1",
|
||||
@ -34,8 +34,7 @@
|
||||
"react-dom": "^18.3.1",
|
||||
"react-i18next": "^11.18.6",
|
||||
"react-icons": "^5.4.0",
|
||||
"recharts": "^2.15.1",
|
||||
"rrule": "^2.8.1",
|
||||
"recharts": "^2.15.3",
|
||||
"swr": "^2.3.3",
|
||||
"systeminformation": "^5.25.11",
|
||||
"tough-cookie": "^5.1.2",
|
||||
@ -46,12 +45,12 @@
|
||||
"devDependencies": {
|
||||
"@tailwindcss/forms": "^0.5.10",
|
||||
"@tailwindcss/postcss": "^4.0.9",
|
||||
"eslint": "^9.21.0",
|
||||
"eslint": "^9.25.1",
|
||||
"eslint-config-next": "^15.2.4",
|
||||
"eslint-config-prettier": "^10.1.1",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-prettier": "^5.2.3",
|
||||
"eslint-plugin-prettier": "^5.2.6",
|
||||
"eslint-plugin-react": "^7.37.4",
|
||||
"eslint-plugin-react-hooks": "^5.1.0",
|
||||
"postcss": "^8.5.3",
|
||||
@ -63,5 +62,10 @@
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"osx-temperature-sensor": "^1.0.8"
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"sharp"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
585
pnpm-lock.yaml
generated
585
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Publieke IP",
|
||||
"region": "Streek",
|
||||
"country": "Land"
|
||||
"country": "Land",
|
||||
"port_forwarded": "Poort Aangestuur"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanale",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fisiese Vrylating",
|
||||
"digitalRelease": "Digitale Vrylating",
|
||||
"noEventsToday": "Geen gebeure vir vandag nie!",
|
||||
"noEventsFound": "Geen gebeure gevind nie"
|
||||
"noEventsFound": "Geen gebeure gevind nie",
|
||||
"errorWhenLoadingData": "Fout tydens laai van kalenderdata"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platform",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Aflaaie",
|
||||
"uploads": "Oplaaie",
|
||||
"sharedFiles": "Lêers"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Liedjies",
|
||||
"movies": "Flieks",
|
||||
"episodes": "Episodes",
|
||||
"other": "Ander"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Diensprobleme",
|
||||
"hostErrors": "Gasheerprobleme"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "العام IP",
|
||||
"region": "منطقة",
|
||||
"country": "الدولة"
|
||||
"country": "الدولة",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "القنوات",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "الإصدار المادي",
|
||||
"digitalRelease": "الإصدار الرقمي",
|
||||
"noEventsToday": "لا توجد أحداث اليوم!",
|
||||
"noEventsFound": "لم يتم العثور على أحداث"
|
||||
"noEventsFound": "لم يتم العثور على أحداث",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "المِنصات",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "ملفات"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "أغاني",
|
||||
"movies": "أفلام",
|
||||
"episodes": "حلقات",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Публично IP",
|
||||
"region": "Регион",
|
||||
"country": "Страна"
|
||||
"country": "Страна",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Канали",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Дигитално издания",
|
||||
"noEventsToday": "Няма събития за днес!",
|
||||
"noEventsFound": "Няма намерени събития"
|
||||
"noEventsFound": "Няма намерени събития",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Платформи",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Файлове"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Песни",
|
||||
"movies": "Филми",
|
||||
"episodes": "Епизоди",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP Pública",
|
||||
"region": "Regió",
|
||||
"country": "País"
|
||||
"country": "País",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canals",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Estrena física",
|
||||
"digitalRelease": "Estrena digital",
|
||||
"noEventsToday": "Cap esdeveniment per avui!",
|
||||
"noEventsFound": "No s'han trobat esdeveniments"
|
||||
"noEventsFound": "No s'han trobat esdeveniments",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plataformes",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Fitxers"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Cançons",
|
||||
"movies": "Pel·lícules",
|
||||
"episodes": "Episodis",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Veřejná IP",
|
||||
"region": "Oblast",
|
||||
"country": "Stát"
|
||||
"country": "Stát",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanály",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fyzické vydání",
|
||||
"digitalRelease": "Digitální vydání",
|
||||
"noEventsToday": "Pro dnešek žádné události!",
|
||||
"noEventsFound": "Nemáte žádné události"
|
||||
"noEventsFound": "Nemáte žádné události",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformy",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Stažení",
|
||||
"uploads": "Nahrávání",
|
||||
"sharedFiles": "Soubory"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Skladby",
|
||||
"movies": "Filmy",
|
||||
"episodes": "Epizody",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Offentlig IP",
|
||||
"region": "Område",
|
||||
"country": "Land"
|
||||
"country": "Land",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanaler",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fysisk udgivelse",
|
||||
"digitalRelease": "Digitale udgivelser",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforme",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Filer"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Sange",
|
||||
"movies": "Film",
|
||||
"episodes": "Episoder",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,7 @@
|
||||
"load": "Last",
|
||||
"temp": "TEMP",
|
||||
"max": "Max",
|
||||
"uptime": "UP"
|
||||
"uptime": "BETRIEBSZEIT"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Benutzer",
|
||||
@ -61,7 +61,7 @@
|
||||
"wlan_devices": "WLAN-Geräte",
|
||||
"lan_users": "LAN-Benutzer",
|
||||
"wlan_users": "WLAN-Benutzer",
|
||||
"up": "UP",
|
||||
"up": "BETRIEBSZEIT",
|
||||
"down": "EMPFANGEN",
|
||||
"wait": "Bitte warten",
|
||||
"empty_data": "Subsystem-Status unbekannt"
|
||||
@ -150,7 +150,7 @@
|
||||
"sent": "Gesendet",
|
||||
"externalIPAddress": "Externe IP",
|
||||
"externalIPv6Address": "Externe IPv6",
|
||||
"externalIPv6Prefix": "Externer IPv4-Präfix"
|
||||
"externalIPv6Prefix": "Externes IPv6-Präfix"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
@ -436,7 +436,7 @@
|
||||
"temp": "TEMP",
|
||||
"_temp": "Temperatur",
|
||||
"warn": "Warnung",
|
||||
"uptime": "UP",
|
||||
"uptime": "BETRIEBSZEIT",
|
||||
"total": "Gesamt",
|
||||
"free": "Frei",
|
||||
"used": "In Benutzung",
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Öffentliche IP",
|
||||
"region": "Region",
|
||||
"country": "Land"
|
||||
"country": "Land",
|
||||
"port_forwarded": "Port weitergeleitet"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanäle",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physische Version",
|
||||
"digitalRelease": "Digitale Version",
|
||||
"noEventsToday": "Heute keine Ereignisse!",
|
||||
"noEventsFound": "Keine Termine gefunden"
|
||||
"noEventsFound": "Keine Termine gefunden",
|
||||
"errorWhenLoadingData": "Fehler beim Laden der Kalenderdaten"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plattformen",
|
||||
@ -1025,11 +1027,11 @@
|
||||
"timeleft": "Verbleibende Zeit"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"archived": "Archived",
|
||||
"bookmarks": "Lesezeichen",
|
||||
"favorites": "Favoriten",
|
||||
"archived": "Archiviert",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"lists": "Listen",
|
||||
"tags": "Schlagwörter"
|
||||
},
|
||||
"slskd": {
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Dateien"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Filme",
|
||||
"episodes": "Episoden",
|
||||
"other": "Andere"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Dienstprobleme",
|
||||
"hostErrors": "Hostprobleme"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Δημόσια ΙΡ",
|
||||
"region": "Περιοχή",
|
||||
"country": "Χώρα"
|
||||
"country": "Χώρα",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Κανάλια",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Αρχεία"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Τραγούδια",
|
||||
"movies": "Ταινίες",
|
||||
"episodes": "Επεισόδια",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Regiono",
|
||||
"country": "Lando"
|
||||
"country": "Lando",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanaloj",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Kantoj",
|
||||
"movies": "Filmoj",
|
||||
"episodes": "Epizodoj",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP pública",
|
||||
"region": "Región",
|
||||
"country": "País"
|
||||
"country": "País",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canales",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Lanzamiento en físico",
|
||||
"digitalRelease": "Lanzamiento en digital",
|
||||
"noEventsToday": "¡Sin eventos para hoy!",
|
||||
"noEventsFound": "No se encontraron eventos"
|
||||
"noEventsFound": "No se encontraron eventos",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plataformas",
|
||||
@ -1025,11 +1027,11 @@
|
||||
"timeleft": "Tiempo restante"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"archived": "Archived",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"bookmarks": "Marcadores",
|
||||
"favorites": "Favoritos",
|
||||
"archived": "Archivado",
|
||||
"highlights": "Destacados",
|
||||
"lists": "Listas",
|
||||
"tags": "Etiquetas"
|
||||
},
|
||||
"slskd": {
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Descargas",
|
||||
"uploads": "Subidas",
|
||||
"sharedFiles": "Archivos"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Canciones",
|
||||
"movies": "Películas",
|
||||
"episodes": "Episodios",
|
||||
"other": "Otros"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "Ez da gertaerarik aurkitu."
|
||||
"noEventsFound": "Ez da gertaerarik aurkitu.",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Abestiak",
|
||||
"movies": "Filmak",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -103,7 +103,7 @@
|
||||
"bitrate": "Débit",
|
||||
"no_active": "Aucun flux actif",
|
||||
"movies": "Films",
|
||||
"series": "Séries TV",
|
||||
"series": "Séries",
|
||||
"episodes": "Épisodes",
|
||||
"songs": "Chansons"
|
||||
},
|
||||
@ -241,7 +241,7 @@
|
||||
"sonarr": {
|
||||
"wanted": "Demandé",
|
||||
"queued": "En file d'attente",
|
||||
"series": "Séries TV",
|
||||
"series": "Séries",
|
||||
"queue": "En attente",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
@ -405,7 +405,7 @@
|
||||
"medusa": {
|
||||
"wanted": "Demandé",
|
||||
"queued": "En file d'attente",
|
||||
"series": "Séries TV"
|
||||
"series": "Séries"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Joueurs",
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP publique",
|
||||
"region": "Région",
|
||||
"country": "Pays"
|
||||
"country": "Pays",
|
||||
"port_forwarded": "Port Transféré"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Chaînes",
|
||||
@ -672,14 +673,14 @@
|
||||
"m": "m"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Séries TV",
|
||||
"series": "Séries",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapitres",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Bibliothèques",
|
||||
"series": "Séries TV",
|
||||
"series": "Séries",
|
||||
"books": "Livres"
|
||||
},
|
||||
"diskstation": {
|
||||
@ -688,7 +689,7 @@
|
||||
"volumeAvailable": "Disponible"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Séries TV",
|
||||
"series": "Séries",
|
||||
"issues": "Anomalies",
|
||||
"wanted": "Demandé"
|
||||
},
|
||||
@ -772,7 +773,7 @@
|
||||
"books": "Livres",
|
||||
"authors": "Auteurs",
|
||||
"categories": "Catégories",
|
||||
"series": "Séries TV"
|
||||
"series": "Séries"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "En attente",
|
||||
@ -781,7 +782,7 @@
|
||||
"downloadSpeed": "Débit"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Séries TV",
|
||||
"seriesCount": "Séries",
|
||||
"totalFiles": "Fichiers"
|
||||
},
|
||||
"azuredevops": {
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Sortie physique",
|
||||
"digitalRelease": "Sortie numérique",
|
||||
"noEventsToday": "Rien pour aujourd'hui !",
|
||||
"noEventsFound": "Aucun événement trouvé"
|
||||
"noEventsFound": "Aucun événement trouvé",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plateformes",
|
||||
@ -1028,7 +1030,7 @@
|
||||
"bookmarks": "Marque-pages",
|
||||
"favorites": "Favoris",
|
||||
"archived": "Archivé",
|
||||
"highlights": "Highlights",
|
||||
"highlights": "À la une",
|
||||
"lists": "Listes",
|
||||
"tags": "Étiquettes"
|
||||
},
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Téléchargements",
|
||||
"uploads": "Téléversements",
|
||||
"sharedFiles": "Fichiers"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Chansons",
|
||||
"movies": "Films",
|
||||
"episodes": "Épisodes",
|
||||
"other": "Autres"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Problèmes de service",
|
||||
"hostErrors": "Problèmes d'hôte"
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -149,8 +149,8 @@
|
||||
"received": "Primljeno",
|
||||
"sent": "Poslano",
|
||||
"externalIPAddress": "Eksterna IP adresa",
|
||||
"externalIPv6Address": "Ext. IPv6",
|
||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||
"externalIPv6Address": "Vanjs. IPv6",
|
||||
"externalIPv6Prefix": "Vanjs. IPv6 prefiks"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Glavne grane",
|
||||
@ -178,7 +178,7 @@
|
||||
"connectedAp": "Povezani AP-ovi",
|
||||
"activeUser": "Aktivni uređaji",
|
||||
"alerts": "Upozorenja",
|
||||
"connectedGateways": "Connected gateways",
|
||||
"connectedGateways": "Povezani pristupnici",
|
||||
"connectedSwitches": "Povezani prekidači"
|
||||
},
|
||||
"nzbget": {
|
||||
@ -229,8 +229,8 @@
|
||||
"seed": "Prenošenje preuzetog sadržaja"
|
||||
},
|
||||
"develancacheui": {
|
||||
"cachehitbytes": "Cache Hit Bytes",
|
||||
"cachemissbytes": "Cache Miss Bytes"
|
||||
"cachehitbytes": "Bajtovi pogodaka predmemorije",
|
||||
"cachemissbytes": "Bajtovi promašaja predmemorije"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Preuzimanje",
|
||||
@ -313,13 +313,13 @@
|
||||
},
|
||||
"suwayomi": {
|
||||
"download": "Preuzeto",
|
||||
"nondownload": "Non-Downloaded",
|
||||
"nondownload": "Nepreuzeto",
|
||||
"read": "Pročitano",
|
||||
"unread": "Nepročitano",
|
||||
"downloadedread": "Downloaded & Read",
|
||||
"downloadedunread": "Downloaded & Unread",
|
||||
"nondownloadedread": "Non-Downloaded & Read",
|
||||
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||
"downloadedread": "Preuzeto i pročitano",
|
||||
"downloadedunread": "Preuzeto i nepročitano",
|
||||
"nondownloadedread": "Nepreuzeto i pročitano",
|
||||
"nondownloadedunread": "Nepreuzeto i nepročitano"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Adresa",
|
||||
@ -337,15 +337,15 @@
|
||||
},
|
||||
"technitium": {
|
||||
"totalQueries": "Upiti",
|
||||
"totalNoError": "Success",
|
||||
"totalServerFailure": "Failures",
|
||||
"totalNxDomain": "NX Domains",
|
||||
"totalRefused": "Refused",
|
||||
"totalAuthoritative": "Authoritative",
|
||||
"totalRecursive": "Recursive",
|
||||
"totalCached": "Cached",
|
||||
"totalNoError": "Uspješno",
|
||||
"totalServerFailure": "Neuspješno",
|
||||
"totalNxDomain": "NX domene",
|
||||
"totalRefused": "Odbijeno",
|
||||
"totalAuthoritative": "Autoritativan",
|
||||
"totalRecursive": "Rekurzivno",
|
||||
"totalCached": "Predmemorirano",
|
||||
"totalBlocked": "Blokirano",
|
||||
"totalDropped": "Dropped",
|
||||
"totalDropped": "Odbačeno",
|
||||
"totalClients": "Klijenti"
|
||||
},
|
||||
"tdarr": {
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Javni IP",
|
||||
"region": "Regija",
|
||||
"country": "Zemlja"
|
||||
"country": "Zemlja",
|
||||
"port_forwarded": "Port proslijeđen"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanali",
|
||||
@ -705,8 +706,8 @@
|
||||
"time": "Vrijeme"
|
||||
},
|
||||
"firefly": {
|
||||
"networth": "Net Worth",
|
||||
"budget": "Budget"
|
||||
"networth": "Neto vrijednost",
|
||||
"budget": "Budžet"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "Pregledne ploče",
|
||||
@ -856,20 +857,21 @@
|
||||
"physicalRelease": "Fizičko izdanje",
|
||||
"digitalRelease": "Digitalno izdanje",
|
||||
"noEventsToday": "Danas nema događaja!",
|
||||
"noEventsFound": "Nema događaja"
|
||||
"noEventsFound": "Nema događaja",
|
||||
"errorWhenLoadingData": "Pogreška prilikom učitavanja podataka kalendara"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforme",
|
||||
"totalRoms": "Igre",
|
||||
"saves": "Saves",
|
||||
"states": "States",
|
||||
"saves": "Spremljeno",
|
||||
"states": "Stanja",
|
||||
"screenshots": "Snimke ekrana",
|
||||
"totalfilesize": "Ukupna veličina"
|
||||
},
|
||||
"mailcow": {
|
||||
"domains": "Domene",
|
||||
"mailboxes": "Mailboxes",
|
||||
"mails": "Mails",
|
||||
"mailboxes": "Poštanski sandučići",
|
||||
"mails": "Pošta",
|
||||
"storage": "Spremište"
|
||||
},
|
||||
"netdata": {
|
||||
@ -886,7 +888,7 @@
|
||||
"notifications": "Obavijesti",
|
||||
"issues": "Problemi",
|
||||
"pulls": "Zahtjevi za povlačenje",
|
||||
"repositories": "Repositories"
|
||||
"repositories": "Repozitoriji"
|
||||
},
|
||||
"stash": {
|
||||
"scenes": "Scene",
|
||||
@ -939,11 +941,11 @@
|
||||
"upload": "Prijenos"
|
||||
},
|
||||
"stocks": {
|
||||
"stocks": "Stocks",
|
||||
"loading": "Loading",
|
||||
"open": "Open - US Market",
|
||||
"closed": "Closed - US Market",
|
||||
"invalidConfiguration": "Invalid Configuration"
|
||||
"stocks": "Dionice",
|
||||
"loading": "Učitavanje",
|
||||
"open": "Otvoreno - američko tržište",
|
||||
"closed": "Zatvoreno - američko tržište",
|
||||
"invalidConfiguration": "Nepravilna konfiguracija"
|
||||
},
|
||||
"frigate": {
|
||||
"cameras": "Kamere",
|
||||
@ -956,26 +958,26 @@
|
||||
"tags": "Oznake"
|
||||
},
|
||||
"zabbix": {
|
||||
"unclassified": "Not classified",
|
||||
"unclassified": "Nije klasificirano",
|
||||
"information": "Informacije",
|
||||
"warning": "Upozorenje",
|
||||
"average": "Average",
|
||||
"high": "High",
|
||||
"disaster": "Disaster"
|
||||
"average": "Prosjek",
|
||||
"high": "Visoko",
|
||||
"disaster": "Katastrofa"
|
||||
},
|
||||
"lubelogger": {
|
||||
"vehicle": "Vehicle",
|
||||
"vehicles": "Vehicles",
|
||||
"serviceRecords": "Service Records",
|
||||
"vehicle": "Vozilo",
|
||||
"vehicles": "Vozila",
|
||||
"serviceRecords": "Servisni zapisi",
|
||||
"reminders": "Podsjetnici",
|
||||
"nextReminder": "Sljedeći podsjetnik",
|
||||
"none": "None"
|
||||
"none": "Ništa"
|
||||
},
|
||||
"vikunja": {
|
||||
"projects": "Active Projects",
|
||||
"tasks7d": "Tasks Due This Week",
|
||||
"tasksOverdue": "Overdue Tasks",
|
||||
"tasksInProgress": "Tasks In Progress"
|
||||
"projects": "Aktivni projekti",
|
||||
"tasks7d": "Zadaci dospijeća ovog tjedna",
|
||||
"tasksOverdue": "Zakašnjeli zadaci",
|
||||
"tasksInProgress": "Zadaci u tijeku"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Ime",
|
||||
@ -987,7 +989,7 @@
|
||||
},
|
||||
"beszel": {
|
||||
"name": "Ime",
|
||||
"systems": "Systems",
|
||||
"systems": "Sustavi",
|
||||
"up": "Dostupno",
|
||||
"down": "Nedostupno",
|
||||
"paused": "Zaustavljeno",
|
||||
@ -997,26 +999,26 @@
|
||||
"cpu": "CPU",
|
||||
"memory": "MEM",
|
||||
"disk": "Disk",
|
||||
"network": "NET"
|
||||
"network": "Mreža"
|
||||
},
|
||||
"argocd": {
|
||||
"apps": "Apps",
|
||||
"synced": "Synced",
|
||||
"outOfSync": "Out Of Sync",
|
||||
"apps": "Aplikacije",
|
||||
"synced": "Sinkronizirano",
|
||||
"outOfSync": "Izvan sinkronizacije",
|
||||
"healthy": "Funkcionalno",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"degraded": "Degradirano",
|
||||
"progressing": "Napredovanje",
|
||||
"missing": "Nedostaje",
|
||||
"suspended": "Suspended"
|
||||
"suspended": "Suspendiran"
|
||||
},
|
||||
"spoolman": {
|
||||
"loading": "Loading"
|
||||
"loading": "Učitavanje"
|
||||
},
|
||||
"gitlab": {
|
||||
"groups": "Groups",
|
||||
"groups": "Grupe",
|
||||
"issues": "Problemi",
|
||||
"merges": "Merge Requests",
|
||||
"projects": "Projects"
|
||||
"merges": "Zahtjevi za sjedinjenjem",
|
||||
"projects": "Projekti"
|
||||
},
|
||||
"apcups": {
|
||||
"status": "Stanje",
|
||||
@ -1025,22 +1027,32 @@
|
||||
"timeleft": "Preostalo vrijeme"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"archived": "Archived",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"bookmarks": "Oznake",
|
||||
"favorites": "Favoriti",
|
||||
"archived": "Arhivirano",
|
||||
"highlights": "Izdvajamo",
|
||||
"lists": "Liste",
|
||||
"tags": "Oznake"
|
||||
},
|
||||
"slskd": {
|
||||
"slskStatus": "Mreža",
|
||||
"connected": "Povezano",
|
||||
"disconnected": "Odspojeno",
|
||||
"updateStatus": "Update",
|
||||
"updateStatus": "Ažuriraj",
|
||||
"update_yes": "Dostupno",
|
||||
"update_no": "Aktualno",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"downloads": "Preuzimanje",
|
||||
"uploads": "Prijenos",
|
||||
"sharedFiles": "Datoteke"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Pjesme",
|
||||
"movies": "Filmovi",
|
||||
"episodes": "Epizode",
|
||||
"other": "Ostalo"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Nyilvános IP-cím",
|
||||
"region": "Régió",
|
||||
"country": "Ország"
|
||||
"country": "Ország",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Csatornák",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fizikai kiadás",
|
||||
"digitalRelease": "Digitális kiadás",
|
||||
"noEventsToday": "Ezen a napon nincsenek események!",
|
||||
"noEventsFound": "Nem található esemény"
|
||||
"noEventsFound": "Nem található esemény",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Felület",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Fájlok"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Zeneszám",
|
||||
"movies": "Film",
|
||||
"episodes": "Epizód",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP Publik",
|
||||
"region": "Region",
|
||||
"country": "Negara"
|
||||
"country": "Negara",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channel",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Rilis Fisik",
|
||||
"digitalRelease": "Rilis Digital",
|
||||
"noEventsToday": "Tidak ada acara untuk hari ini!",
|
||||
"noEventsFound": "Tidak ada acara yang ditemukan"
|
||||
"noEventsFound": "Tidak ada acara yang ditemukan",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platform",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "File"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Lagu",
|
||||
"movies": "Film",
|
||||
"episodes": "Episode",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
"date": "{{value, date}}",
|
||||
"relativeDate": "{{value, relativeDate}}",
|
||||
"duration": "{{value, duration}}",
|
||||
"months": "mo",
|
||||
"months": "m",
|
||||
"days": "g",
|
||||
"hours": "o",
|
||||
"minutes": "m",
|
||||
@ -313,13 +313,13 @@
|
||||
},
|
||||
"suwayomi": {
|
||||
"download": "Scaricato",
|
||||
"nondownload": "Non-Downloaded",
|
||||
"nondownload": "Non Scaricato",
|
||||
"read": "Letti",
|
||||
"unread": "Non letto",
|
||||
"downloadedread": "Downloaded & Read",
|
||||
"downloadedunread": "Downloaded & Unread",
|
||||
"nondownloadedread": "Non-Downloaded & Read",
|
||||
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||
"downloadedread": "Scaricato E Letto",
|
||||
"downloadedunread": "Scaricato E Non Letto",
|
||||
"nondownloadedread": "Non Scaricato E Letto",
|
||||
"nondownloadedunread": "Non Scaricato E Non Letto"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Indirizzo",
|
||||
@ -339,13 +339,13 @@
|
||||
"totalQueries": "Richieste",
|
||||
"totalNoError": "Successo",
|
||||
"totalServerFailure": "Fallimenti",
|
||||
"totalNxDomain": "NX Domains",
|
||||
"totalRefused": "Refused",
|
||||
"totalAuthoritative": "Authoritative",
|
||||
"totalRecursive": "Recursive",
|
||||
"totalCached": "Cached",
|
||||
"totalNxDomain": "Domini NX",
|
||||
"totalRefused": "Rifiutato",
|
||||
"totalAuthoritative": "Autoritario",
|
||||
"totalRecursive": "Ricorsivo",
|
||||
"totalCached": "In cache",
|
||||
"totalBlocked": "Bloccati",
|
||||
"totalDropped": "Dropped",
|
||||
"totalDropped": "Saltati",
|
||||
"totalClients": "Client"
|
||||
},
|
||||
"tdarr": {
|
||||
@ -568,12 +568,13 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP pubblico",
|
||||
"region": "Località",
|
||||
"country": "Paese"
|
||||
"country": "Paese",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canali",
|
||||
"hd": "HD",
|
||||
"tunerCount": "Tuners",
|
||||
"tunerCount": "Regolatori",
|
||||
"channelNumber": "Canale",
|
||||
"channelNetwork": "Rete",
|
||||
"signalStrength": "Intensità",
|
||||
@ -705,7 +706,7 @@
|
||||
"time": "Tempo"
|
||||
},
|
||||
"firefly": {
|
||||
"networth": "Net Worth",
|
||||
"networth": "Valore Netto",
|
||||
"budget": "Budget"
|
||||
},
|
||||
"grafana": {
|
||||
@ -856,29 +857,30 @@
|
||||
"physicalRelease": "Release fisici",
|
||||
"digitalRelease": "Versione digitale",
|
||||
"noEventsToday": "Nessun evento per oggi!",
|
||||
"noEventsFound": "Nessun evento trovato"
|
||||
"noEventsFound": "Nessun evento trovato",
|
||||
"errorWhenLoadingData": "Errore durante il caricamento dei dati del calendario"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Piattaforme",
|
||||
"totalRoms": "Giochi",
|
||||
"saves": "Saves",
|
||||
"states": "States",
|
||||
"screenshots": "Screenshots",
|
||||
"totalfilesize": "Total Size"
|
||||
"saves": "Salvati",
|
||||
"states": "Stati",
|
||||
"screenshots": "Screenshot",
|
||||
"totalfilesize": "Dimensioni totali"
|
||||
},
|
||||
"mailcow": {
|
||||
"domains": "Domini",
|
||||
"mailboxes": "Mailboxes",
|
||||
"mails": "Mails",
|
||||
"mailboxes": "Caselle di posta",
|
||||
"mails": "Mail",
|
||||
"storage": "Archiviazione"
|
||||
},
|
||||
"netdata": {
|
||||
"warnings": "Avvisi",
|
||||
"criticals": "Criticals"
|
||||
"criticals": "Critici"
|
||||
},
|
||||
"plantit": {
|
||||
"events": "Eventi",
|
||||
"plants": "Plants",
|
||||
"plants": "Piante",
|
||||
"photos": "Foto",
|
||||
"species": "Specie"
|
||||
},
|
||||
@ -886,7 +888,7 @@
|
||||
"notifications": "Notifiche",
|
||||
"issues": "Problemi",
|
||||
"pulls": "Richieste di Pull",
|
||||
"repositories": "Repositories"
|
||||
"repositories": "Repository"
|
||||
},
|
||||
"stash": {
|
||||
"scenes": "Scene",
|
||||
@ -928,8 +930,8 @@
|
||||
"total": "Totale"
|
||||
},
|
||||
"swagdashboard": {
|
||||
"proxied": "Proxied",
|
||||
"auth": "With Auth",
|
||||
"proxied": "Proxato",
|
||||
"auth": "Con Autenticazione",
|
||||
"outdated": "Obsoleto",
|
||||
"banned": "Bannato"
|
||||
},
|
||||
@ -939,14 +941,14 @@
|
||||
"upload": "Upload"
|
||||
},
|
||||
"stocks": {
|
||||
"stocks": "Stocks",
|
||||
"stocks": "Azioni",
|
||||
"loading": "Caricamento",
|
||||
"open": "Open - US Market",
|
||||
"closed": "Closed - US Market",
|
||||
"open": "Aperto - Mercato USA",
|
||||
"closed": "Chiuso - Mercato USA",
|
||||
"invalidConfiguration": "Configurazione non valida"
|
||||
},
|
||||
"frigate": {
|
||||
"cameras": "Cameras",
|
||||
"cameras": "Telecamere",
|
||||
"uptime": "Tempo di attività",
|
||||
"version": "Versione"
|
||||
},
|
||||
@ -956,26 +958,26 @@
|
||||
"tags": "Tag"
|
||||
},
|
||||
"zabbix": {
|
||||
"unclassified": "Not classified",
|
||||
"unclassified": "Non classificato",
|
||||
"information": "Informazioni",
|
||||
"warning": "Warning",
|
||||
"warning": "Avviso",
|
||||
"average": "Media",
|
||||
"high": "High",
|
||||
"disaster": "Disaster"
|
||||
"high": "Alto",
|
||||
"disaster": "Disastri"
|
||||
},
|
||||
"lubelogger": {
|
||||
"vehicle": "Veicolo",
|
||||
"vehicles": "Veicoli",
|
||||
"serviceRecords": "Service Records",
|
||||
"serviceRecords": "Record Di Servizio",
|
||||
"reminders": "Promemoria",
|
||||
"nextReminder": "Promemoria Seguente",
|
||||
"none": "Nessuno"
|
||||
},
|
||||
"vikunja": {
|
||||
"projects": "Active Projects",
|
||||
"tasks7d": "Tasks Due This Week",
|
||||
"tasksOverdue": "Overdue Tasks",
|
||||
"tasksInProgress": "Tasks In Progress"
|
||||
"projects": "Progetti attivi",
|
||||
"tasks7d": "Attività Settimanali",
|
||||
"tasksOverdue": "Task scaduti",
|
||||
"tasksInProgress": "Task In Corso"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Nome",
|
||||
@ -1005,9 +1007,9 @@
|
||||
"outOfSync": "Non Sincronizzato",
|
||||
"healthy": "Sano",
|
||||
"degraded": "Degradato",
|
||||
"progressing": "Progressing",
|
||||
"progressing": "Progressione",
|
||||
"missing": "Mancanti",
|
||||
"suspended": "Suspended"
|
||||
"suspended": "Sospeso"
|
||||
},
|
||||
"spoolman": {
|
||||
"loading": "Caricamento"
|
||||
@ -1027,7 +1029,7 @@
|
||||
"karakeep": {
|
||||
"bookmarks": "Segnalibri",
|
||||
"favorites": "Preferiti",
|
||||
"archived": "Archived",
|
||||
"archived": "Archiviato",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Liste",
|
||||
"tags": "Tag"
|
||||
@ -1036,11 +1038,21 @@
|
||||
"slskStatus": "Rete",
|
||||
"connected": "Connesso",
|
||||
"disconnected": "Disconnesso",
|
||||
"updateStatus": "Update",
|
||||
"updateStatus": "Aggiornamento",
|
||||
"update_yes": "Disponibili",
|
||||
"update_no": "Aggiornato",
|
||||
"downloads": "Download",
|
||||
"uploads": "Uploads",
|
||||
"uploads": "Caricamenti",
|
||||
"sharedFiles": "File"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Canzoni",
|
||||
"movies": "Film",
|
||||
"episodes": "Episodi",
|
||||
"other": "Altro"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Problemi di servizio",
|
||||
"hostErrors": "Problemi di host"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "パブリックIP",
|
||||
"region": "地域",
|
||||
"country": "国"
|
||||
"country": "国",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "チャンネル",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "物理的なリリース",
|
||||
"digitalRelease": "デジタル・リリース",
|
||||
"noEventsToday": "本日の予定なし",
|
||||
"noEventsFound": "予定が見つかりません"
|
||||
"noEventsFound": "予定が見つかりません",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "プラットフォーム",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "ファイル"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "曲",
|
||||
"movies": "映画",
|
||||
"episodes": "エピソード",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "채널",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "기종",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "파일"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "음악",
|
||||
"movies": "영화",
|
||||
"episodes": "에피소드",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP Awam",
|
||||
"region": "Rantau",
|
||||
"country": "Negara"
|
||||
"country": "Negara",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Saluran",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Edaran fizikal",
|
||||
"digitalRelease": "Edaran digital",
|
||||
"noEventsToday": "Tiada agenda untuk hari ini!",
|
||||
"noEventsFound": "Tiada agenda dijumpai"
|
||||
"noEventsFound": "Tiada agenda dijumpai",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platform",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Lagu",
|
||||
"movies": "Filem",
|
||||
"episodes": "Episod",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Publiek IP",
|
||||
"region": "Regio",
|
||||
"country": "Land"
|
||||
"country": "Land",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanalen",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fysieke versie",
|
||||
"digitalRelease": "Digitale versie",
|
||||
"noEventsToday": "Geen gebeurtenissen voor vandaag!",
|
||||
"noEventsFound": "Geen gebeurtenissen gevonden"
|
||||
"noEventsFound": "Geen gebeurtenissen gevonden",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformen",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Bestanden"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Nummers",
|
||||
"movies": "Films",
|
||||
"episodes": "Afleveringen",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Offentlig IP",
|
||||
"region": "Region",
|
||||
"country": "Land"
|
||||
"country": "Land",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanal",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fysisk utslipp",
|
||||
"digitalRelease": "Digital utgivelse",
|
||||
"noEventsToday": "Ingen hendelser for i dag!",
|
||||
"noEventsFound": "Ingen hendelser funnet"
|
||||
"noEventsFound": "Ingen hendelser funnet",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plattformer",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Sanger",
|
||||
"movies": "Film",
|
||||
"episodes": "Episoder",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -178,7 +178,7 @@
|
||||
"connectedAp": "Połączone punkty dostępowe",
|
||||
"activeUser": "Aktywne urządzenia",
|
||||
"alerts": "Alarmy",
|
||||
"connectedGateways": "Connected gateways",
|
||||
"connectedGateways": "Połączone bramy",
|
||||
"connectedSwitches": "Połączone przełączniki"
|
||||
},
|
||||
"nzbget": {
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Adres publiczny",
|
||||
"region": "Region",
|
||||
"country": "Państwo"
|
||||
"country": "Państwo",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanały",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Wydanie fizyczne",
|
||||
"digitalRelease": "Wydanie cyfrowe",
|
||||
"noEventsToday": "Brak wydarzeń na dziś!",
|
||||
"noEventsFound": "Nie znaleziono wydarzeń"
|
||||
"noEventsFound": "Nie znaleziono wydarzeń",
|
||||
"errorWhenLoadingData": "Wystąpił błąd podczas ładowania danych kalendarza"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformy",
|
||||
@ -1036,11 +1038,21 @@
|
||||
"slskStatus": "Sieć",
|
||||
"connected": "Połączono",
|
||||
"disconnected": "Rozłączono",
|
||||
"updateStatus": "Update",
|
||||
"updateStatus": "Aktualizacja",
|
||||
"update_yes": "Dostępne",
|
||||
"update_no": "Aktualny",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"downloads": "Pobieranie",
|
||||
"uploads": "Przesyłanie",
|
||||
"sharedFiles": "Pliki"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Piosenki",
|
||||
"movies": "Filmy",
|
||||
"episodes": "Odcinki",
|
||||
"other": "Inne"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP público",
|
||||
"region": "Região",
|
||||
"country": "País"
|
||||
"country": "País",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canais",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Lançamento físico",
|
||||
"digitalRelease": "Lançamento digital",
|
||||
"noEventsToday": "Não existem eventos hoje!",
|
||||
"noEventsFound": "Nenhum evento encontrado"
|
||||
"noEventsFound": "Nenhum evento encontrado",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plataformas",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Ficheiros"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Canções",
|
||||
"movies": "Filmes",
|
||||
"episodes": "Episódios",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "IP público",
|
||||
"region": "Região",
|
||||
"country": "País"
|
||||
"country": "País",
|
||||
"port_forwarded": "Porta Encaminhada"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canais",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Versão física",
|
||||
"digitalRelease": "Versão digital",
|
||||
"noEventsToday": "Nenhum evento para hoje!",
|
||||
"noEventsFound": "Nenhum evento encontrado"
|
||||
"noEventsFound": "Nenhum evento encontrado",
|
||||
"errorWhenLoadingData": "Erro ao carregar dados do calendário"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Plataformas",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Transferências",
|
||||
"uploads": "Envios",
|
||||
"sharedFiles": "Arquivos"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Canções",
|
||||
"movies": "Filmes",
|
||||
"episodes": "Episódios",
|
||||
"other": "Outro"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -134,20 +134,20 @@
|
||||
},
|
||||
"fritzbox": {
|
||||
"connectionStatus": "Stare",
|
||||
"connectionStatusUnconfigured": "Unconfigured",
|
||||
"connectionStatusUnconfigured": "Neconfigurat",
|
||||
"connectionStatusConnecting": "Connecting",
|
||||
"connectionStatusAuthenticating": "Authenticating",
|
||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
||||
"connectionStatusDisconnecting": "Disconnecting",
|
||||
"connectionStatusDisconnected": "Disconnected",
|
||||
"connectionStatusConnected": "Connected",
|
||||
"connectionStatusDisconnected": "Deconectat",
|
||||
"connectionStatusConnected": "Conectat",
|
||||
"uptime": "Uptime",
|
||||
"maxDown": "Max. Down",
|
||||
"maxUp": "Max. Up",
|
||||
"down": "Jos",
|
||||
"up": "Sus",
|
||||
"received": "Received",
|
||||
"sent": "Sent",
|
||||
"received": "Primit",
|
||||
"sent": "Trimis",
|
||||
"externalIPAddress": "Ext. IP",
|
||||
"externalIPv6Address": "Ext. IPv6",
|
||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||
@ -163,8 +163,8 @@
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Shows",
|
||||
"recordings": "Recordings",
|
||||
"scheduled": "Scheduled",
|
||||
"recordings": "Înregistrări",
|
||||
"scheduled": "Programate",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"tautulli": {
|
||||
@ -176,8 +176,8 @@
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"activeUser": "Dispozitive active",
|
||||
"alerts": "Alerte",
|
||||
"connectedGateways": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
@ -188,7 +188,7 @@
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Fluxuri active",
|
||||
"albums": "Albums",
|
||||
"albums": "Albume",
|
||||
"movies": "Filme",
|
||||
"tv": "Seriale"
|
||||
},
|
||||
@ -217,7 +217,7 @@
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memUsage": "MEM Usage",
|
||||
"systemTempC": "System Temp",
|
||||
"systemTempC": "Temperatură Sistem",
|
||||
"poolUsage": "Pool Usage",
|
||||
"volumeUsage": "Volume Usage",
|
||||
"invalid": "Invalid"
|
||||
@ -247,7 +247,7 @@
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Dorite",
|
||||
"missing": "Missing",
|
||||
"missing": "Lipsește",
|
||||
"queued": "În coadă",
|
||||
"movies": "Filme",
|
||||
"queue": "Coadă",
|
||||
@ -256,7 +256,7 @@
|
||||
"lidarr": {
|
||||
"wanted": "Dorite",
|
||||
"queued": "În coadă",
|
||||
"artists": "Artists"
|
||||
"artists": "Artiști"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Dorite",
|
||||
@ -279,21 +279,21 @@
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "În așteptare",
|
||||
"processing": "Processing",
|
||||
"processing": "Procesare",
|
||||
"approved": "Aprobate",
|
||||
"available": "Disponibile"
|
||||
},
|
||||
"netalertx": {
|
||||
"total": "Total",
|
||||
"connected": "Connected",
|
||||
"new_devices": "New Devices",
|
||||
"connected": "Conectat",
|
||||
"new_devices": "Dispozitive Noi",
|
||||
"down_alerts": "Down Alerts"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "Cereri",
|
||||
"blocked": "Blocate",
|
||||
"blocked_percent": "Blocked %",
|
||||
"gravity": "Gravity"
|
||||
"gravity": "Gravitație"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Cereri",
|
||||
@ -322,11 +322,11 @@
|
||||
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Address",
|
||||
"expires": "Expires",
|
||||
"never": "Never",
|
||||
"address": "Adresă",
|
||||
"expires": "Expiră",
|
||||
"never": "Niciodată",
|
||||
"last_seen": "Last Seen",
|
||||
"now": "Now",
|
||||
"now": "Acum",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
@ -340,9 +340,9 @@
|
||||
"totalNoError": "Success",
|
||||
"totalServerFailure": "Failures",
|
||||
"totalNxDomain": "NX Domains",
|
||||
"totalRefused": "Refused",
|
||||
"totalRefused": "Refuzat",
|
||||
"totalAuthoritative": "Authoritative",
|
||||
"totalRecursive": "Recursive",
|
||||
"totalRecursive": "Recursiv",
|
||||
"totalCached": "Cached",
|
||||
"totalBlocked": "Blocate",
|
||||
"totalDropped": "Dropped",
|
||||
@ -352,7 +352,7 @@
|
||||
"queue": "Coadă",
|
||||
"processed": "Processed",
|
||||
"errored": "Errored",
|
||||
"saved": "Saved"
|
||||
"saved": "Salvat"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Routere",
|
||||
@ -408,8 +408,8 @@
|
||||
"series": "Serie"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Players",
|
||||
"version": "Version",
|
||||
"players": "Jucători",
|
||||
"version": "Versiune",
|
||||
"status": "Stare",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
@ -434,7 +434,7 @@
|
||||
"load": "Sarcină",
|
||||
"wait": "Va rugăm așteptați",
|
||||
"temp": "TEMP",
|
||||
"_temp": "Temp",
|
||||
"_temp": "Temperatură",
|
||||
"warn": "Warn",
|
||||
"uptime": "UP",
|
||||
"total": "Total",
|
||||
@ -456,7 +456,7 @@
|
||||
"custom": "Personalizat",
|
||||
"visit": "Vizită",
|
||||
"url": "URL",
|
||||
"searchsuggestion": "Suggestion"
|
||||
"searchsuggestion": "Sugestie"
|
||||
},
|
||||
"wmo": {
|
||||
"0-day": "Însorit",
|
||||
@ -481,10 +481,10 @@
|
||||
"56-night": "Light Freezing Drizzle",
|
||||
"57-day": "Freezing Drizzle",
|
||||
"57-night": "Freezing Drizzle",
|
||||
"61-day": "Light Rain",
|
||||
"61-night": "Light Rain",
|
||||
"63-day": "Rain",
|
||||
"63-night": "Rain",
|
||||
"61-day": "Ploaie Ușoară",
|
||||
"61-night": "Ploaie Ușoară",
|
||||
"63-day": "Ploaie",
|
||||
"63-night": "Ploaie",
|
||||
"65-day": "Heavy Rain",
|
||||
"65-night": "Heavy Rain",
|
||||
"66-day": "Freezing Rain",
|
||||
@ -517,10 +517,10 @@
|
||||
"99-night": "Thunderstorm With Hail"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "System",
|
||||
"updates": "Updates",
|
||||
"update_available": "Update Available",
|
||||
"up_to_date": "Up to Date",
|
||||
"available_update": "Sistem",
|
||||
"updates": "Actualizări",
|
||||
"update_available": "Actualizare Disponibilă",
|
||||
"up_to_date": "Actualizat",
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Sus",
|
||||
@ -528,63 +528,64 @@
|
||||
"down": "Jos"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "New",
|
||||
"new": "Nou",
|
||||
"up": "Sus",
|
||||
"grace": "In Grace Period",
|
||||
"down": "Jos",
|
||||
"paused": "Paused",
|
||||
"paused": "Pauză",
|
||||
"status": "Stare",
|
||||
"last_ping": "Last Ping",
|
||||
"last_ping": "Ultimul Ping",
|
||||
"never": "No pings yet"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Scanned",
|
||||
"containers_updated": "Updated",
|
||||
"containers_failed": "Failed"
|
||||
"containers_updated": "Actualizat",
|
||||
"containers_failed": "Eșuat"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Aprobate",
|
||||
"rejectedPushes": "Rejected",
|
||||
"filters": "Filters",
|
||||
"rejectedPushes": "Respinse",
|
||||
"filters": "Filtre",
|
||||
"indexers": "Indexatori"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Coadă",
|
||||
"videos": "Videos",
|
||||
"channels": "Channels",
|
||||
"channels": "Canale",
|
||||
"playlists": "Playlists"
|
||||
},
|
||||
"truenas": {
|
||||
"load": "System Load",
|
||||
"uptime": "Uptime",
|
||||
"alerts": "Alerts"
|
||||
"alerts": "Alerte"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Speed",
|
||||
"speed": "Viteză",
|
||||
"active": "Activ",
|
||||
"queue": "Coadă",
|
||||
"total": "Total"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"region": "Regiune",
|
||||
"country": "Țară",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
"channels": "Canale",
|
||||
"hd": "HD",
|
||||
"tunerCount": "Tuners",
|
||||
"channelNumber": "Channel",
|
||||
"channelNetwork": "Network",
|
||||
"signalStrength": "Strength",
|
||||
"signalQuality": "Quality",
|
||||
"symbolQuality": "Quality",
|
||||
"tunerCount": "Tunere",
|
||||
"channelNumber": "Canal",
|
||||
"channelNetwork": "Rețea",
|
||||
"signalStrength": "Putere",
|
||||
"signalQuality": "Calitate",
|
||||
"symbolQuality": "Calitate",
|
||||
"networkRate": "Rata de biți",
|
||||
"clientIP": "Client"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"failed": "Eșuat",
|
||||
"unknown": "Necunoscut"
|
||||
},
|
||||
"paperlessngx": {
|
||||
@ -592,12 +593,12 @@
|
||||
"total": "Total"
|
||||
},
|
||||
"peanut": {
|
||||
"battery_charge": "Battery Charge",
|
||||
"battery_charge": "Încărcare Baterie",
|
||||
"ups_load": "UPS Load",
|
||||
"ups_status": "UPS Status",
|
||||
"online": "Online",
|
||||
"on_battery": "On Battery",
|
||||
"low_battery": "Low Battery"
|
||||
"low_battery": "Baterie descărcată"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
@ -605,7 +606,7 @@
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryUsed": "Memorie Utilizată",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
@ -615,22 +616,22 @@
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "Today",
|
||||
"absolutePower": "Power",
|
||||
"relativePower": "Power %",
|
||||
"limit": "Limit"
|
||||
"yieldDay": "Astăzi",
|
||||
"absolutePower": "Putere",
|
||||
"relativePower": "Putere %",
|
||||
"limit": "Limită"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"memory": "Memorie Activă",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
},
|
||||
"moonraker": {
|
||||
"printer_state": "Printer State",
|
||||
"printer_state": "Starea Imprimantei",
|
||||
"print_status": "Print Status",
|
||||
"print_progress": "Progress",
|
||||
"layers": "Layers"
|
||||
"print_progress": "Progres",
|
||||
"layers": "Straturi"
|
||||
},
|
||||
"octoprint": {
|
||||
"printer_state": "Stare",
|
||||
@ -648,19 +649,19 @@
|
||||
"wanStatus": "WAN Status",
|
||||
"up": "Sus",
|
||||
"down": "Jos",
|
||||
"temp": "Temp",
|
||||
"disk": "Disk Usage",
|
||||
"temp": "Temperatură",
|
||||
"disk": "Utilizare Disc",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"failed_tasks_24h": "Failed Tasks 24h",
|
||||
"cpu_usage": "Procesor",
|
||||
"memory_usage": "Memory"
|
||||
"memory_usage": "Memorie"
|
||||
},
|
||||
"immich": {
|
||||
"users": "Utilizatori",
|
||||
"photos": "Photos",
|
||||
"photos": "Fotografii",
|
||||
"videos": "Videos",
|
||||
"storage": "Storage"
|
||||
},
|
||||
@ -673,12 +674,12 @@
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Serie",
|
||||
"archives": "Archives",
|
||||
"archives": "Arhive",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
"categories": "Categorii"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Libraries",
|
||||
"libraries": "Biblioteci",
|
||||
"series": "Serie",
|
||||
"books": "Cărți"
|
||||
},
|
||||
@ -693,20 +694,20 @@
|
||||
"wanted": "Dorite"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "Albums",
|
||||
"photos": "Photos",
|
||||
"albums": "Albume",
|
||||
"photos": "Fotografii",
|
||||
"videos": "Videos",
|
||||
"people": "People"
|
||||
"people": "Oameni"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "Coadă",
|
||||
"processing": "Processing",
|
||||
"processing": "Procesare",
|
||||
"processed": "Processed",
|
||||
"time": "Time"
|
||||
"time": "Timp"
|
||||
},
|
||||
"firefly": {
|
||||
"networth": "Net Worth",
|
||||
"budget": "Budget"
|
||||
"budget": "Buget"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "Dashboards",
|
||||
@ -716,18 +717,18 @@
|
||||
},
|
||||
"nextcloud": {
|
||||
"cpuload": "Cpu Load",
|
||||
"memoryusage": "Memory Usage",
|
||||
"freespace": "Free Space",
|
||||
"activeusers": "Active Users",
|
||||
"numfiles": "Files",
|
||||
"numshares": "Shared Items"
|
||||
"memoryusage": "Memorie Utilizată",
|
||||
"freespace": "Spațiu Liber",
|
||||
"activeusers": "Utilizatori Activi",
|
||||
"numfiles": "Fișiere",
|
||||
"numshares": "Articole Partajate"
|
||||
},
|
||||
"kopia": {
|
||||
"status": "Stare",
|
||||
"size": "Size",
|
||||
"lastrun": "Last Run",
|
||||
"nextrun": "Next Run",
|
||||
"failed": "Failed"
|
||||
"size": "Mărime",
|
||||
"lastrun": "Ultima Rulare",
|
||||
"nextrun": "Următoarea Rulare",
|
||||
"failed": "Eșuat"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "Muncitori activi",
|
||||
@ -749,15 +750,15 @@
|
||||
"uptime": "Uptime"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Today",
|
||||
"gross_percent_1y": "One year",
|
||||
"gross_percent_max": "All time"
|
||||
"gross_percent_today": "Astăzi",
|
||||
"gross_percent_1y": "Un an",
|
||||
"gross_percent_max": "Tot timpul"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"podcasts": "Podcasts",
|
||||
"podcasts": "Podcasturi",
|
||||
"books": "Cărți",
|
||||
"podcastsDuration": "Duration",
|
||||
"booksDuration": "Duration"
|
||||
"podcastsDuration": "Durată",
|
||||
"booksDuration": "Durată"
|
||||
},
|
||||
"homeassistant": {
|
||||
"people_home": "People Home",
|
||||
@ -766,33 +767,33 @@
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Monitoring",
|
||||
"updates": "Updates"
|
||||
"updates": "Actualizări"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Cărți",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"authors": "Autori",
|
||||
"categories": "Categorii",
|
||||
"series": "Serie"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Coadă",
|
||||
"downloadBytesRemaining": "Rămas",
|
||||
"downloadTotalBytes": "Size",
|
||||
"downloadSpeed": "Speed"
|
||||
"downloadTotalBytes": "Mărime",
|
||||
"downloadSpeed": "Viteză"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Serie",
|
||||
"totalFiles": "Files"
|
||||
"totalFiles": "Fișiere"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Result",
|
||||
"result": "Rezultat",
|
||||
"status": "Stare",
|
||||
"buildId": "Build ID",
|
||||
"succeeded": "Succeeded",
|
||||
"notStarted": "Not Started",
|
||||
"failed": "Failed",
|
||||
"canceled": "Canceled",
|
||||
"inProgress": "In Progress",
|
||||
"failed": "Eșuat",
|
||||
"canceled": "Anulat",
|
||||
"inProgress": "În Progres",
|
||||
"totalPrs": "Total PRs",
|
||||
"myPrs": "My PRs",
|
||||
"approved": "Aprobate"
|
||||
@ -801,25 +802,25 @@
|
||||
"status": "Stare",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"name": "Nume",
|
||||
"map": "Hartă",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"players": "Jucători",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Bots",
|
||||
"bots": "Boți",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "Errors",
|
||||
"errored": "Erori",
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Utilizatori",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
"categories": "Categorii",
|
||||
"tags": "Etichete"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
@ -827,15 +828,15 @@
|
||||
"running": "Rulează",
|
||||
"stopped": "Oprit",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"failed": "Eșuat"
|
||||
},
|
||||
"openwrt": {
|
||||
"uptime": "Uptime",
|
||||
"cpuLoad": "CPU Load Avg (5m)",
|
||||
"up": "Sus",
|
||||
"down": "Jos",
|
||||
"bytesTx": "Transmitted",
|
||||
"bytesRx": "Received"
|
||||
"bytesTx": "Transmis",
|
||||
"bytesRx": "Primit"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Stare",
|
||||
@ -844,7 +845,7 @@
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"paused": "Pauză",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Sus",
|
||||
"seemsdown": "Seems Down",
|
||||
@ -852,77 +853,78 @@
|
||||
"unknown": "Necunoscut"
|
||||
},
|
||||
"calendar": {
|
||||
"inCinemas": "In cinemas",
|
||||
"inCinemas": "În cinematografe",
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
"totalRoms": "Games",
|
||||
"saves": "Saves",
|
||||
"platforms": "Platforme",
|
||||
"totalRoms": "Jocuri",
|
||||
"saves": "Salvări",
|
||||
"states": "States",
|
||||
"screenshots": "Screenshots",
|
||||
"totalfilesize": "Total Size"
|
||||
"totalfilesize": "Mărime Totală"
|
||||
},
|
||||
"mailcow": {
|
||||
"domains": "Domenii",
|
||||
"mailboxes": "Mailboxes",
|
||||
"mailboxes": "Cutii poştale",
|
||||
"mails": "Mails",
|
||||
"storage": "Storage"
|
||||
},
|
||||
"netdata": {
|
||||
"warnings": "Warnings",
|
||||
"criticals": "Criticals"
|
||||
"criticals": "Critice"
|
||||
},
|
||||
"plantit": {
|
||||
"events": "Events",
|
||||
"plants": "Plants",
|
||||
"photos": "Photos",
|
||||
"species": "Species"
|
||||
"events": "Evenimente",
|
||||
"plants": "Plante",
|
||||
"photos": "Fotografii",
|
||||
"species": "Specii"
|
||||
},
|
||||
"gitea": {
|
||||
"notifications": "Notifications",
|
||||
"notifications": "Notificări",
|
||||
"issues": "Issues",
|
||||
"pulls": "Pull Requests",
|
||||
"repositories": "Repositories"
|
||||
"repositories": "Repozitorii"
|
||||
},
|
||||
"stash": {
|
||||
"scenes": "Scenes",
|
||||
"scenes": "Scene",
|
||||
"scenesPlayed": "Scenes Played",
|
||||
"playCount": "Total Plays",
|
||||
"playDuration": "Time Watched",
|
||||
"sceneSize": "Scenes Size",
|
||||
"sceneDuration": "Scenes Duration",
|
||||
"images": "Images",
|
||||
"images": "Imagini",
|
||||
"imageSize": "Images Size",
|
||||
"galleries": "Galleries",
|
||||
"galleries": "Galerii",
|
||||
"performers": "Performers",
|
||||
"studios": "Studios",
|
||||
"movies": "Filme",
|
||||
"tags": "Tags",
|
||||
"tags": "Etichete",
|
||||
"oCount": "O Count"
|
||||
},
|
||||
"tandoor": {
|
||||
"users": "Utilizatori",
|
||||
"recipes": "Recipes",
|
||||
"keywords": "Keywords"
|
||||
"keywords": "Cuvinte cheie"
|
||||
},
|
||||
"homebox": {
|
||||
"items": "Items",
|
||||
"totalWithWarranty": "With Warranty",
|
||||
"locations": "Locations",
|
||||
"labels": "Labels",
|
||||
"totalWithWarranty": "Cu Garanție",
|
||||
"locations": "Locaţii",
|
||||
"labels": "Etichete",
|
||||
"users": "Utilizatori",
|
||||
"totalValue": "Total Value"
|
||||
},
|
||||
"crowdsec": {
|
||||
"alerts": "Alerts",
|
||||
"alerts": "Alerte",
|
||||
"bans": "Bans"
|
||||
},
|
||||
"wgeasy": {
|
||||
"connected": "Connected",
|
||||
"connected": "Conectat",
|
||||
"enabled": "Activat",
|
||||
"disabled": "Dezactivat",
|
||||
"total": "Total"
|
||||
@ -930,7 +932,7 @@
|
||||
"swagdashboard": {
|
||||
"proxied": "Proxied",
|
||||
"auth": "With Auth",
|
||||
"outdated": "Outdated",
|
||||
"outdated": "Învechit",
|
||||
"banned": "Banned"
|
||||
},
|
||||
"myspeed": {
|
||||
@ -939,37 +941,37 @@
|
||||
"upload": "Încarcă"
|
||||
},
|
||||
"stocks": {
|
||||
"stocks": "Stocks",
|
||||
"stocks": "Acțiuni",
|
||||
"loading": "Loading",
|
||||
"open": "Open - US Market",
|
||||
"closed": "Closed - US Market",
|
||||
"invalidConfiguration": "Invalid Configuration"
|
||||
},
|
||||
"frigate": {
|
||||
"cameras": "Cameras",
|
||||
"cameras": "Camere",
|
||||
"uptime": "Uptime",
|
||||
"version": "Version"
|
||||
"version": "Versiune"
|
||||
},
|
||||
"linkwarden": {
|
||||
"links": "Links",
|
||||
"collections": "Collections",
|
||||
"tags": "Tags"
|
||||
"collections": "Colecții",
|
||||
"tags": "Etichete"
|
||||
},
|
||||
"zabbix": {
|
||||
"unclassified": "Not classified",
|
||||
"information": "Informație",
|
||||
"warning": "Warning",
|
||||
"average": "Average",
|
||||
"high": "High",
|
||||
"disaster": "Disaster"
|
||||
"warning": "Atenție",
|
||||
"average": "Medie",
|
||||
"high": "Înalt",
|
||||
"disaster": "Dezastru"
|
||||
},
|
||||
"lubelogger": {
|
||||
"vehicle": "Vehicle",
|
||||
"vehicles": "Vehicles",
|
||||
"vehicle": "Vehicul",
|
||||
"vehicles": "Vehicule",
|
||||
"serviceRecords": "Service Records",
|
||||
"reminders": "Reminders",
|
||||
"nextReminder": "Next Reminder",
|
||||
"none": "None"
|
||||
"none": "Niciunul"
|
||||
},
|
||||
"vikunja": {
|
||||
"projects": "Active Projects",
|
||||
@ -978,69 +980,79 @@
|
||||
"tasksInProgress": "Tasks In Progress"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Name",
|
||||
"address": "Address",
|
||||
"name": "Nume",
|
||||
"address": "Adresă",
|
||||
"last_seen": "Last Seen",
|
||||
"status": "Stare",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
},
|
||||
"beszel": {
|
||||
"name": "Name",
|
||||
"systems": "Systems",
|
||||
"name": "Nume",
|
||||
"systems": "Sistem",
|
||||
"up": "Sus",
|
||||
"down": "Jos",
|
||||
"paused": "Paused",
|
||||
"paused": "Pauză",
|
||||
"pending": "În așteptare",
|
||||
"status": "Stare",
|
||||
"updated": "Updated",
|
||||
"updated": "Actualizat",
|
||||
"cpu": "Procesor",
|
||||
"memory": "MEM",
|
||||
"disk": "Disk",
|
||||
"network": "NET"
|
||||
},
|
||||
"argocd": {
|
||||
"apps": "Apps",
|
||||
"apps": "Aplicaţii",
|
||||
"synced": "Synced",
|
||||
"outOfSync": "Out Of Sync",
|
||||
"healthy": "Sănătos",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"missing": "Missing",
|
||||
"suspended": "Suspended"
|
||||
"missing": "Lipsește",
|
||||
"suspended": "Suspendat"
|
||||
},
|
||||
"spoolman": {
|
||||
"loading": "Loading"
|
||||
},
|
||||
"gitlab": {
|
||||
"groups": "Groups",
|
||||
"groups": "Grupuri",
|
||||
"issues": "Issues",
|
||||
"merges": "Merge Requests",
|
||||
"projects": "Projects"
|
||||
"projects": "Proiecte"
|
||||
},
|
||||
"apcups": {
|
||||
"status": "Stare",
|
||||
"load": "Sarcină",
|
||||
"bcharge": "Battery Charge",
|
||||
"bcharge": "Încărcare Baterie",
|
||||
"timeleft": "Timp rămas"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"archived": "Archived",
|
||||
"bookmarks": "Marcaje",
|
||||
"favorites": "Favorite",
|
||||
"archived": "Arhivat",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"tags": "Tags"
|
||||
"lists": "Liste",
|
||||
"tags": "Etichete"
|
||||
},
|
||||
"slskd": {
|
||||
"slskStatus": "Network",
|
||||
"connected": "Connected",
|
||||
"disconnected": "Disconnected",
|
||||
"slskStatus": "Rețea",
|
||||
"connected": "Conectat",
|
||||
"disconnected": "Deconectat",
|
||||
"updateStatus": "Update",
|
||||
"update_yes": "Disponibile",
|
||||
"update_no": "Up to Date",
|
||||
"update_no": "Actualizat",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
"sharedFiles": "Fișiere"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Melodii",
|
||||
"movies": "Filme",
|
||||
"episodes": "Episoade",
|
||||
"other": "Altele"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Публичный IP-адрес",
|
||||
"region": "Регион",
|
||||
"country": "Страна"
|
||||
"country": "Страна",
|
||||
"port_forwarded": "Порт переадресован"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Каналы",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Физический релиз",
|
||||
"digitalRelease": "Цифровой релиз",
|
||||
"noEventsToday": "Нет событий на сегодня!",
|
||||
"noEventsFound": "Событий не найдено"
|
||||
"noEventsFound": "Событий не найдено",
|
||||
"errorWhenLoadingData": "Ошибка при загрузке данных календаря"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Платформы",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Скачивания",
|
||||
"uploads": "Загрузки",
|
||||
"sharedFiles": "Файлов"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Песни",
|
||||
"movies": "Фильмы",
|
||||
"episodes": "Эпизоды",
|
||||
"other": "Другой"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Verejná IP",
|
||||
"region": "Región",
|
||||
"country": "Krajina"
|
||||
"country": "Krajina",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanály",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fyzické vydanie",
|
||||
"digitalRelease": "Digitálne vydanie",
|
||||
"noEventsToday": "Žiadne udalosti na dnešný deň!",
|
||||
"noEventsFound": "Žiadne udalosti"
|
||||
"noEventsFound": "Žiadne udalosti",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformy",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Súborov"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Skladby",
|
||||
"movies": "Filmy",
|
||||
"episodes": "Epizódy",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Javni IP",
|
||||
"region": "Regija",
|
||||
"country": "Država"
|
||||
"country": "Država",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanali",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fizična izdaja",
|
||||
"digitalRelease": "Digitalna izdaja",
|
||||
"noEventsToday": "Za danes ni dogodkov!",
|
||||
"noEventsFound": "Ni dogodkov"
|
||||
"noEventsFound": "Ni dogodkov",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforme",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Datotek"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Pesmi",
|
||||
"movies": "Filmi",
|
||||
"episodes": "Epizode",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Avsnitt",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
"seconds": "s"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Missing Widget Type: {{type}}",
|
||||
"missing_type": "ประเภทวิดเจ็ตหาย: {{type}}",
|
||||
"api_error": "API มีข้อผิดพลาด",
|
||||
"information": "ข้อมูล",
|
||||
"status": "สถานะ",
|
||||
@ -110,7 +110,7 @@
|
||||
"esphome": {
|
||||
"offline": "ออฟไลน์",
|
||||
"offline_alt": "ออฟไลน์",
|
||||
"online": "Online",
|
||||
"online": "ออนไลน์",
|
||||
"total": "ทั้งหมด",
|
||||
"unknown": "ไม่ทราบ"
|
||||
},
|
||||
@ -130,12 +130,12 @@
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Subscriptions",
|
||||
"unread": "Unread"
|
||||
"unread": "ยังไม่ได้อ่าน"
|
||||
},
|
||||
"fritzbox": {
|
||||
"connectionStatus": "สถานะ",
|
||||
"connectionStatusUnconfigured": "Unconfigured",
|
||||
"connectionStatusConnecting": "Connecting",
|
||||
"connectionStatusUnconfigured": "ยังไม่ได้กำหนดค่า",
|
||||
"connectionStatusConnecting": "กำลังเชื่อมต่อ",
|
||||
"connectionStatusAuthenticating": "Authenticating",
|
||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
||||
"connectionStatusDisconnecting": "Disconnecting",
|
||||
@ -247,7 +247,7 @@
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Wanted",
|
||||
"missing": "Missing",
|
||||
"missing": "หายไป",
|
||||
"queued": "Queued",
|
||||
"movies": "Movies",
|
||||
"queue": "Queue",
|
||||
@ -315,7 +315,7 @@
|
||||
"download": "Downloaded",
|
||||
"nondownload": "Non-Downloaded",
|
||||
"read": "Read",
|
||||
"unread": "Unread",
|
||||
"unread": "ยังไม่ได้อ่าน",
|
||||
"downloadedread": "Downloaded & Read",
|
||||
"downloadedunread": "Downloaded & Unread",
|
||||
"nondownloadedread": "Non-Downloaded & Read",
|
||||
@ -364,8 +364,8 @@
|
||||
"please_wait": "Please Wait"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"enabled": "เปิด",
|
||||
"disabled": "ปิด",
|
||||
"total": "ทั้งหมด"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
@ -409,14 +409,14 @@
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Players",
|
||||
"version": "Version",
|
||||
"version": "เวอร์ชั่น",
|
||||
"status": "สถานะ",
|
||||
"up": "Online",
|
||||
"up": "ออนไลน์",
|
||||
"down": "ออฟไลน์"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"unread": "ยังไม่ได้อ่าน"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "ผู้ใช้",
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -595,7 +596,7 @@
|
||||
"battery_charge": "Battery Charge",
|
||||
"ups_load": "UPS Load",
|
||||
"ups_status": "UPS Status",
|
||||
"online": "Online",
|
||||
"online": "ออนไลน์",
|
||||
"on_battery": "On Battery",
|
||||
"low_battery": "Low Battery"
|
||||
},
|
||||
@ -799,7 +800,7 @@
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "สถานะ",
|
||||
"online": "Online",
|
||||
"online": "ออนไลน์",
|
||||
"offline": "ออฟไลน์",
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -923,8 +925,8 @@
|
||||
},
|
||||
"wgeasy": {
|
||||
"connected": "Connected",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"enabled": "เปิด",
|
||||
"disabled": "ปิด",
|
||||
"total": "ทั้งหมด"
|
||||
},
|
||||
"swagdashboard": {
|
||||
@ -948,7 +950,7 @@
|
||||
"frigate": {
|
||||
"cameras": "Cameras",
|
||||
"uptime": "Uptime",
|
||||
"version": "Version"
|
||||
"version": "เวอร์ชั่น"
|
||||
},
|
||||
"linkwarden": {
|
||||
"links": "Links",
|
||||
@ -982,7 +984,7 @@
|
||||
"address": "Address",
|
||||
"last_seen": "Last Seen",
|
||||
"status": "สถานะ",
|
||||
"online": "Online",
|
||||
"online": "ออนไลน์",
|
||||
"offline": "ออฟไลน์"
|
||||
},
|
||||
"beszel": {
|
||||
@ -1006,7 +1008,7 @@
|
||||
"healthy": "Healthy",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"missing": "Missing",
|
||||
"missing": "หายไป",
|
||||
"suspended": "Suspended"
|
||||
},
|
||||
"spoolman": {
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Açık IP",
|
||||
"region": "Bölge",
|
||||
"country": "Ülke"
|
||||
"country": "Ülke",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Kanallar",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Fiziksel Yayınlanan",
|
||||
"digitalRelease": "Dijitalde Yayınlandı",
|
||||
"noEventsToday": "Bugün için etkinlik yok!",
|
||||
"noEventsFound": "Etkinlik bulunamadı"
|
||||
"noEventsFound": "Etkinlik bulunamadı",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformlar",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Dosyalar"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Şarkılar",
|
||||
"movies": "Filmler",
|
||||
"episodes": "Bölümler",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Публічний IP",
|
||||
"region": "Регіон",
|
||||
"country": "Країна"
|
||||
"country": "Країна",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Канали",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Фізичний реліз",
|
||||
"digitalRelease": "Цифровий реліз",
|
||||
"noEventsToday": "Події на сьогодні відсутні!",
|
||||
"noEventsFound": "Події не знайдено"
|
||||
"noEventsFound": "Події не знайдено",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Платформи",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Завантаження",
|
||||
"uploads": "Вивантаження",
|
||||
"sharedFiles": "Файли"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Пісні",
|
||||
"movies": "Фільми",
|
||||
"episodes": "Епізоди",
|
||||
"other": "Інше"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"country": "Country",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!",
|
||||
"noEventsFound": "No events found"
|
||||
"noEventsFound": "No events found",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platforms",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "公用IP",
|
||||
"region": "地區",
|
||||
"country": "國家"
|
||||
"country": "國家",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "頻道",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "實體發行",
|
||||
"digitalRelease": "數位發行",
|
||||
"noEventsToday": "今日無事件",
|
||||
"noEventsFound": "未找到事件"
|
||||
"noEventsFound": "未找到事件",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "平台",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "下載",
|
||||
"uploads": "上傳",
|
||||
"sharedFiles": "檔案"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "曲目",
|
||||
"movies": "電影",
|
||||
"episodes": "集",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +149,7 @@
|
||||
"received": "已接收",
|
||||
"sent": "已发送",
|
||||
"externalIPAddress": "外部IP",
|
||||
"externalIPv6Address": "Ext. IPv6",
|
||||
"externalIPv6Address": "",
|
||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||
},
|
||||
"caddy": {
|
||||
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "公网 IP",
|
||||
"region": "区域",
|
||||
"country": "国家"
|
||||
"country": "国家",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "频道",
|
||||
@ -719,7 +720,7 @@
|
||||
"memoryusage": "内存",
|
||||
"freespace": "剩余空间",
|
||||
"activeusers": "活跃用户",
|
||||
"numfiles": "Files",
|
||||
"numfiles": "文件",
|
||||
"numshares": "共享项目"
|
||||
},
|
||||
"kopia": {
|
||||
@ -760,7 +761,7 @@
|
||||
"booksDuration": "持续时间"
|
||||
},
|
||||
"homeassistant": {
|
||||
"people_home": "房间",
|
||||
"people_home": "在家人数",
|
||||
"lights_on": "照明开",
|
||||
"switches_on": "开关开"
|
||||
},
|
||||
@ -782,7 +783,7 @@
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "系列",
|
||||
"totalFiles": "Files"
|
||||
"totalFiles": "文件"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Result",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "今天没有活动!",
|
||||
"noEventsFound": "未找到事件"
|
||||
"noEventsFound": "未找到事件",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "平台",
|
||||
@ -886,7 +888,7 @@
|
||||
"notifications": "通知",
|
||||
"issues": "问题",
|
||||
"pulls": "PR",
|
||||
"repositories": "Repositories"
|
||||
"repositories": "代码仓库"
|
||||
},
|
||||
"stash": {
|
||||
"scenes": "场景",
|
||||
@ -1041,6 +1043,16 @@
|
||||
"update_no": "Up to Date",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
"sharedFiles": "文件"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "歌曲",
|
||||
"movies": "电影",
|
||||
"episodes": "剧集",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -568,7 +568,8 @@
|
||||
"gluetun": {
|
||||
"public_ip": "公用IP",
|
||||
"region": "地區",
|
||||
"country": "國家"
|
||||
"country": "國家",
|
||||
"port_forwarded": "Port Forwarded"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "頻道",
|
||||
@ -856,7 +857,8 @@
|
||||
"physicalRelease": "實體發行",
|
||||
"digitalRelease": "數位發行",
|
||||
"noEventsToday": "今日無事件",
|
||||
"noEventsFound": "未找到事件"
|
||||
"noEventsFound": "未找到事件",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "平台",
|
||||
@ -1042,5 +1044,15 @@
|
||||
"downloads": "下載",
|
||||
"uploads": "上傳",
|
||||
"sharedFiles": "檔案"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "曲目",
|
||||
"movies": "電影",
|
||||
"episodes": "集",
|
||||
"other": "Other"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
"hostErrors": "Host issues"
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ export const searchProviders = {
|
||||
|
||||
function getAvailableProviderIds(options) {
|
||||
if (options.provider && Array.isArray(options.provider)) {
|
||||
return Object.keys(searchProviders).filter((value) => options.provider.includes(value));
|
||||
return options.provider.filter((value) => searchProviders.hasOwnProperty(value));
|
||||
}
|
||||
if (options.provider && searchProviders[options.provider]) {
|
||||
return [options.provider];
|
||||
|
@ -135,6 +135,28 @@ function pruneEmptyGroups(groups) {
|
||||
});
|
||||
}
|
||||
|
||||
function mergeLayoutGroupsIntoConfigured(configuredGroups, layoutGroups) {
|
||||
for (const layoutGroup of layoutGroups) {
|
||||
const existing = findGroupByName(configuredGroups, layoutGroup.name);
|
||||
if (existing) {
|
||||
if (layoutGroup.groups?.length) {
|
||||
existing.groups ??= [];
|
||||
for (const sub of layoutGroup.groups) {
|
||||
const existingSub = findGroupByName(existing.groups, sub.name);
|
||||
if (!existingSub) {
|
||||
existing.groups.push(sub);
|
||||
} else {
|
||||
// recursive merge if needed
|
||||
mergeLayoutGroupsIntoConfigured([existingSub], [sub]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
configuredGroups.push(layoutGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export async function servicesResponse() {
|
||||
let discoveredDockerServices;
|
||||
let discoveredKubernetesServices;
|
||||
@ -191,14 +213,10 @@ export async function servicesResponse() {
|
||||
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
||||
if (definedLayouts) {
|
||||
// this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml
|
||||
const layoutConfiguredGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
||||
const layoutGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
||||
convertLayoutGroupToGroup(key, value),
|
||||
);
|
||||
layoutConfiguredGroups.forEach((group) => {
|
||||
if (!configuredServices.find((serviceGroup) => serviceGroup.name === group.name)) {
|
||||
configuredServices.push(group);
|
||||
}
|
||||
});
|
||||
mergeLayoutGroupsIntoConfigured(configuredServices, layoutGroups);
|
||||
}
|
||||
|
||||
mergedGroupsNames.forEach((groupName) => {
|
||||
|
@ -14,19 +14,29 @@ export const CONF_DIR = process.env.HOMEPAGE_CONFIG_DIR
|
||||
: join(process.cwd(), "config");
|
||||
|
||||
export default function checkAndCopyConfig(config) {
|
||||
// Ensure config directory exists
|
||||
if (!existsSync(CONF_DIR)) {
|
||||
try {
|
||||
mkdirSync(CONF_DIR, { recursive: true });
|
||||
} catch (e) {
|
||||
console.warn(`Could not create config directory ${CONF_DIR}: ${e.message}`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const configYaml = join(CONF_DIR, config);
|
||||
|
||||
// If the config file doesn't exist, try to copy the skeleton
|
||||
if (!existsSync(configYaml)) {
|
||||
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
|
||||
try {
|
||||
copyFileSync(configSkeleton, configYaml);
|
||||
console.info("%s was copied to the config folder", config);
|
||||
} catch (err) {
|
||||
console.error("error copying config", err);
|
||||
throw err;
|
||||
console.error("❌ Failed to initialize required config: %s", configYaml);
|
||||
console.error("Reason: %s", err.message);
|
||||
console.error("Hint: Make /app/config writable or manually place the config file.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -40,6 +40,15 @@ export default function getDockerArguments(server) {
|
||||
res.conn.ca = readFileSync(path.join(CONF_DIR, servers[server].tls.caFile));
|
||||
res.conn.cert = readFileSync(path.join(CONF_DIR, servers[server].tls.certFile));
|
||||
res.conn.key = readFileSync(path.join(CONF_DIR, servers[server].tls.keyFile));
|
||||
res.conn.protocol = "https";
|
||||
}
|
||||
|
||||
if (servers[server].protocol) {
|
||||
res.conn.protocol = servers[server].protocol;
|
||||
}
|
||||
|
||||
if (servers[server].headers) {
|
||||
res.conn.headers = servers[server].headers;
|
||||
}
|
||||
|
||||
return res;
|
||||
|
@ -304,6 +304,9 @@ export function cleanServiceGroups(groups) {
|
||||
// frigate
|
||||
enableRecentEvents,
|
||||
|
||||
// gamedig
|
||||
gameToken,
|
||||
|
||||
// beszel, glances, immich, komga, mealie, pihole, pfsense, speedtest
|
||||
version,
|
||||
|
||||
@ -331,6 +334,9 @@ export function cleanServiceGroups(groups) {
|
||||
referrerPolicy,
|
||||
src,
|
||||
|
||||
// jellystat
|
||||
days,
|
||||
|
||||
// kopia
|
||||
snapshotHost,
|
||||
snapshotPath,
|
||||
@ -484,6 +490,9 @@ export function cleanServiceGroups(groups) {
|
||||
if (["diskstation", "qnap"].includes(type)) {
|
||||
if (volume) widget.volume = volume;
|
||||
}
|
||||
if (type === "gamedig") {
|
||||
if (gameToken) widget.gameToken = gameToken;
|
||||
}
|
||||
if (type === "kopia") {
|
||||
if (snapshotHost) widget.snapshotHost = snapshotHost;
|
||||
if (snapshotPath) widget.snapshotPath = snapshotPath;
|
||||
@ -563,6 +572,9 @@ export function cleanServiceGroups(groups) {
|
||||
if (type === "spoolman") {
|
||||
if (spoolIds !== undefined) widget.spoolIds = spoolIds;
|
||||
}
|
||||
if (type === "jellystat") {
|
||||
if (days !== undefined) widget.days = parseInt(days, 10);
|
||||
}
|
||||
return widget;
|
||||
});
|
||||
return cleanedService;
|
||||
|
@ -34,6 +34,9 @@ export default async function credentialedProxyHandler(req, res, map) {
|
||||
headers["X-CMC_PRO_API_KEY"] = `${widget.key}`;
|
||||
} else if (widget.type === "gotify") {
|
||||
headers["X-gotify-Key"] = `${widget.key}`;
|
||||
} else if (widget.type === "checkmk") {
|
||||
headers["Accept"] = `application/json`;
|
||||
headers.Authorization = `Bearer ${widget.username} ${widget.password}`;
|
||||
} else if (
|
||||
[
|
||||
"argocd",
|
||||
@ -65,7 +68,7 @@ export default async function credentialedProxyHandler(req, res, map) {
|
||||
} else if (widget.type === "proxmoxbackupserver") {
|
||||
delete headers["Content-Type"];
|
||||
headers.Authorization = `PBSAPIToken=${widget.username}:${widget.password}`;
|
||||
} else if (widget.type === "autobrr") {
|
||||
} else if (["autobrr", "jellystat"].includes(widget.type)) {
|
||||
headers["X-API-Token"] = `${widget.key}`;
|
||||
} else if (widget.type === "tubearchivist") {
|
||||
headers.Authorization = `Token ${widget.key}`;
|
||||
|
@ -72,8 +72,23 @@ export default async function beszelProxyHandler(req, res) {
|
||||
},
|
||||
});
|
||||
|
||||
if ([400, 403].includes(status)) {
|
||||
const badRequest = [400, 403].includes(status);
|
||||
const text = data.toString("utf-8");
|
||||
let isEmpty = false;
|
||||
|
||||
try {
|
||||
const json = JSON.parse(text);
|
||||
isEmpty = Array.isArray(json.items) && json.items.length === 0;
|
||||
} catch (err) {
|
||||
logger.debug("Failed to parse Beszel response JSON:", err);
|
||||
}
|
||||
|
||||
if (badRequest || isEmpty) {
|
||||
if (badRequest) {
|
||||
logger.debug(`HTTP ${status} retrieving data from Beszel, logging in and trying again.`);
|
||||
} else {
|
||||
logger.debug(`Received empty list from Beszel, logging in and trying again.`);
|
||||
}
|
||||
cache.del(`${tokenCacheKey}.${service}`);
|
||||
[status, token] = await login(loginUrl, widget.username, widget.password, service);
|
||||
|
||||
|
@ -1,21 +1,20 @@
|
||||
import { parseString } from "cal-parser";
|
||||
import ICAL from "ical.js";
|
||||
import { DateTime } from "luxon";
|
||||
import { useTranslation } from "next-i18next";
|
||||
import { useEffect } from "react";
|
||||
import { RRule } from "rrule";
|
||||
|
||||
import Error from "../../../components/services/widget/error";
|
||||
import useWidgetAPI from "../../../utils/proxy/use-widget-api";
|
||||
|
||||
// https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781
|
||||
function simpleHash(str) {
|
||||
/* eslint-disable no-plusplus, no-bitwise */
|
||||
let hash = 0;
|
||||
const prime = 31;
|
||||
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;
|
||||
hash = (hash * prime + str.charCodeAt(i)) % 2_147_483_647;
|
||||
}
|
||||
return (hash >>> 0).toString(36);
|
||||
/* eslint-disable no-plusplus, no-bitwise */
|
||||
|
||||
return Math.abs(hash).toString(36);
|
||||
}
|
||||
|
||||
export default function Integration({ config, params, setEvents, hideErrors, timezone }) {
|
||||
@ -25,11 +24,49 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
let parsedIcal;
|
||||
const { showName = false } = config?.params || {};
|
||||
let events = [];
|
||||
|
||||
if (!icalError && icalData && !icalData.error) {
|
||||
parsedIcal = parseString(icalData.data);
|
||||
if (parsedIcal.events.length === 0) {
|
||||
if (!icalData.data) {
|
||||
icalData.error = { message: `'${config.name}': ${t("calendar.errorWhenLoadingData")}` };
|
||||
return;
|
||||
}
|
||||
|
||||
const jCal = ICAL.parse(icalData.data);
|
||||
const vCalendar = new ICAL.Component(jCal);
|
||||
|
||||
const buildEvent = (event, type) => {
|
||||
return {
|
||||
id: event.getFirstPropertyValue("uid"),
|
||||
type,
|
||||
title: event.getFirstPropertyValue("summary"),
|
||||
rrule: event.getFirstPropertyValue("rrule"),
|
||||
dtstart:
|
||||
event.getFirstPropertyValue("dtstart") ||
|
||||
event.getFirstPropertyValue("due") ||
|
||||
event.getFirstPropertyValue("completed") ||
|
||||
ICAL.Time.now(), // handles events without a date
|
||||
dtend:
|
||||
event.getFirstPropertyValue("dtend") ||
|
||||
event.getFirstPropertyValue("due") ||
|
||||
event.getFirstPropertyValue("completed") ||
|
||||
ICAL.Time.now(), // handles events without a date
|
||||
location: event.getFirstPropertyValue("location"),
|
||||
status: event.getFirstPropertyValue("status"),
|
||||
};
|
||||
};
|
||||
|
||||
const getEvents = () => {
|
||||
const vEvents = vCalendar.getAllSubcomponents("vevent").map((event) => buildEvent(event, "vevent"));
|
||||
|
||||
const vTodos = vCalendar.getAllSubcomponents("vtodo").map((todo) => buildEvent(todo, "vtodo"));
|
||||
|
||||
return [...vEvents, ...vTodos];
|
||||
};
|
||||
|
||||
events = getEvents();
|
||||
if (events.length === 0) {
|
||||
icalData.error = { message: `'${config.name}': ${t("calendar.noEventsFound")}` };
|
||||
}
|
||||
}
|
||||
@ -37,72 +74,67 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
||||
const startDate = DateTime.fromISO(params.start);
|
||||
const endDate = DateTime.fromISO(params.end);
|
||||
|
||||
if (icalError || !parsedIcal || !startDate.isValid || !endDate.isValid) {
|
||||
if (icalError || events.length === 0 || !startDate.isValid || !endDate.isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const eventsToAdd = {};
|
||||
const events = parsedIcal?.getEventsBetweenDates(startDate.toJSDate(), endDate.toJSDate());
|
||||
const now = timezone ? DateTime.now().setZone(timezone) : DateTime.now();
|
||||
const rangeStart = ICAL.Time.fromJSDate(startDate.toJSDate());
|
||||
const rangeEnd = ICAL.Time.fromJSDate(endDate.toJSDate());
|
||||
|
||||
events?.forEach((event) => {
|
||||
let title = `${event?.summary?.value}`;
|
||||
if (config?.params?.showName) {
|
||||
const getOcurrencesFromRange = (event) => {
|
||||
if (!event.rrule) {
|
||||
if (event.dtstart.compare(rangeStart) >= 0 && event.dtend.compare(rangeEnd) <= 0) {
|
||||
return [event.dtstart];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
const iterator = event.rrule.iterator(event.dtstart);
|
||||
|
||||
const occurrences = [];
|
||||
for (let next = iterator.next(); next && next.compare(rangeEnd) < 0; next = iterator.next()) {
|
||||
if (next.compare(rangeStart) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
occurrences.push(next.clone());
|
||||
}
|
||||
|
||||
return occurrences;
|
||||
};
|
||||
|
||||
const eventsToAdd = [];
|
||||
events.forEach((event, index) => {
|
||||
const occurrences = getOcurrencesFromRange(event);
|
||||
|
||||
occurrences.forEach((icalDate) => {
|
||||
const date = icalDate.toJSDate();
|
||||
|
||||
const hash = simpleHash(`${event.id}-${event.title}-${index}-${date.toString()}`);
|
||||
|
||||
let title = event.title;
|
||||
if (showName) {
|
||||
title = `${config.name}: ${title}`;
|
||||
}
|
||||
|
||||
// 'dtend' is null for all-day events
|
||||
const { dtstart, dtend = { value: 0 } } = event;
|
||||
const getIsCompleted = () => {
|
||||
if (event.type === "vtodo") {
|
||||
return event.status === "COMPLETED";
|
||||
}
|
||||
|
||||
const eventToAdd = (date, i, type) => {
|
||||
const days = dtend.value === 0 ? 1 : (dtend.value - dtstart.value) / (1000 * 60 * 60 * 24);
|
||||
const eventDate = timezone ? DateTime.fromJSDate(date, { zone: timezone }) : DateTime.fromJSDate(date);
|
||||
return DateTime.fromJSDate(date) < DateTime.now();
|
||||
};
|
||||
|
||||
for (let j = 0; j < days; j += 1) {
|
||||
// See https://github.com/gethomepage/homepage/issues/2753 uid is not stable
|
||||
// assumption is that the event is the same if the start, end and title are all the same
|
||||
const hash = simpleHash(`${dtstart?.value}${dtend?.value}${title}${i}${j}${type}}`);
|
||||
eventsToAdd[hash] = {
|
||||
title,
|
||||
date: eventDate.plus({ days: j }),
|
||||
date: DateTime.fromJSDate(date),
|
||||
color: config?.color ?? "zinc",
|
||||
isCompleted: eventDate < now,
|
||||
additional: event.location?.value,
|
||||
isCompleted: getIsCompleted(),
|
||||
additional: event.location,
|
||||
type: "ical",
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
let recurrenceOptions = event?.recurrenceRule?.origOptions;
|
||||
// RRuleSet does not have dtstart, add it manually
|
||||
if (event?.recurrenceRule && event.recurrenceRule.rrules && event.recurrenceRule.rrules()?.[0]?.origOptions) {
|
||||
recurrenceOptions = event.recurrenceRule.rrules()[0].origOptions;
|
||||
recurrenceOptions.dtstart = dtstart.value;
|
||||
}
|
||||
|
||||
if (recurrenceOptions && Object.keys(recurrenceOptions).length !== 0) {
|
||||
try {
|
||||
const rule = new RRule(recurrenceOptions);
|
||||
const recurringEvents = rule.between(startDate.toJSDate(), endDate.toJSDate());
|
||||
|
||||
recurringEvents.forEach((date, i) => {
|
||||
let eventDate = date;
|
||||
if (event.dtstart?.params?.tzid) {
|
||||
// date is in UTC but parsed as if it is in current timezone, so we need to adjust it
|
||||
const dateInUTC = DateTime.fromJSDate(date).setZone("UTC");
|
||||
const offset = dateInUTC.offset - DateTime.fromJSDate(date, { zone: event.dtstart.params.tzid }).offset;
|
||||
eventDate = dateInUTC.plus({ minutes: offset }).toJSDate();
|
||||
}
|
||||
eventToAdd(eventDate, i, "recurring");
|
||||
});
|
||||
return;
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Unable to parse recurring events from iCal: %s", e);
|
||||
}
|
||||
}
|
||||
|
||||
event.matchingDates.forEach((date, i) => eventToAdd(date, i, "single"));
|
||||
});
|
||||
|
||||
setEvents((prevEvents) => ({ ...prevEvents, ...eventsToAdd }));
|
||||
|
40
src/widgets/checkmk/component.jsx
Normal file
40
src/widgets/checkmk/component.jsx
Normal file
@ -0,0 +1,40 @@
|
||||
import Block from "components/services/widget/block";
|
||||
import Container from "components/services/widget/container";
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: servicesData, error: servicesError } = useWidgetAPI(widget, "services_info", {
|
||||
columns: "state",
|
||||
query: '{"op": "!=", "left": "state", "right": "0"}',
|
||||
});
|
||||
const { data: hostsData, error: hostsError } = useWidgetAPI(widget, "hosts_info", {
|
||||
columns: "state",
|
||||
query: '{"op": "!=", "left": "state", "right": "0"}',
|
||||
});
|
||||
|
||||
if (servicesError || hostsError) {
|
||||
return <Container service={service} error={servicesError ?? hostsError} />;
|
||||
}
|
||||
|
||||
if (!servicesData || !hostsData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="checkmk.serviceErrors" />
|
||||
<Block label="checkmk.hostErrors" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="checkmk.serviceErrors" value={t("common.number", { value: servicesData.value.length })} />
|
||||
<Block label="checkmk.hostErrors" value={t("common.number", { value: hostsData.value.length })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
19
src/widgets/checkmk/widget.js
Normal file
19
src/widgets/checkmk/widget.js
Normal file
@ -0,0 +1,19 @@
|
||||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/{site}/check_mk/api/1.0/{endpoint}",
|
||||
proxyHandler: credentialedProxyHandler,
|
||||
|
||||
mappings: {
|
||||
services_info: {
|
||||
endpoint: "domain-types/service/collections/all",
|
||||
params: ["columns", "query"],
|
||||
},
|
||||
hosts_info: {
|
||||
endpoint: "domain-types/host/collections/all",
|
||||
params: ["columns", "query"],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
@ -16,6 +16,7 @@ const components = {
|
||||
calibreweb: dynamic(() => import("./calibreweb/component")),
|
||||
changedetectionio: dynamic(() => import("./changedetectionio/component")),
|
||||
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
||||
checkmk: dynamic(() => import("./checkmk/component")),
|
||||
cloudflared: dynamic(() => import("./cloudflared/component")),
|
||||
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
||||
crowdsec: dynamic(() => import("./crowdsec/component")),
|
||||
@ -59,6 +60,7 @@ const components = {
|
||||
jdownloader: dynamic(() => import("./jdownloader/component")),
|
||||
jellyfin: dynamic(() => import("./emby/component")),
|
||||
jellyseerr: dynamic(() => import("./jellyseerr/component")),
|
||||
jellystat: dynamic(() => import("./jellystat/component")),
|
||||
kavita: dynamic(() => import("./kavita/component")),
|
||||
komga: dynamic(() => import("./komga/component")),
|
||||
kopia: dynamic(() => import("./kopia/component")),
|
||||
|
@ -12,13 +12,19 @@ export default async function gamedigProxyHandler(req, res) {
|
||||
const url = new URL(serviceWidget.url);
|
||||
|
||||
try {
|
||||
const serverData = await GameDig.query({
|
||||
const gamedigOptions = {
|
||||
type: serviceWidget.serverType,
|
||||
host: url.hostname,
|
||||
port: url.port,
|
||||
givenPortOnly: true,
|
||||
checkOldIDs: true,
|
||||
});
|
||||
};
|
||||
|
||||
if (serviceWidget.gameToken) {
|
||||
gamedigOptions.token = serviceWidget.gameToken;
|
||||
}
|
||||
|
||||
const serverData = await GameDig.query(gamedigOptions);
|
||||
|
||||
res.status(200).send({
|
||||
online: true,
|
||||
|
@ -112,7 +112,7 @@ export default function Component({ service }) {
|
||||
<div className="bg-linear-to-br from-theme-500/30 via-theme-600/20 to-theme-700/10 absolute -top-10 -left-2 -right-2 -bottom-2 h-[calc(100%+3em)] w-[calc(100%+1em)]" />
|
||||
)}
|
||||
|
||||
<Block position="-top-6 right-2">
|
||||
<Block position={chart ? "-top-6 right-2" : "top-3 right-3"}>
|
||||
{quicklookData && quicklookData.cpu_name && chart && (
|
||||
<div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div>
|
||||
)}
|
||||
|
@ -7,17 +7,19 @@ export default function Component({ service }) {
|
||||
const { widget } = service;
|
||||
|
||||
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
|
||||
const { data: portForwardedData, error: portForwardedError } = useWidgetAPI(widget, "port_forwarded");
|
||||
|
||||
if (gluetunError) {
|
||||
return <Container service={service} error={gluetunError} />;
|
||||
if (gluetunError || portForwardedError) {
|
||||
return <Container service={service} error={gluetunError || portForwardedError} />;
|
||||
}
|
||||
|
||||
if (!gluetunData) {
|
||||
if (!gluetunData || !portForwardedData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="gluetun.public_ip" />
|
||||
<Block label="gluetun.region" />
|
||||
<Block label="gluetun.country" />
|
||||
<Block label="gluetun.port_forwarded" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@ -27,6 +29,7 @@ export default function Component({ service }) {
|
||||
<Block label="gluetun.public_ip" value={gluetunData.public_ip} />
|
||||
<Block label="gluetun.region" value={gluetunData.region} />
|
||||
<Block label="gluetun.country" value={gluetunData.country} />
|
||||
<Block label="gluetun.port_forwarded" value={portForwardedData.port} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
@ -9,6 +9,10 @@ const widget = {
|
||||
endpoint: "publicip/ip",
|
||||
validate: ["public_ip", "country"],
|
||||
},
|
||||
port_forwarded: {
|
||||
endpoint: "openvpn/portforwarded",
|
||||
validate: ["port"],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
38
src/widgets/jellystat/component.jsx
Normal file
38
src/widgets/jellystat/component.jsx
Normal file
@ -0,0 +1,38 @@
|
||||
import Block from "components/services/widget/block";
|
||||
import Container from "components/services/widget/container";
|
||||
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { widget } = service;
|
||||
|
||||
// Days validation
|
||||
if (!(Number.isInteger(widget.days) && 0 < widget.days)) widget.days = 30;
|
||||
|
||||
const { data: viewsData, error: viewsError } = useWidgetAPI(widget, "getViewsByLibraryType", { days: widget.days });
|
||||
|
||||
const error = viewsError || viewsData?.message;
|
||||
if (error) {
|
||||
return <Container service={service} error={error} />;
|
||||
}
|
||||
|
||||
if (!viewsData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="jellystat.songs" />
|
||||
<Block label="jellystat.movies" />
|
||||
<Block label="jellystat.episodes" />
|
||||
<Block label="jellystat.other" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="jellystat.songs" value={viewsData.Audio} />
|
||||
<Block label="jellystat.movies" value={viewsData.Movie} />
|
||||
<Block label="jellystat.episodes" value={viewsData.Series} />
|
||||
<Block label="jellystat.other" value={viewsData.Other} />
|
||||
</Container>
|
||||
);
|
||||
}
|
15
src/widgets/jellystat/widget.js
Normal file
15
src/widgets/jellystat/widget.js
Normal file
@ -0,0 +1,15 @@
|
||||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/{endpoint}",
|
||||
proxyHandler: credentialedProxyHandler,
|
||||
|
||||
mappings: {
|
||||
getViewsByLibraryType: {
|
||||
endpoint: "stats/getViewsByLibraryType",
|
||||
params: ["days"],
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
@ -13,6 +13,7 @@ import calendar from "./calendar/widget";
|
||||
import calibreweb from "./calibreweb/widget";
|
||||
import changedetectionio from "./changedetectionio/widget";
|
||||
import channelsdvrserver from "./channelsdvrserver/widget";
|
||||
import checkmk from "./checkmk/widget";
|
||||
import cloudflared from "./cloudflared/widget";
|
||||
import coinmarketcap from "./coinmarketcap/widget";
|
||||
import crowdsec from "./crowdsec/widget";
|
||||
@ -49,6 +50,7 @@ import immich from "./immich/widget";
|
||||
import jackett from "./jackett/widget";
|
||||
import jdownloader from "./jdownloader/widget";
|
||||
import jellyseerr from "./jellyseerr/widget";
|
||||
import jellystat from "./jellystat/widget";
|
||||
import karakeep from "./karakeep/widget";
|
||||
import kavita from "./kavita/widget";
|
||||
import komga from "./komga/widget";
|
||||
@ -150,6 +152,7 @@ const widgets = {
|
||||
calibreweb,
|
||||
changedetectionio,
|
||||
channelsdvrserver,
|
||||
checkmk,
|
||||
cloudflared,
|
||||
coinmarketcap,
|
||||
crowdsec,
|
||||
@ -190,6 +193,7 @@ const widgets = {
|
||||
jdownloader,
|
||||
jellyfin: emby,
|
||||
jellyseerr,
|
||||
jellystat,
|
||||
kavita,
|
||||
komga,
|
||||
kopia,
|
||||
|
Loading…
x
Reference in New Issue
Block a user