mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-07 09:35:54 -08:00
Compare commits
6 Commits
v1.4.0
...
feature/ht
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bcbb94523 | ||
|
|
b118fa1204 | ||
|
|
b430a6f515 | ||
|
|
8ba3cae921 | ||
|
|
8f25bf5427 | ||
|
|
da823ad7e8 |
4
.github/DISCUSSION_TEMPLATE/support.yml
vendored
4
.github/DISCUSSION_TEMPLATE/support.yml
vendored
@@ -4,7 +4,7 @@ body:
|
|||||||
value: |
|
value: |
|
||||||
### ⚠️ Before opening a discussion:
|
### ⚠️ Before opening a discussion:
|
||||||
|
|
||||||
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/) and include the output of all steps below.
|
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/).
|
||||||
- [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!).
|
- [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
|
- type: textarea
|
||||||
id: description
|
id: description
|
||||||
@@ -59,6 +59,6 @@ body:
|
|||||||
value: |
|
value: |
|
||||||
## ⚠️ STOP ⚠️
|
## ⚠️ 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 *and posted the output*, if relevant. The troubleshooting steps often help to solve the problem or at least can help figure it out.
|
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.
|
||||||
|
|
||||||
*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.*
|
*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.*
|
||||||
|
|||||||
9
.github/workflows/docker-publish.yml
vendored
9
.github/workflows/docker-publish.yml
vendored
@@ -9,8 +9,14 @@ on:
|
|||||||
- feature/**
|
- feature/**
|
||||||
- dev
|
- dev
|
||||||
tags: [ 'v*.*.*' ]
|
tags: [ 'v*.*.*' ]
|
||||||
|
paths-ignore:
|
||||||
|
- 'docs/**'
|
||||||
|
- 'mkdocs.yml'
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "dev" ]
|
branches: [ "dev" ]
|
||||||
|
paths-ignore:
|
||||||
|
- 'docs/**'
|
||||||
|
- 'mkdocs.yml'
|
||||||
merge_group:
|
merge_group:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
@@ -35,6 +41,7 @@ jobs:
|
|||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
|
version: 10
|
||||||
run_install: false
|
run_install: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
@@ -93,6 +100,7 @@ jobs:
|
|||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
|
version: 10
|
||||||
run_install: false
|
run_install: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
@@ -146,7 +154,6 @@ jobs:
|
|||||||
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
||||||
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64,linux/arm64
|
||||||
provenance: false
|
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
||||||
|
|
||||||
|
|||||||
10
.github/workflows/docs-publish.yml
vendored
10
.github/workflows/docs-publish.yml
vendored
@@ -4,7 +4,13 @@ on:
|
|||||||
push:
|
push:
|
||||||
tags: ["v*.*.*"]
|
tags: ["v*.*.*"]
|
||||||
branches: ["main"]
|
branches: ["main"]
|
||||||
|
paths:
|
||||||
|
- "docs/**"
|
||||||
|
- "mkdocs.yml"
|
||||||
pull_request:
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "docs/**"
|
||||||
|
- "mkdocs.yml"
|
||||||
merge_group:
|
merge_group:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
@@ -26,7 +32,7 @@ jobs:
|
|||||||
uses: pre-commit/action@v3.0.1
|
uses: pre-commit/action@v3.0.1
|
||||||
|
|
||||||
test:
|
test:
|
||||||
name: Test Build Docs
|
name: Test Build
|
||||||
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
|
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
@@ -48,7 +54,7 @@ jobs:
|
|||||||
- name: Test Docs Build
|
- name: Test Docs Build
|
||||||
run: MKINSIDERS=false mkdocs build
|
run: MKINSIDERS=false mkdocs build
|
||||||
deploy:
|
deploy:
|
||||||
name: Build & Deploy Docs
|
name: Build & Deploy
|
||||||
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs:
|
needs:
|
||||||
|
|||||||
32
.vscode/launch.json
vendored
32
.vscode/launch.json
vendored
@@ -1,31 +1,19 @@
|
|||||||
{
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "Debug homepage",
|
"name": "Next.js: debug full stack",
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"runtimeExecutable": "pnpm",
|
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/next",
|
||||||
"runtimeArgs": ["run", "dev"],
|
"serverReadyAction": {
|
||||||
"env": {
|
"pattern": "started server on .+, url: (https?://.+)",
|
||||||
"LOG_LEVEL": "debug"
|
"uriFormat": "%s",
|
||||||
},
|
"action": "debugWithChrome"
|
||||||
"skipFiles": ["<node_internals>/**"],
|
|
||||||
"console": "integratedTerminal",
|
|
||||||
"serverReadyAction":{
|
|
||||||
"pattern": ".*http://localhost:3000.*",
|
|
||||||
"action": "startDebugging",
|
|
||||||
"name": "Launch Chromium",
|
|
||||||
"killOnServerStop": true,
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Launch Chromium",
|
|
||||||
"type": "chrome",
|
|
||||||
"request": "launch",
|
|
||||||
"url": "http://localhost:3000",
|
|
||||||
"urlFilter": "http://localhost:3000",
|
|
||||||
"webRoot": "${workspaceFolder}",
|
|
||||||
"trace": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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/standalone/ ./
|
||||||
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
||||||
|
|
||||||
RUN apk add --no-cache su-exec iputils-ping shadow
|
RUN apk add --no-cache su-exec iputils-ping
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV HOSTNAME=0.0.0.0
|
ENV HOSTNAME=0.0.0.0
|
||||||
|
|||||||
@@ -12,49 +12,10 @@ export PGID=${PGID:-0}
|
|||||||
|
|
||||||
export HOMEPAGE_BUILDTIME=$(date +%s)
|
export HOMEPAGE_BUILDTIME=$(date +%s)
|
||||||
|
|
||||||
# Check ownership before chown
|
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
|
||||||
if [ -e /app/config ]; then
|
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
|
||||||
CURRENT_UID=$(stat -c %u /app/config)
|
# Running chown in that case (as non-root) will cause error
|
||||||
CURRENT_GID=$(stat -c %g /app/config)
|
[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public
|
||||||
|
|
||||||
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)
|
|
||||||
CURRENT_GID=$(stat -c %g /app/.next)
|
|
||||||
|
|
||||||
if [ "$PUID" -ne 0 ] && ([ "$CURRENT_UID" -ne "$PUID" ] || [ "$CURRENT_GID" -ne "$PGID" ]); then
|
|
||||||
echo "Fixing ownership of /app/.next"
|
|
||||||
if ! chown -R "$PUID:$PGID" /app/.next 2>/dev/null; then
|
|
||||||
echo "Warning: Could not chown /app/.next; continuing anyway"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "/app/.next already owned by correct UID/GID or running as root, skipping chown"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Drop privileges (when asked to) if root, otherwise run as current user
|
# Drop privileges (when asked to) if root, otherwise run as current user
|
||||||
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Since Docker supports connecting with TLS and client certificate authentication,
|
|||||||
```yaml
|
```yaml
|
||||||
my-remote-docker:
|
my-remote-docker:
|
||||||
host: 192.168.0.101
|
host: 192.168.0.101
|
||||||
port: 2375
|
port: 275
|
||||||
tls:
|
tls:
|
||||||
keyFile: tls/key.pem
|
keyFile: tls/key.pem
|
||||||
caFile: tls/ca.pem
|
caFile: tls/ca.pem
|
||||||
@@ -66,30 +66,6 @@ my-docker:
|
|||||||
port: 2375
|
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
|
## 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.
|
If you'd rather use the socket directly, first make sure that you're passing the local socket into the Docker container.
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
---
|
|
||||||
title: Proxmox
|
|
||||||
description: Proxmox Configuration
|
|
||||||
---
|
|
||||||
|
|
||||||
The Proxmox connection is configured in the `proxmox.yaml` file. See [Create token](#create-token) section below for details on how to generate the required API token.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
url: https://proxmox.host.or.ip:8006
|
|
||||||
token: username@pam!Token ID
|
|
||||||
secret: secret
|
|
||||||
```
|
|
||||||
|
|
||||||
## Services
|
|
||||||
|
|
||||||
Once the Proxmox connection is configured, individual services can be configured to pull statistics of VMs or LXCs. Only CPU and Memory are currently supported.
|
|
||||||
|
|
||||||
### Configuration Options
|
|
||||||
|
|
||||||
- `proxmoxNode`: The name of the Proxmox node where your VM/LXC is running
|
|
||||||
- `proxmoxVMID`: The ID of the Proxmox VM or LXC container
|
|
||||||
- `proxmoxType`: (Optional) The type of Proxmox virtual machine. Defaults to `qemu` for VMs, but can be set to `lxc` for LXC containers
|
|
||||||
|
|
||||||
#### Examples
|
|
||||||
|
|
||||||
For a QEMU VM (default):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- HomeAssistant:
|
|
||||||
icon: home-assistant.png
|
|
||||||
href: http://homeassistant.local/
|
|
||||||
description: Home automation
|
|
||||||
proxmoxNode: pve
|
|
||||||
proxmoxVMID: 101
|
|
||||||
# proxmoxType: qemu # This is the default, so it can be omitted
|
|
||||||
```
|
|
||||||
|
|
||||||
For an LXC container:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- Nginx:
|
|
||||||
icon: nginx.png
|
|
||||||
href: http://nginx.local/
|
|
||||||
description: Web server
|
|
||||||
proxmoxNode: pve
|
|
||||||
proxmoxVMID: 200
|
|
||||||
proxmoxType: lxc
|
|
||||||
```
|
|
||||||
|
|
||||||
## Create token
|
|
||||||
|
|
||||||
You will need to generate an API Token for new or an existing user. Here is an example of how to do this for a new user.
|
|
||||||
|
|
||||||
1. Navigate to the Proxmox portal, click on Datacenter
|
|
||||||
2. Expand Permissions, click on Groups
|
|
||||||
3. Click the Create button
|
|
||||||
4. Name the group something informative, like api-ro-users
|
|
||||||
5. Click on the Permissions "folder"
|
|
||||||
6. Click Add -> Group Permission
|
|
||||||
- Path: /
|
|
||||||
- Group: group from bullet 4 above
|
|
||||||
- Role: PVEAuditor
|
|
||||||
- Propagate: Checked
|
|
||||||
7. Expand Permissions, click on Users
|
|
||||||
8. Click the Add button
|
|
||||||
- User name: something informative like `api`
|
|
||||||
- Realm: Linux PAM standard authentication
|
|
||||||
- Group: group from bullet 4 above
|
|
||||||
9. Expand Permissions, click on API Tokens
|
|
||||||
10. Click the Add button
|
|
||||||
- User: user from bullet 8 above
|
|
||||||
- Token ID: something informative like the application or purpose like `homepage`
|
|
||||||
- Privilege Separation: Checked
|
|
||||||
11. Go back to the "Permissions" menu
|
|
||||||
12. Click Add -> API Token Permission
|
|
||||||
- Path: /
|
|
||||||
- API Token: select the Token ID created in Step 10
|
|
||||||
- Role: PVE Auditor
|
|
||||||
- Propagate: Checked
|
|
||||||
@@ -101,7 +101,7 @@ theme: dark # or light
|
|||||||
|
|
||||||
## Color Palette
|
## Color Palette
|
||||||
|
|
||||||
You can configure a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
|
You can configured a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
color: slate
|
color: slate
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ All service widgets work essentially the same, that is, homepage makes a proxied
|
|||||||
|
|
||||||
1. URLs should not end with a / or other API path. Each widget will handle the path on its own.
|
1. URLs should not end with a / or other API path. Each widget will handle the path on its own.
|
||||||
|
|
||||||
2. All services with a widget require a unique name as well as a unique group (and all subgroups) name.
|
2. All services with a widget require a unique name.
|
||||||
|
|
||||||
3. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.:
|
3. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.:
|
||||||
|
|
||||||
@@ -81,3 +81,15 @@ services:
|
|||||||
sysctls:
|
sysctls:
|
||||||
- net.ipv6.conf.all.disable_ipv6=1
|
- net.ipv6.conf.all.disable_ipv6=1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Running homepage behind a proxy
|
||||||
|
|
||||||
|
If you are running homepage behind e.g. squid proxy, you can set the environment variable `HOMEPAGE_HTTP_PROXY` to the URL of your proxy. This will allow homepage to use the proxy for all outgoing requests.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
homepage:
|
||||||
|
...
|
||||||
|
environment:
|
||||||
|
- HOMEPAGE_HTTP_PROXY=http://proxy.local:3128
|
||||||
|
```
|
||||||
|
|||||||
@@ -225,8 +225,20 @@ const widgetExample = {
|
|||||||
|
|
||||||
#### `method`
|
#### `method`
|
||||||
|
|
||||||
The `method` represents the HTTP method that should be used to make the API request. The default value is `GET`. Note that `POST` requests are not allowed via the
|
The `method` property is a string that represents the HTTP method that should be used to make the API request. The default value is `GET`.
|
||||||
widget API and require the use of a custom proxy.
|
|
||||||
|
```js
|
||||||
|
const widgetExample = {
|
||||||
|
api: "{url}/api/{endpoint}",
|
||||||
|
mappings: {
|
||||||
|
// `/api/stats`
|
||||||
|
stats: {
|
||||||
|
endpoint: "stats",
|
||||||
|
method: "POST",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
#### `headers`
|
#### `headers`
|
||||||
|
|
||||||
@@ -239,6 +251,7 @@ const widgetExample = {
|
|||||||
// `/api/stats`
|
// `/api/stats`
|
||||||
stats: {
|
stats: {
|
||||||
endpoint: "stats",
|
endpoint: "stats",
|
||||||
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
},
|
},
|
||||||
@@ -258,6 +271,7 @@ const widgetExample = {
|
|||||||
// `/api/graphql`
|
// `/api/graphql`
|
||||||
stats: {
|
stats: {
|
||||||
endpoint: "graphql",
|
endpoint: "graphql",
|
||||||
|
method: "POST",
|
||||||
body: {
|
body: {
|
||||||
query: `
|
query: `
|
||||||
query {
|
query {
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ Homepage uses the [next-i18next](https://github.com/i18next/next-i18next) librar
|
|||||||
|
|
||||||
Homepage uses translated and localized strings for **all text and numerical content** in widgets. English is the default language, and other languages can be added via [Crowdin](https://crowdin.com/project/gethomepage). To add the English translations for your widget, follow these steps:
|
Homepage uses translated and localized strings for **all text and numerical content** in widgets. English is the default language, and other languages can be added via [Crowdin](https://crowdin.com/project/gethomepage). To add the English translations for your widget, follow these steps:
|
||||||
|
|
||||||
Open the `public/locales/en/common.json` file.
|
Open the `public/locales/en/common.js` file.
|
||||||
|
|
||||||
Add a new object for your widget to the bottom of the list, like this:
|
Add a new object for your widget to the bottom of the list, like this:
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ This will render the widget with placeholders for the data, i.e., a skeleton vie
|
|||||||
|
|
||||||
!!! tip "Translation Tips"
|
!!! tip "Translation Tips"
|
||||||
|
|
||||||
The `label` prop in the `Block` component corresponds to the translation key we defined earlier in the `common.json` file. All text and numerical content should be translated.
|
The `label` prop in the `Block` component corresponds to the translation key we defined earlier in the `common.js` file. All text and numerical content should be translated.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ The widget has two modes, a single system with detailed info if `systemId` is pr
|
|||||||
|
|
||||||
The `systemID` is the `id` field on the collections page of Beszel under the PocketBase admin panel. You can also use the 'nice name' from the Beszel UI.
|
The `systemID` is the `id` field on the collections page of Beszel under the PocketBase admin panel. You can also use the 'nice name' from the Beszel UI.
|
||||||
|
|
||||||
A "superuser" is currently required to access the data from the Beszel API.
|
A "superuser" is currently required to access the data from tbe Beszel API.
|
||||||
|
|
||||||
Allowed fields for 'overview' mode: `["systems", "up"]`
|
Allowed fields for 'overview' mode: `["systems", "up"]`
|
||||||
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`
|
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ widget:
|
|||||||
service_group: Media # group name where widget exists
|
service_group: Media # group name where widget exists
|
||||||
service_name: Sonarr # service name for that widget
|
service_name: Sonarr # service name for that widget
|
||||||
color: teal # optional - defaults to pre-defined color for the service (teal for sonarr)
|
color: teal # optional - defaults to pre-defined color for the service (teal for sonarr)
|
||||||
baseUrl: https://sonarr.domain.url # optional - adds links to sonarr/radarr pages
|
|
||||||
params: # optional - additional params for the service
|
params: # optional - additional params for the service
|
||||||
unmonitored: true # optional - defaults to false, used with *arr stack
|
unmonitored: true # optional - defaults to false, used with *arr stack
|
||||||
- type: ical # Show calendar events from another service
|
- type: ical # Show calendar events from another service
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
```
|
|
||||||
@@ -17,7 +17,6 @@ widget:
|
|||||||
enableBlocks: true # optional, defaults to false
|
enableBlocks: true # optional, defaults to false
|
||||||
enableNowPlaying: true # optional, defaults to true
|
enableNowPlaying: true # optional, defaults to true
|
||||||
enableUser: true # optional, defaults to false
|
enableUser: true # optional, defaults to false
|
||||||
enableMediaControl: false # optional, defaults to true
|
|
||||||
showEpisodeNumber: true # optional, defaults to false
|
showEpisodeNumber: true # optional, defaults to false
|
||||||
expandOneStreamToTwoRows: false # optional, defaults to true
|
expandOneStreamToTwoRows: false # optional, defaults to true
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -9,10 +9,9 @@ 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`.
|
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", "port_forwarded"]`.
|
Allowed fields: `["public_ip", "region", "country"]`.
|
||||||
Default fields: `["public_ip", "region", "country"]`.
|
|
||||||
|
|
||||||
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. Similarly, if you want to include the `port_forwarded` field, you must add the route `GET /v1/openvpn/portforwarded` to your Gluetun config.toml.
|
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.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
|
|||||||
@@ -5,18 +5,11 @@ description: Grafana Widget Configuration
|
|||||||
|
|
||||||
Learn more about [Grafana](https://github.com/grafana/grafana).
|
Learn more about [Grafana](https://github.com/grafana/grafana).
|
||||||
|
|
||||||
| Grafana Version | Homepage Widget Version |
|
|
||||||
| --------------- | ----------------------- |
|
|
||||||
| <= v10.4 | 1 (default) |
|
|
||||||
| > v10.4 | 2 |
|
|
||||||
|
|
||||||
Allowed fields: `["dashboards", "datasources", "totalalerts", "alertstriggered"]`.
|
Allowed fields: `["dashboards", "datasources", "totalalerts", "alertstriggered"]`.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: grafana
|
type: grafana
|
||||||
version: 2 # optional, default is 1
|
|
||||||
alerts: alertmanager # optional, default is grafana
|
|
||||||
url: http://grafana.host.or.ip:port
|
url: http://grafana.host.or.ip:port
|
||||||
username: username
|
username: username
|
||||||
password: password
|
password: password
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: JDownloader
|
title: JDownloader
|
||||||
description: JDownloader Widget Configuration
|
description: NextPVR Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||
Learn more about [JDownloader](https://jdownloader.org/).
|
Learn more about [JDownloader](https://jdownloader.org/).
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ widget:
|
|||||||
enableBlocks: true # optional, defaults to false
|
enableBlocks: true # optional, defaults to false
|
||||||
enableNowPlaying: true # optional, defaults to true
|
enableNowPlaying: true # optional, defaults to true
|
||||||
enableUser: true # optional, defaults to false
|
enableUser: true # optional, defaults to false
|
||||||
enableMediaControl: false # optional, defaults to true
|
|
||||||
showEpisodeNumber: true # optional, defaults to false
|
showEpisodeNumber: true # optional, defaults to false
|
||||||
expandOneStreamToTwoRows: false # optional, defaults to true
|
expandOneStreamToTwoRows: false # optional, defaults to true
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
title: Komodo
|
|
||||||
description: Komodo Widget Configuration
|
|
||||||
---
|
|
||||||
|
|
||||||
This widget shows either details about all containers or stacks (if `showStacks` is true) managed by [Komodo](https://komo.do/) or the number of running servers, containers and stacks when `showSummary` is enabled.
|
|
||||||
|
|
||||||
The api key and secret can be found in the Komodo settings.
|
|
||||||
|
|
||||||
Allowed fields (max 4): `["total", "running", "stopped", "unhealthy", "unknown"]`.
|
|
||||||
Allowed fields with `showStacks` (max 4): `["total", "running", "down", "unhealthy", "unknown"]`.
|
|
||||||
Allowed fields with `showSummary`: `["servers", "stacks", "containers"]`.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
widget:
|
|
||||||
type: komodo
|
|
||||||
url: http://komodo.hostname.or.ip:port
|
|
||||||
key: K-xxxxxx...
|
|
||||||
secret: S-xxxxxx...
|
|
||||||
showSummary: true # optional, default: false
|
|
||||||
showStacks: true # optional, default: false
|
|
||||||
```
|
|
||||||
@@ -7,16 +7,12 @@ Learn more about [Portainer](https://github.com/portainer/portainer).
|
|||||||
|
|
||||||
You'll need to make sure you have the correct environment set for the integration to work properly. From the Environments section inside of Portainer, click the one you'd like to connect to and observe the ID at the end of the URL (should be), something like `#!/endpoints/1`, here `1` is the value to set as the `env` value. In order to generate an API key, please follow the steps outlined here https://docs.portainer.io/api/access.
|
You'll need to make sure you have the correct environment set for the integration to work properly. From the Environments section inside of Portainer, click the one you'd like to connect to and observe the ID at the end of the URL (should be), something like `#!/endpoints/1`, here `1` is the value to set as the `env` value. In order to generate an API key, please follow the steps outlined here https://docs.portainer.io/api/access.
|
||||||
|
|
||||||
Allowed fields:
|
Allowed fields: `["running", "stopped", "total"]`.
|
||||||
|
|
||||||
- For Docker mode (default): `["running", "stopped", "total"]`
|
|
||||||
- For Kubernetes mode (`kubernetes: true`): `["applications", "services", "namespaces"]`
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: portainer
|
type: portainer
|
||||||
url: https://portainer.host.or.ip:9443
|
url: https://portainer.host.or.ip:9443
|
||||||
env: 1
|
env: 1
|
||||||
kubernetes: true # optional, defaults to false
|
|
||||||
key: ptr_accesskeyaccesskeyaccesskeyaccesskey
|
key: ptr_accesskeyaccesskeyaccesskeyaccesskey
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -7,7 +7,34 @@ Learn more about [Proxmox](https://www.proxmox.com/en/).
|
|||||||
|
|
||||||
This widget shows the running and total counts of both QEMU VMs and LX Containers in the Proxmox cluster. It also shows the CPU and memory usage of the first node in the cluster.
|
This widget shows the running and total counts of both QEMU VMs and LX Containers in the Proxmox cluster. It also shows the CPU and memory usage of the first node in the cluster.
|
||||||
|
|
||||||
See the [Proxmox configuration documentation](../../configs/proxmox.md#create-token) for details on creating API tokens.
|
You will need to generate an API Token for new or an existing user. Here is an example of how to do this for a new user.
|
||||||
|
|
||||||
|
1. Navigate to the Proxmox portal, click on Datacenter
|
||||||
|
2. Expand Permissions, click on Groups
|
||||||
|
3. Click the Create button
|
||||||
|
4. Name the group something informative, like api-ro-users
|
||||||
|
5. Click on the Permissions "folder"
|
||||||
|
6. Click Add -> Group Permission
|
||||||
|
- Path: /
|
||||||
|
- Group: group from bullet 4 above
|
||||||
|
- Role: PVEAuditor
|
||||||
|
- Propagate: Checked
|
||||||
|
7. Expand Permissions, click on Users
|
||||||
|
8. Click the Add button
|
||||||
|
- User name: something informative like `api`
|
||||||
|
- Realm: Linux PAM standard authentication
|
||||||
|
- Group: group from bullet 4 above
|
||||||
|
9. Expand Permissions, click on API Tokens
|
||||||
|
10. Click the Add button
|
||||||
|
- User: user from bullet 8 above
|
||||||
|
- Token ID: something informative like the application or purpose like `homepage`
|
||||||
|
- Privilege Separation: Checked
|
||||||
|
11. Go back to the "Permissions" menu
|
||||||
|
12. Click Add -> API Token Permission
|
||||||
|
- Path: /
|
||||||
|
- API Token: select the Token ID created in Step 10
|
||||||
|
- Role: PVE Auditor
|
||||||
|
- Propagate: Checked
|
||||||
|
|
||||||
Use `username@pam!Token ID` as the `username` (e.g `api@pam!homepage`) setting and `Secret` as the `password` setting.
|
Use `username@pam!Token ID` as the `username` (e.g `api@pam!homepage`) setting and `Secret` as the `password` setting.
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ description: Proxmox Backup Server Widget Configuration
|
|||||||
|
|
||||||
Learn more about [Proxmox Backup Server](https://www.proxmox.com/en/proxmox-backup-server/overview).
|
Learn more about [Proxmox Backup Server](https://www.proxmox.com/en/proxmox-backup-server/overview).
|
||||||
|
|
||||||
Create a user and an API token similar to the [Proxmox VE description](proxmox.md). The "Audit" role is required for both the user and token (not group).
|
|
||||||
|
|
||||||
Allowed fields: `["datastore_usage", "failed_tasks_24h", "cpu_usage", "memory_usage"]`.
|
Allowed fields: `["datastore_usage", "failed_tasks_24h", "cpu_usage", "memory_usage"]`.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -15,5 +13,4 @@ widget:
|
|||||||
url: https://proxmoxbackupserver.host:port
|
url: https://proxmoxbackupserver.host:port
|
||||||
username: api_token_id
|
username: api_token_id
|
||||||
password: api_token_secret
|
password: api_token_secret
|
||||||
datastore: datastore_name #optional; if ommitted, will display a combination of all datastores used / total
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
title: Trilium
|
|
||||||
description: Trilium Widget Configuration
|
|
||||||
---
|
|
||||||
|
|
||||||
Learn more about [Trilium](https://github.com/TriliumNext/Notes).
|
|
||||||
|
|
||||||
This widget is compatible with [TriliumNext](https://github.com/TriliumNext/Notes) versions >= [v0.94.0](https://github.com/TriliumNext/Notes/releases/tag/v0.94.0).
|
|
||||||
|
|
||||||
Find (or create) your ETAPI key under `Options > ETAPI > Create new ETAPI token`.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
widget:
|
|
||||||
type: trilium
|
|
||||||
url: https://trilium.host.or.ip
|
|
||||||
key: etapi_token
|
|
||||||
```
|
|
||||||
@@ -11,17 +11,10 @@ Note: by default `["connected", "enabled", "total"]` are displayed.
|
|||||||
|
|
||||||
To detect if a device is connected the time since the last handshake is queried. `threshold` is the time to wait in minutes since the last handshake to consider a device connected. Default is 2 minutes.
|
To detect if a device is connected the time since the last handshake is queried. `threshold` is the time to wait in minutes since the last handshake to consider a device connected. Default is 2 minutes.
|
||||||
|
|
||||||
| Wg-Easy API Version | Homepage Widget Version |
|
|
||||||
| ------------------- | ----------------------- |
|
|
||||||
| < v15 | 1 (default) |
|
|
||||||
| >= v15 | 2 |
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: wgeasy
|
type: wgeasy
|
||||||
url: http://wg.easy.or.ip
|
url: http://wg.easy.or.ip
|
||||||
version: 2 # optional, default is 1
|
|
||||||
username: yourwgusername # required for v15 and above
|
|
||||||
password: yourwgeasypassword
|
password: yourwgeasypassword
|
||||||
threshold: 2 # optional
|
threshold: 2 # optional
|
||||||
```
|
```
|
||||||
|
|||||||
30
package.json
30
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "homepage",
|
"name": "homepage",
|
||||||
"version": "1.4.0",
|
"version": "1.2.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
@@ -18,11 +18,13 @@
|
|||||||
"dockerode": "^4.0.4",
|
"dockerode": "^4.0.4",
|
||||||
"follow-redirects": "^1.15.9",
|
"follow-redirects": "^1.15.9",
|
||||||
"gamedig": "^5.2.0",
|
"gamedig": "^5.2.0",
|
||||||
|
"http-proxy-agent": "^7.0.2",
|
||||||
|
"https-proxy-agent": "^7.0.6",
|
||||||
"i18next": "^24.2.3",
|
"i18next": "^24.2.3",
|
||||||
"ical.js": "^2.1.0",
|
"ical.js": "^2.1.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"json-rpc-2.0": "^1.7.0",
|
"json-rpc-2.0": "^1.7.0",
|
||||||
"luxon": "^3.6.1",
|
"luxon": "^3.5.0",
|
||||||
"memory-cache": "^0.2.0",
|
"memory-cache": "^0.2.0",
|
||||||
"minecraftstatuspinger": "^1.2.2",
|
"minecraftstatuspinger": "^1.2.2",
|
||||||
"next": "^15.3.1",
|
"next": "^15.3.1",
|
||||||
@@ -32,11 +34,11 @@
|
|||||||
"raw-body": "^3.0.0",
|
"raw-body": "^3.0.0",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-dom": "^18.3.1",
|
"react-dom": "^18.3.1",
|
||||||
"react-i18next": "^15.5.3",
|
"react-i18next": "^11.18.6",
|
||||||
"react-icons": "^5.4.0",
|
"react-icons": "^5.4.0",
|
||||||
"recharts": "^2.15.3",
|
"recharts": "^2.15.3",
|
||||||
"swr": "^2.3.3",
|
"swr": "^2.3.3",
|
||||||
"systeminformation": "^5.27.7",
|
"systeminformation": "^5.25.11",
|
||||||
"tough-cookie": "^5.1.2",
|
"tough-cookie": "^5.1.2",
|
||||||
"urbackup-server-api": "^0.8.9",
|
"urbackup-server-api": "^0.8.9",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
@@ -50,29 +52,17 @@
|
|||||||
"eslint-config-prettier": "^10.1.1",
|
"eslint-config-prettier": "^10.1.1",
|
||||||
"eslint-plugin-import": "^2.31.0",
|
"eslint-plugin-import": "^2.31.0",
|
||||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||||
"eslint-plugin-prettier": "^5.5.1",
|
"eslint-plugin-prettier": "^5.2.6",
|
||||||
"eslint-plugin-react": "^7.37.4",
|
"eslint-plugin-react": "^7.37.4",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.1.0",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.5.2",
|
||||||
"prettier-plugin-organize-imports": "^4.1.0",
|
"prettier-plugin-organize-imports": "^4.1.0",
|
||||||
"tailwind-scrollbar": "^4.0.2",
|
"tailwind-scrollbar": "^4.0.1",
|
||||||
"tailwindcss": "^4.0.9",
|
"tailwindcss": "^4.0.9",
|
||||||
"typescript": "^5.7.3"
|
"typescript": "^5.7.3"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"osx-temperature-sensor": "^1.0.8"
|
"osx-temperature-sensor": "^1.0.8"
|
||||||
},
|
|
||||||
"packageManager": "pnpm@10.8.1",
|
|
||||||
"devEngines": {
|
|
||||||
"packageManager": {
|
|
||||||
"name": "pnpm",
|
|
||||||
"version": "10.8.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pnpm": {
|
|
||||||
"onlyBuiltDependencies": [
|
|
||||||
"sharp"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
158
pnpm-lock.yaml
generated
158
pnpm-lock.yaml
generated
@@ -29,6 +29,12 @@ importers:
|
|||||||
gamedig:
|
gamedig:
|
||||||
specifier: ^5.2.0
|
specifier: ^5.2.0
|
||||||
version: 5.2.0
|
version: 5.2.0
|
||||||
|
http-proxy-agent:
|
||||||
|
specifier: ^7.0.2
|
||||||
|
version: 7.0.2
|
||||||
|
https-proxy-agent:
|
||||||
|
specifier: ^7.0.6
|
||||||
|
version: 7.0.6
|
||||||
i18next:
|
i18next:
|
||||||
specifier: ^24.2.3
|
specifier: ^24.2.3
|
||||||
version: 24.2.3(typescript@5.7.3)
|
version: 24.2.3(typescript@5.7.3)
|
||||||
@@ -42,8 +48,8 @@ importers:
|
|||||||
specifier: ^1.7.0
|
specifier: ^1.7.0
|
||||||
version: 1.7.0
|
version: 1.7.0
|
||||||
luxon:
|
luxon:
|
||||||
specifier: ^3.6.1
|
specifier: ^3.5.0
|
||||||
version: 3.6.1
|
version: 3.5.0
|
||||||
memory-cache:
|
memory-cache:
|
||||||
specifier: ^0.2.0
|
specifier: ^0.2.0
|
||||||
version: 0.2.0
|
version: 0.2.0
|
||||||
@@ -72,8 +78,8 @@ importers:
|
|||||||
specifier: ^18.3.1
|
specifier: ^18.3.1
|
||||||
version: 18.3.1(react@18.3.1)
|
version: 18.3.1(react@18.3.1)
|
||||||
react-i18next:
|
react-i18next:
|
||||||
specifier: ^15.5.3
|
specifier: ^11.18.6
|
||||||
version: 15.5.3(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3)
|
version: 11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
react-icons:
|
react-icons:
|
||||||
specifier: ^5.4.0
|
specifier: ^5.4.0
|
||||||
version: 5.4.0(react@18.3.1)
|
version: 5.4.0(react@18.3.1)
|
||||||
@@ -84,8 +90,8 @@ importers:
|
|||||||
specifier: ^2.3.3
|
specifier: ^2.3.3
|
||||||
version: 2.3.3(react@18.3.1)
|
version: 2.3.3(react@18.3.1)
|
||||||
systeminformation:
|
systeminformation:
|
||||||
specifier: ^5.27.7
|
specifier: ^5.25.11
|
||||||
version: 5.27.7
|
version: 5.25.11
|
||||||
tough-cookie:
|
tough-cookie:
|
||||||
specifier: ^5.1.2
|
specifier: ^5.1.2
|
||||||
version: 5.1.2
|
version: 5.1.2
|
||||||
@@ -121,26 +127,26 @@ importers:
|
|||||||
specifier: ^6.10.2
|
specifier: ^6.10.2
|
||||||
version: 6.10.2(eslint@9.25.1(jiti@2.4.2))
|
version: 6.10.2(eslint@9.25.1(jiti@2.4.2))
|
||||||
eslint-plugin-prettier:
|
eslint-plugin-prettier:
|
||||||
specifier: ^5.5.1
|
specifier: ^5.2.6
|
||||||
version: 5.5.1(eslint-config-prettier@10.1.1(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(prettier@3.6.2)
|
version: 5.2.6(eslint-config-prettier@10.1.1(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(prettier@3.5.2)
|
||||||
eslint-plugin-react:
|
eslint-plugin-react:
|
||||||
specifier: ^7.37.4
|
specifier: ^7.37.4
|
||||||
version: 7.37.4(eslint@9.25.1(jiti@2.4.2))
|
version: 7.37.4(eslint@9.25.1(jiti@2.4.2))
|
||||||
eslint-plugin-react-hooks:
|
eslint-plugin-react-hooks:
|
||||||
specifier: ^5.2.0
|
specifier: ^5.1.0
|
||||||
version: 5.2.0(eslint@9.25.1(jiti@2.4.2))
|
version: 5.1.0(eslint@9.25.1(jiti@2.4.2))
|
||||||
postcss:
|
postcss:
|
||||||
specifier: ^8.5.3
|
specifier: ^8.5.3
|
||||||
version: 8.5.3
|
version: 8.5.3
|
||||||
prettier:
|
prettier:
|
||||||
specifier: ^3.6.2
|
specifier: ^3.5.2
|
||||||
version: 3.6.2
|
version: 3.5.2
|
||||||
prettier-plugin-organize-imports:
|
prettier-plugin-organize-imports:
|
||||||
specifier: ^4.1.0
|
specifier: ^4.1.0
|
||||||
version: 4.1.0(prettier@3.6.2)(typescript@5.7.3)
|
version: 4.1.0(prettier@3.5.2)(typescript@5.7.3)
|
||||||
tailwind-scrollbar:
|
tailwind-scrollbar:
|
||||||
specifier: ^4.0.2
|
specifier: ^4.0.1
|
||||||
version: 4.0.2(react@18.3.1)(tailwindcss@4.0.9)
|
version: 4.0.1(react@18.3.1)(tailwindcss@4.0.9)
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: ^4.0.9
|
specifier: ^4.0.9
|
||||||
version: 4.0.9
|
version: 4.0.9
|
||||||
@@ -166,8 +172,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
|
resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@babel/runtime@7.27.6':
|
'@babel/runtime@7.27.1':
|
||||||
resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
|
resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@balena/dockerignore@1.0.2':
|
'@balena/dockerignore@1.0.2':
|
||||||
@@ -476,8 +482,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
'@pkgr/core@0.2.7':
|
'@pkgr/core@0.2.4':
|
||||||
resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
|
resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
|
||||||
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
||||||
|
|
||||||
'@protobufjs/aspromise@1.1.2':
|
'@protobufjs/aspromise@1.1.2':
|
||||||
@@ -824,6 +830,10 @@ packages:
|
|||||||
engines: {node: '>=0.4.0'}
|
engines: {node: '>=0.4.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
agent-base@7.1.3:
|
||||||
|
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
|
||||||
|
engines: {node: '>= 14'}
|
||||||
|
|
||||||
ajv@6.12.6:
|
ajv@6.12.6:
|
||||||
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
|
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
|
||||||
|
|
||||||
@@ -1364,8 +1374,8 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
|
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
|
||||||
|
|
||||||
eslint-plugin-prettier@5.5.1:
|
eslint-plugin-prettier@5.2.6:
|
||||||
resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==}
|
resolution: {integrity: sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@types/eslint': '>=8.0.0'
|
'@types/eslint': '>=8.0.0'
|
||||||
@@ -1378,8 +1388,8 @@ packages:
|
|||||||
eslint-config-prettier:
|
eslint-config-prettier:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
eslint-plugin-react-hooks@5.2.0:
|
eslint-plugin-react-hooks@5.1.0:
|
||||||
resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
|
resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
|
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
|
||||||
@@ -1646,10 +1656,18 @@ packages:
|
|||||||
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
|
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
|
http-proxy-agent@7.0.2:
|
||||||
|
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
|
||||||
|
engines: {node: '>= 14'}
|
||||||
|
|
||||||
http2-wrapper@2.2.1:
|
http2-wrapper@2.2.1:
|
||||||
resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
|
resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
|
||||||
engines: {node: '>=10.19.0'}
|
engines: {node: '>=10.19.0'}
|
||||||
|
|
||||||
|
https-proxy-agent@7.0.6:
|
||||||
|
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
|
||||||
|
engines: {node: '>= 14'}
|
||||||
|
|
||||||
i18next-fs-backend@1.2.0:
|
i18next-fs-backend@1.2.0:
|
||||||
resolution: {integrity: sha512-pUx3AcgXCbur0jpFA7U67Z2RJflAcIi698Y8VL+phdOqUchahxriV3Cs+M6UkPNQSS/zPEzWLfdJ8EgjB7HVxg==}
|
resolution: {integrity: sha512-pUx3AcgXCbur0jpFA7U67Z2RJflAcIi698Y8VL+phdOqUchahxriV3Cs+M6UkPNQSS/zPEzWLfdJ8EgjB7HVxg==}
|
||||||
|
|
||||||
@@ -1989,8 +2007,8 @@ packages:
|
|||||||
lru-cache@10.4.3:
|
lru-cache@10.4.3:
|
||||||
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
|
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
|
||||||
|
|
||||||
luxon@3.6.1:
|
luxon@3.5.0:
|
||||||
resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==}
|
resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
math-intrinsics@1.1.0:
|
math-intrinsics@1.1.0:
|
||||||
@@ -2262,8 +2280,8 @@ packages:
|
|||||||
vue-tsc:
|
vue-tsc:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
prettier@3.6.2:
|
prettier@3.5.2:
|
||||||
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
|
resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
@@ -2322,22 +2340,6 @@ packages:
|
|||||||
react-native:
|
react-native:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
react-i18next@15.5.3:
|
|
||||||
resolution: {integrity: sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==}
|
|
||||||
peerDependencies:
|
|
||||||
i18next: '>= 23.2.3'
|
|
||||||
react: '>= 16.8.0'
|
|
||||||
react-dom: '*'
|
|
||||||
react-native: '*'
|
|
||||||
typescript: ^5
|
|
||||||
peerDependenciesMeta:
|
|
||||||
react-dom:
|
|
||||||
optional: true
|
|
||||||
react-native:
|
|
||||||
optional: true
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
react-icons@5.4.0:
|
react-icons@5.4.0:
|
||||||
resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==}
|
resolution: {integrity: sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -2648,18 +2650,18 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
synckit@0.11.8:
|
synckit@0.11.4:
|
||||||
resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
|
resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==}
|
||||||
engines: {node: ^14.18.0 || >=16.0.0}
|
engines: {node: ^14.18.0 || >=16.0.0}
|
||||||
|
|
||||||
systeminformation@5.27.7:
|
systeminformation@5.25.11:
|
||||||
resolution: {integrity: sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==}
|
resolution: {integrity: sha512-jI01fn/t47rrLTQB0FTlMCC+5dYx8o0RRF+R4BPiUNsvg5OdY0s9DKMFmJGrx5SwMZQ4cag0Gl6v8oycso9b/g==}
|
||||||
engines: {node: '>=8.0.0'}
|
engines: {node: '>=8.0.0'}
|
||||||
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
|
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
tailwind-scrollbar@4.0.2:
|
tailwind-scrollbar@4.0.1:
|
||||||
resolution: {integrity: sha512-wAQiIxAPqk0MNTPptVe/xoyWi27y+NRGnTwvn4PQnbvB9kp8QUBiGl/wsfoVBHnQxTmhXJSNt9NHTmcz9EivFA==}
|
resolution: {integrity: sha512-j2ZfUI7p8xmSQdlqaCxEb4Mha8ErvWjDVyu2Ke4IstWprQ/6TmIz1GSLE62vsTlXwnMLYhuvbFbIFzaJGOGtMg==}
|
||||||
engines: {node: '>=12.13.0'}
|
engines: {node: '>=12.13.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
tailwindcss: 4.x
|
tailwindcss: 4.x
|
||||||
@@ -2913,7 +2915,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime: 0.14.1
|
regenerator-runtime: 0.14.1
|
||||||
|
|
||||||
'@babel/runtime@7.27.6': {}
|
'@babel/runtime@7.27.1': {}
|
||||||
|
|
||||||
'@balena/dockerignore@1.0.2': {}
|
'@balena/dockerignore@1.0.2': {}
|
||||||
|
|
||||||
@@ -3197,7 +3199,7 @@ snapshots:
|
|||||||
'@pkgjs/parseargs@0.11.0':
|
'@pkgjs/parseargs@0.11.0':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@pkgr/core@0.2.7': {}
|
'@pkgr/core@0.2.4': {}
|
||||||
|
|
||||||
'@protobufjs/aspromise@1.1.2': {}
|
'@protobufjs/aspromise@1.1.2': {}
|
||||||
|
|
||||||
@@ -3517,6 +3519,8 @@ snapshots:
|
|||||||
|
|
||||||
acorn@8.14.1: {}
|
acorn@8.14.1: {}
|
||||||
|
|
||||||
|
agent-base@7.1.3: {}
|
||||||
|
|
||||||
ajv@6.12.6:
|
ajv@6.12.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal: 3.1.3
|
fast-deep-equal: 3.1.3
|
||||||
@@ -3945,7 +3949,7 @@ snapshots:
|
|||||||
|
|
||||||
dom-helpers@5.2.1:
|
dom-helpers@5.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.27.6
|
'@babel/runtime': 7.27.1
|
||||||
csstype: 3.1.3
|
csstype: 3.1.3
|
||||||
|
|
||||||
dom-serializer@2.0.0:
|
dom-serializer@2.0.0:
|
||||||
@@ -4105,7 +4109,7 @@ snapshots:
|
|||||||
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.25.1(jiti@2.4.2))
|
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.25.1(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.25.1(jiti@2.4.2))
|
||||||
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.25.1(jiti@2.4.2))
|
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.25.1(jiti@2.4.2))
|
||||||
eslint-plugin-react: 7.37.4(eslint@9.25.1(jiti@2.4.2))
|
eslint-plugin-react: 7.37.4(eslint@9.25.1(jiti@2.4.2))
|
||||||
eslint-plugin-react-hooks: 5.2.0(eslint@9.25.1(jiti@2.4.2))
|
eslint-plugin-react-hooks: 5.1.0(eslint@9.25.1(jiti@2.4.2))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.7.3
|
typescript: 5.7.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -4199,16 +4203,16 @@ snapshots:
|
|||||||
safe-regex-test: 1.1.0
|
safe-regex-test: 1.1.0
|
||||||
string.prototype.includes: 2.0.1
|
string.prototype.includes: 2.0.1
|
||||||
|
|
||||||
eslint-plugin-prettier@5.5.1(eslint-config-prettier@10.1.1(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(prettier@3.6.2):
|
eslint-plugin-prettier@5.2.6(eslint-config-prettier@10.1.1(eslint@9.25.1(jiti@2.4.2)))(eslint@9.25.1(jiti@2.4.2))(prettier@3.5.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.25.1(jiti@2.4.2)
|
eslint: 9.25.1(jiti@2.4.2)
|
||||||
prettier: 3.6.2
|
prettier: 3.5.2
|
||||||
prettier-linter-helpers: 1.0.0
|
prettier-linter-helpers: 1.0.0
|
||||||
synckit: 0.11.8
|
synckit: 0.11.4
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
eslint-config-prettier: 10.1.1(eslint@9.25.1(jiti@2.4.2))
|
eslint-config-prettier: 10.1.1(eslint@9.25.1(jiti@2.4.2))
|
||||||
|
|
||||||
eslint-plugin-react-hooks@5.2.0(eslint@9.25.1(jiti@2.4.2)):
|
eslint-plugin-react-hooks@5.1.0(eslint@9.25.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.25.1(jiti@2.4.2)
|
eslint: 9.25.1(jiti@2.4.2)
|
||||||
|
|
||||||
@@ -4542,16 +4546,30 @@ snapshots:
|
|||||||
statuses: 2.0.1
|
statuses: 2.0.1
|
||||||
toidentifier: 1.0.1
|
toidentifier: 1.0.1
|
||||||
|
|
||||||
|
http-proxy-agent@7.0.2:
|
||||||
|
dependencies:
|
||||||
|
agent-base: 7.1.3
|
||||||
|
debug: 4.4.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
http2-wrapper@2.2.1:
|
http2-wrapper@2.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
quick-lru: 5.1.1
|
quick-lru: 5.1.1
|
||||||
resolve-alpn: 1.2.1
|
resolve-alpn: 1.2.1
|
||||||
|
|
||||||
|
https-proxy-agent@7.0.6:
|
||||||
|
dependencies:
|
||||||
|
agent-base: 7.1.3
|
||||||
|
debug: 4.4.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
i18next-fs-backend@1.2.0: {}
|
i18next-fs-backend@1.2.0: {}
|
||||||
|
|
||||||
i18next@21.10.0:
|
i18next@21.10.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.26.9
|
'@babel/runtime': 7.27.0
|
||||||
|
|
||||||
i18next@24.2.3(typescript@5.7.3):
|
i18next@24.2.3(typescript@5.7.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -4858,7 +4876,7 @@ snapshots:
|
|||||||
|
|
||||||
lru-cache@10.4.3: {}
|
lru-cache@10.4.3: {}
|
||||||
|
|
||||||
luxon@3.6.1: {}
|
luxon@3.5.0: {}
|
||||||
|
|
||||||
math-intrinsics@1.1.0: {}
|
math-intrinsics@1.1.0: {}
|
||||||
|
|
||||||
@@ -5105,12 +5123,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fast-diff: 1.3.0
|
fast-diff: 1.3.0
|
||||||
|
|
||||||
prettier-plugin-organize-imports@4.1.0(prettier@3.6.2)(typescript@5.7.3):
|
prettier-plugin-organize-imports@4.1.0(prettier@3.5.2)(typescript@5.7.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
prettier: 3.6.2
|
prettier: 3.5.2
|
||||||
typescript: 5.7.3
|
typescript: 5.7.3
|
||||||
|
|
||||||
prettier@3.6.2: {}
|
prettier@3.5.2: {}
|
||||||
|
|
||||||
pretty-bytes@6.1.1: {}
|
pretty-bytes@6.1.1: {}
|
||||||
|
|
||||||
@@ -5176,15 +5194,14 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
|
|
||||||
react-i18next@15.5.3(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3):
|
react-i18next@11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.27.6
|
'@babel/runtime': 7.26.9
|
||||||
html-parse-stringify: 3.0.1
|
html-parse-stringify: 3.0.1
|
||||||
i18next: 24.2.3(typescript@5.7.3)
|
i18next: 24.2.3(typescript@5.7.3)
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
typescript: 5.7.3
|
|
||||||
|
|
||||||
react-icons@5.4.0(react@18.3.1):
|
react-icons@5.4.0(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -5204,7 +5221,7 @@ snapshots:
|
|||||||
|
|
||||||
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/runtime': 7.27.6
|
'@babel/runtime': 7.27.1
|
||||||
dom-helpers: 5.2.1
|
dom-helpers: 5.2.1
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
prop-types: 15.8.1
|
prop-types: 15.8.1
|
||||||
@@ -5576,13 +5593,14 @@ snapshots:
|
|||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
use-sync-external-store: 1.5.0(react@18.3.1)
|
use-sync-external-store: 1.5.0(react@18.3.1)
|
||||||
|
|
||||||
synckit@0.11.8:
|
synckit@0.11.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@pkgr/core': 0.2.7
|
'@pkgr/core': 0.2.4
|
||||||
|
tslib: 2.8.1
|
||||||
|
|
||||||
systeminformation@5.27.7: {}
|
systeminformation@5.25.11: {}
|
||||||
|
|
||||||
tailwind-scrollbar@4.0.2(react@18.3.1)(tailwindcss@4.0.9):
|
tailwind-scrollbar@4.0.1(react@18.3.1)(tailwindcss@4.0.9):
|
||||||
dependencies:
|
dependencies:
|
||||||
prism-react-renderer: 2.4.1(react@18.3.1)
|
prism-react-renderer: 2.4.1(react@18.3.1)
|
||||||
tailwindcss: 4.0.9
|
tailwindcss: 4.0.9
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Publieke IP",
|
"public_ip": "Publieke IP",
|
||||||
"region": "Streek",
|
"region": "Streek",
|
||||||
"country": "Land",
|
"country": "Land"
|
||||||
"port_forwarded": "Poort Aangestuur"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanale",
|
"channels": "Kanale",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fisiese Vrylating",
|
"physicalRelease": "Fisiese Vrylating",
|
||||||
"digitalRelease": "Digitale Vrylating",
|
"digitalRelease": "Digitale Vrylating",
|
||||||
"noEventsToday": "Geen gebeure vir vandag nie!",
|
"noEventsToday": "Geen gebeure vir vandag nie!",
|
||||||
"noEventsFound": "Geen gebeure gevind nie",
|
"noEventsFound": "Geen gebeure gevind nie"
|
||||||
"errorWhenLoadingData": "Fout tydens laai van kalenderdata"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platform",
|
"platforms": "Platform",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Aflaaie",
|
"downloads": "Aflaaie",
|
||||||
"uploads": "Oplaaie",
|
"uploads": "Oplaaie",
|
||||||
"sharedFiles": "Lêers"
|
"sharedFiles": "Lêers"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Liedjies",
|
|
||||||
"movies": "Flieks",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Ander"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Diensprobleme",
|
|
||||||
"hostErrors": "Gasheerprobleme"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "العام IP",
|
"public_ip": "العام IP",
|
||||||
"region": "منطقة",
|
"region": "منطقة",
|
||||||
"country": "الدولة",
|
"country": "الدولة"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "القنوات",
|
"channels": "القنوات",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "الإصدار المادي",
|
"physicalRelease": "الإصدار المادي",
|
||||||
"digitalRelease": "الإصدار الرقمي",
|
"digitalRelease": "الإصدار الرقمي",
|
||||||
"noEventsToday": "لا توجد أحداث اليوم!",
|
"noEventsToday": "لا توجد أحداث اليوم!",
|
||||||
"noEventsFound": "لم يتم العثور على أحداث",
|
"noEventsFound": "لم يتم العثور على أحداث"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "المِنصات",
|
"platforms": "المِنصات",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "ملفات"
|
"sharedFiles": "ملفات"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "أغاني",
|
|
||||||
"movies": "أفلام",
|
|
||||||
"episodes": "حلقات",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Публично IP",
|
"public_ip": "Публично IP",
|
||||||
"region": "Регион",
|
"region": "Регион",
|
||||||
"country": "Страна",
|
"country": "Страна"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Канали",
|
"channels": "Канали",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Дигитално издания",
|
"digitalRelease": "Дигитално издания",
|
||||||
"noEventsToday": "Няма събития за днес!",
|
"noEventsToday": "Няма събития за днес!",
|
||||||
"noEventsFound": "Няма намерени събития",
|
"noEventsFound": "Няма намерени събития"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Платформи",
|
"platforms": "Платформи",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Файлове"
|
"sharedFiles": "Файлове"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Песни",
|
|
||||||
"movies": "Филми",
|
|
||||||
"episodes": "Епизоди",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP Pública",
|
"public_ip": "IP Pública",
|
||||||
"region": "Regió",
|
"region": "Regió",
|
||||||
"country": "País",
|
"country": "País"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canals",
|
"channels": "Canals",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Estrena física",
|
"physicalRelease": "Estrena física",
|
||||||
"digitalRelease": "Estrena digital",
|
"digitalRelease": "Estrena digital",
|
||||||
"noEventsToday": "Cap esdeveniment per avui!",
|
"noEventsToday": "Cap esdeveniment per avui!",
|
||||||
"noEventsFound": "No s'han trobat esdeveniments",
|
"noEventsFound": "No s'han trobat esdeveniments"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plataformes",
|
"platforms": "Plataformes",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Fitxers"
|
"sharedFiles": "Fitxers"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Cançons",
|
|
||||||
"movies": "Pel·lícules",
|
|
||||||
"episodes": "Episodis",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Veřejná IP",
|
"public_ip": "Veřejná IP",
|
||||||
"region": "Oblast",
|
"region": "Oblast",
|
||||||
"country": "Stát",
|
"country": "Stát"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanály",
|
"channels": "Kanály",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fyzické vydání",
|
"physicalRelease": "Fyzické vydání",
|
||||||
"digitalRelease": "Digitální vydání",
|
"digitalRelease": "Digitální vydání",
|
||||||
"noEventsToday": "Pro dnešek žádné události!",
|
"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": {
|
"romm": {
|
||||||
"platforms": "Platformy",
|
"platforms": "Platformy",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Stažení",
|
"downloads": "Stažení",
|
||||||
"uploads": "Nahrávání",
|
"uploads": "Nahrávání",
|
||||||
"sharedFiles": "Soubory"
|
"sharedFiles": "Soubory"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Skladby",
|
|
||||||
"movies": "Filmy",
|
|
||||||
"episodes": "Epizody",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Offentlig IP",
|
"public_ip": "Offentlig IP",
|
||||||
"region": "Område",
|
"region": "Område",
|
||||||
"country": "Land",
|
"country": "Land"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanaler",
|
"channels": "Kanaler",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fysisk udgivelse",
|
"physicalRelease": "Fysisk udgivelse",
|
||||||
"digitalRelease": "Digitale udgivelser",
|
"digitalRelease": "Digitale udgivelser",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforme",
|
"platforms": "Platforme",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Filer"
|
"sharedFiles": "Filer"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Sange",
|
|
||||||
"movies": "Film",
|
|
||||||
"episodes": "Episoder",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
"load": "Last",
|
"load": "Last",
|
||||||
"temp": "TEMP",
|
"temp": "TEMP",
|
||||||
"max": "Max",
|
"max": "Max",
|
||||||
"uptime": "BETRIEBSZEIT"
|
"uptime": "UP"
|
||||||
},
|
},
|
||||||
"unifi": {
|
"unifi": {
|
||||||
"users": "Benutzer",
|
"users": "Benutzer",
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
"wlan_devices": "WLAN-Geräte",
|
"wlan_devices": "WLAN-Geräte",
|
||||||
"lan_users": "LAN-Benutzer",
|
"lan_users": "LAN-Benutzer",
|
||||||
"wlan_users": "WLAN-Benutzer",
|
"wlan_users": "WLAN-Benutzer",
|
||||||
"up": "BETRIEBSZEIT",
|
"up": "UP",
|
||||||
"down": "EMPFANGEN",
|
"down": "EMPFANGEN",
|
||||||
"wait": "Bitte warten",
|
"wait": "Bitte warten",
|
||||||
"empty_data": "Subsystem-Status unbekannt"
|
"empty_data": "Subsystem-Status unbekannt"
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
"sent": "Gesendet",
|
"sent": "Gesendet",
|
||||||
"externalIPAddress": "Externe IP",
|
"externalIPAddress": "Externe IP",
|
||||||
"externalIPv6Address": "Externe IPv6",
|
"externalIPv6Address": "Externe IPv6",
|
||||||
"externalIPv6Prefix": "Externes IPv6-Präfix"
|
"externalIPv6Prefix": "Externer IPv4-Präfix"
|
||||||
},
|
},
|
||||||
"caddy": {
|
"caddy": {
|
||||||
"upstreams": "Upstreams",
|
"upstreams": "Upstreams",
|
||||||
@@ -436,7 +436,7 @@
|
|||||||
"temp": "TEMP",
|
"temp": "TEMP",
|
||||||
"_temp": "Temperatur",
|
"_temp": "Temperatur",
|
||||||
"warn": "Warnung",
|
"warn": "Warnung",
|
||||||
"uptime": "BETRIEBSZEIT",
|
"uptime": "UP",
|
||||||
"total": "Gesamt",
|
"total": "Gesamt",
|
||||||
"free": "Frei",
|
"free": "Frei",
|
||||||
"used": "In Benutzung",
|
"used": "In Benutzung",
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Öffentliche IP",
|
"public_ip": "Öffentliche IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Land",
|
"country": "Land"
|
||||||
"port_forwarded": "Port weitergeleitet"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanäle",
|
"channels": "Kanäle",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physische Version",
|
"physicalRelease": "Physische Version",
|
||||||
"digitalRelease": "Digitale Version",
|
"digitalRelease": "Digitale Version",
|
||||||
"noEventsToday": "Heute keine Ereignisse!",
|
"noEventsToday": "Heute keine Ereignisse!",
|
||||||
"noEventsFound": "Keine Termine gefunden",
|
"noEventsFound": "Keine Termine gefunden"
|
||||||
"errorWhenLoadingData": "Fehler beim Laden der Kalenderdaten"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plattformen",
|
"platforms": "Plattformen",
|
||||||
@@ -1027,11 +1025,11 @@
|
|||||||
"timeleft": "Verbleibende Zeit"
|
"timeleft": "Verbleibende Zeit"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Lesezeichen",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Favoriten",
|
"favorites": "Favorites",
|
||||||
"archived": "Archiviert",
|
"archived": "Archived",
|
||||||
"highlights": "Highlights",
|
"highlights": "Highlights",
|
||||||
"lists": "Listen",
|
"lists": "Lists",
|
||||||
"tags": "Schlagwörter"
|
"tags": "Schlagwörter"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Dateien"
|
"sharedFiles": "Dateien"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Filme",
|
|
||||||
"episodes": "Episoden",
|
|
||||||
"other": "Andere"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Dienstprobleme",
|
|
||||||
"hostErrors": "Hostprobleme"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Δημόσια ΙΡ",
|
"public_ip": "Δημόσια ΙΡ",
|
||||||
"region": "Περιοχή",
|
"region": "Περιοχή",
|
||||||
"country": "Χώρα",
|
"country": "Χώρα"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Κανάλια",
|
"channels": "Κανάλια",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Αρχεία"
|
"sharedFiles": "Αρχεία"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Τραγούδια",
|
|
||||||
"movies": "Ταινίες",
|
|
||||||
"episodes": "Επεισόδια",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -359,12 +359,6 @@
|
|||||||
"services": "Services",
|
"services": "Services",
|
||||||
"middleware": "Middleware"
|
"middleware": "Middleware"
|
||||||
},
|
},
|
||||||
"trilium": {
|
|
||||||
"version": "Version",
|
|
||||||
"notesCount": "Notes",
|
|
||||||
"dbSize": "Database Size",
|
|
||||||
"unknown": "Unknown"
|
|
||||||
},
|
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
"nothing_streaming": "No Active Streams",
|
"nothing_streaming": "No Active Streams",
|
||||||
"please_wait": "Please Wait"
|
"please_wait": "Please Wait"
|
||||||
@@ -574,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -1056,20 +1049,5 @@
|
|||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"episodes": "Episodes",
|
"episodes": "Episodes",
|
||||||
"other": "Other"
|
"other": "Other"
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
},
|
|
||||||
"komodo": {
|
|
||||||
"total": "Total",
|
|
||||||
"running": "Running",
|
|
||||||
"stopped": "Stopped",
|
|
||||||
"down": "Down",
|
|
||||||
"unhealthy": "Unhealthy",
|
|
||||||
"unknown": "Unknown",
|
|
||||||
"servers": "Servers",
|
|
||||||
"stacks": "Stacks",
|
|
||||||
"containers": "Containers"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Regiono",
|
"region": "Regiono",
|
||||||
"country": "Lando",
|
"country": "Lando"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanaloj",
|
"channels": "Kanaloj",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Kantoj",
|
|
||||||
"movies": "Filmoj",
|
|
||||||
"episodes": "Epizodoj",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP pública",
|
"public_ip": "IP pública",
|
||||||
"region": "Región",
|
"region": "Región",
|
||||||
"country": "País",
|
"country": "País"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canales",
|
"channels": "Canales",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Lanzamiento en físico",
|
"physicalRelease": "Lanzamiento en físico",
|
||||||
"digitalRelease": "Lanzamiento en digital",
|
"digitalRelease": "Lanzamiento en digital",
|
||||||
"noEventsToday": "¡Sin eventos para hoy!",
|
"noEventsToday": "¡Sin eventos para hoy!",
|
||||||
"noEventsFound": "No se encontraron eventos",
|
"noEventsFound": "No se encontraron eventos"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plataformas",
|
"platforms": "Plataformas",
|
||||||
@@ -1027,11 +1025,11 @@
|
|||||||
"timeleft": "Tiempo restante"
|
"timeleft": "Tiempo restante"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Marcadores",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Favoritos",
|
"favorites": "Favorites",
|
||||||
"archived": "Archivado",
|
"archived": "Archived",
|
||||||
"highlights": "Destacados",
|
"highlights": "Highlights",
|
||||||
"lists": "Listas",
|
"lists": "Lists",
|
||||||
"tags": "Etiquetas"
|
"tags": "Etiquetas"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Descargas",
|
"downloads": "Descargas",
|
||||||
"uploads": "Subidas",
|
"uploads": "Subidas",
|
||||||
"sharedFiles": "Archivos"
|
"sharedFiles": "Archivos"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Canciones",
|
|
||||||
"movies": "Películas",
|
|
||||||
"episodes": "Episodios",
|
|
||||||
"other": "Otros"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "Ez da gertaerarik aurkitu.",
|
"noEventsFound": "Ez da gertaerarik aurkitu."
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Abestiak",
|
|
||||||
"movies": "Filmak",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"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",
|
"bitrate": "Débit",
|
||||||
"no_active": "Aucun flux actif",
|
"no_active": "Aucun flux actif",
|
||||||
"movies": "Films",
|
"movies": "Films",
|
||||||
"series": "Séries",
|
"series": "Séries TV",
|
||||||
"episodes": "Épisodes",
|
"episodes": "Épisodes",
|
||||||
"songs": "Chansons"
|
"songs": "Chansons"
|
||||||
},
|
},
|
||||||
@@ -241,7 +241,7 @@
|
|||||||
"sonarr": {
|
"sonarr": {
|
||||||
"wanted": "Demandé",
|
"wanted": "Demandé",
|
||||||
"queued": "En file d'attente",
|
"queued": "En file d'attente",
|
||||||
"series": "Séries",
|
"series": "Séries TV",
|
||||||
"queue": "En attente",
|
"queue": "En attente",
|
||||||
"unknown": "Inconnu"
|
"unknown": "Inconnu"
|
||||||
},
|
},
|
||||||
@@ -405,7 +405,7 @@
|
|||||||
"medusa": {
|
"medusa": {
|
||||||
"wanted": "Demandé",
|
"wanted": "Demandé",
|
||||||
"queued": "En file d'attente",
|
"queued": "En file d'attente",
|
||||||
"series": "Séries"
|
"series": "Séries TV"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Joueurs",
|
"players": "Joueurs",
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP publique",
|
"public_ip": "IP publique",
|
||||||
"region": "Région",
|
"region": "Région",
|
||||||
"country": "Pays",
|
"country": "Pays"
|
||||||
"port_forwarded": "Port Transféré"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Chaînes",
|
"channels": "Chaînes",
|
||||||
@@ -673,14 +672,14 @@
|
|||||||
"m": "m"
|
"m": "m"
|
||||||
},
|
},
|
||||||
"atsumeru": {
|
"atsumeru": {
|
||||||
"series": "Séries",
|
"series": "Séries TV",
|
||||||
"archives": "Archives",
|
"archives": "Archives",
|
||||||
"chapters": "Chapitres",
|
"chapters": "Chapitres",
|
||||||
"categories": "Catégories"
|
"categories": "Catégories"
|
||||||
},
|
},
|
||||||
"komga": {
|
"komga": {
|
||||||
"libraries": "Bibliothèques",
|
"libraries": "Bibliothèques",
|
||||||
"series": "Séries",
|
"series": "Séries TV",
|
||||||
"books": "Livres"
|
"books": "Livres"
|
||||||
},
|
},
|
||||||
"diskstation": {
|
"diskstation": {
|
||||||
@@ -689,7 +688,7 @@
|
|||||||
"volumeAvailable": "Disponible"
|
"volumeAvailable": "Disponible"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "Séries",
|
"series": "Séries TV",
|
||||||
"issues": "Anomalies",
|
"issues": "Anomalies",
|
||||||
"wanted": "Demandé"
|
"wanted": "Demandé"
|
||||||
},
|
},
|
||||||
@@ -773,7 +772,7 @@
|
|||||||
"books": "Livres",
|
"books": "Livres",
|
||||||
"authors": "Auteurs",
|
"authors": "Auteurs",
|
||||||
"categories": "Catégories",
|
"categories": "Catégories",
|
||||||
"series": "Séries"
|
"series": "Séries TV"
|
||||||
},
|
},
|
||||||
"jdownloader": {
|
"jdownloader": {
|
||||||
"downloadCount": "En attente",
|
"downloadCount": "En attente",
|
||||||
@@ -782,7 +781,7 @@
|
|||||||
"downloadSpeed": "Débit"
|
"downloadSpeed": "Débit"
|
||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "Séries",
|
"seriesCount": "Séries TV",
|
||||||
"totalFiles": "Fichiers"
|
"totalFiles": "Fichiers"
|
||||||
},
|
},
|
||||||
"azuredevops": {
|
"azuredevops": {
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Sortie physique",
|
"physicalRelease": "Sortie physique",
|
||||||
"digitalRelease": "Sortie numérique",
|
"digitalRelease": "Sortie numérique",
|
||||||
"noEventsToday": "Rien pour aujourd'hui !",
|
"noEventsToday": "Rien pour aujourd'hui !",
|
||||||
"noEventsFound": "Aucun événement trouvé",
|
"noEventsFound": "Aucun événement trouvé"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plateformes",
|
"platforms": "Plateformes",
|
||||||
@@ -1030,7 +1028,7 @@
|
|||||||
"bookmarks": "Marque-pages",
|
"bookmarks": "Marque-pages",
|
||||||
"favorites": "Favoris",
|
"favorites": "Favoris",
|
||||||
"archived": "Archivé",
|
"archived": "Archivé",
|
||||||
"highlights": "À la une",
|
"highlights": "Highlights",
|
||||||
"lists": "Listes",
|
"lists": "Listes",
|
||||||
"tags": "Étiquettes"
|
"tags": "Étiquettes"
|
||||||
},
|
},
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Téléchargements",
|
"downloads": "Téléchargements",
|
||||||
"uploads": "Téléversements",
|
"uploads": "Téléversements",
|
||||||
"sharedFiles": "Fichiers"
|
"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,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,8 +149,8 @@
|
|||||||
"received": "Primljeno",
|
"received": "Primljeno",
|
||||||
"sent": "Poslano",
|
"sent": "Poslano",
|
||||||
"externalIPAddress": "Eksterna IP adresa",
|
"externalIPAddress": "Eksterna IP adresa",
|
||||||
"externalIPv6Address": "Vanjs. IPv6",
|
"externalIPv6Address": "Ext. IPv6",
|
||||||
"externalIPv6Prefix": "Vanjs. IPv6 prefiks"
|
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||||
},
|
},
|
||||||
"caddy": {
|
"caddy": {
|
||||||
"upstreams": "Glavne grane",
|
"upstreams": "Glavne grane",
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
"connectedAp": "Povezani AP-ovi",
|
"connectedAp": "Povezani AP-ovi",
|
||||||
"activeUser": "Aktivni uređaji",
|
"activeUser": "Aktivni uređaji",
|
||||||
"alerts": "Upozorenja",
|
"alerts": "Upozorenja",
|
||||||
"connectedGateways": "Povezani pristupnici",
|
"connectedGateways": "Connected gateways",
|
||||||
"connectedSwitches": "Povezani prekidači"
|
"connectedSwitches": "Povezani prekidači"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
@@ -229,8 +229,8 @@
|
|||||||
"seed": "Prenošenje preuzetog sadržaja"
|
"seed": "Prenošenje preuzetog sadržaja"
|
||||||
},
|
},
|
||||||
"develancacheui": {
|
"develancacheui": {
|
||||||
"cachehitbytes": "Bajtovi pogodaka predmemorije",
|
"cachehitbytes": "Cache Hit Bytes",
|
||||||
"cachemissbytes": "Bajtovi promašaja predmemorije"
|
"cachemissbytes": "Cache Miss Bytes"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "Preuzimanje",
|
"download": "Preuzimanje",
|
||||||
@@ -313,13 +313,13 @@
|
|||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Preuzeto",
|
"download": "Preuzeto",
|
||||||
"nondownload": "Nepreuzeto",
|
"nondownload": "Non-Downloaded",
|
||||||
"read": "Pročitano",
|
"read": "Pročitano",
|
||||||
"unread": "Nepročitano",
|
"unread": "Nepročitano",
|
||||||
"downloadedread": "Preuzeto i pročitano",
|
"downloadedread": "Downloaded & Read",
|
||||||
"downloadedunread": "Preuzeto i nepročitano",
|
"downloadedunread": "Downloaded & Unread",
|
||||||
"nondownloadedread": "Nepreuzeto i pročitano",
|
"nondownloadedread": "Non-Downloaded & Read",
|
||||||
"nondownloadedunread": "Nepreuzeto i nepročitano"
|
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||||
},
|
},
|
||||||
"tailscale": {
|
"tailscale": {
|
||||||
"address": "Adresa",
|
"address": "Adresa",
|
||||||
@@ -337,15 +337,15 @@
|
|||||||
},
|
},
|
||||||
"technitium": {
|
"technitium": {
|
||||||
"totalQueries": "Upiti",
|
"totalQueries": "Upiti",
|
||||||
"totalNoError": "Uspješno",
|
"totalNoError": "Success",
|
||||||
"totalServerFailure": "Neuspješno",
|
"totalServerFailure": "Failures",
|
||||||
"totalNxDomain": "NX domene",
|
"totalNxDomain": "NX Domains",
|
||||||
"totalRefused": "Odbijeno",
|
"totalRefused": "Refused",
|
||||||
"totalAuthoritative": "Autoritativan",
|
"totalAuthoritative": "Authoritative",
|
||||||
"totalRecursive": "Rekurzivno",
|
"totalRecursive": "Recursive",
|
||||||
"totalCached": "Predmemorirano",
|
"totalCached": "Cached",
|
||||||
"totalBlocked": "Blokirano",
|
"totalBlocked": "Blokirano",
|
||||||
"totalDropped": "Odbačeno",
|
"totalDropped": "Dropped",
|
||||||
"totalClients": "Klijenti"
|
"totalClients": "Klijenti"
|
||||||
},
|
},
|
||||||
"tdarr": {
|
"tdarr": {
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Javni IP",
|
"public_ip": "Javni IP",
|
||||||
"region": "Regija",
|
"region": "Regija",
|
||||||
"country": "Zemlja",
|
"country": "Zemlja"
|
||||||
"port_forwarded": "Port proslijeđen"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanali",
|
"channels": "Kanali",
|
||||||
@@ -706,8 +705,8 @@
|
|||||||
"time": "Vrijeme"
|
"time": "Vrijeme"
|
||||||
},
|
},
|
||||||
"firefly": {
|
"firefly": {
|
||||||
"networth": "Neto vrijednost",
|
"networth": "Net Worth",
|
||||||
"budget": "Budžet"
|
"budget": "Budget"
|
||||||
},
|
},
|
||||||
"grafana": {
|
"grafana": {
|
||||||
"dashboards": "Pregledne ploče",
|
"dashboards": "Pregledne ploče",
|
||||||
@@ -857,21 +856,20 @@
|
|||||||
"physicalRelease": "Fizičko izdanje",
|
"physicalRelease": "Fizičko izdanje",
|
||||||
"digitalRelease": "Digitalno izdanje",
|
"digitalRelease": "Digitalno izdanje",
|
||||||
"noEventsToday": "Danas nema događaja!",
|
"noEventsToday": "Danas nema događaja!",
|
||||||
"noEventsFound": "Nema događaja",
|
"noEventsFound": "Nema događaja"
|
||||||
"errorWhenLoadingData": "Pogreška prilikom učitavanja podataka kalendara"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforme",
|
"platforms": "Platforme",
|
||||||
"totalRoms": "Igre",
|
"totalRoms": "Igre",
|
||||||
"saves": "Spremljeno",
|
"saves": "Saves",
|
||||||
"states": "Stanja",
|
"states": "States",
|
||||||
"screenshots": "Snimke ekrana",
|
"screenshots": "Snimke ekrana",
|
||||||
"totalfilesize": "Ukupna veličina"
|
"totalfilesize": "Ukupna veličina"
|
||||||
},
|
},
|
||||||
"mailcow": {
|
"mailcow": {
|
||||||
"domains": "Domene",
|
"domains": "Domene",
|
||||||
"mailboxes": "Poštanski sandučići",
|
"mailboxes": "Mailboxes",
|
||||||
"mails": "Pošta",
|
"mails": "Mails",
|
||||||
"storage": "Spremište"
|
"storage": "Spremište"
|
||||||
},
|
},
|
||||||
"netdata": {
|
"netdata": {
|
||||||
@@ -888,7 +886,7 @@
|
|||||||
"notifications": "Obavijesti",
|
"notifications": "Obavijesti",
|
||||||
"issues": "Problemi",
|
"issues": "Problemi",
|
||||||
"pulls": "Zahtjevi za povlačenje",
|
"pulls": "Zahtjevi za povlačenje",
|
||||||
"repositories": "Repozitoriji"
|
"repositories": "Repositories"
|
||||||
},
|
},
|
||||||
"stash": {
|
"stash": {
|
||||||
"scenes": "Scene",
|
"scenes": "Scene",
|
||||||
@@ -941,11 +939,11 @@
|
|||||||
"upload": "Prijenos"
|
"upload": "Prijenos"
|
||||||
},
|
},
|
||||||
"stocks": {
|
"stocks": {
|
||||||
"stocks": "Dionice",
|
"stocks": "Stocks",
|
||||||
"loading": "Učitavanje",
|
"loading": "Loading",
|
||||||
"open": "Otvoreno - američko tržište",
|
"open": "Open - US Market",
|
||||||
"closed": "Zatvoreno - američko tržište",
|
"closed": "Closed - US Market",
|
||||||
"invalidConfiguration": "Nepravilna konfiguracija"
|
"invalidConfiguration": "Invalid Configuration"
|
||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Kamere",
|
"cameras": "Kamere",
|
||||||
@@ -958,26 +956,26 @@
|
|||||||
"tags": "Oznake"
|
"tags": "Oznake"
|
||||||
},
|
},
|
||||||
"zabbix": {
|
"zabbix": {
|
||||||
"unclassified": "Nije klasificirano",
|
"unclassified": "Not classified",
|
||||||
"information": "Informacije",
|
"information": "Informacije",
|
||||||
"warning": "Upozorenje",
|
"warning": "Upozorenje",
|
||||||
"average": "Prosjek",
|
"average": "Average",
|
||||||
"high": "Visoko",
|
"high": "High",
|
||||||
"disaster": "Katastrofa"
|
"disaster": "Disaster"
|
||||||
},
|
},
|
||||||
"lubelogger": {
|
"lubelogger": {
|
||||||
"vehicle": "Vozilo",
|
"vehicle": "Vehicle",
|
||||||
"vehicles": "Vozila",
|
"vehicles": "Vehicles",
|
||||||
"serviceRecords": "Servisni zapisi",
|
"serviceRecords": "Service Records",
|
||||||
"reminders": "Podsjetnici",
|
"reminders": "Podsjetnici",
|
||||||
"nextReminder": "Sljedeći podsjetnik",
|
"nextReminder": "Sljedeći podsjetnik",
|
||||||
"none": "Ništa"
|
"none": "None"
|
||||||
},
|
},
|
||||||
"vikunja": {
|
"vikunja": {
|
||||||
"projects": "Aktivni projekti",
|
"projects": "Active Projects",
|
||||||
"tasks7d": "Zadaci dospijeća ovog tjedna",
|
"tasks7d": "Tasks Due This Week",
|
||||||
"tasksOverdue": "Zakašnjeli zadaci",
|
"tasksOverdue": "Overdue Tasks",
|
||||||
"tasksInProgress": "Zadaci u tijeku"
|
"tasksInProgress": "Tasks In Progress"
|
||||||
},
|
},
|
||||||
"headscale": {
|
"headscale": {
|
||||||
"name": "Ime",
|
"name": "Ime",
|
||||||
@@ -989,7 +987,7 @@
|
|||||||
},
|
},
|
||||||
"beszel": {
|
"beszel": {
|
||||||
"name": "Ime",
|
"name": "Ime",
|
||||||
"systems": "Sustavi",
|
"systems": "Systems",
|
||||||
"up": "Dostupno",
|
"up": "Dostupno",
|
||||||
"down": "Nedostupno",
|
"down": "Nedostupno",
|
||||||
"paused": "Zaustavljeno",
|
"paused": "Zaustavljeno",
|
||||||
@@ -999,26 +997,26 @@
|
|||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "MEM",
|
"memory": "MEM",
|
||||||
"disk": "Disk",
|
"disk": "Disk",
|
||||||
"network": "Mreža"
|
"network": "NET"
|
||||||
},
|
},
|
||||||
"argocd": {
|
"argocd": {
|
||||||
"apps": "Aplikacije",
|
"apps": "Apps",
|
||||||
"synced": "Sinkronizirano",
|
"synced": "Synced",
|
||||||
"outOfSync": "Izvan sinkronizacije",
|
"outOfSync": "Out Of Sync",
|
||||||
"healthy": "Funkcionalno",
|
"healthy": "Funkcionalno",
|
||||||
"degraded": "Degradirano",
|
"degraded": "Degraded",
|
||||||
"progressing": "Napredovanje",
|
"progressing": "Progressing",
|
||||||
"missing": "Nedostaje",
|
"missing": "Nedostaje",
|
||||||
"suspended": "Suspendiran"
|
"suspended": "Suspended"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Učitavanje"
|
"loading": "Loading"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Grupe",
|
"groups": "Groups",
|
||||||
"issues": "Problemi",
|
"issues": "Problemi",
|
||||||
"merges": "Zahtjevi za sjedinjenjem",
|
"merges": "Merge Requests",
|
||||||
"projects": "Projekti"
|
"projects": "Projects"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Stanje",
|
"status": "Stanje",
|
||||||
@@ -1027,32 +1025,22 @@
|
|||||||
"timeleft": "Preostalo vrijeme"
|
"timeleft": "Preostalo vrijeme"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Oznake",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Favoriti",
|
"favorites": "Favorites",
|
||||||
"archived": "Arhivirano",
|
"archived": "Archived",
|
||||||
"highlights": "Izdvajamo",
|
"highlights": "Highlights",
|
||||||
"lists": "Liste",
|
"lists": "Lists",
|
||||||
"tags": "Oznake"
|
"tags": "Oznake"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
"slskStatus": "Mreža",
|
"slskStatus": "Mreža",
|
||||||
"connected": "Povezano",
|
"connected": "Povezano",
|
||||||
"disconnected": "Odspojeno",
|
"disconnected": "Odspojeno",
|
||||||
"updateStatus": "Ažuriraj",
|
"updateStatus": "Update",
|
||||||
"update_yes": "Dostupno",
|
"update_yes": "Dostupno",
|
||||||
"update_no": "Aktualno",
|
"update_no": "Aktualno",
|
||||||
"downloads": "Preuzimanje",
|
"downloads": "Downloads",
|
||||||
"uploads": "Prijenos",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Datoteke"
|
"sharedFiles": "Datoteke"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Pjesme",
|
|
||||||
"movies": "Filmovi",
|
|
||||||
"episodes": "Epizode",
|
|
||||||
"other": "Ostalo"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Nyilvános IP-cím",
|
"public_ip": "Nyilvános IP-cím",
|
||||||
"region": "Régió",
|
"region": "Régió",
|
||||||
"country": "Ország",
|
"country": "Ország"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Csatornák",
|
"channels": "Csatornák",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fizikai kiadás",
|
"physicalRelease": "Fizikai kiadás",
|
||||||
"digitalRelease": "Digitális kiadás",
|
"digitalRelease": "Digitális kiadás",
|
||||||
"noEventsToday": "Ezen a napon nincsenek események!",
|
"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": {
|
"romm": {
|
||||||
"platforms": "Felület",
|
"platforms": "Felület",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Fájlok"
|
"sharedFiles": "Fájlok"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Zeneszám",
|
|
||||||
"movies": "Film",
|
|
||||||
"episodes": "Epizód",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP Publik",
|
"public_ip": "IP Publik",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Negara",
|
"country": "Negara"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channel",
|
"channels": "Channel",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Rilis Fisik",
|
"physicalRelease": "Rilis Fisik",
|
||||||
"digitalRelease": "Rilis Digital",
|
"digitalRelease": "Rilis Digital",
|
||||||
"noEventsToday": "Tidak ada acara untuk hari ini!",
|
"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": {
|
"romm": {
|
||||||
"platforms": "Platform",
|
"platforms": "Platform",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "File"
|
"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}}",
|
"date": "{{value, date}}",
|
||||||
"relativeDate": "{{value, relativeDate}}",
|
"relativeDate": "{{value, relativeDate}}",
|
||||||
"duration": "{{value, duration}}",
|
"duration": "{{value, duration}}",
|
||||||
"months": "m",
|
"months": "mo",
|
||||||
"days": "g",
|
"days": "g",
|
||||||
"hours": "o",
|
"hours": "o",
|
||||||
"minutes": "m",
|
"minutes": "m",
|
||||||
@@ -313,13 +313,13 @@
|
|||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Scaricato",
|
"download": "Scaricato",
|
||||||
"nondownload": "Non Scaricato",
|
"nondownload": "Non-Downloaded",
|
||||||
"read": "Letti",
|
"read": "Letti",
|
||||||
"unread": "Non letto",
|
"unread": "Non letto",
|
||||||
"downloadedread": "Scaricato E Letto",
|
"downloadedread": "Downloaded & Read",
|
||||||
"downloadedunread": "Scaricato E Non Letto",
|
"downloadedunread": "Downloaded & Unread",
|
||||||
"nondownloadedread": "Non Scaricato E Letto",
|
"nondownloadedread": "Non-Downloaded & Read",
|
||||||
"nondownloadedunread": "Non Scaricato E Non Letto"
|
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||||
},
|
},
|
||||||
"tailscale": {
|
"tailscale": {
|
||||||
"address": "Indirizzo",
|
"address": "Indirizzo",
|
||||||
@@ -339,13 +339,13 @@
|
|||||||
"totalQueries": "Richieste",
|
"totalQueries": "Richieste",
|
||||||
"totalNoError": "Successo",
|
"totalNoError": "Successo",
|
||||||
"totalServerFailure": "Fallimenti",
|
"totalServerFailure": "Fallimenti",
|
||||||
"totalNxDomain": "Domini NX",
|
"totalNxDomain": "NX Domains",
|
||||||
"totalRefused": "Rifiutato",
|
"totalRefused": "Refused",
|
||||||
"totalAuthoritative": "Autoritario",
|
"totalAuthoritative": "Authoritative",
|
||||||
"totalRecursive": "Ricorsivo",
|
"totalRecursive": "Recursive",
|
||||||
"totalCached": "In cache",
|
"totalCached": "Cached",
|
||||||
"totalBlocked": "Bloccati",
|
"totalBlocked": "Bloccati",
|
||||||
"totalDropped": "Saltati",
|
"totalDropped": "Dropped",
|
||||||
"totalClients": "Client"
|
"totalClients": "Client"
|
||||||
},
|
},
|
||||||
"tdarr": {
|
"tdarr": {
|
||||||
@@ -568,13 +568,12 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP pubblico",
|
"public_ip": "IP pubblico",
|
||||||
"region": "Località",
|
"region": "Località",
|
||||||
"country": "Paese",
|
"country": "Paese"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canali",
|
"channels": "Canali",
|
||||||
"hd": "HD",
|
"hd": "HD",
|
||||||
"tunerCount": "Regolatori",
|
"tunerCount": "Tuners",
|
||||||
"channelNumber": "Canale",
|
"channelNumber": "Canale",
|
||||||
"channelNetwork": "Rete",
|
"channelNetwork": "Rete",
|
||||||
"signalStrength": "Intensità",
|
"signalStrength": "Intensità",
|
||||||
@@ -706,7 +705,7 @@
|
|||||||
"time": "Tempo"
|
"time": "Tempo"
|
||||||
},
|
},
|
||||||
"firefly": {
|
"firefly": {
|
||||||
"networth": "Valore Netto",
|
"networth": "Net Worth",
|
||||||
"budget": "Budget"
|
"budget": "Budget"
|
||||||
},
|
},
|
||||||
"grafana": {
|
"grafana": {
|
||||||
@@ -857,30 +856,29 @@
|
|||||||
"physicalRelease": "Release fisici",
|
"physicalRelease": "Release fisici",
|
||||||
"digitalRelease": "Versione digitale",
|
"digitalRelease": "Versione digitale",
|
||||||
"noEventsToday": "Nessun evento per oggi!",
|
"noEventsToday": "Nessun evento per oggi!",
|
||||||
"noEventsFound": "Nessun evento trovato",
|
"noEventsFound": "Nessun evento trovato"
|
||||||
"errorWhenLoadingData": "Errore durante il caricamento dei dati del calendario"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Piattaforme",
|
"platforms": "Piattaforme",
|
||||||
"totalRoms": "Giochi",
|
"totalRoms": "Giochi",
|
||||||
"saves": "Salvati",
|
"saves": "Saves",
|
||||||
"states": "Stati",
|
"states": "States",
|
||||||
"screenshots": "Screenshot",
|
"screenshots": "Screenshots",
|
||||||
"totalfilesize": "Dimensioni totali"
|
"totalfilesize": "Total Size"
|
||||||
},
|
},
|
||||||
"mailcow": {
|
"mailcow": {
|
||||||
"domains": "Domini",
|
"domains": "Domini",
|
||||||
"mailboxes": "Caselle di posta",
|
"mailboxes": "Mailboxes",
|
||||||
"mails": "Mail",
|
"mails": "Mails",
|
||||||
"storage": "Archiviazione"
|
"storage": "Archiviazione"
|
||||||
},
|
},
|
||||||
"netdata": {
|
"netdata": {
|
||||||
"warnings": "Avvisi",
|
"warnings": "Avvisi",
|
||||||
"criticals": "Critici"
|
"criticals": "Criticals"
|
||||||
},
|
},
|
||||||
"plantit": {
|
"plantit": {
|
||||||
"events": "Eventi",
|
"events": "Eventi",
|
||||||
"plants": "Piante",
|
"plants": "Plants",
|
||||||
"photos": "Foto",
|
"photos": "Foto",
|
||||||
"species": "Specie"
|
"species": "Specie"
|
||||||
},
|
},
|
||||||
@@ -888,7 +886,7 @@
|
|||||||
"notifications": "Notifiche",
|
"notifications": "Notifiche",
|
||||||
"issues": "Problemi",
|
"issues": "Problemi",
|
||||||
"pulls": "Richieste di Pull",
|
"pulls": "Richieste di Pull",
|
||||||
"repositories": "Repository"
|
"repositories": "Repositories"
|
||||||
},
|
},
|
||||||
"stash": {
|
"stash": {
|
||||||
"scenes": "Scene",
|
"scenes": "Scene",
|
||||||
@@ -930,8 +928,8 @@
|
|||||||
"total": "Totale"
|
"total": "Totale"
|
||||||
},
|
},
|
||||||
"swagdashboard": {
|
"swagdashboard": {
|
||||||
"proxied": "Proxato",
|
"proxied": "Proxied",
|
||||||
"auth": "Con Autenticazione",
|
"auth": "With Auth",
|
||||||
"outdated": "Obsoleto",
|
"outdated": "Obsoleto",
|
||||||
"banned": "Bannato"
|
"banned": "Bannato"
|
||||||
},
|
},
|
||||||
@@ -941,14 +939,14 @@
|
|||||||
"upload": "Upload"
|
"upload": "Upload"
|
||||||
},
|
},
|
||||||
"stocks": {
|
"stocks": {
|
||||||
"stocks": "Azioni",
|
"stocks": "Stocks",
|
||||||
"loading": "Caricamento",
|
"loading": "Caricamento",
|
||||||
"open": "Aperto - Mercato USA",
|
"open": "Open - US Market",
|
||||||
"closed": "Chiuso - Mercato USA",
|
"closed": "Closed - US Market",
|
||||||
"invalidConfiguration": "Configurazione non valida"
|
"invalidConfiguration": "Configurazione non valida"
|
||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Telecamere",
|
"cameras": "Cameras",
|
||||||
"uptime": "Tempo di attività",
|
"uptime": "Tempo di attività",
|
||||||
"version": "Versione"
|
"version": "Versione"
|
||||||
},
|
},
|
||||||
@@ -958,26 +956,26 @@
|
|||||||
"tags": "Tag"
|
"tags": "Tag"
|
||||||
},
|
},
|
||||||
"zabbix": {
|
"zabbix": {
|
||||||
"unclassified": "Non classificato",
|
"unclassified": "Not classified",
|
||||||
"information": "Informazioni",
|
"information": "Informazioni",
|
||||||
"warning": "Avviso",
|
"warning": "Warning",
|
||||||
"average": "Media",
|
"average": "Media",
|
||||||
"high": "Alto",
|
"high": "High",
|
||||||
"disaster": "Disastri"
|
"disaster": "Disaster"
|
||||||
},
|
},
|
||||||
"lubelogger": {
|
"lubelogger": {
|
||||||
"vehicle": "Veicolo",
|
"vehicle": "Veicolo",
|
||||||
"vehicles": "Veicoli",
|
"vehicles": "Veicoli",
|
||||||
"serviceRecords": "Record Di Servizio",
|
"serviceRecords": "Service Records",
|
||||||
"reminders": "Promemoria",
|
"reminders": "Promemoria",
|
||||||
"nextReminder": "Promemoria Seguente",
|
"nextReminder": "Promemoria Seguente",
|
||||||
"none": "Nessuno"
|
"none": "Nessuno"
|
||||||
},
|
},
|
||||||
"vikunja": {
|
"vikunja": {
|
||||||
"projects": "Progetti attivi",
|
"projects": "Active Projects",
|
||||||
"tasks7d": "Attività Settimanali",
|
"tasks7d": "Tasks Due This Week",
|
||||||
"tasksOverdue": "Task scaduti",
|
"tasksOverdue": "Overdue Tasks",
|
||||||
"tasksInProgress": "Task In Corso"
|
"tasksInProgress": "Tasks In Progress"
|
||||||
},
|
},
|
||||||
"headscale": {
|
"headscale": {
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
@@ -1007,9 +1005,9 @@
|
|||||||
"outOfSync": "Non Sincronizzato",
|
"outOfSync": "Non Sincronizzato",
|
||||||
"healthy": "Sano",
|
"healthy": "Sano",
|
||||||
"degraded": "Degradato",
|
"degraded": "Degradato",
|
||||||
"progressing": "Progressione",
|
"progressing": "Progressing",
|
||||||
"missing": "Mancanti",
|
"missing": "Mancanti",
|
||||||
"suspended": "Sospeso"
|
"suspended": "Suspended"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Caricamento"
|
"loading": "Caricamento"
|
||||||
@@ -1029,7 +1027,7 @@
|
|||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Segnalibri",
|
"bookmarks": "Segnalibri",
|
||||||
"favorites": "Preferiti",
|
"favorites": "Preferiti",
|
||||||
"archived": "Archiviato",
|
"archived": "Archived",
|
||||||
"highlights": "Highlights",
|
"highlights": "Highlights",
|
||||||
"lists": "Liste",
|
"lists": "Liste",
|
||||||
"tags": "Tag"
|
"tags": "Tag"
|
||||||
@@ -1038,21 +1036,11 @@
|
|||||||
"slskStatus": "Rete",
|
"slskStatus": "Rete",
|
||||||
"connected": "Connesso",
|
"connected": "Connesso",
|
||||||
"disconnected": "Disconnesso",
|
"disconnected": "Disconnesso",
|
||||||
"updateStatus": "Aggiornamento",
|
"updateStatus": "Update",
|
||||||
"update_yes": "Disponibili",
|
"update_yes": "Disponibili",
|
||||||
"update_no": "Aggiornato",
|
"update_no": "Aggiornato",
|
||||||
"downloads": "Download",
|
"downloads": "Download",
|
||||||
"uploads": "Caricamenti",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "File"
|
"sharedFiles": "File"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Canzoni",
|
|
||||||
"movies": "Film",
|
|
||||||
"episodes": "Episodi",
|
|
||||||
"other": "Altro"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Problemi di servizio",
|
|
||||||
"hostErrors": "Problemi di host"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "パブリックIP",
|
"public_ip": "パブリックIP",
|
||||||
"region": "地域",
|
"region": "地域",
|
||||||
"country": "国",
|
"country": "国"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "チャンネル",
|
"channels": "チャンネル",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "物理的なリリース",
|
"physicalRelease": "物理的なリリース",
|
||||||
"digitalRelease": "デジタル・リリース",
|
"digitalRelease": "デジタル・リリース",
|
||||||
"noEventsToday": "本日の予定なし",
|
"noEventsToday": "本日の予定なし",
|
||||||
"noEventsFound": "予定が見つかりません",
|
"noEventsFound": "予定が見つかりません"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "プラットフォーム",
|
"platforms": "プラットフォーム",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "ファイル"
|
"sharedFiles": "ファイル"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "曲",
|
|
||||||
"movies": "映画",
|
|
||||||
"episodes": "エピソード",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "채널",
|
"channels": "채널",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "기종",
|
"platforms": "기종",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "파일"
|
"sharedFiles": "파일"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "음악",
|
|
||||||
"movies": "영화",
|
|
||||||
"episodes": "에피소드",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP Awam",
|
"public_ip": "IP Awam",
|
||||||
"region": "Rantau",
|
"region": "Rantau",
|
||||||
"country": "Negara",
|
"country": "Negara"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Saluran",
|
"channels": "Saluran",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Edaran fizikal",
|
"physicalRelease": "Edaran fizikal",
|
||||||
"digitalRelease": "Edaran digital",
|
"digitalRelease": "Edaran digital",
|
||||||
"noEventsToday": "Tiada agenda untuk hari ini!",
|
"noEventsToday": "Tiada agenda untuk hari ini!",
|
||||||
"noEventsFound": "Tiada agenda dijumpai",
|
"noEventsFound": "Tiada agenda dijumpai"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platform",
|
"platforms": "Platform",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Lagu",
|
|
||||||
"movies": "Filem",
|
|
||||||
"episodes": "Episod",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Publiek IP",
|
"public_ip": "Publiek IP",
|
||||||
"region": "Regio",
|
"region": "Regio",
|
||||||
"country": "Land",
|
"country": "Land"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanalen",
|
"channels": "Kanalen",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fysieke versie",
|
"physicalRelease": "Fysieke versie",
|
||||||
"digitalRelease": "Digitale versie",
|
"digitalRelease": "Digitale versie",
|
||||||
"noEventsToday": "Geen gebeurtenissen voor vandaag!",
|
"noEventsToday": "Geen gebeurtenissen voor vandaag!",
|
||||||
"noEventsFound": "Geen gebeurtenissen gevonden",
|
"noEventsFound": "Geen gebeurtenissen gevonden"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platformen",
|
"platforms": "Platformen",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Bestanden"
|
"sharedFiles": "Bestanden"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Nummers",
|
|
||||||
"movies": "Films",
|
|
||||||
"episodes": "Afleveringen",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Offentlig IP",
|
"public_ip": "Offentlig IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Land",
|
"country": "Land"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanal",
|
"channels": "Kanal",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fysisk utslipp",
|
"physicalRelease": "Fysisk utslipp",
|
||||||
"digitalRelease": "Digital utgivelse",
|
"digitalRelease": "Digital utgivelse",
|
||||||
"noEventsToday": "Ingen hendelser for i dag!",
|
"noEventsToday": "Ingen hendelser for i dag!",
|
||||||
"noEventsFound": "Ingen hendelser funnet",
|
"noEventsFound": "Ingen hendelser funnet"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plattformer",
|
"platforms": "Plattformer",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"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",
|
"connectedAp": "Połączone punkty dostępowe",
|
||||||
"activeUser": "Aktywne urządzenia",
|
"activeUser": "Aktywne urządzenia",
|
||||||
"alerts": "Alarmy",
|
"alerts": "Alarmy",
|
||||||
"connectedGateways": "Połączone bramy",
|
"connectedGateways": "Connected gateways",
|
||||||
"connectedSwitches": "Połączone przełączniki"
|
"connectedSwitches": "Połączone przełączniki"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Adres publiczny",
|
"public_ip": "Adres publiczny",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Państwo",
|
"country": "Państwo"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanały",
|
"channels": "Kanały",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Wydanie fizyczne",
|
"physicalRelease": "Wydanie fizyczne",
|
||||||
"digitalRelease": "Wydanie cyfrowe",
|
"digitalRelease": "Wydanie cyfrowe",
|
||||||
"noEventsToday": "Brak wydarzeń na dziś!",
|
"noEventsToday": "Brak wydarzeń na dziś!",
|
||||||
"noEventsFound": "Nie znaleziono wydarzeń",
|
"noEventsFound": "Nie znaleziono wydarzeń"
|
||||||
"errorWhenLoadingData": "Wystąpił błąd podczas ładowania danych kalendarza"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platformy",
|
"platforms": "Platformy",
|
||||||
@@ -1038,21 +1036,11 @@
|
|||||||
"slskStatus": "Sieć",
|
"slskStatus": "Sieć",
|
||||||
"connected": "Połączono",
|
"connected": "Połączono",
|
||||||
"disconnected": "Rozłączono",
|
"disconnected": "Rozłączono",
|
||||||
"updateStatus": "Aktualizacja",
|
"updateStatus": "Update",
|
||||||
"update_yes": "Dostępne",
|
"update_yes": "Dostępne",
|
||||||
"update_no": "Aktualny",
|
"update_no": "Aktualny",
|
||||||
"downloads": "Pobieranie",
|
"downloads": "Downloads",
|
||||||
"uploads": "Przesyłanie",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Pliki"
|
"sharedFiles": "Pliki"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Piosenki",
|
|
||||||
"movies": "Filmy",
|
|
||||||
"episodes": "Odcinki",
|
|
||||||
"other": "Inne"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP público",
|
"public_ip": "IP público",
|
||||||
"region": "Região",
|
"region": "Região",
|
||||||
"country": "País",
|
"country": "País"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canais",
|
"channels": "Canais",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Lançamento físico",
|
"physicalRelease": "Lançamento físico",
|
||||||
"digitalRelease": "Lançamento digital",
|
"digitalRelease": "Lançamento digital",
|
||||||
"noEventsToday": "Não existem eventos hoje!",
|
"noEventsToday": "Não existem eventos hoje!",
|
||||||
"noEventsFound": "Nenhum evento encontrado",
|
"noEventsFound": "Nenhum evento encontrado"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plataformas",
|
"platforms": "Plataformas",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Ficheiros"
|
"sharedFiles": "Ficheiros"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Canções",
|
|
||||||
"movies": "Filmes",
|
|
||||||
"episodes": "Episódios",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "IP público",
|
"public_ip": "IP público",
|
||||||
"region": "Região",
|
"region": "Região",
|
||||||
"country": "País",
|
"country": "País"
|
||||||
"port_forwarded": "Porta Encaminhada"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canais",
|
"channels": "Canais",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Versão física",
|
"physicalRelease": "Versão física",
|
||||||
"digitalRelease": "Versão digital",
|
"digitalRelease": "Versão digital",
|
||||||
"noEventsToday": "Nenhum evento para hoje!",
|
"noEventsToday": "Nenhum evento para hoje!",
|
||||||
"noEventsFound": "Nenhum evento encontrado",
|
"noEventsFound": "Nenhum evento encontrado"
|
||||||
"errorWhenLoadingData": "Erro ao carregar dados do calendário"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Plataformas",
|
"platforms": "Plataformas",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Transferências",
|
"downloads": "Transferências",
|
||||||
"uploads": "Envios",
|
"uploads": "Envios",
|
||||||
"sharedFiles": "Arquivos"
|
"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": {
|
"fritzbox": {
|
||||||
"connectionStatus": "Stare",
|
"connectionStatus": "Stare",
|
||||||
"connectionStatusUnconfigured": "Neconfigurat",
|
"connectionStatusUnconfigured": "Unconfigured",
|
||||||
"connectionStatusConnecting": "Connecting",
|
"connectionStatusConnecting": "Connecting",
|
||||||
"connectionStatusAuthenticating": "Authenticating",
|
"connectionStatusAuthenticating": "Authenticating",
|
||||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
||||||
"connectionStatusDisconnecting": "Disconnecting",
|
"connectionStatusDisconnecting": "Disconnecting",
|
||||||
"connectionStatusDisconnected": "Deconectat",
|
"connectionStatusDisconnected": "Disconnected",
|
||||||
"connectionStatusConnected": "Conectat",
|
"connectionStatusConnected": "Connected",
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"maxDown": "Max. Down",
|
"maxDown": "Max. Down",
|
||||||
"maxUp": "Max. Up",
|
"maxUp": "Max. Up",
|
||||||
"down": "Jos",
|
"down": "Jos",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"received": "Primit",
|
"received": "Received",
|
||||||
"sent": "Trimis",
|
"sent": "Sent",
|
||||||
"externalIPAddress": "Ext. IP",
|
"externalIPAddress": "Ext. IP",
|
||||||
"externalIPv6Address": "Ext. IPv6",
|
"externalIPv6Address": "Ext. IPv6",
|
||||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||||
@@ -163,8 +163,8 @@
|
|||||||
},
|
},
|
||||||
"channelsdvrserver": {
|
"channelsdvrserver": {
|
||||||
"shows": "Shows",
|
"shows": "Shows",
|
||||||
"recordings": "Înregistrări",
|
"recordings": "Recordings",
|
||||||
"scheduled": "Programate",
|
"scheduled": "Scheduled",
|
||||||
"passes": "Passes"
|
"passes": "Passes"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
@@ -176,8 +176,8 @@
|
|||||||
},
|
},
|
||||||
"omada": {
|
"omada": {
|
||||||
"connectedAp": "Connected APs",
|
"connectedAp": "Connected APs",
|
||||||
"activeUser": "Dispozitive active",
|
"activeUser": "Active devices",
|
||||||
"alerts": "Alerte",
|
"alerts": "Alerts",
|
||||||
"connectedGateways": "Connected gateways",
|
"connectedGateways": "Connected gateways",
|
||||||
"connectedSwitches": "Connected switches"
|
"connectedSwitches": "Connected switches"
|
||||||
},
|
},
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
},
|
},
|
||||||
"plex": {
|
"plex": {
|
||||||
"streams": "Fluxuri active",
|
"streams": "Fluxuri active",
|
||||||
"albums": "Albume",
|
"albums": "Albums",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"tv": "Seriale"
|
"tv": "Seriale"
|
||||||
},
|
},
|
||||||
@@ -217,7 +217,7 @@
|
|||||||
"qnap": {
|
"qnap": {
|
||||||
"cpuUsage": "CPU Usage",
|
"cpuUsage": "CPU Usage",
|
||||||
"memUsage": "MEM Usage",
|
"memUsage": "MEM Usage",
|
||||||
"systemTempC": "Temperatură Sistem",
|
"systemTempC": "System Temp",
|
||||||
"poolUsage": "Pool Usage",
|
"poolUsage": "Pool Usage",
|
||||||
"volumeUsage": "Volume Usage",
|
"volumeUsage": "Volume Usage",
|
||||||
"invalid": "Invalid"
|
"invalid": "Invalid"
|
||||||
@@ -247,7 +247,7 @@
|
|||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Dorite",
|
"wanted": "Dorite",
|
||||||
"missing": "Lipsește",
|
"missing": "Missing",
|
||||||
"queued": "În coadă",
|
"queued": "În coadă",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"queue": "Coadă",
|
"queue": "Coadă",
|
||||||
@@ -256,7 +256,7 @@
|
|||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Dorite",
|
"wanted": "Dorite",
|
||||||
"queued": "În coadă",
|
"queued": "În coadă",
|
||||||
"artists": "Artiști"
|
"artists": "Artists"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Dorite",
|
"wanted": "Dorite",
|
||||||
@@ -279,21 +279,21 @@
|
|||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "În așteptare",
|
"pending": "În așteptare",
|
||||||
"processing": "Procesare",
|
"processing": "Processing",
|
||||||
"approved": "Aprobate",
|
"approved": "Aprobate",
|
||||||
"available": "Disponibile"
|
"available": "Disponibile"
|
||||||
},
|
},
|
||||||
"netalertx": {
|
"netalertx": {
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"connected": "Conectat",
|
"connected": "Connected",
|
||||||
"new_devices": "Dispozitive Noi",
|
"new_devices": "New Devices",
|
||||||
"down_alerts": "Down Alerts"
|
"down_alerts": "Down Alerts"
|
||||||
},
|
},
|
||||||
"pihole": {
|
"pihole": {
|
||||||
"queries": "Cereri",
|
"queries": "Cereri",
|
||||||
"blocked": "Blocate",
|
"blocked": "Blocate",
|
||||||
"blocked_percent": "Blocked %",
|
"blocked_percent": "Blocked %",
|
||||||
"gravity": "Gravitație"
|
"gravity": "Gravity"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Cereri",
|
"queries": "Cereri",
|
||||||
@@ -322,11 +322,11 @@
|
|||||||
"nondownloadedunread": "Non-Downloaded & Unread"
|
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||||
},
|
},
|
||||||
"tailscale": {
|
"tailscale": {
|
||||||
"address": "Adresă",
|
"address": "Address",
|
||||||
"expires": "Expiră",
|
"expires": "Expires",
|
||||||
"never": "Niciodată",
|
"never": "Never",
|
||||||
"last_seen": "Last Seen",
|
"last_seen": "Last Seen",
|
||||||
"now": "Acum",
|
"now": "Now",
|
||||||
"years": "{{number}}y",
|
"years": "{{number}}y",
|
||||||
"weeks": "{{number}}w",
|
"weeks": "{{number}}w",
|
||||||
"days": "{{number}}d",
|
"days": "{{number}}d",
|
||||||
@@ -340,9 +340,9 @@
|
|||||||
"totalNoError": "Success",
|
"totalNoError": "Success",
|
||||||
"totalServerFailure": "Failures",
|
"totalServerFailure": "Failures",
|
||||||
"totalNxDomain": "NX Domains",
|
"totalNxDomain": "NX Domains",
|
||||||
"totalRefused": "Refuzat",
|
"totalRefused": "Refused",
|
||||||
"totalAuthoritative": "Authoritative",
|
"totalAuthoritative": "Authoritative",
|
||||||
"totalRecursive": "Recursiv",
|
"totalRecursive": "Recursive",
|
||||||
"totalCached": "Cached",
|
"totalCached": "Cached",
|
||||||
"totalBlocked": "Blocate",
|
"totalBlocked": "Blocate",
|
||||||
"totalDropped": "Dropped",
|
"totalDropped": "Dropped",
|
||||||
@@ -352,7 +352,7 @@
|
|||||||
"queue": "Coadă",
|
"queue": "Coadă",
|
||||||
"processed": "Processed",
|
"processed": "Processed",
|
||||||
"errored": "Errored",
|
"errored": "Errored",
|
||||||
"saved": "Salvat"
|
"saved": "Saved"
|
||||||
},
|
},
|
||||||
"traefik": {
|
"traefik": {
|
||||||
"routers": "Routere",
|
"routers": "Routere",
|
||||||
@@ -408,8 +408,8 @@
|
|||||||
"series": "Serie"
|
"series": "Serie"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Jucători",
|
"players": "Players",
|
||||||
"version": "Versiune",
|
"version": "Version",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"up": "Online",
|
"up": "Online",
|
||||||
"down": "Offline"
|
"down": "Offline"
|
||||||
@@ -434,7 +434,7 @@
|
|||||||
"load": "Sarcină",
|
"load": "Sarcină",
|
||||||
"wait": "Va rugăm așteptați",
|
"wait": "Va rugăm așteptați",
|
||||||
"temp": "TEMP",
|
"temp": "TEMP",
|
||||||
"_temp": "Temperatură",
|
"_temp": "Temp",
|
||||||
"warn": "Warn",
|
"warn": "Warn",
|
||||||
"uptime": "UP",
|
"uptime": "UP",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
@@ -456,7 +456,7 @@
|
|||||||
"custom": "Personalizat",
|
"custom": "Personalizat",
|
||||||
"visit": "Vizită",
|
"visit": "Vizită",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"searchsuggestion": "Sugestie"
|
"searchsuggestion": "Suggestion"
|
||||||
},
|
},
|
||||||
"wmo": {
|
"wmo": {
|
||||||
"0-day": "Însorit",
|
"0-day": "Însorit",
|
||||||
@@ -481,10 +481,10 @@
|
|||||||
"56-night": "Light Freezing Drizzle",
|
"56-night": "Light Freezing Drizzle",
|
||||||
"57-day": "Freezing Drizzle",
|
"57-day": "Freezing Drizzle",
|
||||||
"57-night": "Freezing Drizzle",
|
"57-night": "Freezing Drizzle",
|
||||||
"61-day": "Ploaie Ușoară",
|
"61-day": "Light Rain",
|
||||||
"61-night": "Ploaie Ușoară",
|
"61-night": "Light Rain",
|
||||||
"63-day": "Ploaie",
|
"63-day": "Rain",
|
||||||
"63-night": "Ploaie",
|
"63-night": "Rain",
|
||||||
"65-day": "Heavy Rain",
|
"65-day": "Heavy Rain",
|
||||||
"65-night": "Heavy Rain",
|
"65-night": "Heavy Rain",
|
||||||
"66-day": "Freezing Rain",
|
"66-day": "Freezing Rain",
|
||||||
@@ -517,10 +517,10 @@
|
|||||||
"99-night": "Thunderstorm With Hail"
|
"99-night": "Thunderstorm With Hail"
|
||||||
},
|
},
|
||||||
"homebridge": {
|
"homebridge": {
|
||||||
"available_update": "Sistem",
|
"available_update": "System",
|
||||||
"updates": "Actualizări",
|
"updates": "Updates",
|
||||||
"update_available": "Actualizare Disponibilă",
|
"update_available": "Update Available",
|
||||||
"up_to_date": "Actualizat",
|
"up_to_date": "Up to Date",
|
||||||
"child_bridges": "Child Bridges",
|
"child_bridges": "Child Bridges",
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
@@ -528,64 +528,63 @@
|
|||||||
"down": "Jos"
|
"down": "Jos"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "Nou",
|
"new": "New",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"grace": "In Grace Period",
|
"grace": "In Grace Period",
|
||||||
"down": "Jos",
|
"down": "Jos",
|
||||||
"paused": "Pauză",
|
"paused": "Paused",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"last_ping": "Ultimul Ping",
|
"last_ping": "Last Ping",
|
||||||
"never": "No pings yet"
|
"never": "No pings yet"
|
||||||
},
|
},
|
||||||
"watchtower": {
|
"watchtower": {
|
||||||
"containers_scanned": "Scanned",
|
"containers_scanned": "Scanned",
|
||||||
"containers_updated": "Actualizat",
|
"containers_updated": "Updated",
|
||||||
"containers_failed": "Eșuat"
|
"containers_failed": "Failed"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "Aprobate",
|
"approvedPushes": "Aprobate",
|
||||||
"rejectedPushes": "Respinse",
|
"rejectedPushes": "Rejected",
|
||||||
"filters": "Filtre",
|
"filters": "Filters",
|
||||||
"indexers": "Indexatori"
|
"indexers": "Indexatori"
|
||||||
},
|
},
|
||||||
"tubearchivist": {
|
"tubearchivist": {
|
||||||
"downloads": "Coadă",
|
"downloads": "Coadă",
|
||||||
"videos": "Videos",
|
"videos": "Videos",
|
||||||
"channels": "Canale",
|
"channels": "Channels",
|
||||||
"playlists": "Playlists"
|
"playlists": "Playlists"
|
||||||
},
|
},
|
||||||
"truenas": {
|
"truenas": {
|
||||||
"load": "System Load",
|
"load": "System Load",
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"alerts": "Alerte"
|
"alerts": "Alerts"
|
||||||
},
|
},
|
||||||
"pyload": {
|
"pyload": {
|
||||||
"speed": "Viteză",
|
"speed": "Speed",
|
||||||
"active": "Activ",
|
"active": "Activ",
|
||||||
"queue": "Coadă",
|
"queue": "Coadă",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Regiune",
|
"region": "Region",
|
||||||
"country": "Țară",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Canale",
|
"channels": "Channels",
|
||||||
"hd": "HD",
|
"hd": "HD",
|
||||||
"tunerCount": "Tunere",
|
"tunerCount": "Tuners",
|
||||||
"channelNumber": "Canal",
|
"channelNumber": "Channel",
|
||||||
"channelNetwork": "Rețea",
|
"channelNetwork": "Network",
|
||||||
"signalStrength": "Putere",
|
"signalStrength": "Strength",
|
||||||
"signalQuality": "Calitate",
|
"signalQuality": "Quality",
|
||||||
"symbolQuality": "Calitate",
|
"symbolQuality": "Quality",
|
||||||
"networkRate": "Rata de biți",
|
"networkRate": "Rata de biți",
|
||||||
"clientIP": "Client"
|
"clientIP": "Client"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
"failed": "Eșuat",
|
"failed": "Failed",
|
||||||
"unknown": "Necunoscut"
|
"unknown": "Necunoscut"
|
||||||
},
|
},
|
||||||
"paperlessngx": {
|
"paperlessngx": {
|
||||||
@@ -593,12 +592,12 @@
|
|||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Încărcare Baterie",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
"ups_status": "UPS Status",
|
"ups_status": "UPS Status",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"on_battery": "On Battery",
|
"on_battery": "On Battery",
|
||||||
"low_battery": "Baterie descărcată"
|
"low_battery": "Low Battery"
|
||||||
},
|
},
|
||||||
"nextdns": {
|
"nextdns": {
|
||||||
"wait": "Please Wait",
|
"wait": "Please Wait",
|
||||||
@@ -606,7 +605,7 @@
|
|||||||
},
|
},
|
||||||
"mikrotik": {
|
"mikrotik": {
|
||||||
"cpuLoad": "CPU Load",
|
"cpuLoad": "CPU Load",
|
||||||
"memoryUsed": "Memorie Utilizată",
|
"memoryUsed": "Memory Used",
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"numberOfLeases": "Leases"
|
"numberOfLeases": "Leases"
|
||||||
},
|
},
|
||||||
@@ -616,22 +615,22 @@
|
|||||||
"streams_xepg": "XEPG Channels"
|
"streams_xepg": "XEPG Channels"
|
||||||
},
|
},
|
||||||
"opendtu": {
|
"opendtu": {
|
||||||
"yieldDay": "Astăzi",
|
"yieldDay": "Today",
|
||||||
"absolutePower": "Putere",
|
"absolutePower": "Power",
|
||||||
"relativePower": "Putere %",
|
"relativePower": "Power %",
|
||||||
"limit": "Limită"
|
"limit": "Limit"
|
||||||
},
|
},
|
||||||
"opnsense": {
|
"opnsense": {
|
||||||
"cpu": "CPU Load",
|
"cpu": "CPU Load",
|
||||||
"memory": "Memorie Activă",
|
"memory": "Active Memory",
|
||||||
"wanUpload": "WAN Upload",
|
"wanUpload": "WAN Upload",
|
||||||
"wanDownload": "WAN Download"
|
"wanDownload": "WAN Download"
|
||||||
},
|
},
|
||||||
"moonraker": {
|
"moonraker": {
|
||||||
"printer_state": "Starea Imprimantei",
|
"printer_state": "Printer State",
|
||||||
"print_status": "Print Status",
|
"print_status": "Print Status",
|
||||||
"print_progress": "Progres",
|
"print_progress": "Progress",
|
||||||
"layers": "Straturi"
|
"layers": "Layers"
|
||||||
},
|
},
|
||||||
"octoprint": {
|
"octoprint": {
|
||||||
"printer_state": "Stare",
|
"printer_state": "Stare",
|
||||||
@@ -649,19 +648,19 @@
|
|||||||
"wanStatus": "WAN Status",
|
"wanStatus": "WAN Status",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"down": "Jos",
|
"down": "Jos",
|
||||||
"temp": "Temperatură",
|
"temp": "Temp",
|
||||||
"disk": "Utilizare Disc",
|
"disk": "Disk Usage",
|
||||||
"wanIP": "WAN IP"
|
"wanIP": "WAN IP"
|
||||||
},
|
},
|
||||||
"proxmoxbackupserver": {
|
"proxmoxbackupserver": {
|
||||||
"datastore_usage": "Datastore",
|
"datastore_usage": "Datastore",
|
||||||
"failed_tasks_24h": "Failed Tasks 24h",
|
"failed_tasks_24h": "Failed Tasks 24h",
|
||||||
"cpu_usage": "Procesor",
|
"cpu_usage": "Procesor",
|
||||||
"memory_usage": "Memorie"
|
"memory_usage": "Memory"
|
||||||
},
|
},
|
||||||
"immich": {
|
"immich": {
|
||||||
"users": "Utilizatori",
|
"users": "Utilizatori",
|
||||||
"photos": "Fotografii",
|
"photos": "Photos",
|
||||||
"videos": "Videos",
|
"videos": "Videos",
|
||||||
"storage": "Storage"
|
"storage": "Storage"
|
||||||
},
|
},
|
||||||
@@ -674,12 +673,12 @@
|
|||||||
},
|
},
|
||||||
"atsumeru": {
|
"atsumeru": {
|
||||||
"series": "Serie",
|
"series": "Serie",
|
||||||
"archives": "Arhive",
|
"archives": "Archives",
|
||||||
"chapters": "Chapters",
|
"chapters": "Chapters",
|
||||||
"categories": "Categorii"
|
"categories": "Categories"
|
||||||
},
|
},
|
||||||
"komga": {
|
"komga": {
|
||||||
"libraries": "Biblioteci",
|
"libraries": "Libraries",
|
||||||
"series": "Serie",
|
"series": "Serie",
|
||||||
"books": "Cărți"
|
"books": "Cărți"
|
||||||
},
|
},
|
||||||
@@ -694,20 +693,20 @@
|
|||||||
"wanted": "Dorite"
|
"wanted": "Dorite"
|
||||||
},
|
},
|
||||||
"photoprism": {
|
"photoprism": {
|
||||||
"albums": "Albume",
|
"albums": "Albums",
|
||||||
"photos": "Fotografii",
|
"photos": "Photos",
|
||||||
"videos": "Videos",
|
"videos": "Videos",
|
||||||
"people": "Oameni"
|
"people": "People"
|
||||||
},
|
},
|
||||||
"fileflows": {
|
"fileflows": {
|
||||||
"queue": "Coadă",
|
"queue": "Coadă",
|
||||||
"processing": "Procesare",
|
"processing": "Processing",
|
||||||
"processed": "Processed",
|
"processed": "Processed",
|
||||||
"time": "Timp"
|
"time": "Time"
|
||||||
},
|
},
|
||||||
"firefly": {
|
"firefly": {
|
||||||
"networth": "Net Worth",
|
"networth": "Net Worth",
|
||||||
"budget": "Buget"
|
"budget": "Budget"
|
||||||
},
|
},
|
||||||
"grafana": {
|
"grafana": {
|
||||||
"dashboards": "Dashboards",
|
"dashboards": "Dashboards",
|
||||||
@@ -717,18 +716,18 @@
|
|||||||
},
|
},
|
||||||
"nextcloud": {
|
"nextcloud": {
|
||||||
"cpuload": "Cpu Load",
|
"cpuload": "Cpu Load",
|
||||||
"memoryusage": "Memorie Utilizată",
|
"memoryusage": "Memory Usage",
|
||||||
"freespace": "Spațiu Liber",
|
"freespace": "Free Space",
|
||||||
"activeusers": "Utilizatori Activi",
|
"activeusers": "Active Users",
|
||||||
"numfiles": "Fișiere",
|
"numfiles": "Files",
|
||||||
"numshares": "Articole Partajate"
|
"numshares": "Shared Items"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"size": "Mărime",
|
"size": "Size",
|
||||||
"lastrun": "Ultima Rulare",
|
"lastrun": "Last Run",
|
||||||
"nextrun": "Următoarea Rulare",
|
"nextrun": "Next Run",
|
||||||
"failed": "Eșuat"
|
"failed": "Failed"
|
||||||
},
|
},
|
||||||
"unmanic": {
|
"unmanic": {
|
||||||
"active_workers": "Muncitori activi",
|
"active_workers": "Muncitori activi",
|
||||||
@@ -750,15 +749,15 @@
|
|||||||
"uptime": "Uptime"
|
"uptime": "Uptime"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Astăzi",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un an",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "Tot timpul"
|
"gross_percent_max": "All time"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasturi",
|
"podcasts": "Podcasts",
|
||||||
"books": "Cărți",
|
"books": "Cărți",
|
||||||
"podcastsDuration": "Durată",
|
"podcastsDuration": "Duration",
|
||||||
"booksDuration": "Durată"
|
"booksDuration": "Duration"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "People Home",
|
"people_home": "People Home",
|
||||||
@@ -767,33 +766,33 @@
|
|||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitoring",
|
"monitoring": "Monitoring",
|
||||||
"updates": "Actualizări"
|
"updates": "Updates"
|
||||||
},
|
},
|
||||||
"calibreweb": {
|
"calibreweb": {
|
||||||
"books": "Cărți",
|
"books": "Cărți",
|
||||||
"authors": "Autori",
|
"authors": "Authors",
|
||||||
"categories": "Categorii",
|
"categories": "Categories",
|
||||||
"series": "Serie"
|
"series": "Serie"
|
||||||
},
|
},
|
||||||
"jdownloader": {
|
"jdownloader": {
|
||||||
"downloadCount": "Coadă",
|
"downloadCount": "Coadă",
|
||||||
"downloadBytesRemaining": "Rămas",
|
"downloadBytesRemaining": "Rămas",
|
||||||
"downloadTotalBytes": "Mărime",
|
"downloadTotalBytes": "Size",
|
||||||
"downloadSpeed": "Viteză"
|
"downloadSpeed": "Speed"
|
||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "Serie",
|
"seriesCount": "Serie",
|
||||||
"totalFiles": "Fișiere"
|
"totalFiles": "Files"
|
||||||
},
|
},
|
||||||
"azuredevops": {
|
"azuredevops": {
|
||||||
"result": "Rezultat",
|
"result": "Result",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"buildId": "Build ID",
|
"buildId": "Build ID",
|
||||||
"succeeded": "Succeeded",
|
"succeeded": "Succeeded",
|
||||||
"notStarted": "Not Started",
|
"notStarted": "Not Started",
|
||||||
"failed": "Eșuat",
|
"failed": "Failed",
|
||||||
"canceled": "Anulat",
|
"canceled": "Canceled",
|
||||||
"inProgress": "În Progres",
|
"inProgress": "In Progress",
|
||||||
"totalPrs": "Total PRs",
|
"totalPrs": "Total PRs",
|
||||||
"myPrs": "My PRs",
|
"myPrs": "My PRs",
|
||||||
"approved": "Aprobate"
|
"approved": "Aprobate"
|
||||||
@@ -802,25 +801,25 @@
|
|||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"name": "Nume",
|
"name": "Name",
|
||||||
"map": "Hartă",
|
"map": "Map",
|
||||||
"currentPlayers": "Current players",
|
"currentPlayers": "Current players",
|
||||||
"players": "Jucători",
|
"players": "Players",
|
||||||
"maxPlayers": "Max players",
|
"maxPlayers": "Max players",
|
||||||
"bots": "Boți",
|
"bots": "Bots",
|
||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
"urbackup": {
|
"urbackup": {
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"errored": "Erori",
|
"errored": "Errors",
|
||||||
"noRecent": "Out of Date",
|
"noRecent": "Out of Date",
|
||||||
"totalUsed": "Used Storage"
|
"totalUsed": "Used Storage"
|
||||||
},
|
},
|
||||||
"mealie": {
|
"mealie": {
|
||||||
"recipes": "Recipes",
|
"recipes": "Recipes",
|
||||||
"users": "Utilizatori",
|
"users": "Utilizatori",
|
||||||
"categories": "Categorii",
|
"categories": "Categories",
|
||||||
"tags": "Etichete"
|
"tags": "Tags"
|
||||||
},
|
},
|
||||||
"openmediavault": {
|
"openmediavault": {
|
||||||
"downloading": "Downloading",
|
"downloading": "Downloading",
|
||||||
@@ -828,15 +827,15 @@
|
|||||||
"running": "Rulează",
|
"running": "Rulează",
|
||||||
"stopped": "Oprit",
|
"stopped": "Oprit",
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
"failed": "Eșuat"
|
"failed": "Failed"
|
||||||
},
|
},
|
||||||
"openwrt": {
|
"openwrt": {
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"cpuLoad": "CPU Load Avg (5m)",
|
"cpuLoad": "CPU Load Avg (5m)",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"down": "Jos",
|
"down": "Jos",
|
||||||
"bytesTx": "Transmis",
|
"bytesTx": "Transmitted",
|
||||||
"bytesRx": "Primit"
|
"bytesRx": "Received"
|
||||||
},
|
},
|
||||||
"uptimerobot": {
|
"uptimerobot": {
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
@@ -845,7 +844,7 @@
|
|||||||
"downDuration": "Downtime Duration",
|
"downDuration": "Downtime Duration",
|
||||||
"sitesUp": "Sites Up",
|
"sitesUp": "Sites Up",
|
||||||
"sitesDown": "Sites Down",
|
"sitesDown": "Sites Down",
|
||||||
"paused": "Pauză",
|
"paused": "Paused",
|
||||||
"notyetchecked": "Not Yet Checked",
|
"notyetchecked": "Not Yet Checked",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"seemsdown": "Seems Down",
|
"seemsdown": "Seems Down",
|
||||||
@@ -853,78 +852,77 @@
|
|||||||
"unknown": "Necunoscut"
|
"unknown": "Necunoscut"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"inCinemas": "În cinematografe",
|
"inCinemas": "In cinemas",
|
||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforme",
|
"platforms": "Platforms",
|
||||||
"totalRoms": "Jocuri",
|
"totalRoms": "Games",
|
||||||
"saves": "Salvări",
|
"saves": "Saves",
|
||||||
"states": "States",
|
"states": "States",
|
||||||
"screenshots": "Screenshots",
|
"screenshots": "Screenshots",
|
||||||
"totalfilesize": "Mărime Totală"
|
"totalfilesize": "Total Size"
|
||||||
},
|
},
|
||||||
"mailcow": {
|
"mailcow": {
|
||||||
"domains": "Domenii",
|
"domains": "Domenii",
|
||||||
"mailboxes": "Cutii poştale",
|
"mailboxes": "Mailboxes",
|
||||||
"mails": "Mails",
|
"mails": "Mails",
|
||||||
"storage": "Storage"
|
"storage": "Storage"
|
||||||
},
|
},
|
||||||
"netdata": {
|
"netdata": {
|
||||||
"warnings": "Warnings",
|
"warnings": "Warnings",
|
||||||
"criticals": "Critice"
|
"criticals": "Criticals"
|
||||||
},
|
},
|
||||||
"plantit": {
|
"plantit": {
|
||||||
"events": "Evenimente",
|
"events": "Events",
|
||||||
"plants": "Plante",
|
"plants": "Plants",
|
||||||
"photos": "Fotografii",
|
"photos": "Photos",
|
||||||
"species": "Specii"
|
"species": "Species"
|
||||||
},
|
},
|
||||||
"gitea": {
|
"gitea": {
|
||||||
"notifications": "Notificări",
|
"notifications": "Notifications",
|
||||||
"issues": "Issues",
|
"issues": "Issues",
|
||||||
"pulls": "Pull Requests",
|
"pulls": "Pull Requests",
|
||||||
"repositories": "Repozitorii"
|
"repositories": "Repositories"
|
||||||
},
|
},
|
||||||
"stash": {
|
"stash": {
|
||||||
"scenes": "Scene",
|
"scenes": "Scenes",
|
||||||
"scenesPlayed": "Scenes Played",
|
"scenesPlayed": "Scenes Played",
|
||||||
"playCount": "Total Plays",
|
"playCount": "Total Plays",
|
||||||
"playDuration": "Time Watched",
|
"playDuration": "Time Watched",
|
||||||
"sceneSize": "Scenes Size",
|
"sceneSize": "Scenes Size",
|
||||||
"sceneDuration": "Scenes Duration",
|
"sceneDuration": "Scenes Duration",
|
||||||
"images": "Imagini",
|
"images": "Images",
|
||||||
"imageSize": "Images Size",
|
"imageSize": "Images Size",
|
||||||
"galleries": "Galerii",
|
"galleries": "Galleries",
|
||||||
"performers": "Performers",
|
"performers": "Performers",
|
||||||
"studios": "Studios",
|
"studios": "Studios",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"tags": "Etichete",
|
"tags": "Tags",
|
||||||
"oCount": "O Count"
|
"oCount": "O Count"
|
||||||
},
|
},
|
||||||
"tandoor": {
|
"tandoor": {
|
||||||
"users": "Utilizatori",
|
"users": "Utilizatori",
|
||||||
"recipes": "Recipes",
|
"recipes": "Recipes",
|
||||||
"keywords": "Cuvinte cheie"
|
"keywords": "Keywords"
|
||||||
},
|
},
|
||||||
"homebox": {
|
"homebox": {
|
||||||
"items": "Items",
|
"items": "Items",
|
||||||
"totalWithWarranty": "Cu Garanție",
|
"totalWithWarranty": "With Warranty",
|
||||||
"locations": "Locaţii",
|
"locations": "Locations",
|
||||||
"labels": "Etichete",
|
"labels": "Labels",
|
||||||
"users": "Utilizatori",
|
"users": "Utilizatori",
|
||||||
"totalValue": "Total Value"
|
"totalValue": "Total Value"
|
||||||
},
|
},
|
||||||
"crowdsec": {
|
"crowdsec": {
|
||||||
"alerts": "Alerte",
|
"alerts": "Alerts",
|
||||||
"bans": "Bans"
|
"bans": "Bans"
|
||||||
},
|
},
|
||||||
"wgeasy": {
|
"wgeasy": {
|
||||||
"connected": "Conectat",
|
"connected": "Connected",
|
||||||
"enabled": "Activat",
|
"enabled": "Activat",
|
||||||
"disabled": "Dezactivat",
|
"disabled": "Dezactivat",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
@@ -932,7 +930,7 @@
|
|||||||
"swagdashboard": {
|
"swagdashboard": {
|
||||||
"proxied": "Proxied",
|
"proxied": "Proxied",
|
||||||
"auth": "With Auth",
|
"auth": "With Auth",
|
||||||
"outdated": "Învechit",
|
"outdated": "Outdated",
|
||||||
"banned": "Banned"
|
"banned": "Banned"
|
||||||
},
|
},
|
||||||
"myspeed": {
|
"myspeed": {
|
||||||
@@ -941,37 +939,37 @@
|
|||||||
"upload": "Încarcă"
|
"upload": "Încarcă"
|
||||||
},
|
},
|
||||||
"stocks": {
|
"stocks": {
|
||||||
"stocks": "Acțiuni",
|
"stocks": "Stocks",
|
||||||
"loading": "Loading",
|
"loading": "Loading",
|
||||||
"open": "Open - US Market",
|
"open": "Open - US Market",
|
||||||
"closed": "Closed - US Market",
|
"closed": "Closed - US Market",
|
||||||
"invalidConfiguration": "Invalid Configuration"
|
"invalidConfiguration": "Invalid Configuration"
|
||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Camere",
|
"cameras": "Cameras",
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"version": "Versiune"
|
"version": "Version"
|
||||||
},
|
},
|
||||||
"linkwarden": {
|
"linkwarden": {
|
||||||
"links": "Links",
|
"links": "Links",
|
||||||
"collections": "Colecții",
|
"collections": "Collections",
|
||||||
"tags": "Etichete"
|
"tags": "Tags"
|
||||||
},
|
},
|
||||||
"zabbix": {
|
"zabbix": {
|
||||||
"unclassified": "Not classified",
|
"unclassified": "Not classified",
|
||||||
"information": "Informație",
|
"information": "Informație",
|
||||||
"warning": "Atenție",
|
"warning": "Warning",
|
||||||
"average": "Medie",
|
"average": "Average",
|
||||||
"high": "Înalt",
|
"high": "High",
|
||||||
"disaster": "Dezastru"
|
"disaster": "Disaster"
|
||||||
},
|
},
|
||||||
"lubelogger": {
|
"lubelogger": {
|
||||||
"vehicle": "Vehicul",
|
"vehicle": "Vehicle",
|
||||||
"vehicles": "Vehicule",
|
"vehicles": "Vehicles",
|
||||||
"serviceRecords": "Service Records",
|
"serviceRecords": "Service Records",
|
||||||
"reminders": "Reminders",
|
"reminders": "Reminders",
|
||||||
"nextReminder": "Next Reminder",
|
"nextReminder": "Next Reminder",
|
||||||
"none": "Niciunul"
|
"none": "None"
|
||||||
},
|
},
|
||||||
"vikunja": {
|
"vikunja": {
|
||||||
"projects": "Active Projects",
|
"projects": "Active Projects",
|
||||||
@@ -980,79 +978,69 @@
|
|||||||
"tasksInProgress": "Tasks In Progress"
|
"tasksInProgress": "Tasks In Progress"
|
||||||
},
|
},
|
||||||
"headscale": {
|
"headscale": {
|
||||||
"name": "Nume",
|
"name": "Name",
|
||||||
"address": "Adresă",
|
"address": "Address",
|
||||||
"last_seen": "Last Seen",
|
"last_seen": "Last Seen",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline"
|
"offline": "Offline"
|
||||||
},
|
},
|
||||||
"beszel": {
|
"beszel": {
|
||||||
"name": "Nume",
|
"name": "Name",
|
||||||
"systems": "Sistem",
|
"systems": "Systems",
|
||||||
"up": "Sus",
|
"up": "Sus",
|
||||||
"down": "Jos",
|
"down": "Jos",
|
||||||
"paused": "Pauză",
|
"paused": "Paused",
|
||||||
"pending": "În așteptare",
|
"pending": "În așteptare",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"updated": "Actualizat",
|
"updated": "Updated",
|
||||||
"cpu": "Procesor",
|
"cpu": "Procesor",
|
||||||
"memory": "MEM",
|
"memory": "MEM",
|
||||||
"disk": "Disk",
|
"disk": "Disk",
|
||||||
"network": "NET"
|
"network": "NET"
|
||||||
},
|
},
|
||||||
"argocd": {
|
"argocd": {
|
||||||
"apps": "Aplicaţii",
|
"apps": "Apps",
|
||||||
"synced": "Synced",
|
"synced": "Synced",
|
||||||
"outOfSync": "Out Of Sync",
|
"outOfSync": "Out Of Sync",
|
||||||
"healthy": "Sănătos",
|
"healthy": "Sănătos",
|
||||||
"degraded": "Degraded",
|
"degraded": "Degraded",
|
||||||
"progressing": "Progressing",
|
"progressing": "Progressing",
|
||||||
"missing": "Lipsește",
|
"missing": "Missing",
|
||||||
"suspended": "Suspendat"
|
"suspended": "Suspended"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Loading"
|
"loading": "Loading"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Grupuri",
|
"groups": "Groups",
|
||||||
"issues": "Issues",
|
"issues": "Issues",
|
||||||
"merges": "Merge Requests",
|
"merges": "Merge Requests",
|
||||||
"projects": "Proiecte"
|
"projects": "Projects"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"load": "Sarcină",
|
"load": "Sarcină",
|
||||||
"bcharge": "Încărcare Baterie",
|
"bcharge": "Battery Charge",
|
||||||
"timeleft": "Timp rămas"
|
"timeleft": "Timp rămas"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Marcaje",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Favorite",
|
"favorites": "Favorites",
|
||||||
"archived": "Arhivat",
|
"archived": "Archived",
|
||||||
"highlights": "Highlights",
|
"highlights": "Highlights",
|
||||||
"lists": "Liste",
|
"lists": "Lists",
|
||||||
"tags": "Etichete"
|
"tags": "Tags"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
"slskStatus": "Rețea",
|
"slskStatus": "Network",
|
||||||
"connected": "Conectat",
|
"connected": "Connected",
|
||||||
"disconnected": "Deconectat",
|
"disconnected": "Disconnected",
|
||||||
"updateStatus": "Update",
|
"updateStatus": "Update",
|
||||||
"update_yes": "Disponibile",
|
"update_yes": "Disponibile",
|
||||||
"update_no": "Actualizat",
|
"update_no": "Up to Date",
|
||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Fișiere"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Melodii",
|
|
||||||
"movies": "Filme",
|
|
||||||
"episodes": "Episoade",
|
|
||||||
"other": "Altele"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Публичный IP-адрес",
|
"public_ip": "Публичный IP-адрес",
|
||||||
"region": "Регион",
|
"region": "Регион",
|
||||||
"country": "Страна",
|
"country": "Страна"
|
||||||
"port_forwarded": "Порт переадресован"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Каналы",
|
"channels": "Каналы",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Физический релиз",
|
"physicalRelease": "Физический релиз",
|
||||||
"digitalRelease": "Цифровой релиз",
|
"digitalRelease": "Цифровой релиз",
|
||||||
"noEventsToday": "Нет событий на сегодня!",
|
"noEventsToday": "Нет событий на сегодня!",
|
||||||
"noEventsFound": "Событий не найдено",
|
"noEventsFound": "Событий не найдено"
|
||||||
"errorWhenLoadingData": "Ошибка при загрузке данных календаря"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Платформы",
|
"platforms": "Платформы",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Скачивания",
|
"downloads": "Скачивания",
|
||||||
"uploads": "Загрузки",
|
"uploads": "Загрузки",
|
||||||
"sharedFiles": "Файлов"
|
"sharedFiles": "Файлов"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Песни",
|
|
||||||
"movies": "Фильмы",
|
|
||||||
"episodes": "Эпизоды",
|
|
||||||
"other": "Другой"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Verejná IP",
|
"public_ip": "Verejná IP",
|
||||||
"region": "Región",
|
"region": "Región",
|
||||||
"country": "Krajina",
|
"country": "Krajina"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanály",
|
"channels": "Kanály",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fyzické vydanie",
|
"physicalRelease": "Fyzické vydanie",
|
||||||
"digitalRelease": "Digitálne vydanie",
|
"digitalRelease": "Digitálne vydanie",
|
||||||
"noEventsToday": "Žiadne udalosti na dnešný deň!",
|
"noEventsToday": "Žiadne udalosti na dnešný deň!",
|
||||||
"noEventsFound": "Žiadne udalosti",
|
"noEventsFound": "Žiadne udalosti"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platformy",
|
"platforms": "Platformy",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Súborov"
|
"sharedFiles": "Súborov"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Skladby",
|
|
||||||
"movies": "Filmy",
|
|
||||||
"episodes": "Epizódy",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Javni IP",
|
"public_ip": "Javni IP",
|
||||||
"region": "Regija",
|
"region": "Regija",
|
||||||
"country": "Država",
|
"country": "Država"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanali",
|
"channels": "Kanali",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fizična izdaja",
|
"physicalRelease": "Fizična izdaja",
|
||||||
"digitalRelease": "Digitalna izdaja",
|
"digitalRelease": "Digitalna izdaja",
|
||||||
"noEventsToday": "Za danes ni dogodkov!",
|
"noEventsToday": "Za danes ni dogodkov!",
|
||||||
"noEventsFound": "Ni dogodkov",
|
"noEventsFound": "Ni dogodkov"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforme",
|
"platforms": "Platforme",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Datotek"
|
"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,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Avsnitt",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"seconds": "s"
|
"seconds": "s"
|
||||||
},
|
},
|
||||||
"widget": {
|
"widget": {
|
||||||
"missing_type": "ประเภทวิดเจ็ตหาย: {{type}}",
|
"missing_type": "Missing Widget Type: {{type}}",
|
||||||
"api_error": "API มีข้อผิดพลาด",
|
"api_error": "API มีข้อผิดพลาด",
|
||||||
"information": "ข้อมูล",
|
"information": "ข้อมูล",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
"esphome": {
|
"esphome": {
|
||||||
"offline": "ออฟไลน์",
|
"offline": "ออฟไลน์",
|
||||||
"offline_alt": "ออฟไลน์",
|
"offline_alt": "ออฟไลน์",
|
||||||
"online": "ออนไลน์",
|
"online": "Online",
|
||||||
"total": "ทั้งหมด",
|
"total": "ทั้งหมด",
|
||||||
"unknown": "ไม่ทราบ"
|
"unknown": "ไม่ทราบ"
|
||||||
},
|
},
|
||||||
@@ -130,12 +130,12 @@
|
|||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "Subscriptions",
|
||||||
"unread": "ยังไม่ได้อ่าน"
|
"unread": "Unread"
|
||||||
},
|
},
|
||||||
"fritzbox": {
|
"fritzbox": {
|
||||||
"connectionStatus": "สถานะ",
|
"connectionStatus": "สถานะ",
|
||||||
"connectionStatusUnconfigured": "ยังไม่ได้กำหนดค่า",
|
"connectionStatusUnconfigured": "Unconfigured",
|
||||||
"connectionStatusConnecting": "กำลังเชื่อมต่อ",
|
"connectionStatusConnecting": "Connecting",
|
||||||
"connectionStatusAuthenticating": "Authenticating",
|
"connectionStatusAuthenticating": "Authenticating",
|
||||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
||||||
"connectionStatusDisconnecting": "Disconnecting",
|
"connectionStatusDisconnecting": "Disconnecting",
|
||||||
@@ -247,7 +247,7 @@
|
|||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Wanted",
|
||||||
"missing": "หายไป",
|
"missing": "Missing",
|
||||||
"queued": "Queued",
|
"queued": "Queued",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
"queue": "Queue",
|
||||||
@@ -315,7 +315,7 @@
|
|||||||
"download": "Downloaded",
|
"download": "Downloaded",
|
||||||
"nondownload": "Non-Downloaded",
|
"nondownload": "Non-Downloaded",
|
||||||
"read": "Read",
|
"read": "Read",
|
||||||
"unread": "ยังไม่ได้อ่าน",
|
"unread": "Unread",
|
||||||
"downloadedread": "Downloaded & Read",
|
"downloadedread": "Downloaded & Read",
|
||||||
"downloadedunread": "Downloaded & Unread",
|
"downloadedunread": "Downloaded & Unread",
|
||||||
"nondownloadedread": "Non-Downloaded & Read",
|
"nondownloadedread": "Non-Downloaded & Read",
|
||||||
@@ -364,8 +364,8 @@
|
|||||||
"please_wait": "Please Wait"
|
"please_wait": "Please Wait"
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
"enabled": "เปิด",
|
"enabled": "Enabled",
|
||||||
"disabled": "ปิด",
|
"disabled": "Disabled",
|
||||||
"total": "ทั้งหมด"
|
"total": "ทั้งหมด"
|
||||||
},
|
},
|
||||||
"coinmarketcap": {
|
"coinmarketcap": {
|
||||||
@@ -409,14 +409,14 @@
|
|||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Players",
|
"players": "Players",
|
||||||
"version": "เวอร์ชั่น",
|
"version": "Version",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"up": "ออนไลน์",
|
"up": "Online",
|
||||||
"down": "ออฟไลน์"
|
"down": "ออฟไลน์"
|
||||||
},
|
},
|
||||||
"miniflux": {
|
"miniflux": {
|
||||||
"read": "Read",
|
"read": "Read",
|
||||||
"unread": "ยังไม่ได้อ่าน"
|
"unread": "Unread"
|
||||||
},
|
},
|
||||||
"authentik": {
|
"authentik": {
|
||||||
"users": "ผู้ใช้",
|
"users": "ผู้ใช้",
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -596,7 +595,7 @@
|
|||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
"ups_status": "UPS Status",
|
"ups_status": "UPS Status",
|
||||||
"online": "ออนไลน์",
|
"online": "Online",
|
||||||
"on_battery": "On Battery",
|
"on_battery": "On Battery",
|
||||||
"low_battery": "Low Battery"
|
"low_battery": "Low Battery"
|
||||||
},
|
},
|
||||||
@@ -800,7 +799,7 @@
|
|||||||
},
|
},
|
||||||
"gamedig": {
|
"gamedig": {
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"online": "ออนไลน์",
|
"online": "Online",
|
||||||
"offline": "ออฟไลน์",
|
"offline": "ออฟไลน์",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
"map": "Map",
|
"map": "Map",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -925,8 +923,8 @@
|
|||||||
},
|
},
|
||||||
"wgeasy": {
|
"wgeasy": {
|
||||||
"connected": "Connected",
|
"connected": "Connected",
|
||||||
"enabled": "เปิด",
|
"enabled": "Enabled",
|
||||||
"disabled": "ปิด",
|
"disabled": "Disabled",
|
||||||
"total": "ทั้งหมด"
|
"total": "ทั้งหมด"
|
||||||
},
|
},
|
||||||
"swagdashboard": {
|
"swagdashboard": {
|
||||||
@@ -950,7 +948,7 @@
|
|||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Cameras",
|
"cameras": "Cameras",
|
||||||
"uptime": "Uptime",
|
"uptime": "Uptime",
|
||||||
"version": "เวอร์ชั่น"
|
"version": "Version"
|
||||||
},
|
},
|
||||||
"linkwarden": {
|
"linkwarden": {
|
||||||
"links": "Links",
|
"links": "Links",
|
||||||
@@ -984,7 +982,7 @@
|
|||||||
"address": "Address",
|
"address": "Address",
|
||||||
"last_seen": "Last Seen",
|
"last_seen": "Last Seen",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"online": "ออนไลน์",
|
"online": "Online",
|
||||||
"offline": "ออฟไลน์"
|
"offline": "ออฟไลน์"
|
||||||
},
|
},
|
||||||
"beszel": {
|
"beszel": {
|
||||||
@@ -1008,7 +1006,7 @@
|
|||||||
"healthy": "Healthy",
|
"healthy": "Healthy",
|
||||||
"degraded": "Degraded",
|
"degraded": "Degraded",
|
||||||
"progressing": "Progressing",
|
"progressing": "Progressing",
|
||||||
"missing": "หายไป",
|
"missing": "Missing",
|
||||||
"suspended": "Suspended"
|
"suspended": "Suspended"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Açık IP",
|
"public_ip": "Açık IP",
|
||||||
"region": "Bölge",
|
"region": "Bölge",
|
||||||
"country": "Ülke",
|
"country": "Ülke"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Kanallar",
|
"channels": "Kanallar",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Fiziksel Yayınlanan",
|
"physicalRelease": "Fiziksel Yayınlanan",
|
||||||
"digitalRelease": "Dijitalde Yayınlandı",
|
"digitalRelease": "Dijitalde Yayınlandı",
|
||||||
"noEventsToday": "Bugün için etkinlik yok!",
|
"noEventsToday": "Bugün için etkinlik yok!",
|
||||||
"noEventsFound": "Etkinlik bulunamadı",
|
"noEventsFound": "Etkinlik bulunamadı"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platformlar",
|
"platforms": "Platformlar",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Dosyalar"
|
"sharedFiles": "Dosyalar"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Şarkılar",
|
|
||||||
"movies": "Filmler",
|
|
||||||
"episodes": "Bölümler",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Публічний IP",
|
"public_ip": "Публічний IP",
|
||||||
"region": "Регіон",
|
"region": "Регіон",
|
||||||
"country": "Країна",
|
"country": "Країна"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Канали",
|
"channels": "Канали",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Фізичний реліз",
|
"physicalRelease": "Фізичний реліз",
|
||||||
"digitalRelease": "Цифровий реліз",
|
"digitalRelease": "Цифровий реліз",
|
||||||
"noEventsToday": "Події на сьогодні відсутні!",
|
"noEventsToday": "Події на сьогодні відсутні!",
|
||||||
"noEventsFound": "Події не знайдено",
|
"noEventsFound": "Події не знайдено"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Платформи",
|
"platforms": "Платформи",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Завантаження",
|
"downloads": "Завантаження",
|
||||||
"uploads": "Вивантаження",
|
"uploads": "Вивантаження",
|
||||||
"sharedFiles": "Файли"
|
"sharedFiles": "Файли"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Пісні",
|
|
||||||
"movies": "Фільми",
|
|
||||||
"episodes": "Епізоди",
|
|
||||||
"other": "Інше"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "Public IP",
|
"public_ip": "Public IP",
|
||||||
"region": "Region",
|
"region": "Region",
|
||||||
"country": "Country",
|
"country": "Country"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Channels",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "No events for today!",
|
"noEventsToday": "No events for today!",
|
||||||
"noEventsFound": "No events found",
|
"noEventsFound": "No events found"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "Platforms",
|
"platforms": "Platforms",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "Songs",
|
|
||||||
"movies": "Movies",
|
|
||||||
"episodes": "Episodes",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "公用IP",
|
"public_ip": "公用IP",
|
||||||
"region": "地區",
|
"region": "地區",
|
||||||
"country": "國家",
|
"country": "國家"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "頻道",
|
"channels": "頻道",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "實體發行",
|
"physicalRelease": "實體發行",
|
||||||
"digitalRelease": "數位發行",
|
"digitalRelease": "數位發行",
|
||||||
"noEventsToday": "今日無事件",
|
"noEventsToday": "今日無事件",
|
||||||
"noEventsFound": "未找到事件",
|
"noEventsFound": "未找到事件"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "平台",
|
"platforms": "平台",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "下載",
|
"downloads": "下載",
|
||||||
"uploads": "上傳",
|
"uploads": "上傳",
|
||||||
"sharedFiles": "檔案"
|
"sharedFiles": "檔案"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "曲目",
|
|
||||||
"movies": "電影",
|
|
||||||
"episodes": "集",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
"received": "已接收",
|
"received": "已接收",
|
||||||
"sent": "已发送",
|
"sent": "已发送",
|
||||||
"externalIPAddress": "外部IP",
|
"externalIPAddress": "外部IP",
|
||||||
"externalIPv6Address": "",
|
"externalIPv6Address": "Ext. IPv6",
|
||||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||||
},
|
},
|
||||||
"caddy": {
|
"caddy": {
|
||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "公网 IP",
|
"public_ip": "公网 IP",
|
||||||
"region": "区域",
|
"region": "区域",
|
||||||
"country": "国家",
|
"country": "国家"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "频道",
|
"channels": "频道",
|
||||||
@@ -720,7 +719,7 @@
|
|||||||
"memoryusage": "内存",
|
"memoryusage": "内存",
|
||||||
"freespace": "剩余空间",
|
"freespace": "剩余空间",
|
||||||
"activeusers": "活跃用户",
|
"activeusers": "活跃用户",
|
||||||
"numfiles": "文件",
|
"numfiles": "Files",
|
||||||
"numshares": "共享项目"
|
"numshares": "共享项目"
|
||||||
},
|
},
|
||||||
"kopia": {
|
"kopia": {
|
||||||
@@ -761,7 +760,7 @@
|
|||||||
"booksDuration": "持续时间"
|
"booksDuration": "持续时间"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "在家人数",
|
"people_home": "房间",
|
||||||
"lights_on": "照明开",
|
"lights_on": "照明开",
|
||||||
"switches_on": "开关开"
|
"switches_on": "开关开"
|
||||||
},
|
},
|
||||||
@@ -783,7 +782,7 @@
|
|||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "系列",
|
"seriesCount": "系列",
|
||||||
"totalFiles": "文件"
|
"totalFiles": "Files"
|
||||||
},
|
},
|
||||||
"azuredevops": {
|
"azuredevops": {
|
||||||
"result": "Result",
|
"result": "Result",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "Physical release",
|
"physicalRelease": "Physical release",
|
||||||
"digitalRelease": "Digital release",
|
"digitalRelease": "Digital release",
|
||||||
"noEventsToday": "今天没有活动!",
|
"noEventsToday": "今天没有活动!",
|
||||||
"noEventsFound": "未找到事件",
|
"noEventsFound": "未找到事件"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "平台",
|
"platforms": "平台",
|
||||||
@@ -888,7 +886,7 @@
|
|||||||
"notifications": "通知",
|
"notifications": "通知",
|
||||||
"issues": "问题",
|
"issues": "问题",
|
||||||
"pulls": "PR",
|
"pulls": "PR",
|
||||||
"repositories": "代码仓库"
|
"repositories": "Repositories"
|
||||||
},
|
},
|
||||||
"stash": {
|
"stash": {
|
||||||
"scenes": "场景",
|
"scenes": "场景",
|
||||||
@@ -1043,16 +1041,6 @@
|
|||||||
"update_no": "Up to Date",
|
"update_no": "Up to Date",
|
||||||
"downloads": "Downloads",
|
"downloads": "Downloads",
|
||||||
"uploads": "Uploads",
|
"uploads": "Uploads",
|
||||||
"sharedFiles": "文件"
|
"sharedFiles": "Files"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "歌曲",
|
|
||||||
"movies": "电影",
|
|
||||||
"episodes": "剧集",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -568,8 +568,7 @@
|
|||||||
"gluetun": {
|
"gluetun": {
|
||||||
"public_ip": "公用IP",
|
"public_ip": "公用IP",
|
||||||
"region": "地區",
|
"region": "地區",
|
||||||
"country": "國家",
|
"country": "國家"
|
||||||
"port_forwarded": "Port Forwarded"
|
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "頻道",
|
"channels": "頻道",
|
||||||
@@ -857,8 +856,7 @@
|
|||||||
"physicalRelease": "實體發行",
|
"physicalRelease": "實體發行",
|
||||||
"digitalRelease": "數位發行",
|
"digitalRelease": "數位發行",
|
||||||
"noEventsToday": "今日無事件",
|
"noEventsToday": "今日無事件",
|
||||||
"noEventsFound": "未找到事件",
|
"noEventsFound": "未找到事件"
|
||||||
"errorWhenLoadingData": "Error when loading calendar data"
|
|
||||||
},
|
},
|
||||||
"romm": {
|
"romm": {
|
||||||
"platforms": "平台",
|
"platforms": "平台",
|
||||||
@@ -1044,15 +1042,5 @@
|
|||||||
"downloads": "下載",
|
"downloads": "下載",
|
||||||
"uploads": "上傳",
|
"uploads": "上傳",
|
||||||
"sharedFiles": "檔案"
|
"sharedFiles": "檔案"
|
||||||
},
|
|
||||||
"jellystat": {
|
|
||||||
"songs": "曲目",
|
|
||||||
"movies": "電影",
|
|
||||||
"episodes": "集",
|
|
||||||
"other": "Other"
|
|
||||||
},
|
|
||||||
"checkmk": {
|
|
||||||
"serviceErrors": "Service issues",
|
|
||||||
"hostErrors": "Host issues"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ import { useContext, useState } from "react";
|
|||||||
import { SettingsContext } from "utils/contexts/settings";
|
import { SettingsContext } from "utils/contexts/settings";
|
||||||
import Docker from "widgets/docker/component";
|
import Docker from "widgets/docker/component";
|
||||||
import Kubernetes from "widgets/kubernetes/component";
|
import Kubernetes from "widgets/kubernetes/component";
|
||||||
import ProxmoxVM from "widgets/proxmoxvm/component";
|
|
||||||
|
|
||||||
import KubernetesStatus from "./kubernetes-status";
|
import KubernetesStatus from "./kubernetes-status";
|
||||||
import Ping from "./ping";
|
import Ping from "./ping";
|
||||||
import ProxmoxStatus from "./proxmox-status";
|
|
||||||
import SiteMonitor from "./site-monitor";
|
import SiteMonitor from "./site-monitor";
|
||||||
import Status from "./status";
|
import Status from "./status";
|
||||||
import Widget from "./widget";
|
import Widget from "./widget";
|
||||||
@@ -123,16 +121,6 @@ export default function Item({ service, groupName, useEqualHeights }) {
|
|||||||
<span className="sr-only">View container stats</span>
|
<span className="sr-only">View container stats</span>
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
{service.proxmoxNode && service.proxmoxVMID && (
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
|
|
||||||
className="shrink-0 flex items-center justify-center cursor-pointer service-tag service-proxmoxstatus"
|
|
||||||
>
|
|
||||||
<ProxmoxStatus service={service} style={statusStyle} />
|
|
||||||
<span className="sr-only">View Proxmox stats</span>
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -164,26 +152,6 @@ export default function Item({ service, groupName, useEqualHeights }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{service.proxmoxNode && service.proxmoxVMID && (
|
|
||||||
<div
|
|
||||||
className={classNames(
|
|
||||||
showStats || (statsOpen && !statsClosing) ? "max-h-[110px] opacity-100" : " max-h-0 opacity-0",
|
|
||||||
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats",
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{(showStats || statsOpen) && (
|
|
||||||
<ProxmoxVM
|
|
||||||
service={{
|
|
||||||
widget: {
|
|
||||||
node: service.proxmoxNode,
|
|
||||||
vmid: service.proxmoxVMID,
|
|
||||||
type: service.proxmoxType,
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{service.widgets.map((widget) => (
|
{service.widgets.map((widget) => (
|
||||||
<Widget widget={widget} service={service} key={widget.index} />
|
<Widget widget={widget} service={service} key={widget.index} />
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
import { useTranslation } from "next-i18next";
|
|
||||||
import useSWR from "swr";
|
|
||||||
|
|
||||||
export default function ProxmoxStatus({ service, style }) {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
|
|
||||||
const vmType = service.proxmoxType || "qemu";
|
|
||||||
const apiUrl = `/api/proxmox/stats/${service.proxmoxNode}/${service.proxmoxVMID}?type=${vmType}`;
|
|
||||||
|
|
||||||
const { data, error } = useSWR(apiUrl);
|
|
||||||
|
|
||||||
let statusLabel = t("docker.unknown");
|
|
||||||
let backgroundClass = "px-1.5 py-0.5 bg-theme-500/10 dark:bg-theme-900/50";
|
|
||||||
let colorClass = "text-black/20 dark:text-white/40 ";
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
statusLabel = t("docker.error");
|
|
||||||
colorClass = "text-rose-500/80";
|
|
||||||
} else if (data) {
|
|
||||||
if (data.status === "running") {
|
|
||||||
statusLabel = t("docker.running");
|
|
||||||
colorClass = "text-emerald-500/80";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.status === "stopped") {
|
|
||||||
statusLabel = t("docker.exited");
|
|
||||||
colorClass = "text-orange-400/50 dark:text-orange-400/80";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.status === "paused") {
|
|
||||||
statusLabel = "paused";
|
|
||||||
colorClass = "text-blue-500/80";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.status === "offline") {
|
|
||||||
statusLabel = "offline";
|
|
||||||
colorClass = "text-orange-400/50 dark:text-orange-400/80";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.status === "not found") {
|
|
||||||
statusLabel = t("docker.not_found");
|
|
||||||
colorClass = "text-orange-400/50 dark:text-orange-400/80";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (style === "dot") {
|
|
||||||
colorClass = colorClass.replace(/text-/g, "bg-").replace(/\/\d\d/g, "");
|
|
||||||
backgroundClass = "p-4 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={`w-auto text-center overflow-hidden ${backgroundClass} rounded-b-[3px] proxmoxstatus proxmoxstatus-${statusLabel
|
|
||||||
.toLowerCase()
|
|
||||||
.replace(" ", "-")}`}
|
|
||||||
title={statusLabel}
|
|
||||||
>
|
|
||||||
{style !== "dot" ? (
|
|
||||||
<div className={`text-[8px] font-bold ${colorClass} uppercase`}>{statusLabel}</div>
|
|
||||||
) : (
|
|
||||||
<div className={`rounded-full h-3 w-3 ${colorClass}`} />
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -55,7 +55,7 @@ export default function ColorToggle() {
|
|||||||
leaveFrom="opacity-100 translate-y-0"
|
leaveFrom="opacity-100 translate-y-0"
|
||||||
leaveTo="opacity-0 translate-y-1"
|
leaveTo="opacity-0 translate-y-1"
|
||||||
>
|
>
|
||||||
<Popover.Panel className="absolute -top-[75px] left-0 z-10">
|
<Popover.Panel className="absolute -top-[75px] left-0">
|
||||||
<div className="rounded-md shadow-lg ring-1 ring-black ring-opacity-5 w-[85vw] sm:w-full">
|
<div className="rounded-md shadow-lg ring-1 ring-black ring-opacity-5 w-[85vw] sm:w-full">
|
||||||
<div className="relative grid gap-2 p-2 grid-cols-11 bg-white/50 dark:bg-white/10 shadow-black/10 dark:shadow-black/20 rounded-md shadow-md">
|
<div className="relative grid gap-2 p-2 grid-cols-11 bg-white/50 dark:bg-white/10 shadow-black/10 dark:shadow-black/20 rounded-md shadow-md">
|
||||||
{colors.map((color) => (
|
{colors.map((color) => (
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
import { getProxmoxConfig } from "utils/config/proxmox";
|
|
||||||
import createLogger from "utils/logger";
|
|
||||||
import { httpProxy } from "utils/proxy/http";
|
|
||||||
|
|
||||||
const logger = createLogger("proxmoxStatsService");
|
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
|
||||||
const { service, type: vmType } = req.query;
|
|
||||||
|
|
||||||
const [node, vmid] = service;
|
|
||||||
|
|
||||||
if (!node) {
|
|
||||||
return res.status(400).send({
|
|
||||||
error: "Proxmox node parameter is required",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const proxmoxConfig = getProxmoxConfig();
|
|
||||||
|
|
||||||
if (!proxmoxConfig) {
|
|
||||||
return res.status(500).send({
|
|
||||||
error: "Proxmox server configuration not found",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const baseUrl = `${proxmoxConfig.url}/api2/json`;
|
|
||||||
const headers = {
|
|
||||||
Authorization: `PVEAPIToken=${proxmoxConfig.token}=${proxmoxConfig.secret}`,
|
|
||||||
};
|
|
||||||
|
|
||||||
const statusUrl = `${baseUrl}/nodes/${node}/${vmType}/${vmid}/status/current`;
|
|
||||||
|
|
||||||
const [status, , data] = await httpProxy(statusUrl, {
|
|
||||||
method: "GET",
|
|
||||||
headers,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (status !== 200) {
|
|
||||||
logger.error("HTTP Error %d calling Proxmox API", status);
|
|
||||||
return res.status(status).send({
|
|
||||||
error: `Failed to fetch Proxmox ${vmType} status`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let parsedData = JSON.parse(Buffer.from(data).toString());
|
|
||||||
|
|
||||||
if (!parsedData || !parsedData.data) {
|
|
||||||
return res.status(500).send({
|
|
||||||
error: "Invalid response from Proxmox API",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return res.status(200).json({
|
|
||||||
status: parsedData.data.status || "unknown",
|
|
||||||
cpu: parsedData.data.cpu,
|
|
||||||
mem: parsedData.data.mem,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
logger.error("Error fetching Proxmox status:", error);
|
|
||||||
return res.status(500).send({
|
|
||||||
error: "Failed to fetch Proxmox status",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import checkAndCopyConfig from "utils/config/config";
|
import checkAndCopyConfig from "utils/config/config";
|
||||||
|
|
||||||
const configs = ["docker.yaml", "settings.yaml", "services.yaml", "bookmarks.yaml", "kubernetes.yaml", "proxmox.yaml"];
|
const configs = ["docker.yaml", "settings.yaml", "services.yaml", "bookmarks.yaml"];
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
export default async function handler(req, res) {
|
||||||
const errors = configs.map((config) => checkAndCopyConfig(config)).filter((status) => status !== true);
|
const errors = configs.map((config) => checkAndCopyConfig(config)).filter((status) => status !== true);
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export default async function handler(req, res) {
|
|||||||
nodeMap[nodeMetric.metadata.name].memory.percent = (mem / nodeMap[nodeMetric.metadata.name].memory.total) * 100;
|
nodeMap[nodeMetric.metadata.name].memory.percent = (mem / nodeMap[nodeMetric.metadata.name].memory.total) * 100;
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error("Error getting metrics, ensure you have metrics-server installed:", JSON.stringify(error));
|
logger.error("Error getting metrics, ensure you have metrics-server installed: s", JSON.stringify(error));
|
||||||
return res.status(500).send({
|
return res.status(500).send({
|
||||||
error: "Error getting metrics, check logs for more details",
|
error: "Error getting metrics, check logs for more details",
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
# url: https://proxmox.host.or.ip:8006
|
|
||||||
# token: username@pam!Token ID
|
|
||||||
# secret: secret
|
|
||||||
@@ -135,28 +135,6 @@ 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() {
|
export async function servicesResponse() {
|
||||||
let discoveredDockerServices;
|
let discoveredDockerServices;
|
||||||
let discoveredKubernetesServices;
|
let discoveredKubernetesServices;
|
||||||
@@ -213,10 +191,14 @@ export async function servicesResponse() {
|
|||||||
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null;
|
||||||
if (definedLayouts) {
|
if (definedLayouts) {
|
||||||
// this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml
|
// this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml
|
||||||
const layoutGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
const layoutConfiguredGroups = Object.entries(initialSettings.layout).map(([key, value]) =>
|
||||||
convertLayoutGroupToGroup(key, value),
|
convertLayoutGroupToGroup(key, value),
|
||||||
);
|
);
|
||||||
mergeLayoutGroupsIntoConfigured(configuredServices, layoutGroups);
|
layoutConfiguredGroups.forEach((group) => {
|
||||||
|
if (!configuredServices.find((serviceGroup) => serviceGroup.name === group.name)) {
|
||||||
|
configuredServices.push(group);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mergedGroupsNames.forEach((groupName) => {
|
mergedGroupsNames.forEach((groupName) => {
|
||||||
|
|||||||
@@ -14,29 +14,19 @@ export const CONF_DIR = process.env.HOMEPAGE_CONFIG_DIR
|
|||||||
: join(process.cwd(), "config");
|
: join(process.cwd(), "config");
|
||||||
|
|
||||||
export default function checkAndCopyConfig(config) {
|
export default function checkAndCopyConfig(config) {
|
||||||
// Ensure config directory exists
|
|
||||||
if (!existsSync(CONF_DIR)) {
|
if (!existsSync(CONF_DIR)) {
|
||||||
try {
|
mkdirSync(CONF_DIR, { recursive: true });
|
||||||
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);
|
const configYaml = join(CONF_DIR, config);
|
||||||
|
|
||||||
// If the config file doesn't exist, try to copy the skeleton
|
|
||||||
if (!existsSync(configYaml)) {
|
if (!existsSync(configYaml)) {
|
||||||
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
|
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
|
||||||
try {
|
try {
|
||||||
copyFileSync(configSkeleton, configYaml);
|
copyFileSync(configSkeleton, configYaml);
|
||||||
console.info("%s was copied to the config folder", config);
|
console.info("%s was copied to the config folder", config);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("❌ Failed to initialize required config: %s", configYaml);
|
console.error("error copying config", err);
|
||||||
console.error("Reason: %s", err.message);
|
throw err;
|
||||||
console.error("Hint: Make /app/config writable or manually place the config file.");
|
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -43,14 +43,6 @@ export default function getDockerArguments(server) {
|
|||||||
res.conn.protocol = "https";
|
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;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
import { readFileSync } from "fs";
|
|
||||||
import path from "path";
|
|
||||||
|
|
||||||
import yaml from "js-yaml";
|
|
||||||
|
|
||||||
import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config";
|
|
||||||
|
|
||||||
export function getProxmoxConfig() {
|
|
||||||
checkAndCopyConfig("proxmox.yaml");
|
|
||||||
const configFile = path.join(CONF_DIR, "proxmox.yaml");
|
|
||||||
const rawConfigData = readFileSync(configFile, "utf8");
|
|
||||||
const configData = substituteEnvironmentVars(rawConfigData);
|
|
||||||
return yaml.load(configData);
|
|
||||||
}
|
|
||||||
@@ -295,7 +295,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
// emby, jellyfin
|
// emby, jellyfin
|
||||||
enableBlocks,
|
enableBlocks,
|
||||||
enableNowPlaying,
|
enableNowPlaying,
|
||||||
enableMediaControl,
|
|
||||||
|
|
||||||
// emby, jellyfin, tautulli
|
// emby, jellyfin, tautulli
|
||||||
enableUser,
|
enableUser,
|
||||||
@@ -338,10 +337,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
// jellystat
|
// jellystat
|
||||||
days,
|
days,
|
||||||
|
|
||||||
// komodo
|
|
||||||
showSummary,
|
|
||||||
showStacks,
|
|
||||||
|
|
||||||
// kopia
|
// kopia
|
||||||
snapshotHost,
|
snapshotHost,
|
||||||
snapshotPath,
|
snapshotPath,
|
||||||
@@ -367,9 +362,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
// opnsense, pfsense
|
// opnsense, pfsense
|
||||||
wan,
|
wan,
|
||||||
|
|
||||||
// portainer
|
|
||||||
kubernetes,
|
|
||||||
|
|
||||||
// prometheusmetric
|
// prometheusmetric
|
||||||
metrics,
|
metrics,
|
||||||
|
|
||||||
@@ -407,9 +399,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
|
|
||||||
// spoolman
|
// spoolman
|
||||||
spoolIds,
|
spoolIds,
|
||||||
|
|
||||||
// grafana
|
|
||||||
alerts,
|
|
||||||
} = widgetData;
|
} = widgetData;
|
||||||
|
|
||||||
let fieldsList = fields;
|
let fieldsList = fields;
|
||||||
@@ -454,19 +443,12 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (type === "unifi") {
|
if (type === "unifi") {
|
||||||
if (site) widget.site = site;
|
if (site) widget.site = site;
|
||||||
}
|
}
|
||||||
if (type === "portainer") {
|
|
||||||
if (kubernetes) widget.kubernetes = !!JSON.parse(kubernetes);
|
|
||||||
}
|
|
||||||
if (type === "proxmox") {
|
if (type === "proxmox") {
|
||||||
if (node) widget.node = node;
|
if (node) widget.node = node;
|
||||||
}
|
}
|
||||||
if (type === "proxmoxbackupserver") {
|
if (type === "proxmoxbackupserver") {
|
||||||
if (datastore) widget.datastore = datastore;
|
if (datastore) widget.datastore = datastore;
|
||||||
}
|
}
|
||||||
if (type === "komodo") {
|
|
||||||
if (showSummary !== undefined) widget.showSummary = !!JSON.parse(showSummary);
|
|
||||||
if (showStacks !== undefined) widget.showStacks = !!JSON.parse(showStacks);
|
|
||||||
}
|
|
||||||
if (type === "kubernetes") {
|
if (type === "kubernetes") {
|
||||||
if (namespace) widget.namespace = namespace;
|
if (namespace) widget.namespace = namespace;
|
||||||
if (app) widget.app = app;
|
if (app) widget.app = app;
|
||||||
@@ -489,7 +471,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (wan) widget.wan = wan;
|
if (wan) widget.wan = wan;
|
||||||
}
|
}
|
||||||
if (["emby", "jellyfin"].includes(type)) {
|
if (["emby", "jellyfin"].includes(type)) {
|
||||||
if (enableMediaControl !== undefined) widget.enableMediaControl = !!JSON.parse(enableMediaControl);
|
|
||||||
if (enableBlocks !== undefined) widget.enableBlocks = JSON.parse(enableBlocks);
|
if (enableBlocks !== undefined) widget.enableBlocks = JSON.parse(enableBlocks);
|
||||||
if (enableNowPlaying !== undefined) widget.enableNowPlaying = JSON.parse(enableNowPlaying);
|
if (enableNowPlaying !== undefined) widget.enableNowPlaying = JSON.parse(enableNowPlaying);
|
||||||
}
|
}
|
||||||
@@ -516,20 +497,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (snapshotHost) widget.snapshotHost = snapshotHost;
|
if (snapshotHost) widget.snapshotHost = snapshotHost;
|
||||||
if (snapshotPath) widget.snapshotPath = snapshotPath;
|
if (snapshotPath) widget.snapshotPath = snapshotPath;
|
||||||
}
|
}
|
||||||
if (
|
if (["beszel", "glances", "immich", "komga", "mealie", "pfsense", "pihole", "speedtest"].includes(type)) {
|
||||||
[
|
|
||||||
"beszel",
|
|
||||||
"glances",
|
|
||||||
"immich",
|
|
||||||
"komga",
|
|
||||||
"mealie",
|
|
||||||
"pfsense",
|
|
||||||
"pihole",
|
|
||||||
"speedtest",
|
|
||||||
"wgeasy",
|
|
||||||
"grafana",
|
|
||||||
].includes(type)
|
|
||||||
) {
|
|
||||||
if (version) widget.version = parseInt(version, 10);
|
if (version) widget.version = parseInt(version, 10);
|
||||||
}
|
}
|
||||||
if (type === "glances") {
|
if (type === "glances") {
|
||||||
@@ -607,9 +575,6 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (type === "jellystat") {
|
if (type === "jellystat") {
|
||||||
if (days !== undefined) widget.days = parseInt(days, 10);
|
if (days !== undefined) widget.days = parseInt(days, 10);
|
||||||
}
|
}
|
||||||
if (type === "grafana") {
|
|
||||||
if (alerts) widget.alerts = alerts;
|
|
||||||
}
|
|
||||||
return widget;
|
return widget;
|
||||||
});
|
});
|
||||||
return cleanedService;
|
return cleanedService;
|
||||||
|
|||||||
@@ -34,9 +34,6 @@ export default async function credentialedProxyHandler(req, res, map) {
|
|||||||
headers["X-CMC_PRO_API_KEY"] = `${widget.key}`;
|
headers["X-CMC_PRO_API_KEY"] = `${widget.key}`;
|
||||||
} else if (widget.type === "gotify") {
|
} else if (widget.type === "gotify") {
|
||||||
headers["X-gotify-Key"] = `${widget.key}`;
|
headers["X-gotify-Key"] = `${widget.key}`;
|
||||||
} else if (widget.type === "checkmk") {
|
|
||||||
headers["Accept"] = `application/json`;
|
|
||||||
headers.Authorization = `Bearer ${widget.username} ${widget.password}`;
|
|
||||||
} else if (
|
} else if (
|
||||||
[
|
[
|
||||||
"argocd",
|
"argocd",
|
||||||
@@ -101,13 +98,7 @@ export default async function credentialedProxyHandler(req, res, map) {
|
|||||||
headers.Cookie = `authenticated=${widget.key}`;
|
headers.Cookie = `authenticated=${widget.key}`;
|
||||||
}
|
}
|
||||||
} else if (widget.type === "wgeasy") {
|
} else if (widget.type === "wgeasy") {
|
||||||
if (widget.username && widget.password) {
|
headers.Authorization = widget.password;
|
||||||
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
|
|
||||||
} else {
|
|
||||||
headers.Authorization = widget.password;
|
|
||||||
}
|
|
||||||
} else if (widget.type === "trilium") {
|
|
||||||
headers.Authorization = widget.key;
|
|
||||||
} else if (widget.type === "gitlab") {
|
} else if (widget.type === "gitlab") {
|
||||||
headers["PRIVATE-TOKEN"] = widget.key;
|
headers["PRIVATE-TOKEN"] = widget.key;
|
||||||
} else if (widget.type === "speedtest") {
|
} else if (widget.type === "speedtest") {
|
||||||
|
|||||||
@@ -19,11 +19,9 @@ export default async function genericProxyHandler(req, res, map) {
|
|||||||
|
|
||||||
if (widget) {
|
if (widget) {
|
||||||
// if there are more than one question marks, replace others to &
|
// if there are more than one question marks, replace others to &
|
||||||
let urlString = formatApiCall(widgets[widget.type].api, { endpoint, ...widget }).replace(/(?<=\?.*)\?/g, "&");
|
const url = new URL(
|
||||||
if (widget.type === "customapi" && widget.url?.endsWith("/")) {
|
formatApiCall(widgets[widget.type].api, { endpoint, ...widget }).replace(/(?<=\?.*)\?/g, "&"),
|
||||||
urlString += "/"; // Ensure we dont lose the trailing slash for custom API calls
|
);
|
||||||
}
|
|
||||||
const url = new URL(urlString);
|
|
||||||
|
|
||||||
const headers = req.extraHeaders ?? widget.headers ?? widgets[widget.type].headers ?? {};
|
const headers = req.extraHeaders ?? widget.headers ?? widgets[widget.type].headers ?? {};
|
||||||
|
|
||||||
|
|||||||
@@ -110,21 +110,24 @@ export async function cachedRequest(url, duration = 5, ua = "homepage") {
|
|||||||
|
|
||||||
export async function httpProxy(url, params = {}) {
|
export async function httpProxy(url, params = {}) {
|
||||||
const constructedUrl = new URL(url);
|
const constructedUrl = new URL(url);
|
||||||
|
const proxyUrl = process.env.HOMEPAGE_HTTP_PROXY; // e.g. http://proxy.local:3128
|
||||||
const disableIpv6 = process.env.HOMEPAGE_PROXY_DISABLE_IPV6 === "true";
|
const disableIpv6 = process.env.HOMEPAGE_PROXY_DISABLE_IPV6 === "true";
|
||||||
const agentOptions = disableIpv6 ? { family: 4, autoSelectFamily: false } : {};
|
const agentOptions = disableIpv6 ? { family: 4, autoSelectFamily: false } : {};
|
||||||
|
|
||||||
let request = null;
|
let agent;
|
||||||
if (constructedUrl.protocol === "https:") {
|
if (proxyUrl) {
|
||||||
request = httpsRequest(constructedUrl, {
|
agent = constructedUrl.protocol === "https:" ? new HttpsProxyAgent(proxyUrl) : new HttpProxyAgent(proxyUrl);
|
||||||
agent: new https.Agent({ ...agentOptions, rejectUnauthorized: false }),
|
logger.debug("Using proxy for request to %s: %s", constructedUrl.href, proxyUrl);
|
||||||
...params,
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
request = httpRequest(constructedUrl, {
|
agent =
|
||||||
agent: new http.Agent(agentOptions),
|
constructedUrl.protocol === "https:"
|
||||||
...params,
|
? new https.Agent({ ...agentOptions, rejectUnauthorized: false })
|
||||||
});
|
: new http.Agent(agentOptions);
|
||||||
}
|
}
|
||||||
|
const request =
|
||||||
|
constructedUrl.protocol === "https:"
|
||||||
|
? httpsRequest(constructedUrl, { agent, ...params })
|
||||||
|
: httpRequest(constructedUrl, { agent, ...params });
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const [status, contentType, data, responseHeaders] = await request;
|
const [status, contentType, data, responseHeaders] = await request;
|
||||||
|
|||||||
@@ -72,23 +72,8 @@ export default async function beszelProxyHandler(req, res) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const badRequest = [400, 403].includes(status);
|
if ([400, 403].includes(status)) {
|
||||||
const text = data.toString("utf-8");
|
logger.debug(`HTTP ${status} retrieving data from Beszel, logging in and trying again.`);
|
||||||
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}`);
|
cache.del(`${tokenCacheKey}.${service}`);
|
||||||
[status, token] = await login(loginUrl, widget.username, widget.password, service);
|
[status, token] = await login(loginUrl, widget.username, widget.password, service);
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,13 @@ export default function Event({ event, colorVariants, showDate = false, showTime
|
|||||||
const [hover, setHover] = useState(false);
|
const [hover, setHover] = useState(false);
|
||||||
const { i18n } = useTranslation();
|
const { i18n } = useTranslation();
|
||||||
|
|
||||||
const children = (
|
return (
|
||||||
<>
|
<div
|
||||||
|
className="flex flex-row text-theme-700 dark:text-theme-200 items-center text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"
|
||||||
|
onMouseEnter={() => setHover(!hover)}
|
||||||
|
onMouseLeave={() => setHover(!hover)}
|
||||||
|
key={`event-${event.title}-${event.date}-${event.additional}`}
|
||||||
|
>
|
||||||
{showDateColumn && (
|
{showDateColumn && (
|
||||||
<span className="ml-2 w-12">
|
<span className="ml-2 w-12">
|
||||||
<span>
|
<span>
|
||||||
@@ -31,26 +36,6 @@ export default function Event({ event, colorVariants, showDate = false, showTime
|
|||||||
<IoMdCheckmarkCircleOutline />
|
<IoMdCheckmarkCircleOutline />
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</>
|
|
||||||
);
|
|
||||||
const className =
|
|
||||||
"flex flex-row text-theme-700 dark:text-theme-200 items-center text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1";
|
|
||||||
const key = `event-${event.title}-${event.date}-${event.additional}`;
|
|
||||||
return event.url ? (
|
|
||||||
<a
|
|
||||||
className={classNames(className, "hover:bg-theme-300/50 dark:hover:bg-theme-800/20")}
|
|
||||||
onMouseEnter={() => setHover(!hover)}
|
|
||||||
onMouseLeave={() => setHover(!hover)}
|
|
||||||
key={key}
|
|
||||||
href={event.url}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
>
|
|
||||||
{children}
|
|
||||||
</a>
|
|
||||||
) : (
|
|
||||||
<div className={className} onMouseEnter={() => setHover(!hover)} onMouseLeave={() => setHover(!hover)} key={key}>
|
|
||||||
{children}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
|||||||
ICAL.Time.now(), // handles events without a date
|
ICAL.Time.now(), // handles events without a date
|
||||||
location: event.getFirstPropertyValue("location"),
|
location: event.getFirstPropertyValue("location"),
|
||||||
status: event.getFirstPropertyValue("status"),
|
status: event.getFirstPropertyValue("status"),
|
||||||
url: event.getFirstPropertyValue("url"),
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -134,7 +133,6 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
|||||||
isCompleted: getIsCompleted(),
|
isCompleted: getIsCompleted(),
|
||||||
additional: event.location,
|
additional: event.location,
|
||||||
type: "ical",
|
type: "ical",
|
||||||
url: event.url,
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ export default function Integration({ config, params, setEvents, hideErrors = fa
|
|||||||
const cinemaTitle = `${event.title} - ${t("calendar.inCinemas")}`;
|
const cinemaTitle = `${event.title} - ${t("calendar.inCinemas")}`;
|
||||||
const physicalTitle = `${event.title} - ${t("calendar.physicalRelease")}`;
|
const physicalTitle = `${event.title} - ${t("calendar.physicalRelease")}`;
|
||||||
const digitalTitle = `${event.title} - ${t("calendar.digitalRelease")}`;
|
const digitalTitle = `${event.title} - ${t("calendar.digitalRelease")}`;
|
||||||
const url = config?.baseUrl && event.titleSlug && `${config.baseUrl}/movie/${event.titleSlug}`;
|
|
||||||
|
|
||||||
if (event.inCinemas) {
|
if (event.inCinemas) {
|
||||||
eventsToAdd[cinemaTitle] = {
|
eventsToAdd[cinemaTitle] = {
|
||||||
@@ -31,7 +30,6 @@ export default function Integration({ config, params, setEvents, hideErrors = fa
|
|||||||
color: config?.color ?? "amber",
|
color: config?.color ?? "amber",
|
||||||
isCompleted: event.hasFile,
|
isCompleted: event.hasFile,
|
||||||
additional: "",
|
additional: "",
|
||||||
url,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +40,6 @@ export default function Integration({ config, params, setEvents, hideErrors = fa
|
|||||||
color: config?.color ?? "cyan",
|
color: config?.color ?? "cyan",
|
||||||
isCompleted: event.hasFile,
|
isCompleted: event.hasFile,
|
||||||
additional: "",
|
additional: "",
|
||||||
url,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +50,6 @@ export default function Integration({ config, params, setEvents, hideErrors = fa
|
|||||||
color: config?.color ?? "emerald",
|
color: config?.color ?? "emerald",
|
||||||
isCompleted: event.hasFile,
|
isCompleted: event.hasFile,
|
||||||
additional: "",
|
additional: "",
|
||||||
url,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ export default function Integration({ config, params, setEvents, hideErrors = fa
|
|||||||
color: config?.color ?? "teal",
|
color: config?.color ?? "teal",
|
||||||
isCompleted: event.hasFile,
|
isCompleted: event.hasFile,
|
||||||
additional: `S${event.seasonNumber} E${event.episodeNumber}`,
|
additional: `S${event.seasonNumber} E${event.episodeNumber}`,
|
||||||
url: config?.baseUrl && event.series.titleSlug && `${config.baseUrl}/series/${event.series.titleSlug}`,
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,7 @@ export default async function calendarProxyHandler(req, res) {
|
|||||||
return res.status(403).json({ error: "No integration URL specified" });
|
return res.status(403).json({ error: "No integration URL specified" });
|
||||||
}
|
}
|
||||||
|
|
||||||
const options = {};
|
const [status, contentType, data] = await httpProxy(integration.url);
|
||||||
if (integration.url?.includes("outlook")) {
|
|
||||||
// Outlook requires a user agent header
|
|
||||||
options.headers = {
|
|
||||||
"User-Agent": `gethomepage/${process.env.NEXT_PUBLIC_VERSION || "dev"}`,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const [status, contentType, data] = await httpProxy(integration.url, options);
|
|
||||||
|
|
||||||
if (contentType) res.setHeader("Content-Type", contentType);
|
if (contentType) res.setHeader("Content-Type", contentType);
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
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>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
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,7 +16,6 @@ const components = {
|
|||||||
calibreweb: dynamic(() => import("./calibreweb/component")),
|
calibreweb: dynamic(() => import("./calibreweb/component")),
|
||||||
changedetectionio: dynamic(() => import("./changedetectionio/component")),
|
changedetectionio: dynamic(() => import("./changedetectionio/component")),
|
||||||
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
channelsdvrserver: dynamic(() => import("./channelsdvrserver/component")),
|
||||||
checkmk: dynamic(() => import("./checkmk/component")),
|
|
||||||
cloudflared: dynamic(() => import("./cloudflared/component")),
|
cloudflared: dynamic(() => import("./cloudflared/component")),
|
||||||
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
||||||
crowdsec: dynamic(() => import("./crowdsec/component")),
|
crowdsec: dynamic(() => import("./crowdsec/component")),
|
||||||
@@ -63,7 +62,6 @@ const components = {
|
|||||||
jellystat: dynamic(() => import("./jellystat/component")),
|
jellystat: dynamic(() => import("./jellystat/component")),
|
||||||
kavita: dynamic(() => import("./kavita/component")),
|
kavita: dynamic(() => import("./kavita/component")),
|
||||||
komga: dynamic(() => import("./komga/component")),
|
komga: dynamic(() => import("./komga/component")),
|
||||||
komodo: dynamic(() => import("./komodo/component")),
|
|
||||||
kopia: dynamic(() => import("./kopia/component")),
|
kopia: dynamic(() => import("./kopia/component")),
|
||||||
lidarr: dynamic(() => import("./lidarr/component")),
|
lidarr: dynamic(() => import("./lidarr/component")),
|
||||||
linkwarden: dynamic(() => import("./linkwarden/component")),
|
linkwarden: dynamic(() => import("./linkwarden/component")),
|
||||||
@@ -133,7 +131,6 @@ const components = {
|
|||||||
tdarr: dynamic(() => import("./tdarr/component")),
|
tdarr: dynamic(() => import("./tdarr/component")),
|
||||||
traefik: dynamic(() => import("./traefik/component")),
|
traefik: dynamic(() => import("./traefik/component")),
|
||||||
transmission: dynamic(() => import("./transmission/component")),
|
transmission: dynamic(() => import("./transmission/component")),
|
||||||
trilium: dynamic(() => import("./trilium/component")),
|
|
||||||
tubearchivist: dynamic(() => import("./tubearchivist/component")),
|
tubearchivist: dynamic(() => import("./tubearchivist/component")),
|
||||||
truenas: dynamic(() => import("./truenas/component")),
|
truenas: dynamic(() => import("./truenas/component")),
|
||||||
unifi: dynamic(() => import("./unifi/component")),
|
unifi: dynamic(() => import("./unifi/component")),
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function generateStreamTitle(session, enableUser, showEpisodeNumber) {
|
|||||||
return enableUser ? `${streamTitle} (${UserName})` : streamTitle;
|
return enableUser ? `${streamTitle} (${UserName})` : streamTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumber, enableMediaControl }) {
|
function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) {
|
||||||
const {
|
const {
|
||||||
PlayState: { PositionTicks, IsPaused, IsMuted },
|
PlayState: { PositionTicks, IsPaused, IsMuted },
|
||||||
} = session;
|
} = session;
|
||||||
@@ -85,7 +85,7 @@ function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumbe
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div className="text-xs z-10 self-center ml-1">
|
<div className="text-xs z-10 self-center ml-1">
|
||||||
{enableMediaControl && IsPaused && (
|
{IsPaused && (
|
||||||
<BsFillPlayFill
|
<BsFillPlayFill
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
playCommand(session, "Unpause");
|
playCommand(session, "Unpause");
|
||||||
@@ -93,7 +93,7 @@ function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumbe
|
|||||||
className="inline-block w-4 h-4 cursor-pointer -mt-[1px] mr-1 opacity-80"
|
className="inline-block w-4 h-4 cursor-pointer -mt-[1px] mr-1 opacity-80"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{enableMediaControl && !IsPaused && (
|
{!IsPaused && (
|
||||||
<BsPauseFill
|
<BsPauseFill
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
playCommand(session, "Pause");
|
playCommand(session, "Pause");
|
||||||
@@ -114,7 +114,7 @@ function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumbe
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber, enableMediaControl }) {
|
function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) {
|
||||||
const {
|
const {
|
||||||
PlayState: { PositionTicks, IsPaused, IsMuted },
|
PlayState: { PositionTicks, IsPaused, IsMuted },
|
||||||
} = session;
|
} = session;
|
||||||
@@ -139,7 +139,7 @@ function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber, ena
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div className="text-xs z-10 self-center ml-1">
|
<div className="text-xs z-10 self-center ml-1">
|
||||||
{enableMediaControl && IsPaused && (
|
{IsPaused && (
|
||||||
<BsFillPlayFill
|
<BsFillPlayFill
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
playCommand(session, "Unpause");
|
playCommand(session, "Unpause");
|
||||||
@@ -147,7 +147,7 @@ function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber, ena
|
|||||||
className="inline-block w-4 h-4 cursor-pointer -mt-[1px] mr-1 opacity-80"
|
className="inline-block w-4 h-4 cursor-pointer -mt-[1px] mr-1 opacity-80"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{enableMediaControl && !IsPaused && (
|
{!IsPaused && (
|
||||||
<BsPauseFill
|
<BsPauseFill
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
playCommand(session, "Pause");
|
playCommand(session, "Pause");
|
||||||
@@ -238,7 +238,6 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
const enableBlocks = service.widget?.enableBlocks;
|
const enableBlocks = service.widget?.enableBlocks;
|
||||||
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
||||||
const enableMediaControl = service.widget?.enableMediaControl !== false; // default is true
|
|
||||||
const enableUser = !!service.widget?.enableUser; // default is false
|
const enableUser = !!service.widget?.enableUser; // default is false
|
||||||
const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true
|
const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true
|
||||||
const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false
|
const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false
|
||||||
@@ -305,7 +304,6 @@ export default function Component({ service }) {
|
|||||||
session={session}
|
session={session}
|
||||||
enableUser={enableUser}
|
enableUser={enableUser}
|
||||||
showEpisodeNumber={showEpisodeNumber}
|
showEpisodeNumber={showEpisodeNumber}
|
||||||
enableMediaControl={enableMediaControl}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
@@ -323,7 +321,6 @@ export default function Component({ service }) {
|
|||||||
session={session}
|
session={session}
|
||||||
enableUser={enableUser}
|
enableUser={enableUser}
|
||||||
showEpisodeNumber={showEpisodeNumber}
|
showEpisodeNumber={showEpisodeNumber}
|
||||||
enableMediaControl={enableMediaControl}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ function CPU({ quicklookData, className = "" }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
quicklookData &&
|
quicklookData &&
|
||||||
quicklookData.cpu !== undefined &&
|
quicklookData.cpu && (
|
||||||
quicklookData.cpu !== null && (
|
|
||||||
<div className="text-xs flex place-content-between">
|
<div className="text-xs flex place-content-between">
|
||||||
<div className={className}>{t("glances.cpu")}</div>
|
<div className={className}>{t("glances.cpu")}</div>
|
||||||
<div className={className}>
|
<div className={className}>
|
||||||
@@ -110,10 +109,10 @@ export default function Component({ service }) {
|
|||||||
return (
|
return (
|
||||||
<Container chart={chart}>
|
<Container chart={chart}>
|
||||||
{chart && (
|
{chart && (
|
||||||
<div className="bg-linear-to-br from-theme-500/30 via-theme-600/20 to-theme-700/10 absolute -top-20 -left-2 -right-2 -bottom-2" />
|
<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={chart ? "-top-6 right-2" : "top-3 right-2"}>
|
<Block position="-top-6 right-2">
|
||||||
{quicklookData && quicklookData.cpu_name && chart && (
|
{quicklookData && quicklookData.cpu_name && chart && (
|
||||||
<div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div>
|
<div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div>
|
||||||
)}
|
)}
|
||||||
@@ -125,7 +124,7 @@ export default function Component({ service }) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div>{!chart && <Swap quicklookData={quicklookData} className="opacity-25 ml-2" />}</div>
|
<div className="w-[4rem]">{!chart && <Swap quicklookData={quicklookData} className="opacity-25" />}</div>
|
||||||
</Block>
|
</Block>
|
||||||
|
|
||||||
{chart && (
|
{chart && (
|
||||||
@@ -137,18 +136,18 @@ export default function Component({ service }) {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{!chart && (
|
{!chart && (
|
||||||
<Block position="bottom-3 left-3">
|
<Block position="bottom-3 left-3 w-[4rem]">
|
||||||
<CPU quicklookData={quicklookData} className="opacity-75 mr-2" />
|
<CPU quicklookData={quicklookData} className="opacity-75" />
|
||||||
</Block>
|
</Block>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Block position="bottom-3 right-2">
|
<Block position="bottom-3 right-2 w-[4rem]">
|
||||||
{chart && <CPU quicklookData={quicklookData} className="opacity-50 ml-2" />}
|
{chart && <CPU quicklookData={quicklookData} className="opacity-50" />}
|
||||||
|
|
||||||
{chart && <Mem quicklookData={quicklookData} className="opacity-50 ml-2" />}
|
{chart && <Mem quicklookData={quicklookData} className="opacity-50" />}
|
||||||
{!chart && <Mem quicklookData={quicklookData} className="opacity-75 ml-2" />}
|
{!chart && <Mem quicklookData={quicklookData} className="opacity-75" />}
|
||||||
|
|
||||||
{chart && <Swap quicklookData={quicklookData} className="opacity-50 ml-2" />}
|
{chart && <Swap quicklookData={quicklookData} className="opacity-50" />}
|
||||||
</Block>
|
</Block>
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export default function Component({ service }) {
|
|||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
const { chart, refreshInterval = defaultInterval, version = 3 } = widget;
|
const { chart, refreshInterval = defaultInterval, version = 3 } = widget;
|
||||||
|
|
||||||
const memoryInfoKey = version === 3 ? 0 : "rss";
|
const memoryInfoKey = version === 3 ? 0 : "data";
|
||||||
|
|
||||||
const { data, error } = useWidgetAPI(service.widget, `${version}/processlist`, {
|
const { data, error } = useWidgetAPI(service.widget, `${version}/processlist`, {
|
||||||
refreshInterval: Math.max(defaultInterval, refreshInterval),
|
refreshInterval: Math.max(defaultInterval, refreshInterval),
|
||||||
@@ -69,7 +69,7 @@ export default function Component({ service }) {
|
|||||||
<div className="opacity-25 w-14 text-right">{item.cpu_percent.toFixed(1)}%</div>
|
<div className="opacity-25 w-14 text-right">{item.cpu_percent.toFixed(1)}%</div>
|
||||||
<div className="opacity-25 w-14 text-right">
|
<div className="opacity-25 w-14 text-right">
|
||||||
{t("common.bytes", {
|
{t("common.bytes", {
|
||||||
value: item.memory_info[memoryInfoKey] ?? item.memory_info.data ?? item.memory_info.wset,
|
value: item.memory_info[memoryInfoKey] ?? item.memory_info.wset,
|
||||||
maximumFractionDigits: 0,
|
maximumFractionDigits: 0,
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,28 +6,18 @@ import useWidgetAPI from "utils/proxy/use-widget-api";
|
|||||||
export default function Component({ service }) {
|
export default function Component({ service }) {
|
||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
|
|
||||||
if (!widget.fields) {
|
|
||||||
widget.fields = ["public_ip", "region", "country"];
|
|
||||||
}
|
|
||||||
|
|
||||||
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
|
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
|
||||||
const includePF = widget.fields.includes("port_forwarded");
|
|
||||||
const { data: portForwardedData, error: portForwardedError } = useWidgetAPI(
|
|
||||||
widget,
|
|
||||||
includePF ? "port_forwarded" : "",
|
|
||||||
);
|
|
||||||
|
|
||||||
if (gluetunError || (includePF && portForwardedError)) {
|
if (gluetunError) {
|
||||||
return <Container service={service} error={gluetunError || portForwardedError} />;
|
return <Container service={service} error={gluetunError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gluetunData || (includePF && !portForwardedData)) {
|
if (!gluetunData) {
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="gluetun.public_ip" />
|
<Block label="gluetun.public_ip" />
|
||||||
<Block label="gluetun.region" />
|
<Block label="gluetun.region" />
|
||||||
<Block label="gluetun.country" />
|
<Block label="gluetun.country" />
|
||||||
<Block label="gluetun.port_forwarded" />
|
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -37,7 +27,6 @@ export default function Component({ service }) {
|
|||||||
<Block label="gluetun.public_ip" value={gluetunData.public_ip} />
|
<Block label="gluetun.public_ip" value={gluetunData.public_ip} />
|
||||||
<Block label="gluetun.region" value={gluetunData.region} />
|
<Block label="gluetun.region" value={gluetunData.region} />
|
||||||
<Block label="gluetun.country" value={gluetunData.country} />
|
<Block label="gluetun.country" value={gluetunData.country} />
|
||||||
<Block label="gluetun.port_forwarded" value={portForwardedData?.port} />
|
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user