mirror of
https://github.com/gethomepage/homepage.git
synced 2026-01-01 19:52:08 +08:00
Compare commits
85 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08da8e66fd | ||
|
|
682e0cbc82 | ||
|
|
f7ad322d4c | ||
|
|
2b31c23b9e | ||
|
|
ae258b8276 | ||
|
|
ff296be4a4 | ||
|
|
31da9ee417 | ||
|
|
be7a00d631 | ||
|
|
0d99a8766f | ||
|
|
e66b58dc53 | ||
|
|
1b32cbbbfd | ||
|
|
681a8a828b | ||
|
|
f8009a7067 | ||
|
|
1ed2f16cbf | ||
|
|
ba2b3eeb9e | ||
|
|
45ca94eb6d | ||
|
|
a07cc25441 | ||
|
|
0dcd25d5ad | ||
|
|
cd34796b9d | ||
|
|
0d788e3d06 | ||
|
|
ed1dafadde | ||
|
|
96ac9046b3 | ||
|
|
6d5f35f07e | ||
|
|
c77dfa4c64 | ||
|
|
307d7f4b2d | ||
|
|
fb9927ab0c | ||
|
|
d13165699b | ||
|
|
65ff248ee7 | ||
|
|
87e5643892 | ||
|
|
8887281246 | ||
|
|
5b50e8ff81 | ||
|
|
c36c6a9012 | ||
|
|
cf990063b9 | ||
|
|
610f1bd974 | ||
|
|
4031178831 | ||
|
|
b65c8399d8 | ||
|
|
6b63cfd491 | ||
|
|
196c51bf73 | ||
|
|
17c9b2631e | ||
|
|
1a21189643 | ||
|
|
b6b428363c | ||
|
|
e707fa46cf | ||
|
|
3d040362cb | ||
|
|
57b193b037 | ||
|
|
8a75c9b6e3 | ||
|
|
0dafc792f7 | ||
|
|
afc0fe29ee | ||
|
|
817a9bbce5 | ||
|
|
3ef7031eb0 | ||
|
|
6faf32eae9 | ||
|
|
455e86571a | ||
|
|
7d1e0c087a | ||
|
|
d48ef4c038 | ||
|
|
4a2eeaa8b9 | ||
|
|
faa2e6bb36 | ||
|
|
438543d8cd | ||
|
|
5a350cc9ce | ||
|
|
529814cf03 | ||
|
|
9b5275a854 | ||
|
|
e623196ac0 | ||
|
|
973b1f7aaf | ||
|
|
81a322cc99 | ||
|
|
36e82a8b90 | ||
|
|
1383e22acd | ||
|
|
a756a01d63 | ||
|
|
937efc9f1b | ||
|
|
fe6f32f072 | ||
|
|
226603770c | ||
|
|
2f48d21bfd | ||
|
|
4457baffa5 | ||
|
|
91d12c401c | ||
|
|
3f8da51aeb | ||
|
|
837717461f | ||
|
|
effedc28ed | ||
|
|
76b477572e | ||
|
|
6c6660b91b | ||
|
|
6886040798 | ||
|
|
1fb4850bef | ||
|
|
06cf76d724 | ||
|
|
7aeda56af4 | ||
|
|
2058b7fcae | ||
|
|
1e06e93e47 | ||
|
|
8f756d4084 | ||
|
|
02089a35ee | ||
|
|
f7a6b7dbf4 |
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -38,3 +38,4 @@ What type of change does your PR introduce to Homepage?
|
|||||||
- [ ] If applicable, I have reviewed the [feature / enhancement](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
|
- [ ] If applicable, I have reviewed the [feature / enhancement](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
|
||||||
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
|
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
|
||||||
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
||||||
|
- [ ] In the description above I have disclosed the use of AI tools in the coding of this PR.
|
||||||
|
|||||||
2
.github/workflows/crowdin.yml
vendored
2
.github/workflows/crowdin.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: crowdin action
|
- name: crowdin action
|
||||||
uses: crowdin/github-action@v2
|
uses: crowdin/github-action@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
14
.github/workflows/docker-publish.yml
vendored
14
.github/workflows/docker-publish.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install python
|
- name: Install python
|
||||||
uses: actions/setup-python@v6
|
uses: actions/setup-python@v6
|
||||||
@@ -35,10 +35,11 @@ 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
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -61,7 +62,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
@@ -83,7 +84,7 @@ jobs:
|
|||||||
latest=auto
|
latest=auto
|
||||||
|
|
||||||
- name: Next.js build cache
|
- name: Next.js build cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: .next/cache
|
path: .next/cache
|
||||||
key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }}
|
key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }}
|
||||||
@@ -93,10 +94,11 @@ 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
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
cache: 'pnpm'
|
cache: 'pnpm'
|
||||||
@@ -127,7 +129,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Setup QEMU
|
- name: Setup QEMU
|
||||||
uses: docker/setup-qemu-action@v3.6.0
|
uses: docker/setup-qemu-action@v3.7.0
|
||||||
|
|
||||||
- name: Setup Docker buildx
|
- name: Setup Docker buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|||||||
10
.github/workflows/docs-publish.yml
vendored
10
.github/workflows/docs-publish.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
|||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: Install python
|
- name: Install python
|
||||||
uses: actions/setup-python@v6
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
@@ -32,12 +32,12 @@ jobs:
|
|||||||
needs:
|
needs:
|
||||||
- pre-commit
|
- pre-commit
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- uses: actions/setup-python@v6
|
- uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
key: mkdocs-material-${{ env.cache_id }}
|
key: mkdocs-material-${{ env.cache_id }}
|
||||||
path: .cache
|
path: .cache
|
||||||
@@ -54,7 +54,7 @@ jobs:
|
|||||||
needs:
|
needs:
|
||||||
- pre-commit
|
- pre-commit
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Configure Git Credentials
|
- name: Configure Git Credentials
|
||||||
run: |
|
run: |
|
||||||
git config user.name github-actions[bot]
|
git config user.name github-actions[bot]
|
||||||
@@ -63,7 +63,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
- run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV
|
- run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
key: mkdocs-material-${{ env.cache_id }}
|
key: mkdocs-material-${{ env.cache_id }}
|
||||||
path: .cache
|
path: .cache
|
||||||
|
|||||||
2
.github/workflows/repo-maintenance.yml
vendored
2
.github/workflows/repo-maintenance.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
|||||||
name: 'Lock Old Threads'
|
name: 'Lock Old Threads'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: dessant/lock-threads@v5
|
- uses: dessant/lock-threads@v6
|
||||||
with:
|
with:
|
||||||
issue-inactive-days: '30'
|
issue-inactive-days: '30'
|
||||||
pr-inactive-days: '30'
|
pr-inactive-days: '30'
|
||||||
|
|||||||
@@ -51,8 +51,10 @@ 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 shadow
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV HOSTNAME=0.0.0.0
|
ENV HOSTNAME=::
|
||||||
ENV PORT=3000
|
ENV PORT=3000
|
||||||
EXPOSE $PORT
|
EXPOSE $PORT
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,15 @@ export PGID=${PGID:-0}
|
|||||||
|
|
||||||
export HOMEPAGE_BUILDTIME=$(date +%s)
|
export HOMEPAGE_BUILDTIME=$(date +%s)
|
||||||
|
|
||||||
|
# Try IPv6 first (dual stack when available), but fall back to IPv4 if the bind fails
|
||||||
|
export HOSTNAME=${HOSTNAME:-::}
|
||||||
|
if [ "$HOSTNAME" = "::" ]; then
|
||||||
|
if ! node -e "const server = require('http').createServer(() => {}); const host = '::'; const port = process.env.PORT || 3000; server.once('error', (err) => { console.error('IPv6 bind failed:', err.message); process.exit(1); }); server.listen(port, host, () => server.close(() => process.exit(0)));"; then
|
||||||
|
echo "Falling back to IPv4 bind at 0.0.0.0"
|
||||||
|
export HOSTNAME=0.0.0.0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Check ownership before chown
|
# Check ownership before chown
|
||||||
if [ -e /app/config ]; then
|
if [ -e /app/config ]; then
|
||||||
CURRENT_UID=$(stat -c %u /app/config)
|
CURRENT_UID=$(stat -c %u /app/config)
|
||||||
@@ -57,8 +66,8 @@ if [ -d /app/.next ]; then
|
|||||||
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
|
||||||
su-exec ${PUID}:${PGID} "$@"
|
exec su-exec ${PUID}:${PGID} "$@"
|
||||||
else
|
else
|
||||||
exec "$@"
|
exec "$@"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -189,6 +189,8 @@ labels: ...
|
|||||||
- homepage.widgets[1].slug=youreventslughere
|
- homepage.widgets[1].slug=youreventslughere
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To pass custom HTTP headers with a widget request when using labels, use the same dot-notation: `homepage.widget.headers.X-Auth-Key=secret` (or `homepage.widgets[0].headers.X-Auth-Key=secret` when multiple widgets are present).
|
||||||
|
|
||||||
You can add specify fields for e.g. the [CustomAPI](../widgets/services/customapi.md) widget by using array-style dot notation:
|
You can add specify fields for e.g. the [CustomAPI](../widgets/services/customapi.md) widget by using array-style dot notation:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -271,4 +273,4 @@ You can show the docker stats by clicking the status indicator but this can also
|
|||||||
showStats: true
|
showStats: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Also see the settings for [show docker stats](settings.md#show-docker-stats).
|
Also see the settings for [show docker stats](settings.md#show-container-stats).
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ metadata:
|
|||||||
gethomepage.dev/name: Emby
|
gethomepage.dev/name: Emby
|
||||||
gethomepage.dev/widget.type: "emby"
|
gethomepage.dev/widget.type: "emby"
|
||||||
gethomepage.dev/widget.url: "https://emby.example.com"
|
gethomepage.dev/widget.url: "https://emby.example.com"
|
||||||
|
gethomepage.dev/widget.headers.X-Auth-Key: "your-secret-here"
|
||||||
gethomepage.dev/pod-selector: ""
|
gethomepage.dev/pod-selector: ""
|
||||||
gethomepage.dev/weight: 10 # optional
|
gethomepage.dev/weight: 10 # optional
|
||||||
gethomepage.dev/instance: "public" # optional
|
gethomepage.dev/instance: "public" # optional
|
||||||
@@ -178,3 +179,32 @@ See [ClusterRole and ClusterRoleBinding](../installation/k8s.md#clusterrole-and-
|
|||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.
|
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.
|
||||||
|
|
||||||
|
## Adding extra configuration files
|
||||||
|
|
||||||
|
Some Homepage features (for example, [Proxmox](../configs/proxmox.md)) require additional configuration files such as `proxmox.yaml`.
|
||||||
|
When running Homepage on Kubernetes, these files must be provided via a `ConfigMap` and mounted into the container at `/app/config`.
|
||||||
|
|
||||||
|
### ConfigMap example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: homepage
|
||||||
|
data:
|
||||||
|
proxmox.yaml: |
|
||||||
|
pve:
|
||||||
|
url: https://proxmox.host.or.ip:8006
|
||||||
|
token: username@pam!Token ID
|
||||||
|
secret: secret
|
||||||
|
```
|
||||||
|
|
||||||
|
Mount the file into `/app/config` by updating the `Deployment`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /app/config/proxmox.yaml
|
||||||
|
name: homepage-config
|
||||||
|
subPath: proxmox.yaml
|
||||||
|
```
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ 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.
|
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.
|
||||||
You can configure multiple nodes - be sure to use the exact `proxmoxNode` identifier!
|
To configure multiple nodes, ensure the key name in the `proxmox.yaml` matches the `proxmoxNode` field used in your service configuration.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
pve:
|
pve: # must match your actual Proxmox node name
|
||||||
url: https://proxmox.host.or.ip:8006
|
url: https://proxmox.host.or.ip:8006
|
||||||
token: username@pam!Token ID
|
token: username@pam!Token ID
|
||||||
secret: secret
|
secret: secret
|
||||||
|
|||||||
@@ -101,6 +101,25 @@ Each service can have multiple widgets attached to it, for example:
|
|||||||
|
|
||||||
Multiple widgets per service are not yet supported with Kubernetes ingress annotations.
|
Multiple widgets per service are not yet supported with Kubernetes ingress annotations.
|
||||||
|
|
||||||
|
#### Custom HTTP headers
|
||||||
|
|
||||||
|
Widgets that make HTTP calls support extra request headers via `headers`. This is useful when a reverse proxy expects a secret header.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- UptimeRobot:
|
||||||
|
icon: uptimekuma.png
|
||||||
|
href: https://uptimerobot.com/
|
||||||
|
widget:
|
||||||
|
type: uptimerobot
|
||||||
|
url: https://api.uptimerobot.com
|
||||||
|
key: ${UPTIMEROBOT_API_KEY}
|
||||||
|
headers:
|
||||||
|
User-Agent: homepage
|
||||||
|
X-Auth-Key: your-secret-here
|
||||||
|
```
|
||||||
|
|
||||||
|
If you define services via Docker labels or Kubernetes annotations, use the same key with dot-notation (for example `homepage.widget.headers.X-Auth-Key=secret` or `gethomepage.dev/widget.headers.X-Auth-Key: "secret"`).
|
||||||
|
|
||||||
#### Field Visibility
|
#### Field Visibility
|
||||||
|
|
||||||
Each widget can optionally provide a list of which fields should be visible via the `fields` widget property. If no fields are specified, then all fields will be displayed. The `fields` property must be a valid YAML array of strings. As an example, here is the entry for Sonarr showing only a couple of fields.
|
Each widget can optionally provide a list of which fields should be visible via the `fields` widget property. If no fields are specified, then all fields will be displayed. The `fields` property must be a valid YAML array of strings. As an example, here is the entry for Sonarr showing only a couple of fields.
|
||||||
@@ -118,6 +137,60 @@ Each widget can optionally provide a list of which fields should be visible via
|
|||||||
key: apikeyapikeyapikeyapikeyapikey
|
key: apikeyapikeyapikeyapikeyapikey
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Block Highlighting
|
||||||
|
|
||||||
|
Widgets can tint their metric block text automatically based on rules defined alongside the service. Attach a `highlight` section to the widget configuration and map each block to one or more numeric or string rules using the field key (for example, `queued`, `lan_users`).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- Sonarr:
|
||||||
|
icon: sonarr.png
|
||||||
|
href: http://sonarr.host.or.ip
|
||||||
|
widget:
|
||||||
|
type: sonarr
|
||||||
|
url: http://sonarr.host.or.ip
|
||||||
|
key: ${SONARR_API_KEY}
|
||||||
|
highlight:
|
||||||
|
queued:
|
||||||
|
numeric:
|
||||||
|
- level: danger
|
||||||
|
when: gte
|
||||||
|
value: 20
|
||||||
|
- level: warn
|
||||||
|
when: gte
|
||||||
|
value: 5
|
||||||
|
- level: good
|
||||||
|
when: eq
|
||||||
|
value: 0
|
||||||
|
status:
|
||||||
|
string:
|
||||||
|
- level: danger
|
||||||
|
when: regex
|
||||||
|
value: "(failed|import) pending"
|
||||||
|
- level: good
|
||||||
|
when: equals
|
||||||
|
value: "All good"
|
||||||
|
status_code:
|
||||||
|
string:
|
||||||
|
- level: warn
|
||||||
|
when: regex
|
||||||
|
value: "^5\\d{2}$"
|
||||||
|
```
|
||||||
|
|
||||||
|
Supported numeric operators for the `when` property are `gt`, `gte`, `lt`, `lte`, `eq`, `ne`, `between`, and `outside`. String rules support `equals`, `includes`, `startsWith`, `endsWith`, and `regex`. Each rule can be inverted with `negate: true`, and string rules may pass `caseSensitive: true` or custom regex `flags`. The highlight engine does its best to coerce formatted values, but you will get the most reliable results when you pass plain numbers or strings into `<Block>`.
|
||||||
|
|
||||||
|
#### Value Only Highlighting
|
||||||
|
|
||||||
|
You can optionally apply highlighting only to the value portion of a block (not the label) by setting `valueOnly: true` on the field configuration. This keeps the label visible while highlighting only the metric value itself.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- Sonarr:
|
||||||
|
...
|
||||||
|
highlight:
|
||||||
|
queued:
|
||||||
|
valueOnly: true
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
## Descriptions
|
## Descriptions
|
||||||
|
|
||||||
Services may have descriptions,
|
Services may have descriptions,
|
||||||
|
|||||||
@@ -109,6 +109,20 @@ color: slate
|
|||||||
|
|
||||||
Supported colors are: `slate`, `gray`, `zinc`, `neutral`, `stone`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`, `red`, `white`
|
Supported colors are: `slate`, `gray`, `zinc`, `neutral`, `stone`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`, `red`, `white`
|
||||||
|
|
||||||
|
## Block Highlight Levels
|
||||||
|
|
||||||
|
You can override the default Tailwind classes applied when a widget highlight rule resolves to the `good`, `warn`, or `danger` level.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
blockHighlights:
|
||||||
|
levels:
|
||||||
|
good: "bg-emerald-500/40 text-emerald-950 dark:bg-emerald-900/60 dark:text-emerald-400"
|
||||||
|
warn: "bg-amber-300/30 text-amber-900 dark:bg-amber-900/30 dark:text-amber-200"
|
||||||
|
danger: "bg-rose-700/45 text-rose-200 dark:bg-rose-950/70 dark:text-rose-400"
|
||||||
|
```
|
||||||
|
|
||||||
|
Any unspecified level falls back to the built-in defaults.
|
||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
|
|
||||||
You can configure service and bookmarks sections to be either "column" or "row" based layouts, like so:
|
You can configure service and bookmarks sections to be either "column" or "row" based layouts, like so:
|
||||||
@@ -382,7 +396,9 @@ Set your desired language using:
|
|||||||
language: fr
|
language: fr
|
||||||
```
|
```
|
||||||
|
|
||||||
Currently supported languages: ca, de, en, es, fr, he, hr, hu, it, nb-NO, nl, pt, ru, sv, vi, zh-CN, zh-Hant
|
Currently supported languages: ca, de, en, es, fr, he, hr, hu, it, nb-NO, nl, pt, ru, sv, vi, zh-Hans (Simplified), zh-Hant (Traditional)
|
||||||
|
|
||||||
|
`zh-CN` will still work and is automatically mapped to `zh-Hans` for backwards compatibility.
|
||||||
|
|
||||||
You can also specify locales e.g. for the DateTime widget, e.g. en-AU, en-GB, etc.
|
You can also specify locales e.g. for the DateTime widget, e.g. en-AU, en-GB, etc.
|
||||||
|
|
||||||
@@ -486,9 +502,9 @@ logpath: /logfile/path
|
|||||||
|
|
||||||
By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`.
|
By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`.
|
||||||
|
|
||||||
## Show Docker Stats
|
## Show Container Stats
|
||||||
|
|
||||||
You can show all docker stats expanded in `settings.yaml`:
|
You can show all docker or proxmox stats expanded in `settings.yaml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
showStats: true
|
showStats: true
|
||||||
@@ -557,3 +573,18 @@ or per service widget (`services.yaml`) with:
|
|||||||
```
|
```
|
||||||
|
|
||||||
If either value is set to true, the error message will be hidden.
|
If either value is set to true, the error message will be hidden.
|
||||||
|
|
||||||
|
## Disable Search Engine Indexing
|
||||||
|
|
||||||
|
You can request that search engines not to index your Homepage instance by enabling the `disableIndexing` setting.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
disableIndexing: true
|
||||||
|
```
|
||||||
|
|
||||||
|
When enabled, this will:
|
||||||
|
|
||||||
|
- Disallow all crawlers in `robots.txt`
|
||||||
|
- Add `<meta name="robots" content="noindex, nofollow">` tags to prevent indexing
|
||||||
|
|
||||||
|
By default this feature is disabled.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config # Make sure your local config directory exists
|
- /path/to/config:/app/config # Make sure your local config directory exists
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
|
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
|
||||||
environment:
|
environment:
|
||||||
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
```
|
```
|
||||||
@@ -36,7 +36,7 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config # Make sure your local config directory exists
|
- /path/to/config:/app/config # Make sure your local config directory exists
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods
|
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations, see alternative methods
|
||||||
environment:
|
environment:
|
||||||
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
PUID: $PUID
|
PUID: $PUID
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ All service widgets work essentially the same, that is, homepage makes a proxied
|
|||||||
|
|
||||||
If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container.
|
If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container.
|
||||||
|
|
||||||
## Disabling IPv6
|
## Disabling IPv6 for http requests {#disabling-ipv6}
|
||||||
|
|
||||||
If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy.
|
If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy.
|
||||||
|
|
||||||
|
|||||||
@@ -62,3 +62,4 @@ To ensure cohesiveness of various widgets, the following should be used as a gui
|
|||||||
- Minimize the number of API calls
|
- Minimize the number of API calls
|
||||||
- Avoid the use of custom proxy unless absolutely necessary
|
- Avoid the use of custom proxy unless absolutely necessary
|
||||||
- Widgets should be 'read-only', as in they should not make write changes using the relevant tool's API. Homepage widgets are designed to surface information, not to be a (usually worse) replacement for the tool itself.
|
- Widgets should be 'read-only', as in they should not make write changes using the relevant tool's API. Homepage widgets are designed to surface information, not to be a (usually worse) replacement for the tool itself.
|
||||||
|
- Widgets should not allow manually overriding the "refresh interval" setting, as misconfigured refresh intervals can easily lead to performance issues for users.
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ Learn more about [Crowdsec](https://crowdsec.net).
|
|||||||
See the [crowdsec docs](https://docs.crowdsec.net/docs/local_api/intro/#machines) for information about registering a machine,
|
See the [crowdsec docs](https://docs.crowdsec.net/docs/local_api/intro/#machines) for information about registering a machine,
|
||||||
in most instances you can use the default credentials (`/etc/crowdsec/local_api_credentials.yaml`).
|
in most instances you can use the default credentials (`/etc/crowdsec/local_api_credentials.yaml`).
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Without the `limit24h` option, the widget will fetch all alerts which is limited to 100 by the API to avoid performance issues.
|
||||||
|
|
||||||
Allowed fields: `["alerts", "bans"]`.
|
Allowed fields: `["alerts", "bans"]`.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -16,4 +19,5 @@ widget:
|
|||||||
url: http://crowdsechostorip:port
|
url: http://crowdsechostorip:port
|
||||||
username: localhost # machine_id in crowdsec
|
username: localhost # machine_id in crowdsec
|
||||||
password: password
|
password: password
|
||||||
|
limit24h: true # optional, limits alerts to last 24h. Default: false
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -14,4 +14,6 @@ widget:
|
|||||||
type: frigate
|
type: frigate
|
||||||
url: http://frigate.host.or.ip:port
|
url: http://frigate.host.or.ip:port
|
||||||
enableRecentEvents: true # Optional, defaults to false
|
enableRecentEvents: true # Optional, defaults to false
|
||||||
|
username: username # optional
|
||||||
|
password: password # optional
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ See the [official docs](https://github.com/ghostfolio/ghostfolio#authorization-b
|
|||||||
|
|
||||||
_Note that the Bearer token is valid for 6 months, after which a new one must be generated._
|
_Note that the Bearer token is valid for 6 months, after which a new one must be generated._
|
||||||
|
|
||||||
Allowed fields: `["gross_percent_today", "gross_percent_1y", "gross_percent_max"]`
|
Allowed fields: `["gross_percent_today", "gross_percent_1y", "gross_percent_max", "net_worth"]`
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
|
|||||||
@@ -12,11 +12,17 @@ Learn more about [Gluetun](https://github.com/qdm12/gluetun).
|
|||||||
Allowed fields: `["public_ip", "region", "country", "port_forwarded"]`.
|
Allowed fields: `["public_ip", "region", "country", "port_forwarded"]`.
|
||||||
Default 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. Similarly, if you want to include the `port_forwarded` field, you must add the route `GET /v1/openvpn/portforwarded` (or `/v1/portforward`) to your Gluetun config.toml.
|
||||||
|
|
||||||
|
| Gluetun Version | Homepage Widget Version |
|
||||||
|
| --------------- | ----------------------- |
|
||||||
|
| < 3.40.1 | 1 (default) |
|
||||||
|
| >= 3.40.1 | 2 |
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: gluetun
|
type: gluetun
|
||||||
url: http://gluetun.host.or.ip:port
|
url: http://gluetun.host.or.ip:port
|
||||||
key: gluetunkey # Not required if /v1/publicip/ip endpoint is configured with `auth = none`
|
key: gluetunkey # Not required if /v1/publicip/ip endpoint is configured with `auth = none`
|
||||||
|
version: 2 # optional, default is 1
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ widget:
|
|||||||
url: http://komodo.hostname.or.ip:port
|
url: http://komodo.hostname.or.ip:port
|
||||||
key: K-xxxxxx...
|
key: K-xxxxxx...
|
||||||
secret: S-xxxxxx...
|
secret: S-xxxxxx...
|
||||||
showSummary: true # optional, default: false
|
showSummary: true # optional, default: false. Takes precedence over showStacks
|
||||||
showStacks: true # optional, default: false
|
showStacks: true # optional, default: false
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Omada
|
|||||||
description: Omada Widget Configuration
|
description: Omada Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||
The widget supports controller versions 3, 4 and 5.
|
The widget supports controller versions 3, 4, 5 and 6.
|
||||||
|
|
||||||
Allowed fields: `["connectedAp", "activeUser", "alerts", "connectedGateways", "connectedSwitches"]`.
|
Allowed fields: `["connectedAp", "activeUser", "alerts", "connectedGateways", "connectedSwitches"]`.
|
||||||
|
|
||||||
|
|||||||
29
docs/widgets/services/pangolin.md
Normal file
29
docs/widgets/services/pangolin.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
title: Pangolin
|
||||||
|
description: Pangolin Widget Configuration
|
||||||
|
---
|
||||||
|
|
||||||
|
Learn more about [Pangolin](https://github.com/fosrl/pangolin).
|
||||||
|
|
||||||
|
This widget shows sites (online/total), resources (healthy/total), targets (healthy/total), and traffic statistics for a Pangolin organization. A resource is considered healthy if at least one of its targets is healthy, or if it has no targets.
|
||||||
|
|
||||||
|
Allowed fields: `["sites", "resources", "targets", "traffic", "in", "out"]` (maximum of 4).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
widget:
|
||||||
|
type: pangolin
|
||||||
|
url: https://api.pangolin.net
|
||||||
|
key: your-api-key
|
||||||
|
org: your-org-id
|
||||||
|
```
|
||||||
|
|
||||||
|
Find your organization ID in the URL when logged in (e.g., `https://app.pangolin.net/{org-id}/...`).
|
||||||
|
|
||||||
|
## API Key Setup
|
||||||
|
|
||||||
|
Create an API key with the following permissions:
|
||||||
|
|
||||||
|
- **List Sites**
|
||||||
|
- **List Resources**
|
||||||
|
|
||||||
|
**Self-Hosted:** Enable the [Integration API](https://docs.pangolin.net/self-host/advanced/integration-api) in your Pangolin configuration before creating the key.
|
||||||
@@ -16,4 +16,5 @@ widget:
|
|||||||
username: username
|
username: username
|
||||||
password: password
|
password: password
|
||||||
enableLeechProgress: true # optional, defaults to false
|
enableLeechProgress: true # optional, defaults to false
|
||||||
|
enableLeechSize: true # optional, defaults to false
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ The Unraid widget allows you to monitor the resources of an Unraid server.
|
|||||||
**Minimum Requirements:**
|
**Minimum Requirements:**
|
||||||
|
|
||||||
- Unraid 7.2 -or- Unraid Connect plugin 2025.08.19.1850
|
- Unraid 7.2 -or- Unraid Connect plugin 2025.08.19.1850
|
||||||
- API key with the **GUEST** (read only) role: [Managing API Keys](https://docs.unraid.net/go/managing-api-keys)
|
- API key with the **ADMIN** role: [Managing API Keys](https://docs.unraid.net/go/managing-api-keys)
|
||||||
|
|
||||||
The widget can display metrics for selected Unraid pools. If using one of the "pool" fields, you must also add the pool name to the settings.
|
The widget can display metrics for selected Unraid pools. If using one of the "pool" fields, you must also add the pool name to the settings.
|
||||||
|
|
||||||
**Allowed fields:** `["cpu","memoryPercent","memoryAvailable","memoryUsed","notifications","arrayFreeSpace","arrayUsedSpace","arrayUsedPercent","status","pool1UsedSpace","pool1FreeSpace","pool1UsedPercent","pool2UsedSpace","pool2FreeSpace","pool2UsedPercent","pool3UsedSpace","pool3FreeSpace","pool3UsedPercent","pool4UsedSpace","pool4FreeSpace","pool4UsedPercent"]`
|
**Allowed fields:** `["cpu","memoryPercent","memoryAvailable","memoryUsed","notifications","arrayFree","arrayUsedSpace","arrayUsedPercent","status","pool1UsedSpace","pool1FreeSpace","pool1UsedPercent","pool2UsedSpace","pool2FreeSpace","pool2UsedPercent","pool3UsedSpace","pool3FreeSpace","pool3UsedPercent","pool4UsedSpace","pool4FreeSpace","pool4UsedPercent"]`
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
|
|||||||
28
docs/widgets/services/yourspotify.md
Normal file
28
docs/widgets/services/yourspotify.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
title: Your Spotify
|
||||||
|
description: Your Spotify Widget Configuration
|
||||||
|
---
|
||||||
|
|
||||||
|
Learn more about [Your Spotify](https://github.com/Yooooomi/your_spotify).
|
||||||
|
|
||||||
|
Find your API key under `Settings > Account > Public token`, click `Generate` if not yet generated, copy key after
|
||||||
|
`?token=`.
|
||||||
|
|
||||||
|
Allowed fields: `["songs", "time", "artists"]`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
widget:
|
||||||
|
type: yourspotify
|
||||||
|
url: http://your-spotify-server.host.or.ip # if using lsio image, add /api/
|
||||||
|
key: apikeyapikeyapikeyapikeyapikey
|
||||||
|
interval: month # optional, defaults to week
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Interval
|
||||||
|
|
||||||
|
Allowed values for `interval`: `day`, `week`, `month`, `year`, `all`.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
|
||||||
|
`interval` is different from predefined intervals you see in `Your Spotify`'s UI.
|
||||||
|
For example, `This week` in UI means _from the start of this week_, here `week` means _past 7 days_.
|
||||||
@@ -122,6 +122,7 @@ nav:
|
|||||||
- widgets/services/opnsense.md
|
- widgets/services/opnsense.md
|
||||||
- widgets/services/openwrt.md
|
- widgets/services/openwrt.md
|
||||||
- widgets/services/overseerr.md
|
- widgets/services/overseerr.md
|
||||||
|
- widgets/services/pangolin.md
|
||||||
- widgets/services/paperlessngx.md
|
- widgets/services/paperlessngx.md
|
||||||
- widgets/services/peanut.md
|
- widgets/services/peanut.md
|
||||||
- widgets/services/pfsense.md
|
- widgets/services/pfsense.md
|
||||||
@@ -176,6 +177,7 @@ nav:
|
|||||||
- widgets/services/wgeasy.md
|
- widgets/services/wgeasy.md
|
||||||
- widgets/services/whatsupdocker.md
|
- widgets/services/whatsupdocker.md
|
||||||
- widgets/services/xteve.md
|
- widgets/services/xteve.md
|
||||||
|
- widgets/services/yourspotify.md
|
||||||
- widgets/services/zabbix.md
|
- widgets/services/zabbix.md
|
||||||
- "Information Widgets":
|
- "Information Widgets":
|
||||||
- widgets/info/index.md
|
- widgets/info/index.md
|
||||||
|
|||||||
34
package.json
34
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "homepage",
|
"name": "homepage",
|
||||||
"version": "1.5.0",
|
"version": "1.7.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "npx only-allow pnpm",
|
"preinstall": "npx only-allow pnpm",
|
||||||
@@ -11,32 +11,32 @@
|
|||||||
"telemetry": "next telemetry disable"
|
"telemetry": "next telemetry disable"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@headlessui/react": "^2.2.7",
|
"@headlessui/react": "^2.2.9",
|
||||||
"@kubernetes/client-node": "^1.0.0",
|
"@kubernetes/client-node": "^1.0.0",
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"compare-versions": "^6.1.1",
|
"compare-versions": "^6.1.1",
|
||||||
"dockerode": "^4.0.7",
|
"dockerode": "^4.0.7",
|
||||||
"follow-redirects": "^1.15.11",
|
"follow-redirects": "^1.15.11",
|
||||||
"gamedig": "^5.3.1",
|
"gamedig": "^5.3.2",
|
||||||
"i18next": "^24.2.3",
|
"i18next": "^25.5.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.6.1",
|
||||||
"memory-cache": "^0.2.0",
|
"memory-cache": "^0.2.0",
|
||||||
"minecraftstatuspinger": "^1.2.2",
|
"minecraftstatuspinger": "^1.2.2",
|
||||||
"next": "^15.5.2",
|
"next": "^15.5.9",
|
||||||
"next-i18next": "^12.1.0",
|
"next-i18next": "^12.1.0",
|
||||||
"ping": "^0.4.4",
|
"ping": "^0.4.4",
|
||||||
"pretty-bytes": "^6.1.1",
|
"pretty-bytes": "^7.1.0",
|
||||||
"raw-body": "^3.0.0",
|
"raw-body": "^3.0.2",
|
||||||
"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": "^15.5.3",
|
||||||
"react-icons": "^5.4.0",
|
"react-icons": "^5.4.0",
|
||||||
"recharts": "^3.1.2",
|
"recharts": "^3.1.2",
|
||||||
"swr": "^2.3.3",
|
"swr": "^2.3.3",
|
||||||
"systeminformation": "^5.27.7",
|
"systeminformation": "^5.27.11",
|
||||||
"tough-cookie": "^6.0.0",
|
"tough-cookie": "^6.0.0",
|
||||||
"urbackup-server-api": "^0.8.9",
|
"urbackup-server-api": "^0.8.9",
|
||||||
"winston": "^3.17.0",
|
"winston": "^3.17.0",
|
||||||
@@ -44,18 +44,18 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/forms": "^0.5.10",
|
"@tailwindcss/forms": "^0.5.10",
|
||||||
"@tailwindcss/postcss": "^4.0.9",
|
"@tailwindcss/postcss": "^4.1.14",
|
||||||
"eslint": "^9.25.1",
|
"eslint": "^9.25.1",
|
||||||
"eslint-config-next": "^15.2.4",
|
"eslint-config-next": "^15.2.4",
|
||||||
"eslint-config-prettier": "^10.1.1",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-import": "^2.32.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.5.4",
|
||||||
"eslint-plugin-react": "^7.37.4",
|
"eslint-plugin-react": "^7.37.4",
|
||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"postcss": "^8.5.6",
|
"postcss": "^8.5.6",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.7.3",
|
||||||
"prettier-plugin-organize-imports": "^4.1.0",
|
"prettier-plugin-organize-imports": "^4.3.0",
|
||||||
"tailwind-scrollbar": "^4.0.2",
|
"tailwind-scrollbar": "^4.0.2",
|
||||||
"tailwindcss": "^4.0.9",
|
"tailwindcss": "^4.0.9",
|
||||||
"typescript": "^5.7.3"
|
"typescript": "^5.7.3"
|
||||||
@@ -63,15 +63,9 @@
|
|||||||
"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": {
|
"pnpm": {
|
||||||
"onlyBuiltDependencies": [
|
"onlyBuiltDependencies": [
|
||||||
|
"@tailwindcss/oxide",
|
||||||
"osx-temperature-sensor",
|
"osx-temperature-sensor",
|
||||||
"sharp"
|
"sharp"
|
||||||
]
|
]
|
||||||
|
|||||||
1067
pnpm-lock.yaml
generated
1067
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inmandjie",
|
"inbox": "Inmandjie",
|
||||||
"total": "Totaal"
|
"total": "Totaal"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Bronne",
|
||||||
|
"targets": "Teikens",
|
||||||
|
"traffic": "Verkeer",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Uit"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Batterylading",
|
"battery_charge": "Batterylading",
|
||||||
"ups_load": "SVE-lading",
|
"ups_load": "SVE-lading",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Vandag",
|
"gross_percent_today": "Vandag",
|
||||||
"gross_percent_1y": "Een jaar",
|
"gross_percent_1y": "Een jaar",
|
||||||
"gross_percent_max": "Alle tyd"
|
"gross_percent_max": "Alle tyd",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podsendinge",
|
"podcasts": "Podsendinge",
|
||||||
@@ -1093,7 +1103,7 @@
|
|||||||
"DISABLE_DISK": "Skyf Gedeaktiveer",
|
"DISABLE_DISK": "Skyf Gedeaktiveer",
|
||||||
"SWAP_DSBL": "Ruil Gedeaktiveer",
|
"SWAP_DSBL": "Ruil Gedeaktiveer",
|
||||||
"INVALID_EXPANSION": "Ongeldige Uitbreiding",
|
"INVALID_EXPANSION": "Ongeldige Uitbreiding",
|
||||||
"PARITY_NOT_BIGGEST": "Pariteit nie die grootste nie",
|
"PARITY_NOT_BIGGEST": "Pariteit nie die Grootste nie",
|
||||||
"TOO_MANY_MISSING_DISKS": "Te Veel Ontbrekende Skywe",
|
"TOO_MANY_MISSING_DISKS": "Te Veel Ontbrekende Skywe",
|
||||||
"NEW_DISK_TOO_SMALL": "Nuwe Skyf te Klein",
|
"NEW_DISK_TOO_SMALL": "Nuwe Skyf te Klein",
|
||||||
"NO_DATA_DISKS": "Geen Data Skywe",
|
"NO_DATA_DISKS": "Geen Data Skywe",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Slaag",
|
"num_success_latest": "Slaag",
|
||||||
"num_failure_latest": "Mislukking",
|
"num_failure_latest": "Mislukking",
|
||||||
"bytes_added_30": "Grepe bygevoeg"
|
"bytes_added_30": "Grepe bygevoeg"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Liedjies",
|
||||||
|
"time": "Tyd",
|
||||||
|
"artists": "Kunstenaars"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "صندوق الوارد",
|
"inbox": "صندوق الوارد",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "شحن البطارية",
|
"battery_charge": "شحن البطارية",
|
||||||
"ups_load": "حمل UPS",
|
"ups_load": "حمل UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "سنة",
|
"gross_percent_1y": "سنة",
|
||||||
"gross_percent_max": "كل الوقت"
|
"gross_percent_max": "كل الوقت",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "بودكاست",
|
"podcasts": "بودكاست",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Входящи",
|
"inbox": "Входящи",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Заряд на батерията",
|
"battery_charge": "Заряд на батерията",
|
||||||
"ups_load": "Натоварване на UPS",
|
"ups_load": "Натоварване на UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Една година",
|
"gross_percent_1y": "Една година",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Safata d'entrada",
|
"inbox": "Safata d'entrada",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Càrrega de la bateria",
|
"battery_charge": "Càrrega de la bateria",
|
||||||
"ups_load": "Càrrega del SAI",
|
"ups_load": "Càrrega del SAI",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un any",
|
"gross_percent_1y": "Un any",
|
||||||
"gross_percent_max": "Sempre"
|
"gross_percent_max": "Sempre",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Pòdcasts",
|
"podcasts": "Pòdcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Doručená pošta",
|
"inbox": "Doručená pošta",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Úroveň baterie",
|
"battery_charge": "Úroveň baterie",
|
||||||
"ups_load": "Zítěž UPS",
|
"ups_load": "Zítěž UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Jeden rok",
|
"gross_percent_1y": "Jeden rok",
|
||||||
"gross_percent_max": "Za celou dobu"
|
"gross_percent_max": "Za celou dobu",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Indbakke",
|
"inbox": "Indbakke",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Batteriniveau",
|
"battery_charge": "Batteriniveau",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Et År",
|
"gross_percent_1y": "Et År",
|
||||||
"gross_percent_max": "Altid"
|
"gross_percent_max": "Altid",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,8 +93,8 @@
|
|||||||
"http_status": "HTTP-Status",
|
"http_status": "HTTP-Status",
|
||||||
"error": "Fehler",
|
"error": "Fehler",
|
||||||
"response": "Antwort",
|
"response": "Antwort",
|
||||||
"down": "Online",
|
"down": "Offline",
|
||||||
"up": "Offline",
|
"up": "Online",
|
||||||
"not_available": "Nicht verfügbar"
|
"not_available": "Nicht verfügbar"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
@@ -276,7 +276,7 @@
|
|||||||
"pending": "Wartend",
|
"pending": "Wartend",
|
||||||
"approved": "Genehmigt",
|
"approved": "Genehmigt",
|
||||||
"available": "Verfügbar",
|
"available": "Verfügbar",
|
||||||
"issues": "Open Issues"
|
"issues": "Offene Issues"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Wartend",
|
"pending": "Wartend",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Posteingang",
|
"inbox": "Posteingang",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Akkuladung",
|
"battery_charge": "Akkuladung",
|
||||||
"ups_load": "USV-Auslastung",
|
"ups_load": "USV-Auslastung",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Heute",
|
"gross_percent_today": "Heute",
|
||||||
"gross_percent_1y": "Ein Jahr",
|
"gross_percent_1y": "Ein Jahr",
|
||||||
"gross_percent_max": "Gesamt"
|
"gross_percent_max": "Gesamt",
|
||||||
|
"net_worth": ""
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1086,33 +1096,38 @@
|
|||||||
"nextRenewingSubscription": "Nächste Zahlung"
|
"nextRenewingSubscription": "Nächste Zahlung"
|
||||||
},
|
},
|
||||||
"unraid": {
|
"unraid": {
|
||||||
"STARTED": "Started",
|
"STARTED": "Gestartet",
|
||||||
"STOPPED": "Stopped",
|
"STOPPED": "Angehalten",
|
||||||
"NEW_ARRAY": "New Array",
|
"NEW_ARRAY": "Neues Array",
|
||||||
"RECON_DISK": "Reconstructing Disk",
|
"RECON_DISK": "Festplatte wird neu aufgebaut",
|
||||||
"DISABLE_DISK": "Disk Disabled",
|
"DISABLE_DISK": "Festplatte deaktiviert",
|
||||||
"SWAP_DSBL": "Swap Disable",
|
"SWAP_DSBL": "Swap deaktivieren",
|
||||||
"INVALID_EXPANSION": "Invalid Expansion",
|
"INVALID_EXPANSION": "Üngültige Erweiterung",
|
||||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
"TOO_MANY_MISSING_DISKS": "Zu viele fehlende Festplatten",
|
||||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
"NEW_DISK_TOO_SMALL": "Neue Festplatte zu klein",
|
||||||
"NO_DATA_DISKS": "No Data Disks",
|
"NO_DATA_DISKS": "Keine Datenträger",
|
||||||
"notifications": "Notifications",
|
"notifications": "Mitteilungen",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Speichernutzung",
|
||||||
"memoryAvailable": "Memory Available",
|
"memoryAvailable": "Verfügbarer Speicher",
|
||||||
"arrayUsed": "Array Used",
|
"arrayUsed": "Array verwendet",
|
||||||
"arrayFree": "Array Free",
|
"arrayFree": "Array frei",
|
||||||
"poolUsed": "{{pool}} Used",
|
"poolUsed": "{{pool}} verwendet",
|
||||||
"poolFree": "{{pool}} Free"
|
"poolFree": "{{pool}} frei"
|
||||||
},
|
},
|
||||||
"backrest": {
|
"backrest": {
|
||||||
"num_plans": "Plans",
|
"num_plans": "Pläne",
|
||||||
"num_success_30": "Successes",
|
"num_success_30": "Erfolgreich",
|
||||||
"num_failure_30": "Failures",
|
"num_failure_30": "Fehlerhaft",
|
||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Erfolgreich",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Fehlgeschlagen",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes hinzugefügt"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Titel",
|
||||||
|
"time": "Zeit",
|
||||||
|
"artists": "Künstler"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Εισερχόμενα",
|
"inbox": "Εισερχόμενα",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Ένας χρόνος",
|
"gross_percent_1y": "Ένας χρόνος",
|
||||||
"gross_percent_max": "Διαχρονικά"
|
"gross_percent_max": "Διαχρονικά",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -532,7 +532,8 @@
|
|||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"up": "Up",
|
"up": "Up",
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"down": "Down"
|
"down": "Down",
|
||||||
|
"ok": "Ok"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "New",
|
"new": "New",
|
||||||
@@ -599,6 +600,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +769,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1125,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -276,7 +276,7 @@
|
|||||||
"pending": "Pendiente",
|
"pending": "Pendiente",
|
||||||
"approved": "Aprobado",
|
"approved": "Aprobado",
|
||||||
"available": "Disponible",
|
"available": "Disponible",
|
||||||
"issues": "Open Issues"
|
"issues": "Issues Abiertos"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pendiente",
|
"pending": "Pendiente",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Bandeja de entrada",
|
"inbox": "Bandeja de entrada",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Carga de la batería",
|
"battery_charge": "Carga de la batería",
|
||||||
"ups_load": "Carga del UPS",
|
"ups_load": "Carga del UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Hoy",
|
"gross_percent_today": "Hoy",
|
||||||
"gross_percent_1y": "Un año",
|
"gross_percent_1y": "Un año",
|
||||||
"gross_percent_max": "Todo el tiempo"
|
"gross_percent_max": "Todo el tiempo",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1108,11 +1118,16 @@
|
|||||||
"poolFree": "{{pool}} Libre"
|
"poolFree": "{{pool}} Libre"
|
||||||
},
|
},
|
||||||
"backrest": {
|
"backrest": {
|
||||||
"num_plans": "Plans",
|
"num_plans": "Planes",
|
||||||
"num_success_30": "Successes",
|
"num_success_30": "Éxitos",
|
||||||
"num_failure_30": "Failures",
|
"num_failure_30": "Fallos",
|
||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Exitosa",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Fallida",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Añadidos"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Canciones",
|
||||||
|
"time": "Tiempo",
|
||||||
|
"artists": "Artistas"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,8 +142,8 @@
|
|||||||
"connectionStatusDisconnected": "Déconnecté",
|
"connectionStatusDisconnected": "Déconnecté",
|
||||||
"connectionStatusConnected": "Connecté",
|
"connectionStatusConnected": "Connecté",
|
||||||
"uptime": "Démarré depuis",
|
"uptime": "Démarré depuis",
|
||||||
"maxDown": "Réception max.",
|
"maxDown": "Réception max",
|
||||||
"maxUp": "Envoi max.",
|
"maxUp": "Envoi max",
|
||||||
"down": "Réception",
|
"down": "Réception",
|
||||||
"up": "Envoi",
|
"up": "Envoi",
|
||||||
"received": "Reçu",
|
"received": "Reçu",
|
||||||
@@ -229,7 +229,7 @@
|
|||||||
"seed": "En partage"
|
"seed": "En partage"
|
||||||
},
|
},
|
||||||
"develancacheui": {
|
"develancacheui": {
|
||||||
"cachehitbytes": "Cache Hit (B)",
|
"cachehitbytes": "Octets acquis du cache",
|
||||||
"cachemissbytes": "Cache Miss (B)"
|
"cachemissbytes": "Cache Miss (B)"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
@@ -276,7 +276,7 @@
|
|||||||
"pending": "En attente",
|
"pending": "En attente",
|
||||||
"approved": "Approuvé",
|
"approved": "Approuvé",
|
||||||
"available": "Disponible",
|
"available": "Disponible",
|
||||||
"issues": "Open Issues"
|
"issues": "Problèmes non résolus"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "En attente",
|
"pending": "En attente",
|
||||||
@@ -294,7 +294,7 @@
|
|||||||
"queries": "Requêtes",
|
"queries": "Requêtes",
|
||||||
"blocked": "Bloqué",
|
"blocked": "Bloqué",
|
||||||
"blocked_percent": "% bloqué",
|
"blocked_percent": "% bloqué",
|
||||||
"gravity": "Listes dom. bloqués"
|
"gravity": "Listes dom. Bloqués"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Requêtes",
|
"queries": "Requêtes",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Boîte de réception",
|
"inbox": "Boîte de réception",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Charge de la batterie",
|
"battery_charge": "Charge de la batterie",
|
||||||
"ups_load": "Charge de l’ASI",
|
"ups_load": "Charge de l’ASI",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Aujourd'hui",
|
"gross_percent_today": "Aujourd'hui",
|
||||||
"gross_percent_1y": "Un an",
|
"gross_percent_1y": "Un an",
|
||||||
"gross_percent_max": "Depuis le début"
|
"gross_percent_max": "Depuis le début",
|
||||||
|
"net_worth": "Patrimoine net"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1086,33 +1096,38 @@
|
|||||||
"nextRenewingSubscription": "Prochain paiement"
|
"nextRenewingSubscription": "Prochain paiement"
|
||||||
},
|
},
|
||||||
"unraid": {
|
"unraid": {
|
||||||
"STARTED": "Started",
|
"STARTED": "Commencé",
|
||||||
"STOPPED": "Stopped",
|
"STOPPED": "Arrêté",
|
||||||
"NEW_ARRAY": "New Array",
|
"NEW_ARRAY": "Nouveau tableau",
|
||||||
"RECON_DISK": "Reconstructing Disk",
|
"RECON_DISK": "Reconstruction du disque",
|
||||||
"DISABLE_DISK": "Disk Disabled",
|
"DISABLE_DISK": "Disque désactivé",
|
||||||
"SWAP_DSBL": "Swap Disable",
|
"SWAP_DSBL": "Désactiver le swap",
|
||||||
"INVALID_EXPANSION": "Invalid Expansion",
|
"INVALID_EXPANSION": "Extension invalide",
|
||||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
"PARITY_NOT_BIGGEST": "La parité n'est pas la plus grande",
|
||||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
"TOO_MANY_MISSING_DISKS": "Trop de disques manquants",
|
||||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
"NEW_DISK_TOO_SMALL": "Nouveau disque trop petit",
|
||||||
"NO_DATA_DISKS": "No Data Disks",
|
"NO_DATA_DISKS": "Aucun disque de données",
|
||||||
"notifications": "Notifications",
|
"notifications": "Notifications",
|
||||||
"status": "Status",
|
"status": "État",
|
||||||
"cpu": "CPU",
|
"cpu": "UCT",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Mémoire Utilisé",
|
||||||
"memoryAvailable": "Memory Available",
|
"memoryAvailable": "Mémoire Disponible",
|
||||||
"arrayUsed": "Array Used",
|
"arrayUsed": "RAID utilisé",
|
||||||
"arrayFree": "Array Free",
|
"arrayFree": "RAID libre",
|
||||||
"poolUsed": "{{pool}} Used",
|
"poolUsed": "{{pool}} Utilisé",
|
||||||
"poolFree": "{{pool}} Free"
|
"poolFree": "{{pool}} Libre"
|
||||||
},
|
},
|
||||||
"backrest": {
|
"backrest": {
|
||||||
"num_plans": "Plans",
|
"num_plans": "Abonnements",
|
||||||
"num_success_30": "Successes",
|
"num_success_30": "Succès",
|
||||||
"num_failure_30": "Failures",
|
"num_failure_30": "Échecs",
|
||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Réussi",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Échoué",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Octets ajoutés"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Musiques",
|
||||||
|
"time": "Durée",
|
||||||
|
"artists": "Artistes"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "תיבת דואר נכנס",
|
"inbox": "תיבת דואר נכנס",
|
||||||
"total": "סה\"כ"
|
"total": "סה\"כ"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "טעינת סוללה",
|
"battery_charge": "טעינת סוללה",
|
||||||
"ups_load": "עומס UPS",
|
"ups_load": "עומס UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "היום",
|
"gross_percent_today": "היום",
|
||||||
"gross_percent_1y": "שנה",
|
"gross_percent_1y": "שנה",
|
||||||
"gross_percent_max": "כל הזמן"
|
"gross_percent_max": "כל הזמן",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "פודקאסטים",
|
"podcasts": "פודקאסטים",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -61,16 +61,16 @@
|
|||||||
"wlan_devices": "WLAN Eszközök",
|
"wlan_devices": "WLAN Eszközök",
|
||||||
"lan_users": "LAN Felhasználók",
|
"lan_users": "LAN Felhasználók",
|
||||||
"wlan_users": "WLAN Felhasználók",
|
"wlan_users": "WLAN Felhasználók",
|
||||||
"up": "UP",
|
"up": "FUT",
|
||||||
"down": "ÁLL",
|
"down": "ÁLL",
|
||||||
"wait": "Please wait",
|
"wait": "Kérjük várjon",
|
||||||
"empty_data": "Az alrendszer állapota ismeretlen"
|
"empty_data": "Az alrendszer állapota ismeretlen"
|
||||||
},
|
},
|
||||||
"docker": {
|
"docker": {
|
||||||
"rx": "RX",
|
"rx": "RX",
|
||||||
"tx": "TX",
|
"tx": "TX",
|
||||||
"mem": "MEM",
|
"mem": "MEM",
|
||||||
"cpu": "CPU",
|
"cpu": "Processzor",
|
||||||
"running": "Futó",
|
"running": "Futó",
|
||||||
"offline": "Nem elérhető",
|
"offline": "Nem elérhető",
|
||||||
"error": "Hiba",
|
"error": "Hiba",
|
||||||
@@ -93,8 +93,8 @@
|
|||||||
"http_status": "HTTP állapot",
|
"http_status": "HTTP állapot",
|
||||||
"error": "Hiba",
|
"error": "Hiba",
|
||||||
"response": "Válasz",
|
"response": "Válasz",
|
||||||
"down": "Down",
|
"down": "Leállt",
|
||||||
"up": "Up",
|
"up": "Fut",
|
||||||
"not_available": "Nem elérhető"
|
"not_available": "Nem elérhető"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
@@ -108,10 +108,10 @@
|
|||||||
"songs": "Zeneszám"
|
"songs": "Zeneszám"
|
||||||
},
|
},
|
||||||
"esphome": {
|
"esphome": {
|
||||||
"offline": "Offline",
|
"offline": "Nem elérhető",
|
||||||
"offline_alt": "Offline",
|
"offline_alt": "Nem elérhető",
|
||||||
"online": "Csatlakozva",
|
"online": "Csatlakozva",
|
||||||
"total": "Total",
|
"total": "Összes",
|
||||||
"unknown": "Ismeretlen"
|
"unknown": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"evcc": {
|
"evcc": {
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
"unread": "Olvasatlan"
|
"unread": "Olvasatlan"
|
||||||
},
|
},
|
||||||
"fritzbox": {
|
"fritzbox": {
|
||||||
"connectionStatus": "Status",
|
"connectionStatus": "Státusz",
|
||||||
"connectionStatusUnconfigured": "Nem beállított",
|
"connectionStatusUnconfigured": "Nem beállított",
|
||||||
"connectionStatusConnecting": "Kapcsolódás",
|
"connectionStatusConnecting": "Kapcsolódás",
|
||||||
"connectionStatusAuthenticating": "Hitelesítés",
|
"connectionStatusAuthenticating": "Hitelesítés",
|
||||||
@@ -141,16 +141,16 @@
|
|||||||
"connectionStatusDisconnecting": "Kapcsolat bontása",
|
"connectionStatusDisconnecting": "Kapcsolat bontása",
|
||||||
"connectionStatusDisconnected": "Kapcsolat bontva",
|
"connectionStatusDisconnected": "Kapcsolat bontva",
|
||||||
"connectionStatusConnected": "Csatlakozva",
|
"connectionStatusConnected": "Csatlakozva",
|
||||||
"uptime": "Uptime",
|
"uptime": "Működési idő",
|
||||||
"maxDown": "Max let.",
|
"maxDown": "Max let.",
|
||||||
"maxUp": "Max felt.",
|
"maxUp": "Max felt.",
|
||||||
"down": "Down",
|
"down": "Leállt",
|
||||||
"up": "Up",
|
"up": "Fut",
|
||||||
"received": "Fogadott",
|
"received": "Fogadott",
|
||||||
"sent": "Küldött",
|
"sent": "Küldött",
|
||||||
"externalIPAddress": "Külső IP cím",
|
"externalIPAddress": "Külső IP cím",
|
||||||
"externalIPv6Address": "Ext. IPv6",
|
"externalIPv6Address": "Küls. IPv6",
|
||||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
"externalIPv6Prefix": "Küls. IPv6-Prefix"
|
||||||
},
|
},
|
||||||
"caddy": {
|
"caddy": {
|
||||||
"upstreams": "Upstreamek",
|
"upstreams": "Upstreamek",
|
||||||
@@ -168,17 +168,17 @@
|
|||||||
"passes": "Engedélyek"
|
"passes": "Engedélyek"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "Playing",
|
"playing": "Lejátszás",
|
||||||
"transcoding": "Transcoding",
|
"transcoding": "Transzkódolás",
|
||||||
"bitrate": "Bitrate",
|
"bitrate": "Bitráta",
|
||||||
"no_active": "No Active Streams",
|
"no_active": "Nincs aktív lejátszás",
|
||||||
"plex_connection_error": "Plex kapcsolat ellenőrzése"
|
"plex_connection_error": "Plex kapcsolat ellenőrzése"
|
||||||
},
|
},
|
||||||
"omada": {
|
"omada": {
|
||||||
"connectedAp": "Csatlakoztatott AP-k",
|
"connectedAp": "Csatlakoztatott AP-k",
|
||||||
"activeUser": "Aktív eszközök",
|
"activeUser": "Aktív eszközök",
|
||||||
"alerts": "Riasztások",
|
"alerts": "Riasztások",
|
||||||
"connectedGateways": "Connected gateways",
|
"connectedGateways": "Csatlakoztatott gateway-ek",
|
||||||
"connectedSwitches": "Csatlakoztatott switch-ek"
|
"connectedSwitches": "Csatlakoztatott switch-ek"
|
||||||
},
|
},
|
||||||
"nzbget": {
|
"nzbget": {
|
||||||
@@ -189,11 +189,11 @@
|
|||||||
"plex": {
|
"plex": {
|
||||||
"streams": "Aktív Stream-ek",
|
"streams": "Aktív Stream-ek",
|
||||||
"albums": "Albumok",
|
"albums": "Albumok",
|
||||||
"movies": "Movies",
|
"movies": "Filmek",
|
||||||
"tv": "TV műsorok"
|
"tv": "TV műsorok"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rate",
|
"rate": "Ráta",
|
||||||
"queue": "Sor",
|
"queue": "Sor",
|
||||||
"timeleft": "Hátralévő idő"
|
"timeleft": "Hátralévő idő"
|
||||||
},
|
},
|
||||||
@@ -233,34 +233,34 @@
|
|||||||
"cachemissbytes": "Gyorsítótárban Hibás Bitek"
|
"cachemissbytes": "Gyorsítótárban Hibás Bitek"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "Download",
|
"download": "Letöltés",
|
||||||
"upload": "Upload",
|
"upload": "Feltöltés",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
"sonarr": {
|
"sonarr": {
|
||||||
"wanted": "Keresett",
|
"wanted": "Keresett",
|
||||||
"queued": "Sorban áll",
|
"queued": "Sorban áll",
|
||||||
"series": "Series",
|
"series": "Sorozatok",
|
||||||
"queue": "Queue",
|
"queue": "Várólista",
|
||||||
"unknown": "Unknown"
|
"unknown": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Keresett",
|
||||||
"missing": "Hiányzik",
|
"missing": "Hiányzik",
|
||||||
"queued": "Queued",
|
"queued": "Sorban áll",
|
||||||
"movies": "Movies",
|
"movies": "Filmek",
|
||||||
"queue": "Queue",
|
"queue": "Várólista",
|
||||||
"unknown": "Unknown"
|
"unknown": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Keresett",
|
||||||
"queued": "Queued",
|
"queued": "Sorban áll",
|
||||||
"artists": "Előadók"
|
"artists": "Előadók"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Keresett",
|
||||||
"queued": "Queued",
|
"queued": "Sorban áll",
|
||||||
"books": "Könyvek"
|
"books": "Könyvek"
|
||||||
},
|
},
|
||||||
"bazarr": {
|
"bazarr": {
|
||||||
@@ -273,20 +273,20 @@
|
|||||||
"available": "Elérhető"
|
"available": "Elérhető"
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"jellyseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Függőben lévő",
|
||||||
"approved": "Approved",
|
"approved": "Jóváhagyott",
|
||||||
"available": "Available",
|
"available": "Elérhető",
|
||||||
"issues": "Open Issues"
|
"issues": "Nyitott problémák"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Függőben lévő",
|
||||||
"processing": "Feldolgozás",
|
"processing": "Feldolgozás",
|
||||||
"approved": "Approved",
|
"approved": "Jóváhagyott",
|
||||||
"available": "Available"
|
"available": "Elérhető"
|
||||||
},
|
},
|
||||||
"netalertx": {
|
"netalertx": {
|
||||||
"total": "Total",
|
"total": "Összes",
|
||||||
"connected": "Connected",
|
"connected": "Csatlakoztatott",
|
||||||
"new_devices": "Új eszközök",
|
"new_devices": "Új eszközök",
|
||||||
"down_alerts": "Leállási riasztások"
|
"down_alerts": "Leállási riasztások"
|
||||||
},
|
},
|
||||||
@@ -297,26 +297,26 @@
|
|||||||
"gravity": "Gravitáció"
|
"gravity": "Gravitáció"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Queries",
|
"queries": "Lekérdezések",
|
||||||
"blocked": "Blocked",
|
"blocked": "Blokkolt",
|
||||||
"filtered": "Szűrt",
|
"filtered": "Szűrt",
|
||||||
"latency": "Késleltetés"
|
"latency": "Késleltetés"
|
||||||
},
|
},
|
||||||
"speedtest": {
|
"speedtest": {
|
||||||
"upload": "Upload",
|
"upload": "Feltöltés",
|
||||||
"download": "Download",
|
"download": "Letöltés",
|
||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
"portainer": {
|
"portainer": {
|
||||||
"running": "Running",
|
"running": "Folyamatban",
|
||||||
"stopped": "Megállított",
|
"stopped": "Megállított",
|
||||||
"total": "Total"
|
"total": "Összes"
|
||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Downloaded",
|
"download": "Letöltött",
|
||||||
"nondownload": "Nem Letöltött",
|
"nondownload": "Nem Letöltött",
|
||||||
"read": "Read",
|
"read": "Olvasott",
|
||||||
"unread": "Unread",
|
"unread": "Olvasatlan",
|
||||||
"downloadedread": "Letöltött & Olvasott",
|
"downloadedread": "Letöltött & Olvasott",
|
||||||
"downloadedunread": "Letöltött & Olvasatlan",
|
"downloadedunread": "Letöltött & Olvasatlan",
|
||||||
"nondownloadedread": "Nem Letöltött & Olvasatlan",
|
"nondownloadedread": "Nem Letöltött & Olvasatlan",
|
||||||
@@ -337,7 +337,7 @@
|
|||||||
"ago": "{{value}} Ezelőtt"
|
"ago": "{{value}} Ezelőtt"
|
||||||
},
|
},
|
||||||
"technitium": {
|
"technitium": {
|
||||||
"totalQueries": "Queries",
|
"totalQueries": "Lekérdezések",
|
||||||
"totalNoError": "Sikerek",
|
"totalNoError": "Sikerek",
|
||||||
"totalServerFailure": "Hibák",
|
"totalServerFailure": "Hibák",
|
||||||
"totalNxDomain": "NX Domainek",
|
"totalNxDomain": "NX Domainek",
|
||||||
@@ -345,12 +345,12 @@
|
|||||||
"totalAuthoritative": "Irányadó",
|
"totalAuthoritative": "Irányadó",
|
||||||
"totalRecursive": "Rekurzív",
|
"totalRecursive": "Rekurzív",
|
||||||
"totalCached": "Gyorsítótárazott",
|
"totalCached": "Gyorsítótárazott",
|
||||||
"totalBlocked": "Blocked",
|
"totalBlocked": "Blokkolt",
|
||||||
"totalDropped": "Eldobott",
|
"totalDropped": "Eldobott",
|
||||||
"totalClients": "Kliensek"
|
"totalClients": "Kliensek"
|
||||||
},
|
},
|
||||||
"tdarr": {
|
"tdarr": {
|
||||||
"queue": "Queue",
|
"queue": "Várólista",
|
||||||
"processed": "Feldolgozott",
|
"processed": "Feldolgozott",
|
||||||
"errored": "Hibás",
|
"errored": "Hibás",
|
||||||
"saved": "Mentett"
|
"saved": "Mentett"
|
||||||
@@ -361,19 +361,19 @@
|
|||||||
"middleware": "Közvetítő"
|
"middleware": "Közvetítő"
|
||||||
},
|
},
|
||||||
"trilium": {
|
"trilium": {
|
||||||
"version": "Version",
|
"version": "Verzió",
|
||||||
"notesCount": "Notes",
|
"notesCount": "Jegyzetek",
|
||||||
"dbSize": "Database Size",
|
"dbSize": "Adatbázis mérete",
|
||||||
"unknown": "Unknown"
|
"unknown": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
"nothing_streaming": "No Active Streams",
|
"nothing_streaming": "Nincs aktív lejátszás",
|
||||||
"please_wait": "Kérjük Várjon"
|
"please_wait": "Kérjük Várjon"
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
"enabled": "Bekapcsolva",
|
"enabled": "Bekapcsolva",
|
||||||
"disabled": "Kikapcsolva",
|
"disabled": "Kikapcsolva",
|
||||||
"total": "Total"
|
"total": "Összes"
|
||||||
},
|
},
|
||||||
"coinmarketcap": {
|
"coinmarketcap": {
|
||||||
"configure": "Állíts be egy vagy több Cryptovalutát a követéshez",
|
"configure": "Állíts be egy vagy több Cryptovalutát a követéshez",
|
||||||
@@ -384,73 +384,73 @@
|
|||||||
},
|
},
|
||||||
"gotify": {
|
"gotify": {
|
||||||
"apps": "Applikációk",
|
"apps": "Applikációk",
|
||||||
"clients": "Clients",
|
"clients": "Kliensek",
|
||||||
"messages": "Üzenetek"
|
"messages": "Üzenetek"
|
||||||
},
|
},
|
||||||
"prowlarr": {
|
"prowlarr": {
|
||||||
"enableIndexers": "Indexerek",
|
"enableIndexers": "Indexerek",
|
||||||
"numberOfGrabs": "Fogott",
|
"numberOfGrabs": "Fogott",
|
||||||
"numberOfQueries": "Queries",
|
"numberOfQueries": "Lekérdezések",
|
||||||
"numberOfFailGrabs": "Hibás fogások",
|
"numberOfFailGrabs": "Hibás fogások",
|
||||||
"numberOfFailQueries": "Hibás lekérdezések"
|
"numberOfFailQueries": "Hibás lekérdezések"
|
||||||
},
|
},
|
||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Beállított",
|
"configured": "Beállított",
|
||||||
"errored": "Errored"
|
"errored": "Hibák"
|
||||||
},
|
},
|
||||||
"strelaysrv": {
|
"strelaysrv": {
|
||||||
"numActiveSessions": "Munkamenetek",
|
"numActiveSessions": "Munkamenetek",
|
||||||
"numConnections": "Csatlakozások",
|
"numConnections": "Csatlakozások",
|
||||||
"dataRelayed": "Átirányított",
|
"dataRelayed": "Átirányított",
|
||||||
"transferRate": "Rate"
|
"transferRate": "Ráta"
|
||||||
},
|
},
|
||||||
"mastodon": {
|
"mastodon": {
|
||||||
"user_count": "Users",
|
"user_count": "Felhasználók",
|
||||||
"status_count": "Posztok",
|
"status_count": "Posztok",
|
||||||
"domain_count": "Domainek"
|
"domain_count": "Domainek"
|
||||||
},
|
},
|
||||||
"medusa": {
|
"medusa": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Keresett",
|
||||||
"queued": "Queued",
|
"queued": "Sorban áll",
|
||||||
"series": "Series"
|
"series": "Sorozatok"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Lejátszók",
|
"players": "Lejátszók",
|
||||||
"version": "Verzió",
|
"version": "Verzió",
|
||||||
"status": "Status",
|
"status": "Státusz",
|
||||||
"up": "Online",
|
"up": "Kapcsolódva",
|
||||||
"down": "Offline"
|
"down": "Nem elérhető"
|
||||||
},
|
},
|
||||||
"miniflux": {
|
"miniflux": {
|
||||||
"read": "Olvasott",
|
"read": "Olvasott",
|
||||||
"unread": "Unread"
|
"unread": "Olvasatlan"
|
||||||
},
|
},
|
||||||
"authentik": {
|
"authentik": {
|
||||||
"users": "Users",
|
"users": "Felhasználók",
|
||||||
"loginsLast24H": "Bejelentkezések (24 óra)",
|
"loginsLast24H": "Bejelentkezések (24 óra)",
|
||||||
"failedLoginsLast24H": "Sikertelen bejelentkezések (24h)"
|
"failedLoginsLast24H": "Sikertelen bejelentkezések (24h)"
|
||||||
},
|
},
|
||||||
"proxmox": {
|
"proxmox": {
|
||||||
"mem": "MEM",
|
"mem": "MEM",
|
||||||
"cpu": "CPU",
|
"cpu": "Processzor",
|
||||||
"lxc": "LXC-k",
|
"lxc": "LXC-k",
|
||||||
"vms": "VM-ek"
|
"vms": "VM-ek"
|
||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "Processzor",
|
||||||
"load": "Load",
|
"load": "Terhelés",
|
||||||
"wait": "Please wait",
|
"wait": "Kérem várjon",
|
||||||
"temp": "TEMP",
|
"temp": "HŐM",
|
||||||
"_temp": "Hőmérséklet",
|
"_temp": "Hőmérséklet",
|
||||||
"warn": "Figyelmeztet",
|
"warn": "Figyelmeztet",
|
||||||
"uptime": "UP",
|
"uptime": "FUT",
|
||||||
"total": "Total",
|
"total": "Összes",
|
||||||
"free": "Free",
|
"free": "Szabad",
|
||||||
"used": "Used",
|
"used": "Felhasznált",
|
||||||
"days": "d",
|
"days": "n",
|
||||||
"hours": "h",
|
"hours": "ó",
|
||||||
"crit": "Kritikus",
|
"crit": "Kritikus",
|
||||||
"read": "Read",
|
"read": "Olvasott",
|
||||||
"write": "Írás",
|
"write": "Írás",
|
||||||
"gpu": "GPU",
|
"gpu": "GPU",
|
||||||
"mem": "Memória",
|
"mem": "Memória",
|
||||||
@@ -471,57 +471,57 @@
|
|||||||
"1-day": "Többnyire napos",
|
"1-day": "Többnyire napos",
|
||||||
"1-night": "Többnyire derült",
|
"1-night": "Többnyire derült",
|
||||||
"2-day": "Részben felhős",
|
"2-day": "Részben felhős",
|
||||||
"2-night": "Partly Cloudy",
|
"2-night": "Részben felhős",
|
||||||
"3-day": "Felhős",
|
"3-day": "Felhős",
|
||||||
"3-night": "Cloudy",
|
"3-night": "Felhős",
|
||||||
"45-day": "Ködös",
|
"45-day": "Ködös",
|
||||||
"45-night": "Foggy",
|
"45-night": "Ködös",
|
||||||
"48-day": "Foggy",
|
"48-day": "Ködös",
|
||||||
"48-night": "Foggy",
|
"48-night": "Ködös",
|
||||||
"51-day": "Enyhe szitálás",
|
"51-day": "Enyhe szitálás",
|
||||||
"51-night": "Light Drizzle",
|
"51-night": "Enyhe szitálás",
|
||||||
"53-day": "Szitálás",
|
"53-day": "Szitálás",
|
||||||
"53-night": "Drizzle",
|
"53-night": "Szitálás",
|
||||||
"55-day": "Erős szitálás",
|
"55-day": "Erős szitálás",
|
||||||
"55-night": "Heavy Drizzle",
|
"55-night": "Erős szitálás",
|
||||||
"56-day": "Enyhe fagyos szitálás",
|
"56-day": "Enyhe fagyos szitálás",
|
||||||
"56-night": "Light Freezing Drizzle",
|
"56-night": "Enyhe fagyos szitálás",
|
||||||
"57-day": "Fagyos szitálás",
|
"57-day": "Fagyos szitálás",
|
||||||
"57-night": "Freezing Drizzle",
|
"57-night": "Fagyos szitálás",
|
||||||
"61-day": "Enyhe eső",
|
"61-day": "Enyhe eső",
|
||||||
"61-night": "Light Rain",
|
"61-night": "Enyhe eső",
|
||||||
"63-day": "Eső",
|
"63-day": "Eső",
|
||||||
"63-night": "Rain",
|
"63-night": "Eső",
|
||||||
"65-day": "Heves eső",
|
"65-day": "Heves eső",
|
||||||
"65-night": "Heavy Rain",
|
"65-night": "Heves eső",
|
||||||
"66-day": "Ónos eső",
|
"66-day": "Ónos eső",
|
||||||
"66-night": "Freezing Rain",
|
"66-night": "Ónos eső",
|
||||||
"67-day": "Freezing Rain",
|
"67-day": "Ónos eső",
|
||||||
"67-night": "Freezing Rain",
|
"67-night": "Ónos eső",
|
||||||
"71-day": "Enyhe havazás",
|
"71-day": "Enyhe havazás",
|
||||||
"71-night": "Light Snow",
|
"71-night": "Enyhe havazás",
|
||||||
"73-day": "Hó",
|
"73-day": "Hó",
|
||||||
"73-night": "Snow",
|
"73-night": "Havazás",
|
||||||
"75-day": "Erős havazás",
|
"75-day": "Erős havazás",
|
||||||
"75-night": "Heavy Snow",
|
"75-night": "Erős havazás",
|
||||||
"77-day": "Hódara",
|
"77-day": "Hódara",
|
||||||
"77-night": "Snow Grains",
|
"77-night": "Hódara",
|
||||||
"80-day": "Enyhe záporok",
|
"80-day": "Enyhe záporok",
|
||||||
"80-night": "Light Showers",
|
"80-night": "Enyhe záporok",
|
||||||
"81-day": "Záporok",
|
"81-day": "Záporok",
|
||||||
"81-night": "Showers",
|
"81-night": "Záporok",
|
||||||
"82-day": "Heves záporok",
|
"82-day": "Heves záporok",
|
||||||
"82-night": "Heavy Showers",
|
"82-night": "Heves záporok",
|
||||||
"85-day": "Hózáporok",
|
"85-day": "Hózáporok",
|
||||||
"85-night": "Snow Showers",
|
"85-night": "Hózáporok",
|
||||||
"86-day": "Snow Showers",
|
"86-day": "Hózáporok",
|
||||||
"86-night": "Snow Showers",
|
"86-night": "Hózáporok",
|
||||||
"95-day": "Zivatar",
|
"95-day": "Zivatar",
|
||||||
"95-night": "Thunderstorm",
|
"95-night": "Vihar",
|
||||||
"96-day": "Zivatar jégesővel",
|
"96-day": "Zivatar jégesővel",
|
||||||
"96-night": "Thunderstorm With Hail",
|
"96-night": "Zivatar jégesővel",
|
||||||
"99-day": "Thunderstorm With Hail",
|
"99-day": "Zivatar jégesővel",
|
||||||
"99-night": "Thunderstorm With Hail"
|
"99-night": "Zivatar jégesővel"
|
||||||
},
|
},
|
||||||
"homebridge": {
|
"homebridge": {
|
||||||
"available_update": "Rendszer",
|
"available_update": "Rendszer",
|
||||||
@@ -530,17 +530,17 @@
|
|||||||
"up_to_date": "Naprakész",
|
"up_to_date": "Naprakész",
|
||||||
"child_bridges": "Gyerek Hidak",
|
"child_bridges": "Gyerek Hidak",
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"up": "Up",
|
"up": "Fut",
|
||||||
"pending": "Pending",
|
"pending": "Függőben lévő",
|
||||||
"down": "Down"
|
"down": "Leállt"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "Új",
|
"new": "Új",
|
||||||
"up": "Up",
|
"up": "Fut",
|
||||||
"grace": "Türelmi idő alatt",
|
"grace": "Türelmi idő alatt",
|
||||||
"down": "Down",
|
"down": "Leállt",
|
||||||
"paused": "Szünetel",
|
"paused": "Szünetel",
|
||||||
"status": "Status",
|
"status": "Státusz",
|
||||||
"last_ping": "Legutóbbi Ping",
|
"last_ping": "Legutóbbi Ping",
|
||||||
"never": "Még nincsenek ping-ek"
|
"never": "Még nincsenek ping-ek"
|
||||||
},
|
},
|
||||||
@@ -550,21 +550,21 @@
|
|||||||
"containers_failed": "Sikertelen"
|
"containers_failed": "Sikertelen"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "Approved",
|
"approvedPushes": "Jóváhagyott",
|
||||||
"rejectedPushes": "Elutasított",
|
"rejectedPushes": "Elutasított",
|
||||||
"filters": "Szűrők",
|
"filters": "Szűrők",
|
||||||
"indexers": "Indexers"
|
"indexers": "Indexerek"
|
||||||
},
|
},
|
||||||
"tubearchivist": {
|
"tubearchivist": {
|
||||||
"downloads": "Queue",
|
"downloads": "Várólista",
|
||||||
"videos": "Videók",
|
"videos": "Videók",
|
||||||
"channels": "Csatornák",
|
"channels": "Csatornák",
|
||||||
"playlists": "Lejátszási listák"
|
"playlists": "Lejátszási listák"
|
||||||
},
|
},
|
||||||
"truenas": {
|
"truenas": {
|
||||||
"load": "Rendszerterhelés",
|
"load": "Rendszerterhelés",
|
||||||
"uptime": "Uptime",
|
"uptime": "Működési idő",
|
||||||
"alerts": "Alerts"
|
"alerts": "Figyelmeztetések"
|
||||||
},
|
},
|
||||||
"pyload": {
|
"pyload": {
|
||||||
"speed": "Sebesség",
|
"speed": "Sebesség",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Beérkezett",
|
"inbox": "Beérkezett",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Akku töltöttsége",
|
"battery_charge": "Akku töltöttsége",
|
||||||
"ups_load": "UPS terheltsége",
|
"ups_load": "UPS terheltsége",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Egy év",
|
"gross_percent_1y": "Egy év",
|
||||||
"gross_percent_max": "Mindig"
|
"gross_percent_max": "Mindig",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Kotak Masuk",
|
"inbox": "Kotak Masuk",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Sisa Baterai",
|
"battery_charge": "Sisa Baterai",
|
||||||
"ups_load": "Beban UPS",
|
"ups_load": "Beban UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Satu Tahun",
|
"gross_percent_1y": "Satu Tahun",
|
||||||
"gross_percent_max": "Sepanjang Masa"
|
"gross_percent_max": "Sepanjang Masa",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
"passes": "Tessere"
|
"passes": "Tessere"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "Playing",
|
"playing": "In riproduzione",
|
||||||
"transcoding": "Transcoding",
|
"transcoding": "Transcoding",
|
||||||
"bitrate": "Bitrate",
|
"bitrate": "Bitrate",
|
||||||
"no_active": "No Active Streams",
|
"no_active": "No Active Streams",
|
||||||
@@ -313,7 +313,7 @@
|
|||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Downloaded",
|
"download": "Scaricati",
|
||||||
"nondownload": "Non Scaricato",
|
"nondownload": "Non Scaricato",
|
||||||
"read": "Read",
|
"read": "Read",
|
||||||
"unread": "Unread",
|
"unread": "Unread",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "In arrivo",
|
"inbox": "In arrivo",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Carica Batteria",
|
"battery_charge": "Carica Batteria",
|
||||||
"ups_load": "Carico UPS",
|
"ups_load": "Carico UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un anno",
|
"gross_percent_1y": "Un anno",
|
||||||
"gross_percent_max": "Sempre"
|
"gross_percent_max": "Sempre",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
"docker": {
|
"docker": {
|
||||||
"rx": "受信済み",
|
"rx": "受信済み",
|
||||||
"tx": "送信済み",
|
"tx": "送信済み",
|
||||||
"mem": "MEM",
|
"mem": "メモリ",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"running": "起動中",
|
"running": "起動中",
|
||||||
"offline": "オフライン",
|
"offline": "オフライン",
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"partial": "部分的"
|
"partial": "部分的"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "エラー",
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"down": "下へ",
|
"down": "下へ",
|
||||||
"up": "稼働",
|
"up": "稼働",
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
"offline_alt": "オフライン",
|
"offline_alt": "オフライン",
|
||||||
"online": "オンライン",
|
"online": "オンライン",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"unknown": "Unknown"
|
"unknown": "不明"
|
||||||
},
|
},
|
||||||
"evcc": {
|
"evcc": {
|
||||||
"pv_power": "発電量",
|
"pv_power": "発電量",
|
||||||
@@ -223,8 +223,8 @@
|
|||||||
"invalid": "無効"
|
"invalid": "無効"
|
||||||
},
|
},
|
||||||
"deluge": {
|
"deluge": {
|
||||||
"download": "Download",
|
"download": "ダウンロード",
|
||||||
"upload": "Upload",
|
"upload": "アップロード",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
@@ -233,8 +233,8 @@
|
|||||||
"cachemissbytes": "キャッシュミスバイト"
|
"cachemissbytes": "キャッシュミスバイト"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "Download",
|
"download": "ダウンロード",
|
||||||
"upload": "Upload",
|
"upload": "アップロード",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
@@ -251,7 +251,7 @@
|
|||||||
"queued": "Queued",
|
"queued": "Queued",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
"queue": "Queue",
|
||||||
"unknown": "Unknown"
|
"unknown": "不明"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Wanted",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "受信トレイ",
|
"inbox": "受信トレイ",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "バッテリー充電",
|
"battery_charge": "バッテリー充電",
|
||||||
"ups_load": "UPS 負荷",
|
"ups_load": "UPS 負荷",
|
||||||
@@ -692,8 +701,8 @@
|
|||||||
},
|
},
|
||||||
"diskstation": {
|
"diskstation": {
|
||||||
"days": "Days",
|
"days": "Days",
|
||||||
"uptime": "Uptime",
|
"uptime": "稼働時間",
|
||||||
"volumeAvailable": "Available"
|
"volumeAvailable": "利用可能"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "Series",
|
"series": "Series",
|
||||||
@@ -754,12 +763,13 @@
|
|||||||
"gatus": {
|
"gatus": {
|
||||||
"up": "Sites Up",
|
"up": "Sites Up",
|
||||||
"down": "Sites Down",
|
"down": "Sites Down",
|
||||||
"uptime": "Uptime"
|
"uptime": "稼働時間"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "1年",
|
"gross_percent_1y": "1年",
|
||||||
"gross_percent_max": "全期間"
|
"gross_percent_max": "全期間",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "ポッドキャスト",
|
"podcasts": "ポッドキャスト",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "받은 편지함",
|
"inbox": "받은 편지함",
|
||||||
"total": "전체"
|
"total": "전체"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "배터리 충전",
|
"battery_charge": "배터리 충전",
|
||||||
"ups_load": "UPS 부하",
|
"ups_load": "UPS 부하",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "오늘",
|
"gross_percent_today": "오늘",
|
||||||
"gross_percent_1y": "1년",
|
"gross_percent_1y": "1년",
|
||||||
"gross_percent_max": "전체 기간"
|
"gross_percent_max": "전체 기간",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "팟캐스트",
|
"podcasts": "팟캐스트",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "성공 중",
|
"num_success_latest": "성공 중",
|
||||||
"num_failure_latest": "실패 중",
|
"num_failure_latest": "실패 중",
|
||||||
"bytes_added_30": "추가된 용량"
|
"bytes_added_30": "추가된 용량"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Peti Masuk",
|
"inbox": "Peti Masuk",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Bateri dicas",
|
"battery_charge": "Bateri dicas",
|
||||||
"ups_load": "Beban UPS",
|
"ups_load": "Beban UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Satu tahun",
|
"gross_percent_1y": "Satu tahun",
|
||||||
"gross_percent_max": "Sepanjang masa"
|
"gross_percent_max": "Sepanjang masa",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podkas",
|
"podcasts": "Podkas",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Innboks",
|
"inbox": "Innboks",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Batteriladning",
|
"battery_charge": "Batteriladning",
|
||||||
"ups_load": "UPS last",
|
"ups_load": "UPS last",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Ett år",
|
"gross_percent_1y": "Ett år",
|
||||||
"gross_percent_max": "Gjennom tidene"
|
"gross_percent_max": "Gjennom tidene",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podkaster",
|
"podcasts": "Podkaster",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Skrzynka odbiorcza",
|
"inbox": "Skrzynka odbiorcza",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Stan baterii",
|
"battery_charge": "Stan baterii",
|
||||||
"ups_load": "Obciążenie UPS",
|
"ups_load": "Obciążenie UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Dzisiaj",
|
"gross_percent_today": "Dzisiaj",
|
||||||
"gross_percent_1y": "Rok",
|
"gross_percent_1y": "Rok",
|
||||||
"gross_percent_max": "Od początku"
|
"gross_percent_max": "Od początku",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Caixa de entrada",
|
"inbox": "Caixa de entrada",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Carga da bateria",
|
"battery_charge": "Carga da bateria",
|
||||||
"ups_load": "Carga da UPS",
|
"ups_load": "Carga da UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Um ano",
|
"gross_percent_1y": "Um ano",
|
||||||
"gross_percent_max": "Desde Sempre"
|
"gross_percent_max": "Desde Sempre",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
"wlan_devices": "Dispositivos WLAN",
|
"wlan_devices": "Dispositivos WLAN",
|
||||||
"lan_users": "Usuários de LAN",
|
"lan_users": "Usuários de LAN",
|
||||||
"wlan_users": "Usuários de WLAN",
|
"wlan_users": "Usuários de WLAN",
|
||||||
"up": "UP",
|
"up": "ATIVO",
|
||||||
"down": "Desligado",
|
"down": "Desligado",
|
||||||
"wait": "Por favor, aguarde",
|
"wait": "Por favor, aguarde",
|
||||||
"empty_data": "Status do Subsistema desconhecido"
|
"empty_data": "Status do Subsistema desconhecido"
|
||||||
@@ -246,7 +246,7 @@
|
|||||||
"unknown": "Desconhecido"
|
"unknown": "Desconhecido"
|
||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Desejado",
|
||||||
"missing": "Faltando",
|
"missing": "Faltando",
|
||||||
"queued": "Em fila",
|
"queued": "Em fila",
|
||||||
"movies": "Filmes",
|
"movies": "Filmes",
|
||||||
@@ -254,13 +254,13 @@
|
|||||||
"unknown": "Desconhecido"
|
"unknown": "Desconhecido"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Desejado",
|
||||||
"queued": "Queued",
|
"queued": "Na fila",
|
||||||
"artists": "Artistas"
|
"artists": "Artistas"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Desejado",
|
||||||
"queued": "Queued",
|
"queued": "Na fila",
|
||||||
"books": "Livros"
|
"books": "Livros"
|
||||||
},
|
},
|
||||||
"bazarr": {
|
"bazarr": {
|
||||||
@@ -273,20 +273,20 @@
|
|||||||
"available": "Disponível"
|
"available": "Disponível"
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"jellyseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Pendente",
|
||||||
"approved": "Approved",
|
"approved": "Aprovado",
|
||||||
"available": "Available",
|
"available": "Disponível",
|
||||||
"issues": "Open Issues"
|
"issues": "Incidentes Abertos"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Pendente",
|
||||||
"processing": "Processando",
|
"processing": "Processando",
|
||||||
"approved": "Approved",
|
"approved": "Aprovado",
|
||||||
"available": "Available"
|
"available": "Disponível"
|
||||||
},
|
},
|
||||||
"netalertx": {
|
"netalertx": {
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"connected": "Connected",
|
"connected": "Conectado",
|
||||||
"new_devices": "Novos dispositivos",
|
"new_devices": "Novos dispositivos",
|
||||||
"down_alerts": "Alertas de Inatividade"
|
"down_alerts": "Alertas de Inatividade"
|
||||||
},
|
},
|
||||||
@@ -297,26 +297,26 @@
|
|||||||
"gravity": "Gravidade"
|
"gravity": "Gravidade"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Queries",
|
"queries": "Consultas",
|
||||||
"blocked": "Blocked",
|
"blocked": "Bloqueado",
|
||||||
"filtered": "Filtrado",
|
"filtered": "Filtrado",
|
||||||
"latency": "Latência"
|
"latency": "Latência"
|
||||||
},
|
},
|
||||||
"speedtest": {
|
"speedtest": {
|
||||||
"upload": "Upload",
|
"upload": "Enviar",
|
||||||
"download": "Download",
|
"download": "Baixar",
|
||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
"portainer": {
|
"portainer": {
|
||||||
"running": "Running",
|
"running": "Executando",
|
||||||
"stopped": "Parado",
|
"stopped": "Parado",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Downloaded",
|
"download": "Baixado",
|
||||||
"nondownload": "Não Baixado",
|
"nondownload": "Não Baixado",
|
||||||
"read": "Read",
|
"read": "Lido",
|
||||||
"unread": "Unread",
|
"unread": "Não lido",
|
||||||
"downloadedread": "Baixado e Lido",
|
"downloadedread": "Baixado e Lido",
|
||||||
"downloadedunread": "Baixado e Não Lido",
|
"downloadedunread": "Baixado e Não Lido",
|
||||||
"nondownloadedread": "Não Baixado e Lido",
|
"nondownloadedread": "Não Baixado e Lido",
|
||||||
@@ -337,7 +337,7 @@
|
|||||||
"ago": "{{value}} Atrás"
|
"ago": "{{value}} Atrás"
|
||||||
},
|
},
|
||||||
"technitium": {
|
"technitium": {
|
||||||
"totalQueries": "Queries",
|
"totalQueries": "Consultas",
|
||||||
"totalNoError": "Sucesso",
|
"totalNoError": "Sucesso",
|
||||||
"totalServerFailure": "Falhas",
|
"totalServerFailure": "Falhas",
|
||||||
"totalNxDomain": "Domínios NX",
|
"totalNxDomain": "Domínios NX",
|
||||||
@@ -345,12 +345,12 @@
|
|||||||
"totalAuthoritative": "Autoritativo",
|
"totalAuthoritative": "Autoritativo",
|
||||||
"totalRecursive": "Recursivo",
|
"totalRecursive": "Recursivo",
|
||||||
"totalCached": "Em cache",
|
"totalCached": "Em cache",
|
||||||
"totalBlocked": "Blocked",
|
"totalBlocked": "Bloqueado",
|
||||||
"totalDropped": "Perdidos",
|
"totalDropped": "Perdidos",
|
||||||
"totalClients": "Clientes"
|
"totalClients": "Clientes"
|
||||||
},
|
},
|
||||||
"tdarr": {
|
"tdarr": {
|
||||||
"queue": "Queue",
|
"queue": "Fila de espera",
|
||||||
"processed": "Processado",
|
"processed": "Processado",
|
||||||
"errored": "Erro",
|
"errored": "Erro",
|
||||||
"saved": "Guardado"
|
"saved": "Guardado"
|
||||||
@@ -361,13 +361,13 @@
|
|||||||
"middleware": ""
|
"middleware": ""
|
||||||
},
|
},
|
||||||
"trilium": {
|
"trilium": {
|
||||||
"version": "Version",
|
"version": "Versão",
|
||||||
"notesCount": "Notas",
|
"notesCount": "Notas",
|
||||||
"dbSize": "Tamanho do banco de dados",
|
"dbSize": "Tamanho do banco de dados",
|
||||||
"unknown": "Unknown"
|
"unknown": "Desconhecido"
|
||||||
},
|
},
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
"nothing_streaming": "No Active Streams",
|
"nothing_streaming": "Sem Streams Ativos",
|
||||||
"please_wait": "Por favor, aguarde"
|
"please_wait": "Por favor, aguarde"
|
||||||
},
|
},
|
||||||
"npm": {
|
"npm": {
|
||||||
@@ -384,49 +384,49 @@
|
|||||||
},
|
},
|
||||||
"gotify": {
|
"gotify": {
|
||||||
"apps": "Aplicações",
|
"apps": "Aplicações",
|
||||||
"clients": "Clients",
|
"clients": "Clientes",
|
||||||
"messages": "Mensagens"
|
"messages": "Mensagens"
|
||||||
},
|
},
|
||||||
"prowlarr": {
|
"prowlarr": {
|
||||||
"enableIndexers": "Indexadores",
|
"enableIndexers": "Indexadores",
|
||||||
"numberOfGrabs": "Agarrados",
|
"numberOfGrabs": "Agarrados",
|
||||||
"numberOfQueries": "Queries",
|
"numberOfQueries": "Consultas",
|
||||||
"numberOfFailGrabs": "Falhados",
|
"numberOfFailGrabs": "Falhados",
|
||||||
"numberOfFailQueries": "Pesquisas falhadas"
|
"numberOfFailQueries": "Pesquisas falhadas"
|
||||||
},
|
},
|
||||||
"jackett": {
|
"jackett": {
|
||||||
"configured": "Configurado",
|
"configured": "Configurado",
|
||||||
"errored": "Errored"
|
"errored": "Falhou"
|
||||||
},
|
},
|
||||||
"strelaysrv": {
|
"strelaysrv": {
|
||||||
"numActiveSessions": "Sessões",
|
"numActiveSessions": "Sessões",
|
||||||
"numConnections": "Conexões",
|
"numConnections": "Conexões",
|
||||||
"dataRelayed": "Retransmitido",
|
"dataRelayed": "Retransmitido",
|
||||||
"transferRate": "Rate"
|
"transferRate": "Taxa"
|
||||||
},
|
},
|
||||||
"mastodon": {
|
"mastodon": {
|
||||||
"user_count": "Users",
|
"user_count": "Usuários",
|
||||||
"status_count": "Postagens",
|
"status_count": "Postagens",
|
||||||
"domain_count": "Domínios"
|
"domain_count": "Domínios"
|
||||||
},
|
},
|
||||||
"medusa": {
|
"medusa": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Desejado",
|
||||||
"queued": "Queued",
|
"queued": "Na fila",
|
||||||
"series": "Series"
|
"series": "Séries"
|
||||||
},
|
},
|
||||||
"minecraft": {
|
"minecraft": {
|
||||||
"players": "Reprodutores",
|
"players": "Reprodutores",
|
||||||
"version": "Versão",
|
"version": "Versão",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"up": "Online",
|
"up": "Online",
|
||||||
"down": "Offline"
|
"down": "Desconectado"
|
||||||
},
|
},
|
||||||
"miniflux": {
|
"miniflux": {
|
||||||
"read": "Lido",
|
"read": "Lido",
|
||||||
"unread": "Unread"
|
"unread": "Não lido"
|
||||||
},
|
},
|
||||||
"authentik": {
|
"authentik": {
|
||||||
"users": "Users",
|
"users": "Usuários",
|
||||||
"loginsLast24H": "Inícios de sessão (24h)",
|
"loginsLast24H": "Inícios de sessão (24h)",
|
||||||
"failedLoginsLast24H": "Inícios de sessão falhados (24h)"
|
"failedLoginsLast24H": "Inícios de sessão falhados (24h)"
|
||||||
},
|
},
|
||||||
@@ -438,19 +438,19 @@
|
|||||||
},
|
},
|
||||||
"glances": {
|
"glances": {
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"load": "Load",
|
"load": "Carga",
|
||||||
"wait": "Please wait",
|
"wait": "Por favor, aguarde",
|
||||||
"temp": "TEMP",
|
"temp": "TEMPERATURA",
|
||||||
"_temp": "Temperatura",
|
"_temp": "Temperatura",
|
||||||
"warn": "Aviso",
|
"warn": "Aviso",
|
||||||
"uptime": "UP",
|
"uptime": "ATIVO",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"free": "Free",
|
"free": "Livre",
|
||||||
"used": "Used",
|
"used": "Utilizado",
|
||||||
"days": "d",
|
"days": "d",
|
||||||
"hours": "h",
|
"hours": "h",
|
||||||
"crit": "Crítico",
|
"crit": "Crítico",
|
||||||
"read": "Read",
|
"read": "Leitura",
|
||||||
"write": "Escrita",
|
"write": "Escrita",
|
||||||
"gpu": "GPU",
|
"gpu": "GPU",
|
||||||
"mem": "Memória",
|
"mem": "Memória",
|
||||||
@@ -471,57 +471,57 @@
|
|||||||
"1-day": "Maioritariamente ensolarado",
|
"1-day": "Maioritariamente ensolarado",
|
||||||
"1-night": "Maioritariamente Limpo",
|
"1-night": "Maioritariamente Limpo",
|
||||||
"2-day": "Parcialmente Nublado",
|
"2-day": "Parcialmente Nublado",
|
||||||
"2-night": "Partly Cloudy",
|
"2-night": "Parcialmente Nublado",
|
||||||
"3-day": "Nublado",
|
"3-day": "Nublado",
|
||||||
"3-night": "Cloudy",
|
"3-night": "Nublado",
|
||||||
"45-day": "Nevoeiro",
|
"45-day": "Nevoeiro",
|
||||||
"45-night": "Foggy",
|
"45-night": "Nevoeiro",
|
||||||
"48-day": "Foggy",
|
"48-day": "Nevoeiro",
|
||||||
"48-night": "Foggy",
|
"48-night": "Nevoeiro",
|
||||||
"51-day": "Aguaceiros",
|
"51-day": "Aguaceiros",
|
||||||
"51-night": "Light Drizzle",
|
"51-night": "Leve Garoa",
|
||||||
"53-day": "Chuvisco",
|
"53-day": "Chuvisco",
|
||||||
"53-night": "Drizzle",
|
"53-night": "Garoa",
|
||||||
"55-day": "Aguaceiro Forte",
|
"55-day": "Aguaceiro Forte",
|
||||||
"55-night": "Heavy Drizzle",
|
"55-night": "Garoa Forte",
|
||||||
"56-day": "Leve Garoa Congelante",
|
"56-day": "Leve Garoa Congelante",
|
||||||
"56-night": "Light Freezing Drizzle",
|
"56-night": "Garoa Congelante Fraca",
|
||||||
"57-day": "Garoa Congelante",
|
"57-day": "Garoa Congelante",
|
||||||
"57-night": "Freezing Drizzle",
|
"57-night": "Garoa Congelante",
|
||||||
"61-day": "Chuva fraca",
|
"61-day": "Chuva fraca",
|
||||||
"61-night": "Light Rain",
|
"61-night": "Chuva Fraca",
|
||||||
"63-day": "Chuva",
|
"63-day": "Chuva",
|
||||||
"63-night": "Rain",
|
"63-night": "Chuva",
|
||||||
"65-day": "Chuva forte",
|
"65-day": "Chuva forte",
|
||||||
"65-night": "Heavy Rain",
|
"65-night": "Chuva Forte",
|
||||||
"66-day": "Chuva Congelante",
|
"66-day": "Chuva Congelante",
|
||||||
"66-night": "Freezing Rain",
|
"66-night": "Chuva Congelante",
|
||||||
"67-day": "Freezing Rain",
|
"67-day": "Chuva Congelante",
|
||||||
"67-night": "Freezing Rain",
|
"67-night": "Chuva Congelante",
|
||||||
"71-day": "Neve fraca",
|
"71-day": "Neve fraca",
|
||||||
"71-night": "Light Snow",
|
"71-night": "Neve Fraca",
|
||||||
"73-day": "Neve",
|
"73-day": "Neve",
|
||||||
"73-night": "Snow",
|
"73-night": "Neve",
|
||||||
"75-day": "Neve forte",
|
"75-day": "Neve forte",
|
||||||
"75-night": "Heavy Snow",
|
"75-night": "Neve Forte",
|
||||||
"77-day": "Grãos de Neve",
|
"77-day": "Grãos de Neve",
|
||||||
"77-night": "Snow Grains",
|
"77-night": "Grãos de Neve",
|
||||||
"80-day": "Neve fraca",
|
"80-day": "Neve fraca",
|
||||||
"80-night": "Light Showers",
|
"80-night": "Pancadas de Chuva Leves",
|
||||||
"81-day": "Chuviscos",
|
"81-day": "Chuviscos",
|
||||||
"81-night": "Showers",
|
"81-night": "Pancadas de Chuva",
|
||||||
"82-day": "Chuviscos fortes",
|
"82-day": "Chuviscos fortes",
|
||||||
"82-night": "Heavy Showers",
|
"82-night": "Pancadas de Chuva Forte",
|
||||||
"85-day": "Precipitação de Neve",
|
"85-day": "Precipitação de Neve",
|
||||||
"85-night": "Snow Showers",
|
"85-night": "Pancadas de Neve",
|
||||||
"86-day": "Snow Showers",
|
"86-day": "Pancadas de Neve",
|
||||||
"86-night": "Snow Showers",
|
"86-night": "Pancadas de Neve",
|
||||||
"95-day": "Trovoada",
|
"95-day": "Trovoada",
|
||||||
"95-night": "Thunderstorm",
|
"95-night": "Tempestade Com Raios",
|
||||||
"96-day": "Trovoada com granizo",
|
"96-day": "Trovoada com granizo",
|
||||||
"96-night": "Thunderstorm With Hail",
|
"96-night": "Tempestade Com Raios e Granizo",
|
||||||
"99-day": "Thunderstorm With Hail",
|
"99-day": "Tempestade Com Raios e Granizo",
|
||||||
"99-night": "Thunderstorm With Hail"
|
"99-night": "Tempestade Com Raios e Granizo"
|
||||||
},
|
},
|
||||||
"homebridge": {
|
"homebridge": {
|
||||||
"available_update": "Sistema",
|
"available_update": "Sistema",
|
||||||
@@ -530,15 +530,15 @@
|
|||||||
"up_to_date": "Atualizado",
|
"up_to_date": "Atualizado",
|
||||||
"child_bridges": "Pontes Filhas",
|
"child_bridges": "Pontes Filhas",
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
"child_bridges_status": "{{ok}}/{{total}}",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"pending": "Pending",
|
"pending": "Pendente",
|
||||||
"down": "Down"
|
"down": "Inativo"
|
||||||
},
|
},
|
||||||
"healthchecks": {
|
"healthchecks": {
|
||||||
"new": "Novo",
|
"new": "Novo",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"grace": "Em Período Gratuito",
|
"grace": "Em Período Gratuito",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"paused": "Pausado",
|
"paused": "Pausado",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"last_ping": "Ultimo Ping",
|
"last_ping": "Ultimo Ping",
|
||||||
@@ -550,26 +550,26 @@
|
|||||||
"containers_failed": "Falhou"
|
"containers_failed": "Falhou"
|
||||||
},
|
},
|
||||||
"autobrr": {
|
"autobrr": {
|
||||||
"approvedPushes": "Approved",
|
"approvedPushes": "Aprovado",
|
||||||
"rejectedPushes": "Rejeitado",
|
"rejectedPushes": "Rejeitado",
|
||||||
"filters": "Filtros",
|
"filters": "Filtros",
|
||||||
"indexers": "Indexers"
|
"indexers": "Indexadores"
|
||||||
},
|
},
|
||||||
"tubearchivist": {
|
"tubearchivist": {
|
||||||
"downloads": "Queue",
|
"downloads": "Fila de espera",
|
||||||
"videos": "Vídeos",
|
"videos": "Vídeos",
|
||||||
"channels": "Canais",
|
"channels": "Canais",
|
||||||
"playlists": "Listas"
|
"playlists": "Listas"
|
||||||
},
|
},
|
||||||
"truenas": {
|
"truenas": {
|
||||||
"load": "Carga do sistema",
|
"load": "Carga do sistema",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"alerts": "Alerts"
|
"alerts": "Alertas"
|
||||||
},
|
},
|
||||||
"pyload": {
|
"pyload": {
|
||||||
"speed": "Velocidade",
|
"speed": "Velocidade",
|
||||||
"active": "Active",
|
"active": "Ativo",
|
||||||
"queue": "Queue",
|
"queue": "Fila de espera",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"gluetun": {
|
"gluetun": {
|
||||||
@@ -579,26 +579,35 @@
|
|||||||
"port_forwarded": "Porta Encaminhada"
|
"port_forwarded": "Porta Encaminhada"
|
||||||
},
|
},
|
||||||
"hdhomerun": {
|
"hdhomerun": {
|
||||||
"channels": "Channels",
|
"channels": "Canais",
|
||||||
"hd": "HD",
|
"hd": "HD",
|
||||||
"tunerCount": "Sintonizadores",
|
"tunerCount": "Sintonizadores",
|
||||||
"channelNumber": "Canal",
|
"channelNumber": "Canal",
|
||||||
"channelNetwork": "Rede",
|
"channelNetwork": "Rede",
|
||||||
"signalStrength": "Potência",
|
"signalStrength": "Potência",
|
||||||
"signalQuality": "Qualidade",
|
"signalQuality": "Qualidade",
|
||||||
"symbolQuality": "Quality",
|
"symbolQuality": "Qualidade",
|
||||||
"networkRate": "Bitrate",
|
"networkRate": "Bitrate",
|
||||||
"clientIP": "Cliente"
|
"clientIP": "Cliente"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Aprovado",
|
"passed": "Aprovado",
|
||||||
"failed": "Failed",
|
"failed": "Falhou",
|
||||||
"unknown": "Unknown"
|
"unknown": "Desconhecido"
|
||||||
},
|
},
|
||||||
"paperlessngx": {
|
"paperlessngx": {
|
||||||
"inbox": "Caixa de entrada",
|
"inbox": "Caixa de entrada",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Carga da bateria",
|
"battery_charge": "Carga da bateria",
|
||||||
"ups_load": "Carga do UPS",
|
"ups_load": "Carga do UPS",
|
||||||
@@ -608,18 +617,18 @@
|
|||||||
"low_battery": "Bateria Fraca"
|
"low_battery": "Bateria Fraca"
|
||||||
},
|
},
|
||||||
"nextdns": {
|
"nextdns": {
|
||||||
"wait": "Please Wait",
|
"wait": "Por favor, aguarde",
|
||||||
"no_devices": "Nenhum dado do dispositivo recebido"
|
"no_devices": "Nenhum dado do dispositivo recebido"
|
||||||
},
|
},
|
||||||
"mikrotik": {
|
"mikrotik": {
|
||||||
"cpuLoad": "Carga do CPU",
|
"cpuLoad": "Carga do CPU",
|
||||||
"memoryUsed": "Memória Utilizada",
|
"memoryUsed": "Memória Utilizada",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"numberOfLeases": "Concessões"
|
"numberOfLeases": "Concessões"
|
||||||
},
|
},
|
||||||
"xteve": {
|
"xteve": {
|
||||||
"streams_all": "Todos os Streams",
|
"streams_all": "Todos os Streams",
|
||||||
"streams_active": "Active Streams",
|
"streams_active": "Streams Ativas",
|
||||||
"streams_xepg": "Canais XEPG"
|
"streams_xepg": "Canais XEPG"
|
||||||
},
|
},
|
||||||
"opendtu": {
|
"opendtu": {
|
||||||
@@ -629,7 +638,7 @@
|
|||||||
"limit": "Limite"
|
"limit": "Limite"
|
||||||
},
|
},
|
||||||
"opnsense": {
|
"opnsense": {
|
||||||
"cpu": "CPU Load",
|
"cpu": "Carga do CPU",
|
||||||
"memory": "Memória Ativa",
|
"memory": "Memória Ativa",
|
||||||
"wanUpload": "Envio WAN",
|
"wanUpload": "Envio WAN",
|
||||||
"wanDownload": "WAN Descarga"
|
"wanDownload": "WAN Descarga"
|
||||||
@@ -654,9 +663,9 @@
|
|||||||
"load": "Carga Média",
|
"load": "Carga Média",
|
||||||
"memory": "Uso de memória",
|
"memory": "Uso de memória",
|
||||||
"wanStatus": "Estado WAN",
|
"wanStatus": "Estado WAN",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"temp": "Temp",
|
"temp": "Temp.",
|
||||||
"disk": "Uso do disco",
|
"disk": "Uso do disco",
|
||||||
"wanIP": "IP WAN"
|
"wanIP": "IP WAN"
|
||||||
},
|
},
|
||||||
@@ -667,49 +676,49 @@
|
|||||||
"memory_usage": "Memória"
|
"memory_usage": "Memória"
|
||||||
},
|
},
|
||||||
"immich": {
|
"immich": {
|
||||||
"users": "Users",
|
"users": "Usuários",
|
||||||
"photos": "Fotos",
|
"photos": "Fotos",
|
||||||
"videos": "Videos",
|
"videos": "Vídeos",
|
||||||
"storage": "Armazenamento"
|
"storage": "Armazenamento"
|
||||||
},
|
},
|
||||||
"uptimekuma": {
|
"uptimekuma": {
|
||||||
"up": "Sites no Ar",
|
"up": "Sites no Ar",
|
||||||
"down": "Sites Fora do Ar",
|
"down": "Sites Fora do Ar",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"incident": "Incidente",
|
"incident": "Incidente",
|
||||||
"m": "m"
|
"m": "m"
|
||||||
},
|
},
|
||||||
"atsumeru": {
|
"atsumeru": {
|
||||||
"series": "Series",
|
"series": "Séries",
|
||||||
"archives": "Arquivos",
|
"archives": "Arquivos",
|
||||||
"chapters": "Capítulos",
|
"chapters": "Capítulos",
|
||||||
"categories": "Categorias"
|
"categories": "Categorias"
|
||||||
},
|
},
|
||||||
"komga": {
|
"komga": {
|
||||||
"libraries": "Bibliotecas",
|
"libraries": "Bibliotecas",
|
||||||
"series": "Series",
|
"series": "Séries",
|
||||||
"books": "Books"
|
"books": "Livros"
|
||||||
},
|
},
|
||||||
"diskstation": {
|
"diskstation": {
|
||||||
"days": "Days",
|
"days": "Dias",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"volumeAvailable": "Available"
|
"volumeAvailable": "Disponível"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "Series",
|
"series": "Séries",
|
||||||
"issues": "Problemas",
|
"issues": "Problemas",
|
||||||
"wanted": "Wanted"
|
"wanted": "Desejado"
|
||||||
},
|
},
|
||||||
"photoprism": {
|
"photoprism": {
|
||||||
"albums": "Albums",
|
"albums": "Álbuns",
|
||||||
"photos": "Photos",
|
"photos": "Fotos",
|
||||||
"videos": "Videos",
|
"videos": "Vídeos",
|
||||||
"people": "Pessoa"
|
"people": "Pessoa"
|
||||||
},
|
},
|
||||||
"fileflows": {
|
"fileflows": {
|
||||||
"queue": "Queue",
|
"queue": "Fila de espera",
|
||||||
"processing": "Processing",
|
"processing": "Processando",
|
||||||
"processed": "Processed",
|
"processed": "Processado",
|
||||||
"time": "Hora"
|
"time": "Hora"
|
||||||
},
|
},
|
||||||
"firefly": {
|
"firefly": {
|
||||||
@@ -735,7 +744,7 @@
|
|||||||
"size": "Tamanho",
|
"size": "Tamanho",
|
||||||
"lastrun": "Ultima Execução",
|
"lastrun": "Ultima Execução",
|
||||||
"nextrun": "Próxima Execução",
|
"nextrun": "Próxima Execução",
|
||||||
"failed": "Failed"
|
"failed": "Falhou"
|
||||||
},
|
},
|
||||||
"unmanic": {
|
"unmanic": {
|
||||||
"active_workers": "Workers Ativos",
|
"active_workers": "Workers Ativos",
|
||||||
@@ -752,20 +761,21 @@
|
|||||||
"targets_total": "Total de Alvos"
|
"targets_total": "Total de Alvos"
|
||||||
},
|
},
|
||||||
"gatus": {
|
"gatus": {
|
||||||
"up": "Sites Up",
|
"up": "Sites no Ar",
|
||||||
"down": "Sites Down",
|
"down": "Sites Fora do Ar",
|
||||||
"uptime": "Uptime"
|
"uptime": "Tempo ativo"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Hoje",
|
||||||
"gross_percent_1y": "Um ano",
|
"gross_percent_1y": "Um ano",
|
||||||
"gross_percent_max": "Todo o tempo"
|
"gross_percent_max": "Todo o tempo",
|
||||||
|
"net_worth": "Patrimônio Líquido"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
"books": "Books",
|
"books": "Livros",
|
||||||
"podcastsDuration": "Duração",
|
"podcastsDuration": "Duração",
|
||||||
"booksDuration": "Duration"
|
"booksDuration": "Duração"
|
||||||
},
|
},
|
||||||
"homeassistant": {
|
"homeassistant": {
|
||||||
"people_home": "Pessoas em Casa",
|
"people_home": "Pessoas em Casa",
|
||||||
@@ -774,23 +784,23 @@
|
|||||||
},
|
},
|
||||||
"whatsupdocker": {
|
"whatsupdocker": {
|
||||||
"monitoring": "Monitorando",
|
"monitoring": "Monitorando",
|
||||||
"updates": "Updates"
|
"updates": "Atualizações"
|
||||||
},
|
},
|
||||||
"calibreweb": {
|
"calibreweb": {
|
||||||
"books": "Books",
|
"books": "Livros",
|
||||||
"authors": "Autores",
|
"authors": "Autores",
|
||||||
"categories": "Categories",
|
"categories": "Categorias",
|
||||||
"series": "Series"
|
"series": "Séries"
|
||||||
},
|
},
|
||||||
"jdownloader": {
|
"jdownloader": {
|
||||||
"downloadCount": "Queue",
|
"downloadCount": "Fila de espera",
|
||||||
"downloadBytesRemaining": "Remaining",
|
"downloadBytesRemaining": "Restante",
|
||||||
"downloadTotalBytes": "Size",
|
"downloadTotalBytes": "Tamanho",
|
||||||
"downloadSpeed": "Speed"
|
"downloadSpeed": "Velocidade"
|
||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "Series",
|
"seriesCount": "Séries",
|
||||||
"totalFiles": "Files"
|
"totalFiles": "Arquivos"
|
||||||
},
|
},
|
||||||
"azuredevops": {
|
"azuredevops": {
|
||||||
"result": "Resultado",
|
"result": "Resultado",
|
||||||
@@ -798,21 +808,21 @@
|
|||||||
"buildId": "ID Compilação",
|
"buildId": "ID Compilação",
|
||||||
"succeeded": "Bem-sucedido",
|
"succeeded": "Bem-sucedido",
|
||||||
"notStarted": "Não iniciado",
|
"notStarted": "Não iniciado",
|
||||||
"failed": "Failed",
|
"failed": "Falhou",
|
||||||
"canceled": "Cancelado",
|
"canceled": "Cancelado",
|
||||||
"inProgress": "Em Progresso",
|
"inProgress": "Em Progresso",
|
||||||
"totalPrs": "Total de PRs",
|
"totalPrs": "Total de PRs",
|
||||||
"myPrs": "Minhas PRs",
|
"myPrs": "Minhas PRs",
|
||||||
"approved": "Approved"
|
"approved": "Aprovado"
|
||||||
},
|
},
|
||||||
"gamedig": {
|
"gamedig": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline",
|
"offline": "Desconectado",
|
||||||
"name": "Nome",
|
"name": "Nome",
|
||||||
"map": "Mapa",
|
"map": "Mapa",
|
||||||
"currentPlayers": "Jogadores atuais",
|
"currentPlayers": "Jogadores atuais",
|
||||||
"players": "Players",
|
"players": "Jogadores",
|
||||||
"maxPlayers": "Número Máximo de Jogadores",
|
"maxPlayers": "Número Máximo de Jogadores",
|
||||||
"bots": "Robôs",
|
"bots": "Robôs",
|
||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
@@ -825,39 +835,39 @@
|
|||||||
},
|
},
|
||||||
"mealie": {
|
"mealie": {
|
||||||
"recipes": "Receitas",
|
"recipes": "Receitas",
|
||||||
"users": "Users",
|
"users": "Usuários",
|
||||||
"categories": "Categories",
|
"categories": "Categorias",
|
||||||
"tags": "Marcadores"
|
"tags": "Marcadores"
|
||||||
},
|
},
|
||||||
"openmediavault": {
|
"openmediavault": {
|
||||||
"downloading": "Baixando",
|
"downloading": "Baixando",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"running": "Running",
|
"running": "Executando",
|
||||||
"stopped": "Stopped",
|
"stopped": "Parado",
|
||||||
"passed": "Passed",
|
"passed": "Aprovado",
|
||||||
"failed": "Failed"
|
"failed": "Falhou"
|
||||||
},
|
},
|
||||||
"openwrt": {
|
"openwrt": {
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"cpuLoad": "Carga da CPU média (5m)",
|
"cpuLoad": "Carga da CPU média (5m)",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"bytesTx": "Transmitido",
|
"bytesTx": "Transmitido",
|
||||||
"bytesRx": "Received"
|
"bytesRx": "Recebido"
|
||||||
},
|
},
|
||||||
"uptimerobot": {
|
"uptimerobot": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"lastDown": "Última inatividade",
|
"lastDown": "Última inatividade",
|
||||||
"downDuration": "Duração de inatividade",
|
"downDuration": "Duração de inatividade",
|
||||||
"sitesUp": "Sites Up",
|
"sitesUp": "Sites no Ar",
|
||||||
"sitesDown": "Sites Down",
|
"sitesDown": "Sites Fora do Ar",
|
||||||
"paused": "Paused",
|
"paused": "Pausado",
|
||||||
"notyetchecked": "Não conferidos ainda",
|
"notyetchecked": "Não conferidos ainda",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"seemsdown": "Parece Desconectado",
|
"seemsdown": "Parece Desconectado",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"unknown": "Unknown"
|
"unknown": "Desconhecido"
|
||||||
},
|
},
|
||||||
"calendar": {
|
"calendar": {
|
||||||
"inCinemas": "Nos cinemas",
|
"inCinemas": "Nos cinemas",
|
||||||
@@ -876,10 +886,10 @@
|
|||||||
"totalfilesize": "Tamanho total"
|
"totalfilesize": "Tamanho total"
|
||||||
},
|
},
|
||||||
"mailcow": {
|
"mailcow": {
|
||||||
"domains": "Domains",
|
"domains": "Domínios",
|
||||||
"mailboxes": "Caixas de e-mail",
|
"mailboxes": "Caixas de e-mail",
|
||||||
"mails": "Mensagens",
|
"mails": "Mensagens",
|
||||||
"storage": "Storage"
|
"storage": "Armazenamento"
|
||||||
},
|
},
|
||||||
"netdata": {
|
"netdata": {
|
||||||
"warnings": "Alertas",
|
"warnings": "Alertas",
|
||||||
@@ -888,12 +898,12 @@
|
|||||||
"plantit": {
|
"plantit": {
|
||||||
"events": "Eventos",
|
"events": "Eventos",
|
||||||
"plants": "Plantas",
|
"plants": "Plantas",
|
||||||
"photos": "Photos",
|
"photos": "Fotos",
|
||||||
"species": "Espécies"
|
"species": "Espécies"
|
||||||
},
|
},
|
||||||
"gitea": {
|
"gitea": {
|
||||||
"notifications": "Notificações",
|
"notifications": "Notificações",
|
||||||
"issues": "Issues",
|
"issues": "Problemas",
|
||||||
"pulls": "Solicitações de Envio",
|
"pulls": "Solicitações de Envio",
|
||||||
"repositories": "Repositórios"
|
"repositories": "Repositórios"
|
||||||
},
|
},
|
||||||
@@ -909,13 +919,13 @@
|
|||||||
"galleries": "Galerias",
|
"galleries": "Galerias",
|
||||||
"performers": "Atores",
|
"performers": "Atores",
|
||||||
"studios": "Estúdios",
|
"studios": "Estúdios",
|
||||||
"movies": "Movies",
|
"movies": "Filmes",
|
||||||
"tags": "Tags",
|
"tags": "Etiquetas",
|
||||||
"oCount": "Contagem 0"
|
"oCount": "Contagem 0"
|
||||||
},
|
},
|
||||||
"tandoor": {
|
"tandoor": {
|
||||||
"users": "Users",
|
"users": "Usuários",
|
||||||
"recipes": "Recipes",
|
"recipes": "Receitas",
|
||||||
"keywords": "Palavras-chave"
|
"keywords": "Palavras-chave"
|
||||||
},
|
},
|
||||||
"homebox": {
|
"homebox": {
|
||||||
@@ -923,17 +933,17 @@
|
|||||||
"totalWithWarranty": "Com Garantia",
|
"totalWithWarranty": "Com Garantia",
|
||||||
"locations": "Localização",
|
"locations": "Localização",
|
||||||
"labels": "Rótulos",
|
"labels": "Rótulos",
|
||||||
"users": "Users",
|
"users": "Usuários",
|
||||||
"totalValue": "Valor Total"
|
"totalValue": "Valor Total"
|
||||||
},
|
},
|
||||||
"crowdsec": {
|
"crowdsec": {
|
||||||
"alerts": "Alerts",
|
"alerts": "Alertas",
|
||||||
"bans": "Banimentos"
|
"bans": "Banimentos"
|
||||||
},
|
},
|
||||||
"wgeasy": {
|
"wgeasy": {
|
||||||
"connected": "Connected",
|
"connected": "Conectado",
|
||||||
"enabled": "Enabled",
|
"enabled": "Ativo",
|
||||||
"disabled": "Disabled",
|
"disabled": "Desativado",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"swagdashboard": {
|
"swagdashboard": {
|
||||||
@@ -944,8 +954,8 @@
|
|||||||
},
|
},
|
||||||
"myspeed": {
|
"myspeed": {
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"download": "Download",
|
"download": "Baixar",
|
||||||
"upload": "Upload"
|
"upload": "Enviar"
|
||||||
},
|
},
|
||||||
"stocks": {
|
"stocks": {
|
||||||
"stocks": "Ações",
|
"stocks": "Ações",
|
||||||
@@ -956,17 +966,17 @@
|
|||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Câmeras",
|
"cameras": "Câmeras",
|
||||||
"uptime": "Uptime",
|
"uptime": "Tempo ativo",
|
||||||
"version": "Version"
|
"version": "Versão"
|
||||||
},
|
},
|
||||||
"linkwarden": {
|
"linkwarden": {
|
||||||
"links": "Links",
|
"links": "Links",
|
||||||
"collections": "Coleções",
|
"collections": "Coleções",
|
||||||
"tags": "Tags"
|
"tags": "Etiquetas"
|
||||||
},
|
},
|
||||||
"zabbix": {
|
"zabbix": {
|
||||||
"unclassified": "Não classificado",
|
"unclassified": "Não classificado",
|
||||||
"information": "Information",
|
"information": "Informação",
|
||||||
"warning": "Aviso",
|
"warning": "Aviso",
|
||||||
"average": "Médio",
|
"average": "Médio",
|
||||||
"high": "Alto",
|
"high": "Alto",
|
||||||
@@ -987,24 +997,24 @@
|
|||||||
"tasksInProgress": "Tarefas em Andamento"
|
"tasksInProgress": "Tarefas em Andamento"
|
||||||
},
|
},
|
||||||
"headscale": {
|
"headscale": {
|
||||||
"name": "Name",
|
"name": "Nome",
|
||||||
"address": "Address",
|
"address": "Endereço",
|
||||||
"last_seen": "Last Seen",
|
"last_seen": "Visto por último",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline"
|
"offline": "Desconectado"
|
||||||
},
|
},
|
||||||
"beszel": {
|
"beszel": {
|
||||||
"name": "Name",
|
"name": "Nome",
|
||||||
"systems": "Sistemas",
|
"systems": "Sistemas",
|
||||||
"up": "Up",
|
"up": "Ativo",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"paused": "Paused",
|
"paused": "Pausado",
|
||||||
"pending": "Pending",
|
"pending": "Pendente",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"updated": "Updated",
|
"updated": "Atualizado",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "MEM",
|
"memory": "MEM.",
|
||||||
"disk": "Disco",
|
"disk": "Disco",
|
||||||
"network": "Rede"
|
"network": "Rede"
|
||||||
},
|
},
|
||||||
@@ -1012,26 +1022,26 @@
|
|||||||
"apps": "Aplicativos",
|
"apps": "Aplicativos",
|
||||||
"synced": "Sincronizado",
|
"synced": "Sincronizado",
|
||||||
"outOfSync": "Fora de sincronia",
|
"outOfSync": "Fora de sincronia",
|
||||||
"healthy": "Healthy",
|
"healthy": "Saudável",
|
||||||
"degraded": "Degradado",
|
"degraded": "Degradado",
|
||||||
"progressing": "Progredindo",
|
"progressing": "Progredindo",
|
||||||
"missing": "Missing",
|
"missing": "Faltando",
|
||||||
"suspended": "Suspenso"
|
"suspended": "Suspenso"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Loading"
|
"loading": "Carregando"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Grupos",
|
"groups": "Grupos",
|
||||||
"issues": "Issues",
|
"issues": "Problemas",
|
||||||
"merges": "Solicitações de mesclagem",
|
"merges": "Solicitações de mesclagem",
|
||||||
"projects": "Projetos"
|
"projects": "Projetos"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"load": "Load",
|
"load": "Carga",
|
||||||
"bcharge": "Battery Charge",
|
"bcharge": "Carga da Bateria",
|
||||||
"timeleft": "Time Left"
|
"timeleft": "Tempo Restante"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Marcadores",
|
"bookmarks": "Marcadores",
|
||||||
@@ -1039,23 +1049,23 @@
|
|||||||
"archived": "Arquivados",
|
"archived": "Arquivados",
|
||||||
"highlights": "Destaques",
|
"highlights": "Destaques",
|
||||||
"lists": "Listas",
|
"lists": "Listas",
|
||||||
"tags": "Tags"
|
"tags": "Etiquetas"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
"slskStatus": "Network",
|
"slskStatus": "Rede",
|
||||||
"connected": "Connected",
|
"connected": "Conectado",
|
||||||
"disconnected": "Disconnected",
|
"disconnected": "Desconectado",
|
||||||
"updateStatus": "Atualize",
|
"updateStatus": "Atualize",
|
||||||
"update_yes": "Available",
|
"update_yes": "Disponível",
|
||||||
"update_no": "Up to Date",
|
"update_no": "Atualizado",
|
||||||
"downloads": "Transferências",
|
"downloads": "Transferências",
|
||||||
"uploads": "Envios",
|
"uploads": "Envios",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Arquivos"
|
||||||
},
|
},
|
||||||
"jellystat": {
|
"jellystat": {
|
||||||
"songs": "Songs",
|
"songs": "Músicas",
|
||||||
"movies": "Movies",
|
"movies": "Filmes",
|
||||||
"episodes": "Episodes",
|
"episodes": "Episódios",
|
||||||
"other": "Outro"
|
"other": "Outro"
|
||||||
},
|
},
|
||||||
"checkmk": {
|
"checkmk": {
|
||||||
@@ -1064,55 +1074,60 @@
|
|||||||
},
|
},
|
||||||
"komodo": {
|
"komodo": {
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"running": "Running",
|
"running": "Executando",
|
||||||
"stopped": "Stopped",
|
"stopped": "Parado",
|
||||||
"down": "Down",
|
"down": "Inativo",
|
||||||
"unhealthy": "Unhealthy",
|
"unhealthy": "Não-saudável",
|
||||||
"unknown": "Unknown",
|
"unknown": "Desconhecido",
|
||||||
"servers": "Servers",
|
"servers": "Servidores",
|
||||||
"stacks": "Stacks",
|
"stacks": "Pilhas",
|
||||||
"containers": "Containers"
|
"containers": "Contêineres"
|
||||||
},
|
},
|
||||||
"filebrowser": {
|
"filebrowser": {
|
||||||
"available": "Available",
|
"available": "Disponível",
|
||||||
"used": "Used",
|
"used": "Utilizado",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"wallos": {
|
"wallos": {
|
||||||
"activeSubscriptions": "Subscriptions",
|
"activeSubscriptions": "Assinaturas",
|
||||||
"thisMonthlyCost": "This Month",
|
"thisMonthlyCost": "Este Mês",
|
||||||
"nextMonthlyCost": "Next Month",
|
"nextMonthlyCost": "Próximo Mês",
|
||||||
"previousMonthlyCost": "Prev. Month",
|
"previousMonthlyCost": "Mês Anterior",
|
||||||
"nextRenewingSubscription": "Next Payment"
|
"nextRenewingSubscription": "Próximo Pagamento"
|
||||||
},
|
},
|
||||||
"unraid": {
|
"unraid": {
|
||||||
"STARTED": "Started",
|
"STARTED": "Iniciado",
|
||||||
"STOPPED": "Stopped",
|
"STOPPED": "Parado",
|
||||||
"NEW_ARRAY": "New Array",
|
"NEW_ARRAY": "Nova Array",
|
||||||
"RECON_DISK": "Reconstructing Disk",
|
"RECON_DISK": "Reconstruindo Disco",
|
||||||
"DISABLE_DISK": "Disk Disabled",
|
"DISABLE_DISK": "Disco Desativado",
|
||||||
"SWAP_DSBL": "Swap Disable",
|
"SWAP_DSBL": "Swap Desabilitado",
|
||||||
"INVALID_EXPANSION": "Invalid Expansion",
|
"INVALID_EXPANSION": "Expansão Inválida",
|
||||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
"PARITY_NOT_BIGGEST": "Paridade Não É O Maior Disco",
|
||||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
"TOO_MANY_MISSING_DISKS": "Muitos Discos Ausentes",
|
||||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
"NEW_DISK_TOO_SMALL": "Novo Disco É Muito Pequeno",
|
||||||
"NO_DATA_DISKS": "No Data Disks",
|
"NO_DATA_DISKS": "Sem Discos de Dados",
|
||||||
"notifications": "Notifications",
|
"notifications": "Notificações",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Memória Utilizada",
|
||||||
"memoryAvailable": "Memory Available",
|
"memoryAvailable": "Memória Disponível",
|
||||||
"arrayUsed": "Array Used",
|
"arrayUsed": "Array Utilizado",
|
||||||
"arrayFree": "Array Free",
|
"arrayFree": "Array Disponível",
|
||||||
"poolUsed": "{{pool}} Used",
|
"poolUsed": "{{pool}} Utilizado",
|
||||||
"poolFree": "{{pool}} Free"
|
"poolFree": "{{pool}} Livre"
|
||||||
},
|
},
|
||||||
"backrest": {
|
"backrest": {
|
||||||
"num_plans": "Plans",
|
"num_plans": "Planos",
|
||||||
"num_success_30": "Successes",
|
"num_success_30": "Sucessos",
|
||||||
"num_failure_30": "Failures",
|
"num_failure_30": "Falhas",
|
||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Executando com sucesso",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Falhando",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Adicionados"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Músicas",
|
||||||
|
"time": "Tempo",
|
||||||
|
"artists": "Artistas"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Încărcare Baterie",
|
"battery_charge": "Încărcare Baterie",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un an",
|
"gross_percent_1y": "Un an",
|
||||||
"gross_percent_max": "Tot timpul"
|
"gross_percent_max": "Tot timpul",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasturi",
|
"podcasts": "Podcasturi",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -193,7 +193,7 @@
|
|||||||
"tv": "Сериалы"
|
"tv": "Сериалы"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rate",
|
"rate": "",
|
||||||
"queue": "Очередь",
|
"queue": "Очередь",
|
||||||
"timeleft": "Осталось"
|
"timeleft": "Осталось"
|
||||||
},
|
},
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Входящие",
|
"inbox": "Входящие",
|
||||||
"total": "Всего"
|
"total": "Всего"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Заряд батареи",
|
"battery_charge": "Заряд батареи",
|
||||||
"ups_load": "Нагрузка на UPS",
|
"ups_load": "Нагрузка на UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Сегодня",
|
"gross_percent_today": "Сегодня",
|
||||||
"gross_percent_1y": "Один год",
|
"gross_percent_1y": "Один год",
|
||||||
"gross_percent_max": "Все время"
|
"gross_percent_max": "Все время",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасты",
|
"podcasts": "Подкасты",
|
||||||
@@ -1088,7 +1098,7 @@
|
|||||||
"unraid": {
|
"unraid": {
|
||||||
"STARTED": "Started",
|
"STARTED": "Started",
|
||||||
"STOPPED": "Stopped",
|
"STOPPED": "Stopped",
|
||||||
"NEW_ARRAY": "New Array",
|
"NEW_ARRAY": "Новый массив",
|
||||||
"RECON_DISK": "Reconstructing Disk",
|
"RECON_DISK": "Reconstructing Disk",
|
||||||
"DISABLE_DISK": "Disk Disabled",
|
"DISABLE_DISK": "Disk Disabled",
|
||||||
"SWAP_DSBL": "Swap Disable",
|
"SWAP_DSBL": "Swap Disable",
|
||||||
@@ -1097,8 +1107,8 @@
|
|||||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||||
"NO_DATA_DISKS": "No Data Disks",
|
"NO_DATA_DISKS": "No Data Disks",
|
||||||
"notifications": "Notifications",
|
"notifications": "Уведомления",
|
||||||
"status": "Status",
|
"status": "Статус",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Memory Used",
|
||||||
"memoryAvailable": "Memory Available",
|
"memoryAvailable": "Memory Available",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -362,8 +362,8 @@
|
|||||||
},
|
},
|
||||||
"trilium": {
|
"trilium": {
|
||||||
"version": "Verzia",
|
"version": "Verzia",
|
||||||
"notesCount": "Notes",
|
"notesCount": "Poznámky",
|
||||||
"dbSize": "Database Size",
|
"dbSize": "Veľkosť databázy",
|
||||||
"unknown": "Neznáme"
|
"unknown": "Neznáme"
|
||||||
},
|
},
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Schránka správ",
|
"inbox": "Schránka správ",
|
||||||
"total": "Celkom"
|
"total": "Celkom"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Nabitie batérie",
|
"battery_charge": "Nabitie batérie",
|
||||||
"ups_load": "Záťaž UPS",
|
"ups_load": "Záťaž UPS",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Dnes",
|
"gross_percent_today": "Dnes",
|
||||||
"gross_percent_1y": "Jeden rok",
|
"gross_percent_1y": "Jeden rok",
|
||||||
"gross_percent_max": "Za celý čas"
|
"gross_percent_max": "Za celý čas",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
@@ -786,7 +796,7 @@
|
|||||||
"downloadCount": "Poradie",
|
"downloadCount": "Poradie",
|
||||||
"downloadBytesRemaining": "Zostávajúce",
|
"downloadBytesRemaining": "Zostávajúce",
|
||||||
"downloadTotalBytes": "Veľkosť",
|
"downloadTotalBytes": "Veľkosť",
|
||||||
"downloadSpeed": "Speed"
|
"downloadSpeed": "Rýchlosť"
|
||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "Series",
|
"seriesCount": "Series",
|
||||||
@@ -952,10 +962,10 @@
|
|||||||
"loading": "Načítava sa",
|
"loading": "Načítava sa",
|
||||||
"open": "Open - US Market",
|
"open": "Open - US Market",
|
||||||
"closed": "Closed - US Market",
|
"closed": "Closed - US Market",
|
||||||
"invalidConfiguration": "Invalid Configuration"
|
"invalidConfiguration": "Neplatná konfigurácia"
|
||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Cameras",
|
"cameras": "Kamery",
|
||||||
"uptime": "Dostupnosť",
|
"uptime": "Dostupnosť",
|
||||||
"version": "Verzia"
|
"version": "Verzia"
|
||||||
},
|
},
|
||||||
@@ -966,7 +976,7 @@
|
|||||||
},
|
},
|
||||||
"zabbix": {
|
"zabbix": {
|
||||||
"unclassified": "Not classified",
|
"unclassified": "Not classified",
|
||||||
"information": "Information",
|
"information": "Informácie",
|
||||||
"warning": "Warning",
|
"warning": "Warning",
|
||||||
"average": "Average",
|
"average": "Average",
|
||||||
"high": "High",
|
"high": "High",
|
||||||
@@ -1022,10 +1032,10 @@
|
|||||||
"loading": "Načítava sa"
|
"loading": "Načítava sa"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Groups",
|
"groups": "Skupiny",
|
||||||
"issues": "Issues",
|
"issues": "Problémy",
|
||||||
"merges": "Merge Requests",
|
"merges": "Merge Requests",
|
||||||
"projects": "Projects"
|
"projects": "Projekty"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
@@ -1035,7 +1045,7 @@
|
|||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Bookmarks",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Favorites",
|
"favorites": "Obľúbené",
|
||||||
"archived": "Archived",
|
"archived": "Archived",
|
||||||
"highlights": "Highlights",
|
"highlights": "Highlights",
|
||||||
"lists": "Zoznamy",
|
"lists": "Zoznamy",
|
||||||
@@ -1065,13 +1075,13 @@
|
|||||||
"komodo": {
|
"komodo": {
|
||||||
"total": "Celkom",
|
"total": "Celkom",
|
||||||
"running": "Beží",
|
"running": "Beží",
|
||||||
"stopped": "Stopped",
|
"stopped": "Zastavené",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"unhealthy": "Nezdravý",
|
"unhealthy": "Nezdravý",
|
||||||
"unknown": "Neznáme",
|
"unknown": "Neznáme",
|
||||||
"servers": "Servers",
|
"servers": "Servery",
|
||||||
"stacks": "Stacks",
|
"stacks": "Stacks",
|
||||||
"containers": "Containers"
|
"containers": "Kontajnery"
|
||||||
},
|
},
|
||||||
"filebrowser": {
|
"filebrowser": {
|
||||||
"available": "Dostupné",
|
"available": "Dostupné",
|
||||||
@@ -1080,8 +1090,8 @@
|
|||||||
},
|
},
|
||||||
"wallos": {
|
"wallos": {
|
||||||
"activeSubscriptions": "Subscriptions",
|
"activeSubscriptions": "Subscriptions",
|
||||||
"thisMonthlyCost": "This Month",
|
"thisMonthlyCost": "Tento mesiac",
|
||||||
"nextMonthlyCost": "Next Month",
|
"nextMonthlyCost": "Ďalší mesiac",
|
||||||
"previousMonthlyCost": "Prev. Month",
|
"previousMonthlyCost": "Prev. Month",
|
||||||
"nextRenewingSubscription": "Next Payment"
|
"nextRenewingSubscription": "Next Payment"
|
||||||
},
|
},
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Prejeto",
|
"inbox": "Prejeto",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Napolnjenost baterije",
|
"battery_charge": "Napolnjenost baterije",
|
||||||
"ups_load": "UPS obremenitev",
|
"ups_load": "UPS obremenitev",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Eno leto",
|
"gross_percent_1y": "Eno leto",
|
||||||
"gross_percent_max": "Celoten čas"
|
"gross_percent_max": "Celoten čas",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasti",
|
"podcasts": "Podcasti",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Примљено",
|
"inbox": "Примљено",
|
||||||
"total": "Укупно"
|
"total": "Укупно"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Напуњеност батерије",
|
"battery_charge": "Напуњеност батерије",
|
||||||
"ups_load": "Оптерећење УПС-а",
|
"ups_load": "Оптерећење УПС-а",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Данас",
|
"gross_percent_today": "Данас",
|
||||||
"gross_percent_1y": "Једна година",
|
"gross_percent_1y": "Једна година",
|
||||||
"gross_percent_max": "Све време"
|
"gross_percent_max": "Све време",
|
||||||
|
"net_worth": "Нето вредност"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Успевајући",
|
"num_success_latest": "Успевајући",
|
||||||
"num_failure_latest": "Неуспешно",
|
"num_failure_latest": "Неуспешно",
|
||||||
"bytes_added_30": "Додати бајтови"
|
"bytes_added_30": "Додати бајтови"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Песме",
|
||||||
|
"time": "Време",
|
||||||
|
"artists": "Извођачи"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Gelen Kutusu",
|
"inbox": "Gelen Kutusu",
|
||||||
"total": "Toplam"
|
"total": "Toplam"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Pil Yüzdesi",
|
"battery_charge": "Pil Yüzdesi",
|
||||||
"ups_load": "UPS Yükü",
|
"ups_load": "UPS Yükü",
|
||||||
@@ -735,7 +744,7 @@
|
|||||||
"size": "Boyut",
|
"size": "Boyut",
|
||||||
"lastrun": "Son Çalışma",
|
"lastrun": "Son Çalışma",
|
||||||
"nextrun": "Sonraki Çalışma",
|
"nextrun": "Sonraki Çalışma",
|
||||||
"failed": "Failed"
|
"failed": "Başarısız"
|
||||||
},
|
},
|
||||||
"unmanic": {
|
"unmanic": {
|
||||||
"active_workers": "Etkin kullanıcılar",
|
"active_workers": "Etkin kullanıcılar",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Bugün",
|
"gross_percent_today": "Bugün",
|
||||||
"gross_percent_1y": "Bir yıl",
|
"gross_percent_1y": "Bir yıl",
|
||||||
"gross_percent_max": "Tüm zaman"
|
"gross_percent_max": "Tüm zaman",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
@@ -798,7 +808,7 @@
|
|||||||
"buildId": "Yapı Kimliği",
|
"buildId": "Yapı Kimliği",
|
||||||
"succeeded": "Başarılı",
|
"succeeded": "Başarılı",
|
||||||
"notStarted": "Henüz Başlamadı",
|
"notStarted": "Henüz Başlamadı",
|
||||||
"failed": "Failed",
|
"failed": "Başarısız",
|
||||||
"canceled": "İptal edildi",
|
"canceled": "İptal edildi",
|
||||||
"inProgress": "Sürüyor",
|
"inProgress": "Sürüyor",
|
||||||
"totalPrs": "Toplam Çekme İstekleri",
|
"totalPrs": "Toplam Çekme İstekleri",
|
||||||
@@ -835,7 +845,7 @@
|
|||||||
"running": "Çalışıyor",
|
"running": "Çalışıyor",
|
||||||
"stopped": "Durdu",
|
"stopped": "Durdu",
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
"failed": "Failed"
|
"failed": "Başarısız"
|
||||||
},
|
},
|
||||||
"openwrt": {
|
"openwrt": {
|
||||||
"uptime": "Çalışma süresi",
|
"uptime": "Çalışma süresi",
|
||||||
@@ -876,7 +886,7 @@
|
|||||||
"totalfilesize": "Toplam Kapasite"
|
"totalfilesize": "Toplam Kapasite"
|
||||||
},
|
},
|
||||||
"mailcow": {
|
"mailcow": {
|
||||||
"domains": "Domains",
|
"domains": "Alan Adları",
|
||||||
"mailboxes": "Posta kutuları",
|
"mailboxes": "Posta kutuları",
|
||||||
"mails": "Postalar",
|
"mails": "Postalar",
|
||||||
"storage": "Depolama"
|
"storage": "Depolama"
|
||||||
@@ -988,7 +998,7 @@
|
|||||||
},
|
},
|
||||||
"headscale": {
|
"headscale": {
|
||||||
"name": "Ad",
|
"name": "Ad",
|
||||||
"address": "Address",
|
"address": "Adres",
|
||||||
"last_seen": "Last Seen",
|
"last_seen": "Last Seen",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"online": "Çevrimiçi",
|
"online": "Çevrimiçi",
|
||||||
@@ -1002,21 +1012,21 @@
|
|||||||
"paused": "Durduruldu",
|
"paused": "Durduruldu",
|
||||||
"pending": "Pending",
|
"pending": "Pending",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"updated": "Updated",
|
"updated": "Güncellendi",
|
||||||
"cpu": "İşlemci",
|
"cpu": "İşlemci",
|
||||||
"memory": "Bellek",
|
"memory": "Bellek",
|
||||||
"disk": "Disk",
|
"disk": "Disk",
|
||||||
"network": "NET"
|
"network": "NET"
|
||||||
},
|
},
|
||||||
"argocd": {
|
"argocd": {
|
||||||
"apps": "Apps",
|
"apps": "Uygulamalar",
|
||||||
"synced": "Synced",
|
"synced": "Synced",
|
||||||
"outOfSync": "Out Of Sync",
|
"outOfSync": "Out Of Sync",
|
||||||
"healthy": "Sağlıklı",
|
"healthy": "Sağlıklı",
|
||||||
"degraded": "Degraded",
|
"degraded": "Degraded",
|
||||||
"progressing": "Progressing",
|
"progressing": "Progressing",
|
||||||
"missing": "Eksik",
|
"missing": "Eksik",
|
||||||
"suspended": "Suspended"
|
"suspended": "Askıya Alındı"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Yükleniyor"
|
"loading": "Yükleniyor"
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,14 +63,14 @@
|
|||||||
"wlan_users": "WLAN користувачі",
|
"wlan_users": "WLAN користувачі",
|
||||||
"up": "UP",
|
"up": "UP",
|
||||||
"down": "Завантаження",
|
"down": "Завантаження",
|
||||||
"wait": "Please wait",
|
"wait": "Будь ласка, зачекайте",
|
||||||
"empty_data": "Статус підсистеми невідомий"
|
"empty_data": "Статус підсистеми невідомий"
|
||||||
},
|
},
|
||||||
"docker": {
|
"docker": {
|
||||||
"rx": "RX",
|
"rx": "RX",
|
||||||
"tx": "TX",
|
"tx": "TX",
|
||||||
"mem": "MEM",
|
"mem": "Пам'ять",
|
||||||
"cpu": "CPU",
|
"cpu": "Процесор",
|
||||||
"running": "Запущено",
|
"running": "Запущено",
|
||||||
"offline": "Офлайн",
|
"offline": "Офлайн",
|
||||||
"error": "Помилка",
|
"error": "Помилка",
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"partial": "Частковий"
|
"partial": "Частковий"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Помилка",
|
||||||
"ping": "Пінг",
|
"ping": "Пінг",
|
||||||
"down": "Офлайн",
|
"down": "Офлайн",
|
||||||
"up": "Онлайн",
|
"up": "Онлайн",
|
||||||
@@ -91,11 +91,11 @@
|
|||||||
},
|
},
|
||||||
"siteMonitor": {
|
"siteMonitor": {
|
||||||
"http_status": "HTTP статус",
|
"http_status": "HTTP статус",
|
||||||
"error": "Error",
|
"error": "Помилка",
|
||||||
"response": "Відповідь",
|
"response": "Відповідь",
|
||||||
"down": "Down",
|
"down": "Офлайн",
|
||||||
"up": "Up",
|
"up": "Онлайн",
|
||||||
"not_available": "Not Available"
|
"not_available": "Не доступний"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Відтворення",
|
"playing": "Відтворення",
|
||||||
@@ -108,10 +108,10 @@
|
|||||||
"songs": "Пісні"
|
"songs": "Пісні"
|
||||||
},
|
},
|
||||||
"esphome": {
|
"esphome": {
|
||||||
"offline": "Offline",
|
"offline": "Офлайн",
|
||||||
"offline_alt": "Offline",
|
"offline_alt": "Офлайн",
|
||||||
"online": "Онлайн",
|
"online": "Онлайн",
|
||||||
"total": "Total",
|
"total": "Усього",
|
||||||
"unknown": "Невідомо"
|
"unknown": "Невідомо"
|
||||||
},
|
},
|
||||||
"evcc": {
|
"evcc": {
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
"unread": "Не прочитано"
|
"unread": "Не прочитано"
|
||||||
},
|
},
|
||||||
"fritzbox": {
|
"fritzbox": {
|
||||||
"connectionStatus": "Status",
|
"connectionStatus": "Стан",
|
||||||
"connectionStatusUnconfigured": "Не налаштовано",
|
"connectionStatusUnconfigured": "Не налаштовано",
|
||||||
"connectionStatusConnecting": "Підключення",
|
"connectionStatusConnecting": "Підключення",
|
||||||
"connectionStatusAuthenticating": "Автентифікація",
|
"connectionStatusAuthenticating": "Автентифікація",
|
||||||
@@ -141,11 +141,11 @@
|
|||||||
"connectionStatusDisconnecting": "Відключення",
|
"connectionStatusDisconnecting": "Відключення",
|
||||||
"connectionStatusDisconnected": "Відключено",
|
"connectionStatusDisconnected": "Відключено",
|
||||||
"connectionStatusConnected": "З'єднано",
|
"connectionStatusConnected": "З'єднано",
|
||||||
"uptime": "Uptime",
|
"uptime": "Час роботи",
|
||||||
"maxDown": "Макс. завантаження",
|
"maxDown": "Макс. завантаження",
|
||||||
"maxUp": "Макс. віддача",
|
"maxUp": "Макс. віддача",
|
||||||
"down": "Down",
|
"down": "Офлайн",
|
||||||
"up": "Up",
|
"up": "Онлайн",
|
||||||
"received": "Отримано",
|
"received": "Отримано",
|
||||||
"sent": "Надіслано",
|
"sent": "Надіслано",
|
||||||
"externalIPAddress": "Зовнішній IP",
|
"externalIPAddress": "Зовнішній IP",
|
||||||
@@ -168,10 +168,10 @@
|
|||||||
"passes": "Пропуски"
|
"passes": "Пропуски"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "Playing",
|
"playing": "Грає",
|
||||||
"transcoding": "Transcoding",
|
"transcoding": "Транскодування",
|
||||||
"bitrate": "Bitrate",
|
"bitrate": "Бітрейт",
|
||||||
"no_active": "No Active Streams",
|
"no_active": "Немає активних потоків",
|
||||||
"plex_connection_error": "Перевірте з'єднання Plex"
|
"plex_connection_error": "Перевірте з'єднання Plex"
|
||||||
},
|
},
|
||||||
"omada": {
|
"omada": {
|
||||||
@@ -189,30 +189,30 @@
|
|||||||
"plex": {
|
"plex": {
|
||||||
"streams": "Активні потоки",
|
"streams": "Активні потоки",
|
||||||
"albums": "Альбоми",
|
"albums": "Альбоми",
|
||||||
"movies": "Movies",
|
"movies": "Фільми",
|
||||||
"tv": "TБ шоу"
|
"tv": "TБ шоу"
|
||||||
},
|
},
|
||||||
"sabnzbd": {
|
"sabnzbd": {
|
||||||
"rate": "Rate",
|
"rate": "Швидкість",
|
||||||
"queue": "Черга",
|
"queue": "Черга",
|
||||||
"timeleft": "Залишилось"
|
"timeleft": "Залишилось"
|
||||||
},
|
},
|
||||||
"rutorrent": {
|
"rutorrent": {
|
||||||
"active": "Активний",
|
"active": "Активний",
|
||||||
"upload": "Upload",
|
"upload": "Вивантаж.",
|
||||||
"download": "Download"
|
"download": "Завантажено"
|
||||||
},
|
},
|
||||||
"transmission": {
|
"transmission": {
|
||||||
"download": "Download",
|
"download": "Завантажено",
|
||||||
"upload": "Upload",
|
"upload": "Вивантаж.",
|
||||||
"leech": "Leech",
|
"leech": "Ліч",
|
||||||
"seed": "Seed"
|
"seed": "Сід"
|
||||||
},
|
},
|
||||||
"qbittorrent": {
|
"qbittorrent": {
|
||||||
"download": "Download",
|
"download": "Завантажити",
|
||||||
"upload": "Upload",
|
"upload": "Вивантаж.",
|
||||||
"leech": "Leech",
|
"leech": "Ліч",
|
||||||
"seed": "Seed"
|
"seed": "Сід"
|
||||||
},
|
},
|
||||||
"qnap": {
|
"qnap": {
|
||||||
"cpuUsage": "Використання CPU",
|
"cpuUsage": "Використання CPU",
|
||||||
@@ -225,8 +225,8 @@
|
|||||||
"deluge": {
|
"deluge": {
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"leech": "Leech",
|
"leech": "Ліч",
|
||||||
"seed": "Seed"
|
"seed": "Сід"
|
||||||
},
|
},
|
||||||
"develancacheui": {
|
"develancacheui": {
|
||||||
"cachehitbytes": "Кеш-хіт байт",
|
"cachehitbytes": "Кеш-хіт байт",
|
||||||
@@ -234,33 +234,33 @@
|
|||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"upload": "Upload",
|
"upload": "Вивантаж.",
|
||||||
"leech": "Leech",
|
"leech": "Ліч",
|
||||||
"seed": "Seed"
|
"seed": "Сід"
|
||||||
},
|
},
|
||||||
"sonarr": {
|
"sonarr": {
|
||||||
"wanted": "Розшукується",
|
"wanted": "Розшукується",
|
||||||
"queued": "У черзі",
|
"queued": "У черзі",
|
||||||
"series": "Series",
|
"series": "Серіали",
|
||||||
"queue": "Queue",
|
"queue": "Черга",
|
||||||
"unknown": "Unknown"
|
"unknown": "Невідомо"
|
||||||
},
|
},
|
||||||
"radarr": {
|
"radarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "У бажаних",
|
||||||
"missing": "Відсутній",
|
"missing": "Відсутній",
|
||||||
"queued": "Queued",
|
"queued": "У черзі",
|
||||||
"movies": "Movies",
|
"movies": "Фільми",
|
||||||
"queue": "Queue",
|
"queue": "Черга",
|
||||||
"unknown": "Unknown"
|
"unknown": "Невідомо"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "У бажаних",
|
||||||
"queued": "Queued",
|
"queued": "У черзі",
|
||||||
"artists": "Виконавці"
|
"artists": "Виконавці"
|
||||||
},
|
},
|
||||||
"readarr": {
|
"readarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "У бажаних",
|
||||||
"queued": "Queued",
|
"queued": "У черзі",
|
||||||
"books": "Книжки"
|
"books": "Книжки"
|
||||||
},
|
},
|
||||||
"bazarr": {
|
"bazarr": {
|
||||||
@@ -273,20 +273,20 @@
|
|||||||
"available": "Доступно"
|
"available": "Доступно"
|
||||||
},
|
},
|
||||||
"jellyseerr": {
|
"jellyseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Очікує",
|
||||||
"approved": "Approved",
|
"approved": "Схвалено",
|
||||||
"available": "Available",
|
"available": "Доступно",
|
||||||
"issues": "Open Issues"
|
"issues": "Проблеми до усунення"
|
||||||
},
|
},
|
||||||
"overseerr": {
|
"overseerr": {
|
||||||
"pending": "Pending",
|
"pending": "Очікує",
|
||||||
"processing": "Обробка",
|
"processing": "Обробка",
|
||||||
"approved": "Approved",
|
"approved": "Схвалено",
|
||||||
"available": "Available"
|
"available": "Доступно"
|
||||||
},
|
},
|
||||||
"netalertx": {
|
"netalertx": {
|
||||||
"total": "Total",
|
"total": "Усього",
|
||||||
"connected": "Connected",
|
"connected": "З'єднано",
|
||||||
"new_devices": "Нові пристрої",
|
"new_devices": "Нові пристрої",
|
||||||
"down_alerts": "Сповіщення про падіння"
|
"down_alerts": "Сповіщення про падіння"
|
||||||
},
|
},
|
||||||
@@ -297,13 +297,13 @@
|
|||||||
"gravity": "Доменів в списку"
|
"gravity": "Доменів в списку"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Queries",
|
"queries": "Запити",
|
||||||
"blocked": "Blocked",
|
"blocked": "Заблоковано",
|
||||||
"filtered": "Відфільтровано",
|
"filtered": "Відфільтровано",
|
||||||
"latency": "Затримка"
|
"latency": "Затримка"
|
||||||
},
|
},
|
||||||
"speedtest": {
|
"speedtest": {
|
||||||
"upload": "Upload",
|
"upload": "Вивантаж.",
|
||||||
"download": "Download",
|
"download": "Download",
|
||||||
"ping": "Ping"
|
"ping": "Ping"
|
||||||
},
|
},
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Вхідні",
|
"inbox": "Вхідні",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Заряд батареї",
|
"battery_charge": "Заряд батареї",
|
||||||
"ups_load": "UPS завантаження",
|
"ups_load": "UPS завантаження",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Один рік",
|
"gross_percent_1y": "Один рік",
|
||||||
"gross_percent_max": "Весь час"
|
"gross_percent_max": "Весь час",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,20 +14,20 @@
|
|||||||
"date": "{{value, date}}",
|
"date": "{{value, date}}",
|
||||||
"relativeDate": "{{value, relativeDate}}",
|
"relativeDate": "{{value, relativeDate}}",
|
||||||
"duration": "{{value, duration}}",
|
"duration": "{{value, duration}}",
|
||||||
"months": "mo",
|
"months": "tháng",
|
||||||
"days": "d",
|
"days": "ngày",
|
||||||
"hours": "h",
|
"hours": "giờ",
|
||||||
"minutes": "m",
|
"minutes": "phút",
|
||||||
"seconds": "s"
|
"seconds": "giây"
|
||||||
},
|
},
|
||||||
"widget": {
|
"widget": {
|
||||||
"missing_type": "Thiếu loại Widget: {{type}}",
|
"missing_type": "Thiếu loại Widget: {{type}}",
|
||||||
"api_error": "Lỗi API",
|
"api_error": "Lỗi API",
|
||||||
"information": "Information",
|
"information": "Thông tin",
|
||||||
"status": "Trạng thái",
|
"status": "Trạng thái",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"raw_error": "Raw Error",
|
"raw_error": "Lỗi thô",
|
||||||
"response_data": "Response Data"
|
"response_data": "Dữ liệu phản hồi"
|
||||||
},
|
},
|
||||||
"weather": {
|
"weather": {
|
||||||
"current": "Vị trí hiện tại",
|
"current": "Vị trí hiện tại",
|
||||||
@@ -44,106 +44,106 @@
|
|||||||
"total": "Tổng",
|
"total": "Tổng",
|
||||||
"free": "Dư",
|
"free": "Dư",
|
||||||
"used": "Đã dùng",
|
"used": "Đã dùng",
|
||||||
"load": "Load",
|
"load": "\n",
|
||||||
"temp": "TEMP",
|
"temp": "TEMP",
|
||||||
"max": "Max",
|
"max": "Tối đa",
|
||||||
"uptime": "UP"
|
"uptime": "UP"
|
||||||
},
|
},
|
||||||
"unifi": {
|
"unifi": {
|
||||||
"users": "Users",
|
"users": "Người dùng",
|
||||||
"uptime": "Uptime",
|
"uptime": "Thời gian hoạt động",
|
||||||
"days": "Days",
|
"days": "Ngày",
|
||||||
"wan": "WAN",
|
"wan": "WAN",
|
||||||
"lan": "LAN",
|
"lan": "LAN",
|
||||||
"wlan": "WLAN",
|
"wlan": "WLAN",
|
||||||
"devices": "Devices",
|
"devices": "Thiết bị",
|
||||||
"lan_devices": "LAN Devices",
|
"lan_devices": "Thiết bị trong mạng LAN",
|
||||||
"wlan_devices": "WLAN Devices",
|
"wlan_devices": "Thiết bị trong mạng WLAN",
|
||||||
"lan_users": "LAN Users",
|
"lan_users": "Người dùng mạng LAN",
|
||||||
"wlan_users": "WLAN Users",
|
"wlan_users": "Người dùng mạng WLAN",
|
||||||
"up": "UP",
|
"up": "UP",
|
||||||
"down": "DOWN",
|
"down": "DOWN",
|
||||||
"wait": "Please wait",
|
"wait": "Vui lòng chờ",
|
||||||
"empty_data": "Subsystem status unknown"
|
"empty_data": "Trạng thái hệ thống phụ không xác định"
|
||||||
},
|
},
|
||||||
"docker": {
|
"docker": {
|
||||||
"rx": "RX",
|
"rx": "RX",
|
||||||
"tx": "TX",
|
"tx": "TX",
|
||||||
"mem": "MEM",
|
"mem": "Bộ nhớ",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"running": "Running",
|
"running": "Đang hoạt động",
|
||||||
"offline": "Ngoại tuyến",
|
"offline": "Ngoại tuyến",
|
||||||
"error": "Error",
|
"error": "Lỗi",
|
||||||
"unknown": "Unknown",
|
"unknown": "Không xác định",
|
||||||
"healthy": "Healthy",
|
"healthy": "Ổn định",
|
||||||
"starting": "Starting",
|
"starting": "Đang bắt đầu",
|
||||||
"unhealthy": "Unhealthy",
|
"unhealthy": "Bất thường",
|
||||||
"not_found": "Not Found",
|
"not_found": "Không tìm thấy",
|
||||||
"exited": "Exited",
|
"exited": "Exited",
|
||||||
"partial": "Partial"
|
"partial": "Partial"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Lỗi",
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"up": "Up",
|
"up": "Up",
|
||||||
"not_available": "Không khả dụng"
|
"not_available": "Không khả dụng"
|
||||||
},
|
},
|
||||||
"siteMonitor": {
|
"siteMonitor": {
|
||||||
"http_status": "HTTP status",
|
"http_status": "Trạng thái HTTP",
|
||||||
"error": "Error",
|
"error": "Lỗi",
|
||||||
"response": "Response",
|
"response": "Phản hồi",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"up": "Up",
|
"up": "Up",
|
||||||
"not_available": "Not Available"
|
"not_available": "Không có sẵn"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Đang chơi",
|
"playing": "Đang chơi",
|
||||||
"transcoding": "Chuyển định dạng",
|
"transcoding": "Chuyển định dạng",
|
||||||
"bitrate": "Bitrate",
|
"bitrate": "Bitrate",
|
||||||
"no_active": "No Active Streams",
|
"no_active": "No Active Streams",
|
||||||
"movies": "Movies",
|
"movies": "Phim ảnh",
|
||||||
"series": "Series",
|
"series": "Series",
|
||||||
"episodes": "Episodes",
|
"episodes": "Episodes",
|
||||||
"songs": "Songs"
|
"songs": "Bài hát"
|
||||||
},
|
},
|
||||||
"esphome": {
|
"esphome": {
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"offline_alt": "Offline",
|
"offline_alt": "Offline",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"unknown": "Unknown"
|
"unknown": "Không xác định"
|
||||||
},
|
},
|
||||||
"evcc": {
|
"evcc": {
|
||||||
"pv_power": "Production",
|
"pv_power": "Production",
|
||||||
"battery_soc": "Battery",
|
"battery_soc": "Pin",
|
||||||
"grid_power": "Grid",
|
"grid_power": "Lưới",
|
||||||
"home_power": "Consumption",
|
"home_power": "Consumption",
|
||||||
"charge_power": "Charger",
|
"charge_power": "Bộ sạc",
|
||||||
"kilowatt": "kW"
|
"kilowatt": "kW"
|
||||||
},
|
},
|
||||||
"flood": {
|
"flood": {
|
||||||
"download": "Download",
|
"download": "Tải xuống",
|
||||||
"upload": "Upload",
|
"upload": "Tải lên",
|
||||||
"leech": "Leech",
|
"leech": "",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
"freshrss": {
|
"freshrss": {
|
||||||
"subscriptions": "Subscriptions",
|
"subscriptions": "Đăng ký",
|
||||||
"unread": "Unread"
|
"unread": "Chưa đọc"
|
||||||
},
|
},
|
||||||
"fritzbox": {
|
"fritzbox": {
|
||||||
"connectionStatus": "Status",
|
"connectionStatus": "Trạng thái",
|
||||||
"connectionStatusUnconfigured": "Unconfigured",
|
"connectionStatusUnconfigured": "Chưa được cấu hình",
|
||||||
"connectionStatusConnecting": "Connecting",
|
"connectionStatusConnecting": "Đang kết nối",
|
||||||
"connectionStatusAuthenticating": "Authenticating",
|
"connectionStatusAuthenticating": "Đang uỷ quyền",
|
||||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
"connectionStatusPendingDisconnect": "Đang chờ ngắt kết nối",
|
||||||
"connectionStatusDisconnecting": "Disconnecting",
|
"connectionStatusDisconnecting": "Đang ngắt kết nối",
|
||||||
"connectionStatusDisconnected": "Disconnected",
|
"connectionStatusDisconnected": "Đã ngắt kết nối",
|
||||||
"connectionStatusConnected": "Connected",
|
"connectionStatusConnected": "Đã kết nối",
|
||||||
"uptime": "Uptime",
|
"uptime": "Thời gian hoạt động",
|
||||||
"maxDown": "Max. Down",
|
"maxDown": "Tải xuống tối đa",
|
||||||
"maxUp": "Max. Up",
|
"maxUp": "Tải lên tối đa",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"up": "Up",
|
"up": "Up",
|
||||||
"received": "Received",
|
"received": "Received",
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "Inbox",
|
"inbox": "Inbox",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "Battery Charge",
|
"battery_charge": "Battery Charge",
|
||||||
"ups_load": "UPS Load",
|
"ups_load": "UPS Load",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time"
|
"gross_percent_max": "All time",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -999,64 +1009,64 @@
|
|||||||
"systems": "Systems",
|
"systems": "Systems",
|
||||||
"up": "Up",
|
"up": "Up",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"paused": "Paused",
|
"paused": "Đã tạm dừng",
|
||||||
"pending": "Pending",
|
"pending": "Đang xử lý",
|
||||||
"status": "Status",
|
"status": "Trạng thái",
|
||||||
"updated": "Updated",
|
"updated": "Đã cập nhật",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memory": "MEM",
|
"memory": "MEM",
|
||||||
"disk": "Disk",
|
"disk": "Ổ đĩa",
|
||||||
"network": "NET"
|
"network": "NET"
|
||||||
},
|
},
|
||||||
"argocd": {
|
"argocd": {
|
||||||
"apps": "Apps",
|
"apps": "Ứng dụng",
|
||||||
"synced": "Synced",
|
"synced": "Synced",
|
||||||
"outOfSync": "Out Of Sync",
|
"outOfSync": "Out Of Sync",
|
||||||
"healthy": "Healthy",
|
"healthy": "Ổn định",
|
||||||
"degraded": "Degraded",
|
"degraded": "Degraded",
|
||||||
"progressing": "Progressing",
|
"progressing": "Progressing",
|
||||||
"missing": "Missing",
|
"missing": "Bị thiếu",
|
||||||
"suspended": "Suspended"
|
"suspended": "Suspended"
|
||||||
},
|
},
|
||||||
"spoolman": {
|
"spoolman": {
|
||||||
"loading": "Loading"
|
"loading": "Đang tải"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Groups",
|
"groups": "Nhóm",
|
||||||
"issues": "Issues",
|
"issues": "Vấn đề",
|
||||||
"merges": "Merge Requests",
|
"merges": "Yêu cầu Hợp nhất",
|
||||||
"projects": "Projects"
|
"projects": "Dự án"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Status",
|
"status": "Trạng thái",
|
||||||
"load": "Load",
|
"load": "Đang tải\n",
|
||||||
"bcharge": "Battery Charge",
|
"bcharge": "Sạc pin",
|
||||||
"timeleft": "Time Left"
|
"timeleft": "Thời gian còn lại"
|
||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Bookmarks",
|
"bookmarks": "Dấu trang",
|
||||||
"favorites": "Favorites",
|
"favorites": "Mục yêu thích",
|
||||||
"archived": "Archived",
|
"archived": "Đã lưu trữ",
|
||||||
"highlights": "Highlights",
|
"highlights": "Tâm điểm",
|
||||||
"lists": "Lists",
|
"lists": "Danh sách",
|
||||||
"tags": "Tags"
|
"tags": "Thẻ"
|
||||||
},
|
},
|
||||||
"slskd": {
|
"slskd": {
|
||||||
"slskStatus": "Network",
|
"slskStatus": "Mạng",
|
||||||
"connected": "Connected",
|
"connected": "Đã kết nối",
|
||||||
"disconnected": "Disconnected",
|
"disconnected": "Mất kết nối",
|
||||||
"updateStatus": "Update",
|
"updateStatus": "Cập nhật",
|
||||||
"update_yes": "Available",
|
"update_yes": "Khả dụng",
|
||||||
"update_no": "Up to Date",
|
"update_no": "Đã cập nhật",
|
||||||
"downloads": "Downloads",
|
"downloads": "Tải xuống",
|
||||||
"uploads": "Uploads",
|
"uploads": "Tải lên",
|
||||||
"sharedFiles": "Files"
|
"sharedFiles": "Tập tin"
|
||||||
},
|
},
|
||||||
"jellystat": {
|
"jellystat": {
|
||||||
"songs": "Songs",
|
"songs": "Bài hát",
|
||||||
"movies": "Movies",
|
"movies": "Phim ảnh",
|
||||||
"episodes": "Episodes",
|
"episodes": "Tập",
|
||||||
"other": "Other"
|
"other": "Khác"
|
||||||
},
|
},
|
||||||
"checkmk": {
|
"checkmk": {
|
||||||
"serviceErrors": "Service issues",
|
"serviceErrors": "Service issues",
|
||||||
@@ -1067,8 +1077,8 @@
|
|||||||
"running": "Running",
|
"running": "Running",
|
||||||
"stopped": "Stopped",
|
"stopped": "Stopped",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"unhealthy": "Unhealthy",
|
"unhealthy": "Không ổn định",
|
||||||
"unknown": "Unknown",
|
"unknown": "Không xác định",
|
||||||
"servers": "Servers",
|
"servers": "Servers",
|
||||||
"stacks": "Stacks",
|
"stacks": "Stacks",
|
||||||
"containers": "Containers"
|
"containers": "Containers"
|
||||||
@@ -1076,18 +1086,18 @@
|
|||||||
"filebrowser": {
|
"filebrowser": {
|
||||||
"available": "Available",
|
"available": "Available",
|
||||||
"used": "Used",
|
"used": "Used",
|
||||||
"total": "Total"
|
"total": "Tổng"
|
||||||
},
|
},
|
||||||
"wallos": {
|
"wallos": {
|
||||||
"activeSubscriptions": "Subscriptions",
|
"activeSubscriptions": "Đăng ký",
|
||||||
"thisMonthlyCost": "This Month",
|
"thisMonthlyCost": "Tháng này",
|
||||||
"nextMonthlyCost": "Next Month",
|
"nextMonthlyCost": "Tháng sau",
|
||||||
"previousMonthlyCost": "Prev. Month",
|
"previousMonthlyCost": "Tháng trước",
|
||||||
"nextRenewingSubscription": "Next Payment"
|
"nextRenewingSubscription": "Lần thanh toán kế tiếp"
|
||||||
},
|
},
|
||||||
"unraid": {
|
"unraid": {
|
||||||
"STARTED": "Started",
|
"STARTED": "Đã bắt đầu",
|
||||||
"STOPPED": "Stopped",
|
"STOPPED": "Đã dừng",
|
||||||
"NEW_ARRAY": "New Array",
|
"NEW_ARRAY": "New Array",
|
||||||
"RECON_DISK": "Reconstructing Disk",
|
"RECON_DISK": "Reconstructing Disk",
|
||||||
"DISABLE_DISK": "Disk Disabled",
|
"DISABLE_DISK": "Disk Disabled",
|
||||||
@@ -1096,9 +1106,9 @@
|
|||||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||||
"NO_DATA_DISKS": "No Data Disks",
|
"NO_DATA_DISKS": "Không có dữ liệu ổ đĩa",
|
||||||
"notifications": "Notifications",
|
"notifications": "Thông báo",
|
||||||
"status": "Status",
|
"status": "Trạng thái",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"memoryUsed": "Memory Used",
|
"memoryUsed": "Memory Used",
|
||||||
"memoryAvailable": "Memory Available",
|
"memoryAvailable": "Memory Available",
|
||||||
@@ -1108,11 +1118,16 @@
|
|||||||
"poolFree": "{{pool}} Free"
|
"poolFree": "{{pool}} Free"
|
||||||
},
|
},
|
||||||
"backrest": {
|
"backrest": {
|
||||||
"num_plans": "Plans",
|
"num_plans": "Các kế hoạch",
|
||||||
"num_success_30": "Successes",
|
"num_success_30": "Thành công",
|
||||||
"num_failure_30": "Failures",
|
"num_failure_30": "Thất bại",
|
||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Bài hát",
|
||||||
|
"time": "Thời gian",
|
||||||
|
"artists": "Nghệ sĩ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "收件箱",
|
"inbox": "收件箱",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "充電",
|
"battery_charge": "充電",
|
||||||
"ups_load": "備用電源負載",
|
"ups_load": "備用電源負載",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有時間"
|
"gross_percent_max": "所有時間",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "播客",
|
"podcasts": "播客",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,750 +0,0 @@
|
|||||||
{
|
|
||||||
"widget": {
|
|
||||||
"missing_type": "缺少小部件类型:{{type}}",
|
|
||||||
"api_error": "API错误",
|
|
||||||
"status": "状态",
|
|
||||||
"information": "信息",
|
|
||||||
"url": "URL",
|
|
||||||
"raw_error": "原始错误",
|
|
||||||
"response_data": "返回数据"
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"placeholder": "搜索…"
|
|
||||||
},
|
|
||||||
"resources": {
|
|
||||||
"total": "总计",
|
|
||||||
"free": "空闲",
|
|
||||||
"used": "已用",
|
|
||||||
"load": "负载",
|
|
||||||
"cpu": "处理器",
|
|
||||||
"mem": "内存",
|
|
||||||
"temp": "温度",
|
|
||||||
"max": "最大",
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"months": "月",
|
|
||||||
"days": "天",
|
|
||||||
"hours": "时",
|
|
||||||
"minutes": "分"
|
|
||||||
},
|
|
||||||
"docker": {
|
|
||||||
"rx": "接收",
|
|
||||||
"tx": "发送",
|
|
||||||
"mem": "内存",
|
|
||||||
"cpu": "处理器",
|
|
||||||
"offline": "离线",
|
|
||||||
"error": "错误",
|
|
||||||
"unknown": "未知问题",
|
|
||||||
"starting": "启动中",
|
|
||||||
"unhealthy": "不健康的",
|
|
||||||
"not_found": "未找到",
|
|
||||||
"running": "运行中",
|
|
||||||
"exited": "已退出",
|
|
||||||
"partial": "部分",
|
|
||||||
"healthy": "健康的"
|
|
||||||
},
|
|
||||||
"emby": {
|
|
||||||
"playing": "播放中",
|
|
||||||
"transcoding": "转码",
|
|
||||||
"bitrate": "比特率",
|
|
||||||
"no_active": "暂无播放",
|
|
||||||
"movies": "电影",
|
|
||||||
"series": "系列",
|
|
||||||
"episodes": "剧集",
|
|
||||||
"songs": "歌曲"
|
|
||||||
},
|
|
||||||
"tautulli": {
|
|
||||||
"playing": "播放中",
|
|
||||||
"transcoding": "转码",
|
|
||||||
"bitrate": "比特率",
|
|
||||||
"no_active": "暂无播放",
|
|
||||||
"plex_connection_error": "Check Plex Connection"
|
|
||||||
},
|
|
||||||
"rutorrent": {
|
|
||||||
"active": "活动中",
|
|
||||||
"upload": "上传",
|
|
||||||
"download": "下载"
|
|
||||||
},
|
|
||||||
"sonarr": {
|
|
||||||
"wanted": "想看",
|
|
||||||
"queued": "排队",
|
|
||||||
"series": "系列",
|
|
||||||
"queue": "Queue",
|
|
||||||
"unknown": "Unknown"
|
|
||||||
},
|
|
||||||
"radarr": {
|
|
||||||
"wanted": "想看",
|
|
||||||
"queued": "队列",
|
|
||||||
"movies": "电影",
|
|
||||||
"missing": "丢失",
|
|
||||||
"queue": "Queue",
|
|
||||||
"unknown": "Unknown"
|
|
||||||
},
|
|
||||||
"readarr": {
|
|
||||||
"wanted": "订阅",
|
|
||||||
"queued": "队列",
|
|
||||||
"books": "书籍"
|
|
||||||
},
|
|
||||||
"ombi": {
|
|
||||||
"pending": "待办的",
|
|
||||||
"approved": "已批准",
|
|
||||||
"available": "可用的"
|
|
||||||
},
|
|
||||||
"jellyseerr": {
|
|
||||||
"pending": "待办的",
|
|
||||||
"approved": "得到正式认可的",
|
|
||||||
"available": "可用的"
|
|
||||||
},
|
|
||||||
"pihole": {
|
|
||||||
"queries": "查询",
|
|
||||||
"blocked": "阻止",
|
|
||||||
"gravity": "重力",
|
|
||||||
"blocked_percent": "拦截 %"
|
|
||||||
},
|
|
||||||
"speedtest": {
|
|
||||||
"upload": "上传",
|
|
||||||
"download": "下载",
|
|
||||||
"ping": "ping"
|
|
||||||
},
|
|
||||||
"portainer": {
|
|
||||||
"running": "运行中",
|
|
||||||
"stopped": "停止",
|
|
||||||
"total": "总计"
|
|
||||||
},
|
|
||||||
"traefik": {
|
|
||||||
"routers": "路由器",
|
|
||||||
"services": "服务",
|
|
||||||
"middleware": "中间件"
|
|
||||||
},
|
|
||||||
"npm": {
|
|
||||||
"enabled": "已启用",
|
|
||||||
"disabled": "禁用",
|
|
||||||
"total": "全部的"
|
|
||||||
},
|
|
||||||
"weather": {
|
|
||||||
"current": "当前定位",
|
|
||||||
"allow": "点击并允许",
|
|
||||||
"updating": "更新中",
|
|
||||||
"wait": "请稍候"
|
|
||||||
},
|
|
||||||
"overseerr": {
|
|
||||||
"pending": "待办",
|
|
||||||
"approved": "已批准",
|
|
||||||
"available": "可用",
|
|
||||||
"processing": "处理中"
|
|
||||||
},
|
|
||||||
"sabnzbd": {
|
|
||||||
"rate": "速率",
|
|
||||||
"queue": "队列",
|
|
||||||
"timeleft": "剩余时间"
|
|
||||||
},
|
|
||||||
"nzbget": {
|
|
||||||
"rate": "速率",
|
|
||||||
"remaining": "剩余",
|
|
||||||
"downloaded": "下载"
|
|
||||||
},
|
|
||||||
"coinmarketcap": {
|
|
||||||
"configure": "配置一个或多个需要追踪的加密",
|
|
||||||
"1hour": "1小时",
|
|
||||||
"1day": "1天",
|
|
||||||
"7days": "7天",
|
|
||||||
"30days": "30天"
|
|
||||||
},
|
|
||||||
"gotify": {
|
|
||||||
"apps": "应用",
|
|
||||||
"clients": "客户端",
|
|
||||||
"messages": "信息"
|
|
||||||
},
|
|
||||||
"prowlarr": {
|
|
||||||
"enableIndexers": "索引器",
|
|
||||||
"numberOfGrabs": "抓取",
|
|
||||||
"numberOfQueries": "查询",
|
|
||||||
"numberOfFailGrabs": "抓取失败",
|
|
||||||
"numberOfFailQueries": "查询失败"
|
|
||||||
},
|
|
||||||
"transmission": {
|
|
||||||
"download": "下载",
|
|
||||||
"upload": "上传",
|
|
||||||
"leech": "下载中",
|
|
||||||
"seed": "做种"
|
|
||||||
},
|
|
||||||
"jackett": {
|
|
||||||
"configured": "已配置",
|
|
||||||
"errored": "出错了"
|
|
||||||
},
|
|
||||||
"bazarr": {
|
|
||||||
"missingEpisodes": "缺少的剧集",
|
|
||||||
"missingMovies": "缺少的电影"
|
|
||||||
},
|
|
||||||
"lidarr": {
|
|
||||||
"wanted": "订阅",
|
|
||||||
"queued": "队列",
|
|
||||||
"artists": "Artists"
|
|
||||||
},
|
|
||||||
"adguard": {
|
|
||||||
"queries": "查询",
|
|
||||||
"blocked": "阻止",
|
|
||||||
"filtered": "过滤",
|
|
||||||
"latency": "延迟"
|
|
||||||
},
|
|
||||||
"qbittorrent": {
|
|
||||||
"download": "下载",
|
|
||||||
"upload": "上传",
|
|
||||||
"leech": "下载中",
|
|
||||||
"seed": "做种"
|
|
||||||
},
|
|
||||||
"mastodon": {
|
|
||||||
"user_count": "用户",
|
|
||||||
"status_count": "帖子",
|
|
||||||
"domain_count": "域"
|
|
||||||
},
|
|
||||||
"strelaysrv": {
|
|
||||||
"numActiveSessions": "会话",
|
|
||||||
"dataRelayed": "中继",
|
|
||||||
"numConnections": "连接",
|
|
||||||
"transferRate": "速度"
|
|
||||||
},
|
|
||||||
"authentik": {
|
|
||||||
"users": "用户",
|
|
||||||
"loginsLast24H": "登录 (24h)",
|
|
||||||
"failedLoginsLast24H": "登录失败 (24h)"
|
|
||||||
},
|
|
||||||
"proxmox": {
|
|
||||||
"mem": "内存",
|
|
||||||
"cpu": "处理器",
|
|
||||||
"lxc": "容器",
|
|
||||||
"vms": "虚拟机"
|
|
||||||
},
|
|
||||||
"unifi": {
|
|
||||||
"users": "用户",
|
|
||||||
"uptime": "系统运行时间",
|
|
||||||
"days": "天",
|
|
||||||
"wan": "广域网",
|
|
||||||
"lan_users": "局域网用户",
|
|
||||||
"wlan_users": "无线局域网用户",
|
|
||||||
"up": "向上",
|
|
||||||
"down": "向下",
|
|
||||||
"wait": "请稍候",
|
|
||||||
"lan": "局域网",
|
|
||||||
"wlan": "无线局域网",
|
|
||||||
"devices": "设备",
|
|
||||||
"lan_devices": "局域网设备",
|
|
||||||
"wlan_devices": "无线局域网设备",
|
|
||||||
"empty_data": "子系统状态未知"
|
|
||||||
},
|
|
||||||
"plex": {
|
|
||||||
"streams": "活动流",
|
|
||||||
"movies": "电影",
|
|
||||||
"tv": "电视节目",
|
|
||||||
"albums": "专辑"
|
|
||||||
},
|
|
||||||
"glances": {
|
|
||||||
"cpu": "处理器",
|
|
||||||
"wait": "请稍等",
|
|
||||||
"temp": "温度",
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"days": "天",
|
|
||||||
"hours": "时",
|
|
||||||
"load": "Load",
|
|
||||||
"warn": "Warn",
|
|
||||||
"total": "Total",
|
|
||||||
"free": "Free",
|
|
||||||
"used": "Used",
|
|
||||||
"crit": "Crit",
|
|
||||||
"read": "Read",
|
|
||||||
"write": "Write",
|
|
||||||
"gpu": "GPU",
|
|
||||||
"mem": "Mem",
|
|
||||||
"swap": "Swap",
|
|
||||||
"_temp": "Temp"
|
|
||||||
},
|
|
||||||
"changedetectionio": {
|
|
||||||
"totalObserved": "观察到的总数",
|
|
||||||
"diffsDetected": "检测到差异"
|
|
||||||
},
|
|
||||||
"wmo": {
|
|
||||||
"0-day": "晴天",
|
|
||||||
"0-night": "晴朗",
|
|
||||||
"1-day": "主要是晴天",
|
|
||||||
"3-day": "阴天",
|
|
||||||
"3-night": "阴天",
|
|
||||||
"45-day": "有雾",
|
|
||||||
"48-day": "有雾",
|
|
||||||
"51-day": "小雨",
|
|
||||||
"73-night": "中雪",
|
|
||||||
"75-day": "大雪",
|
|
||||||
"1-night": "大部晴朗",
|
|
||||||
"2-day": "多云",
|
|
||||||
"2-night": "多云",
|
|
||||||
"45-night": "有雾",
|
|
||||||
"48-night": "有雾",
|
|
||||||
"51-night": "小雨",
|
|
||||||
"53-day": "小雨",
|
|
||||||
"53-night": "小雨",
|
|
||||||
"55-day": "毛毛雨",
|
|
||||||
"55-night": "毛毛雨",
|
|
||||||
"56-day": "小冻毛雨",
|
|
||||||
"56-night": "小冻毛雨",
|
|
||||||
"57-day": "冻毛雨",
|
|
||||||
"57-night": "冻毛雨",
|
|
||||||
"61-day": "小雨",
|
|
||||||
"61-night": "小雨",
|
|
||||||
"63-day": "雨",
|
|
||||||
"63-night": "雨",
|
|
||||||
"65-day": "大雨",
|
|
||||||
"65-night": "大雨",
|
|
||||||
"66-day": "冻雨",
|
|
||||||
"66-night": "冻雨",
|
|
||||||
"67-day": "冻雨",
|
|
||||||
"67-night": "冻雨",
|
|
||||||
"71-day": "小雪",
|
|
||||||
"71-night": "小雪",
|
|
||||||
"73-day": "中雪",
|
|
||||||
"75-night": "大雪",
|
|
||||||
"77-day": "雪粒",
|
|
||||||
"77-night": "雪粒",
|
|
||||||
"80-day": "微阵雨",
|
|
||||||
"80-night": "微阵雨",
|
|
||||||
"81-day": "阵雨",
|
|
||||||
"81-night": "阵雨",
|
|
||||||
"82-day": "强阵雨",
|
|
||||||
"82-night": "强阵雨",
|
|
||||||
"85-day": "阵雪",
|
|
||||||
"85-night": "阵雪",
|
|
||||||
"86-day": "阵雪",
|
|
||||||
"86-night": "阵雪",
|
|
||||||
"95-day": "雷雨",
|
|
||||||
"95-night": "雷雨",
|
|
||||||
"96-day": "雷雨伴随冰雹",
|
|
||||||
"96-night": "雷雨伴随冰雹",
|
|
||||||
"99-day": "雷雨伴随冰雹",
|
|
||||||
"99-night": "雷雨伴随冰雹"
|
|
||||||
},
|
|
||||||
"quicklaunch": {
|
|
||||||
"bookmark": "书签",
|
|
||||||
"service": "服务",
|
|
||||||
"search": "搜索",
|
|
||||||
"custom": "自定",
|
|
||||||
"visit": "访问",
|
|
||||||
"url": "网址"
|
|
||||||
},
|
|
||||||
"homebridge": {
|
|
||||||
"available_update": "System",
|
|
||||||
"updates": "更新",
|
|
||||||
"update_available": "有可用的更新",
|
|
||||||
"up_to_date": "Up to Date",
|
|
||||||
"child_bridges": "子网桥",
|
|
||||||
"child_bridges_status": "{{ok}}/{{total}}",
|
|
||||||
"up": "Up",
|
|
||||||
"pending": "待定中",
|
|
||||||
"down": "Down"
|
|
||||||
},
|
|
||||||
"autobrr": {
|
|
||||||
"approvedPushes": "已核准",
|
|
||||||
"rejectedPushes": "拒绝",
|
|
||||||
"filters": "Filters",
|
|
||||||
"indexers": "索引器"
|
|
||||||
},
|
|
||||||
"watchtower": {
|
|
||||||
"containers_scanned": "已扫描",
|
|
||||||
"containers_updated": "已升级",
|
|
||||||
"containers_failed": "失败"
|
|
||||||
},
|
|
||||||
"tubearchivist": {
|
|
||||||
"downloads": "队列",
|
|
||||||
"videos": "影片",
|
|
||||||
"channels": "频道",
|
|
||||||
"playlists": "播放清单"
|
|
||||||
},
|
|
||||||
"truenas": {
|
|
||||||
"load": "系统负载",
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"alerts": "警报",
|
|
||||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
|
||||||
},
|
|
||||||
"navidrome": {
|
|
||||||
"nothing_streaming": "暂无播放",
|
|
||||||
"please_wait": "请等待"
|
|
||||||
},
|
|
||||||
"pyload": {
|
|
||||||
"speed": "速度",
|
|
||||||
"active": "Active",
|
|
||||||
"queue": "队列",
|
|
||||||
"total": "Total"
|
|
||||||
},
|
|
||||||
"gluetun": {
|
|
||||||
"public_ip": "公网 IP",
|
|
||||||
"region": "区域",
|
|
||||||
"country": "国家"
|
|
||||||
},
|
|
||||||
"hdhomerun": {
|
|
||||||
"channels": "频道",
|
|
||||||
"hd": "HD"
|
|
||||||
},
|
|
||||||
"ping": {
|
|
||||||
"error": "错误",
|
|
||||||
"ping": "Ping",
|
|
||||||
"up": "Up",
|
|
||||||
"down": "Down"
|
|
||||||
},
|
|
||||||
"scrutiny": {
|
|
||||||
"passed": "通过",
|
|
||||||
"failed": "失败",
|
|
||||||
"unknown": "未知的"
|
|
||||||
},
|
|
||||||
"paperlessngx": {
|
|
||||||
"inbox": "收件箱",
|
|
||||||
"total": "Total"
|
|
||||||
},
|
|
||||||
"deluge": {
|
|
||||||
"download": "下载",
|
|
||||||
"upload": "上传",
|
|
||||||
"leech": "下载中",
|
|
||||||
"seed": "做种"
|
|
||||||
},
|
|
||||||
"flood": {
|
|
||||||
"leech": "下载中",
|
|
||||||
"download": "下载",
|
|
||||||
"upload": "上传",
|
|
||||||
"seed": "做种"
|
|
||||||
},
|
|
||||||
"tdarr": {
|
|
||||||
"saved": "已保存",
|
|
||||||
"queue": "队列",
|
|
||||||
"processed": "已处理",
|
|
||||||
"errored": "出错"
|
|
||||||
},
|
|
||||||
"miniflux": {
|
|
||||||
"read": "已读",
|
|
||||||
"unread": "未读"
|
|
||||||
},
|
|
||||||
"nextdns": {
|
|
||||||
"wait": "请稍候",
|
|
||||||
"no_devices": "没有接收到设备数据"
|
|
||||||
},
|
|
||||||
"common": {
|
|
||||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
|
||||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
|
||||||
},
|
|
||||||
"omada": {
|
|
||||||
"connectedAp": "连接中的AP",
|
|
||||||
"activeUser": "活跃设备",
|
|
||||||
"alerts": "警报",
|
|
||||||
"connectedGateway": "已连接网关",
|
|
||||||
"connectedSwitches": "已连接开关"
|
|
||||||
},
|
|
||||||
"downloadstation": {
|
|
||||||
"download": "下载",
|
|
||||||
"upload": "上传",
|
|
||||||
"leech": "下载中",
|
|
||||||
"seed": "做种"
|
|
||||||
},
|
|
||||||
"mikrotik": {
|
|
||||||
"cpuLoad": "处理器",
|
|
||||||
"memoryUsed": "内存",
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"numberOfLeases": "租约"
|
|
||||||
},
|
|
||||||
"xteve": {
|
|
||||||
"streams_all": "所有播放活动",
|
|
||||||
"streams_active": "正在播放",
|
|
||||||
"streams_xepg": "XEPG 频道"
|
|
||||||
},
|
|
||||||
"opnsense": {
|
|
||||||
"cpu": "处理器",
|
|
||||||
"memory": "内存",
|
|
||||||
"wanUpload": "WAN上传",
|
|
||||||
"wanDownload": "WAN下载"
|
|
||||||
},
|
|
||||||
"moonraker": {
|
|
||||||
"printer_state": "打印机状态",
|
|
||||||
"print_status": "打印状态",
|
|
||||||
"print_progress": "打印进程",
|
|
||||||
"layers": "层"
|
|
||||||
},
|
|
||||||
"medusa": {
|
|
||||||
"wanted": "关注中",
|
|
||||||
"queued": "已加入队列",
|
|
||||||
"series": "Series"
|
|
||||||
},
|
|
||||||
"octoprint": {
|
|
||||||
"printer_state": "打印机状态",
|
|
||||||
"temp_tool": "喷头温度",
|
|
||||||
"temp_bed": "平台温度",
|
|
||||||
"job_completion": "完成度"
|
|
||||||
},
|
|
||||||
"cloudflared": {
|
|
||||||
"origin_ip": "源IP",
|
|
||||||
"status": "状态"
|
|
||||||
},
|
|
||||||
"proxmoxbackupserver": {
|
|
||||||
"datastore_usage": "数据存储",
|
|
||||||
"failed_tasks_24h": "24h失败任务",
|
|
||||||
"cpu_usage": "处理器",
|
|
||||||
"memory_usage": "内存"
|
|
||||||
},
|
|
||||||
"immich": {
|
|
||||||
"users": "使用者",
|
|
||||||
"photos": "照片",
|
|
||||||
"videos": "影片",
|
|
||||||
"storage": "储存空间"
|
|
||||||
},
|
|
||||||
"uptimekuma": {
|
|
||||||
"up": "在线网站",
|
|
||||||
"down": "离线网站",
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"incident": "严重事件",
|
|
||||||
"m": "m"
|
|
||||||
},
|
|
||||||
"komga": {
|
|
||||||
"libraries": "书库",
|
|
||||||
"series": "系列",
|
|
||||||
"books": "书刊"
|
|
||||||
},
|
|
||||||
"mylar": {
|
|
||||||
"series": "系列",
|
|
||||||
"issues": "问题",
|
|
||||||
"wanted": "关注中"
|
|
||||||
},
|
|
||||||
"photoprism": {
|
|
||||||
"albums": "相册",
|
|
||||||
"photos": "照片",
|
|
||||||
"videos": "视频",
|
|
||||||
"people": "人物"
|
|
||||||
},
|
|
||||||
"diskstation": {
|
|
||||||
"uptime": "运行时间",
|
|
||||||
"volumeAvailable": "剩余存储",
|
|
||||||
"days": "天"
|
|
||||||
},
|
|
||||||
"fileflows": {
|
|
||||||
"queue": "队列",
|
|
||||||
"processing": "处理中",
|
|
||||||
"processed": "已处理",
|
|
||||||
"time": "时间"
|
|
||||||
},
|
|
||||||
"grafana": {
|
|
||||||
"totalalerts": "警报总数",
|
|
||||||
"dashboards": "控制面板",
|
|
||||||
"datasources": "数据来源",
|
|
||||||
"alertstriggered": "触发的警报"
|
|
||||||
},
|
|
||||||
"nextcloud": {
|
|
||||||
"cpuload": "处理器",
|
|
||||||
"memoryusage": "内存",
|
|
||||||
"freespace": "剩余空间",
|
|
||||||
"activeusers": "活跃用户",
|
|
||||||
"numfiles": "Files",
|
|
||||||
"numshares": "共享项目"
|
|
||||||
},
|
|
||||||
"kopia": {
|
|
||||||
"status": "状态",
|
|
||||||
"size": "大小",
|
|
||||||
"lastrun": "最后运行",
|
|
||||||
"nextrun": "下次运行",
|
|
||||||
"failed": "失败"
|
|
||||||
},
|
|
||||||
"unmanic": {
|
|
||||||
"active_workers": "在线工作节点",
|
|
||||||
"total_workers": "工作节点总数",
|
|
||||||
"records_total": "队列长度"
|
|
||||||
},
|
|
||||||
"healthchecks": {
|
|
||||||
"new": "新建立",
|
|
||||||
"up": "在线的",
|
|
||||||
"grace": "延缓中",
|
|
||||||
"down": "离线",
|
|
||||||
"paused": "暂停",
|
|
||||||
"status": "状态",
|
|
||||||
"last_ping": "上次检查",
|
|
||||||
"never": "尚未检查"
|
|
||||||
},
|
|
||||||
"pterodactyl": {
|
|
||||||
"servers": "服务器",
|
|
||||||
"nodes": "节点"
|
|
||||||
},
|
|
||||||
"prometheus": {
|
|
||||||
"targets_up": "目标上线",
|
|
||||||
"targets_down": "目标在线",
|
|
||||||
"targets_total": "总目标"
|
|
||||||
},
|
|
||||||
"minecraft": {
|
|
||||||
"players": "玩家",
|
|
||||||
"version": "版本",
|
|
||||||
"status": "状态",
|
|
||||||
"up": "在线的",
|
|
||||||
"down": "离线"
|
|
||||||
},
|
|
||||||
"ghostfolio": {
|
|
||||||
"gross_percent_today": "今天",
|
|
||||||
"gross_percent_1y": "一年",
|
|
||||||
"gross_percent_max": "所有时间"
|
|
||||||
},
|
|
||||||
"audiobookshelf": {
|
|
||||||
"podcasts": "播客",
|
|
||||||
"books": "图书",
|
|
||||||
"podcastsDuration": "持续时间",
|
|
||||||
"booksDuration": "持续时间"
|
|
||||||
},
|
|
||||||
"homeassistant": {
|
|
||||||
"people_home": "房间",
|
|
||||||
"lights_on": "照明开",
|
|
||||||
"switches_on": "开关开"
|
|
||||||
},
|
|
||||||
"freshrss": {
|
|
||||||
"subscriptions": "订阅",
|
|
||||||
"unread": "未读"
|
|
||||||
},
|
|
||||||
"channelsdvrserver": {
|
|
||||||
"shows": "节目",
|
|
||||||
"recordings": "录像",
|
|
||||||
"scheduled": "已计划的",
|
|
||||||
"passes": "通行证"
|
|
||||||
},
|
|
||||||
"whatsupdocker": {
|
|
||||||
"monitoring": "监测中",
|
|
||||||
"updates": "可更新"
|
|
||||||
},
|
|
||||||
"tailscale": {
|
|
||||||
"address": "地址",
|
|
||||||
"expires": "失效",
|
|
||||||
"never": "从不",
|
|
||||||
"last_seen": "最后上线",
|
|
||||||
"days": "{{number}}d",
|
|
||||||
"hours": "{{number}}h",
|
|
||||||
"minutes": "{{number}}m",
|
|
||||||
"seconds": "{{number}}s",
|
|
||||||
"ago": "{{value}} 以前",
|
|
||||||
"now": "现在",
|
|
||||||
"years": "{{number}}年",
|
|
||||||
"weeks": "{{number}}周"
|
|
||||||
},
|
|
||||||
"qnap": {
|
|
||||||
"cpuUsage": "处理器",
|
|
||||||
"memUsage": "内存",
|
|
||||||
"systemTempC": "系统温度",
|
|
||||||
"poolUsage": "存储池",
|
|
||||||
"volumeUsage": "Volume Usage",
|
|
||||||
"invalid": "Invalid"
|
|
||||||
},
|
|
||||||
"pfsense": {
|
|
||||||
"load": "平均负载",
|
|
||||||
"memory": "内存",
|
|
||||||
"wanStatus": "WAN 状态",
|
|
||||||
"up": "上传",
|
|
||||||
"down": "下载",
|
|
||||||
"temp": "温度",
|
|
||||||
"disk": "磁盘",
|
|
||||||
"wanIP": "WAN IP"
|
|
||||||
},
|
|
||||||
"caddy": {
|
|
||||||
"upstreams": "上游",
|
|
||||||
"requests": "当前请求",
|
|
||||||
"requests_failed": "失败请求"
|
|
||||||
},
|
|
||||||
"evcc": {
|
|
||||||
"pv_power": "正式环境",
|
|
||||||
"battery_soc": "Battery",
|
|
||||||
"grid_power": "Grid",
|
|
||||||
"home_power": "Consumption",
|
|
||||||
"charge_power": "Charger",
|
|
||||||
"watt_hour": "Wh"
|
|
||||||
},
|
|
||||||
"pialert": {
|
|
||||||
"total": "Total",
|
|
||||||
"connected": "Connected",
|
|
||||||
"new_devices": "New Devices",
|
|
||||||
"down_alerts": "Down Alerts"
|
|
||||||
},
|
|
||||||
"jdownloader": {
|
|
||||||
"downloadCount": "Queue Count",
|
|
||||||
"downloadSpeed": "Download Speed",
|
|
||||||
"downloadBytesRemaining": "Remaining",
|
|
||||||
"downloadTotalBytes": "Size"
|
|
||||||
},
|
|
||||||
"kavita": {
|
|
||||||
"seriesCount": "系列",
|
|
||||||
"totalFiles": "文件"
|
|
||||||
},
|
|
||||||
"gamedig": {
|
|
||||||
"name": "Name",
|
|
||||||
"map": "Map",
|
|
||||||
"currentPlayers": "Current players",
|
|
||||||
"players": "Players",
|
|
||||||
"maxPlayers": "Max players",
|
|
||||||
"bots": "Bots",
|
|
||||||
"ping": "Ping",
|
|
||||||
"status": "Status",
|
|
||||||
"online": "Online",
|
|
||||||
"offline": "Offline"
|
|
||||||
},
|
|
||||||
"azuredevops": {
|
|
||||||
"canceled": "Canceled",
|
|
||||||
"inProgress": "In Progress",
|
|
||||||
"result": "Result",
|
|
||||||
"status": "Status",
|
|
||||||
"buildId": "Build ID",
|
|
||||||
"succeeded": "Succeeded",
|
|
||||||
"notStarted": "Not Started",
|
|
||||||
"failed": "Failed",
|
|
||||||
"totalPrs": "Total PRs",
|
|
||||||
"myPrs": "My PRs",
|
|
||||||
"approved": "Approved"
|
|
||||||
},
|
|
||||||
"urbackup": {
|
|
||||||
"ok": "Ok",
|
|
||||||
"errored": "Errors",
|
|
||||||
"noRecent": "Out of Date",
|
|
||||||
"totalUsed": "Used Storage"
|
|
||||||
},
|
|
||||||
"openmediavault": {
|
|
||||||
"downloading": "Downloading",
|
|
||||||
"total": "Total",
|
|
||||||
"running": "Running",
|
|
||||||
"stopped": "Stopped",
|
|
||||||
"passed": "Passed",
|
|
||||||
"failed": "Failed"
|
|
||||||
},
|
|
||||||
"mealie": {
|
|
||||||
"recipes": "Recipes",
|
|
||||||
"users": "Users",
|
|
||||||
"categories": "Categories",
|
|
||||||
"tags": "Tags"
|
|
||||||
},
|
|
||||||
"atsumeru": {
|
|
||||||
"series": "Series",
|
|
||||||
"archives": "Archives",
|
|
||||||
"chapters": "Chapters",
|
|
||||||
"categories": "Categories"
|
|
||||||
},
|
|
||||||
"calibreweb": {
|
|
||||||
"books": "书籍",
|
|
||||||
"authors": "作者",
|
|
||||||
"categories": "分类",
|
|
||||||
"series": "丛书"
|
|
||||||
},
|
|
||||||
"uptimerobot": {
|
|
||||||
"status": "Status",
|
|
||||||
"uptime": "Uptime",
|
|
||||||
"lastDown": "Last Downtime",
|
|
||||||
"downDuration": "Downtime Duration",
|
|
||||||
"sitesUp": "Sites Up",
|
|
||||||
"sitesDown": "Sites Down",
|
|
||||||
"paused": "Paused",
|
|
||||||
"notyetchecked": "Not Yet Checked",
|
|
||||||
"up": "Up",
|
|
||||||
"seemsdown": "Seems Down",
|
|
||||||
"down": "Down",
|
|
||||||
"unknown": "Unknown"
|
|
||||||
},
|
|
||||||
"opendtu": {
|
|
||||||
"relativePower": "Power %",
|
|
||||||
"yieldDay": "Today",
|
|
||||||
"limit": "Limit",
|
|
||||||
"absolutePower": "Power"
|
|
||||||
},
|
|
||||||
"calendar": {
|
|
||||||
"physicalRelease": "Physical release",
|
|
||||||
"inCinemas": "In cinemas",
|
|
||||||
"digitalRelease": "Digital release"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -200,10 +200,10 @@
|
|||||||
"rutorrent": {
|
"rutorrent": {
|
||||||
"active": "活动中",
|
"active": "活动中",
|
||||||
"upload": "Upload",
|
"upload": "Upload",
|
||||||
"download": "Download"
|
"download": "下载"
|
||||||
},
|
},
|
||||||
"transmission": {
|
"transmission": {
|
||||||
"download": "Download",
|
"download": "下载",
|
||||||
"upload": "",
|
"upload": "",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
@@ -223,8 +223,8 @@
|
|||||||
"invalid": "Invalid"
|
"invalid": "Invalid"
|
||||||
},
|
},
|
||||||
"deluge": {
|
"deluge": {
|
||||||
"download": "Download",
|
"download": "下载",
|
||||||
"upload": "Upload",
|
"upload": "上传",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "收件箱",
|
"inbox": "收件箱",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "充电中",
|
"battery_charge": "充电中",
|
||||||
"ups_load": "UPS 负载",
|
"ups_load": "UPS 负载",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有时间"
|
"gross_percent_max": "所有时间",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "播客",
|
"podcasts": "播客",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,6 +599,15 @@
|
|||||||
"inbox": "收件箱",
|
"inbox": "收件箱",
|
||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
|
"pangolin": {
|
||||||
|
"orgs": "Orgs",
|
||||||
|
"sites": "Sites",
|
||||||
|
"resources": "Resources",
|
||||||
|
"targets": "Targets",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"in": "In",
|
||||||
|
"out": "Out"
|
||||||
|
},
|
||||||
"peanut": {
|
"peanut": {
|
||||||
"battery_charge": "充電",
|
"battery_charge": "充電",
|
||||||
"ups_load": "備用電源負載",
|
"ups_load": "備用電源負載",
|
||||||
@@ -759,7 +768,8 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有時間"
|
"gross_percent_max": "所有時間",
|
||||||
|
"net_worth": "Net Worth"
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1114,5 +1124,10 @@
|
|||||||
"num_success_latest": "Succeeding",
|
"num_success_latest": "Succeeding",
|
||||||
"num_failure_latest": "Failing",
|
"num_failure_latest": "Failing",
|
||||||
"bytes_added_30": "Bytes Added"
|
"bytes_added_30": "Bytes Added"
|
||||||
|
},
|
||||||
|
"yourspotify": {
|
||||||
|
"songs": "Songs",
|
||||||
|
"time": "Time",
|
||||||
|
"artists": "Artists"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,56 @@
|
|||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { useTranslation } from "next-i18next";
|
import { useTranslation } from "next-i18next";
|
||||||
|
import { useContext, useMemo } from "react";
|
||||||
|
|
||||||
export default function Block({ value, label }) {
|
import { BlockHighlightContext } from "./highlight-context";
|
||||||
|
|
||||||
|
import { evaluateHighlight, getHighlightClass } from "utils/highlights";
|
||||||
|
|
||||||
|
export default function Block({ value, label, field }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
const highlightConfig = useContext(BlockHighlightContext);
|
||||||
|
|
||||||
|
const highlight = useMemo(() => {
|
||||||
|
if (!highlightConfig) return null;
|
||||||
|
const labels = Array.isArray(label) ? label : [label];
|
||||||
|
const candidates = [];
|
||||||
|
if (typeof field === "string") candidates.push(field);
|
||||||
|
for (const candidateLabel of labels) {
|
||||||
|
if (typeof candidateLabel === "string") candidates.push(candidateLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const candidate of candidates) {
|
||||||
|
const result = evaluateHighlight(candidate, value, highlightConfig);
|
||||||
|
if (result) return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}, [field, label, value, highlightConfig]);
|
||||||
|
|
||||||
|
const highlightClass = useMemo(() => {
|
||||||
|
if (!highlight?.level) return undefined;
|
||||||
|
return getHighlightClass(highlight.level, highlightConfig);
|
||||||
|
}, [highlight, highlightConfig]);
|
||||||
|
|
||||||
|
const applyToValueOnly = highlight?.valueOnly === true;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
"bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
|
"bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
|
||||||
value === undefined ? "animate-pulse" : "",
|
value === undefined ? "animate-pulse" : "",
|
||||||
|
highlightClass,
|
||||||
"service-block",
|
"service-block",
|
||||||
)}
|
)}
|
||||||
|
data-highlight-level={highlight?.level}
|
||||||
|
data-highlight-source={highlight?.source}
|
||||||
>
|
>
|
||||||
<div className="font-thin text-sm">{value === undefined || value === null ? "-" : value}</div>
|
<div className="font-thin text-sm">{value === undefined || value === null ? "-" : value}</div>
|
||||||
<div className="font-bold text-xs uppercase">{t(label)}</div>
|
<div
|
||||||
|
className={classNames("font-bold text-xs uppercase", applyToValueOnly && "text-theme-700 dark:text-theme-200")}
|
||||||
|
>
|
||||||
|
{t(label)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
import { useContext } from "react";
|
import { useContext, useMemo } from "react";
|
||||||
import { SettingsContext } from "utils/contexts/settings";
|
import { SettingsContext } from "utils/contexts/settings";
|
||||||
|
|
||||||
import Error from "./error";
|
import Error from "./error";
|
||||||
|
import { BlockHighlightContext } from "./highlight-context";
|
||||||
|
|
||||||
|
import { buildHighlightConfig } from "utils/highlights";
|
||||||
|
|
||||||
const ALIASED_WIDGETS = {
|
const ALIASED_WIDGETS = {
|
||||||
pialert: "netalertx",
|
pialert: "netalertx",
|
||||||
@@ -11,6 +14,11 @@ const ALIASED_WIDGETS = {
|
|||||||
export default function Container({ error = false, children, service }) {
|
export default function Container({ error = false, children, service }) {
|
||||||
const { settings } = useContext(SettingsContext);
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
|
const highlightConfig = useMemo(
|
||||||
|
() => buildHighlightConfig(settings?.blockHighlights, service?.widget?.highlight, service?.widget?.type),
|
||||||
|
[settings?.blockHighlights, service?.widget?.highlight, service?.widget?.type],
|
||||||
|
);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
if (settings.hideErrors || service.widget.hide_errors) {
|
if (settings.hideErrors || service.widget.hide_errors) {
|
||||||
return null;
|
return null;
|
||||||
@@ -51,6 +59,11 @@ export default function Container({ error = false, children, service }) {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
const content = <div className="relative flex flex-row w-full service-container">{visibleChildren}</div>;
|
||||||
|
|
||||||
return <div className="relative flex flex-row w-full service-container">{visibleChildren}</div>;
|
if (!highlightConfig) {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
return <BlockHighlightContext.Provider value={highlightConfig}>{content}</BlockHighlightContext.Provider>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ export default function Error({ error }) {
|
|||||||
|
|
||||||
if (typeof error === "string") {
|
if (typeof error === "string") {
|
||||||
error = { message: error }; // eslint-disable-line no-param-reassign
|
error = { message: error }; // eslint-disable-line no-param-reassign
|
||||||
|
} else if (typeof error === "number") {
|
||||||
|
error = { message: `Error ${error}` }; // eslint-disable-line no-param-reassign
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error?.data?.error) {
|
if (error?.data?.error) {
|
||||||
|
|||||||
3
src/components/services/widget/highlight-context.jsx
Normal file
3
src/components/services/widget/highlight-context.jsx
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { createContext } from "react";
|
||||||
|
|
||||||
|
export const BlockHighlightContext = createContext(null);
|
||||||
@@ -55,8 +55,7 @@ export default function Version({ disableUpdateCheck = false }) {
|
|||||||
</span>
|
</span>
|
||||||
{!validate(version)
|
{!validate(version)
|
||||||
? null
|
? null
|
||||||
: releaseData &&
|
: latestRelease &&
|
||||||
latestRelease &&
|
|
||||||
compareVersions(latestRelease.tag_name, version) > 0 && (
|
compareVersions(latestRelease.tag_name, version) > 0 && (
|
||||||
<a
|
<a
|
||||||
href={latestRelease.html_url}
|
href={latestRelease.html_url}
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ export default function Widget({ options }) {
|
|||||||
<Resource
|
<Resource
|
||||||
icon={FaMemory}
|
icon={FaMemory}
|
||||||
value={t("common.bytes", {
|
value={t("common.bytes", {
|
||||||
value: data.mem.free,
|
value: data.mem.available,
|
||||||
maximumFractionDigits: 1,
|
maximumFractionDigits: 1,
|
||||||
binary: true,
|
binary: true,
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export default function QueueEntry({ title, activity, timeLeft, progress }) {
|
export default function QueueEntry({ title, activity, timeLeft, progress, size }) {
|
||||||
return (
|
return (
|
||||||
<div className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex">
|
<div className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex">
|
||||||
<div
|
<div
|
||||||
@@ -11,6 +11,7 @@ export default function QueueEntry({ title, activity, timeLeft, progress }) {
|
|||||||
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{title}</div>
|
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{title}</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
|
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
|
||||||
|
{size && `${size} - `}
|
||||||
{timeLeft ? `${activity} - ${timeLeft}` : activity}
|
{timeLeft ? `${activity} - ${timeLeft}` : activity}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
import { Combobox, Listbox, Transition } from "@headlessui/react";
|
import {
|
||||||
|
Combobox,
|
||||||
|
ComboboxInput,
|
||||||
|
ComboboxOption,
|
||||||
|
ComboboxOptions,
|
||||||
|
Listbox,
|
||||||
|
ListboxButton,
|
||||||
|
ListboxOption,
|
||||||
|
ListboxOptions,
|
||||||
|
Transition,
|
||||||
|
} from "@headlessui/react";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { useTranslation } from "next-i18next";
|
import { useTranslation } from "next-i18next";
|
||||||
import { Fragment, useEffect, useState } from "react";
|
import { Fragment, useEffect, useState } from "react";
|
||||||
@@ -158,7 +168,7 @@ export default function Search({ options }) {
|
|||||||
<div className="flex-col relative h-8 my-4 min-w-fit z-20">
|
<div className="flex-col relative h-8 my-4 min-w-fit z-20">
|
||||||
<div className="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none w-full text-theme-800 dark:text-white" />
|
<div className="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none w-full text-theme-800 dark:text-white" />
|
||||||
<Combobox value={query}>
|
<Combobox value={query}>
|
||||||
<Combobox.Input
|
<ComboboxInput
|
||||||
type="text"
|
type="text"
|
||||||
className="
|
className="
|
||||||
overflow-hidden w-full h-full rounded-md
|
overflow-hidden w-full h-full rounded-md
|
||||||
@@ -189,7 +199,7 @@ export default function Search({ options }) {
|
|||||||
disabled={availableProviderIds?.length === 1}
|
disabled={availableProviderIds?.length === 1}
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<Listbox.Button
|
<ListboxButton
|
||||||
className="
|
className="
|
||||||
absolute right-0.5 bottom-0.5 rounded-r-md px-4 py-2
|
absolute right-0.5 bottom-0.5 rounded-r-md px-4 py-2
|
||||||
text-white font-medium text-sm
|
text-white font-medium text-sm
|
||||||
@@ -198,7 +208,7 @@ export default function Search({ options }) {
|
|||||||
>
|
>
|
||||||
<selectedProvider.icon className="text-white w-3 h-3" />
|
<selectedProvider.icon className="text-white w-3 h-3" />
|
||||||
<span className="sr-only">{t("search.search")}</span>
|
<span className="sr-only">{t("search.search")}</span>
|
||||||
</Listbox.Button>
|
</ListboxButton>
|
||||||
</div>
|
</div>
|
||||||
<Transition
|
<Transition
|
||||||
as={Fragment}
|
as={Fragment}
|
||||||
@@ -209,7 +219,7 @@ export default function Search({ options }) {
|
|||||||
leaveFrom="transform opacity-100 scale-100"
|
leaveFrom="transform opacity-100 scale-100"
|
||||||
leaveTo="transform opacity-0 scale-95"
|
leaveTo="transform opacity-0 scale-95"
|
||||||
>
|
>
|
||||||
<Listbox.Options
|
<ListboxOptions
|
||||||
className="absolute right-0 z-10 mt-1 origin-top-right rounded-md
|
className="absolute right-0 z-10 mt-1 origin-top-right rounded-md
|
||||||
bg-theme-100 dark:bg-theme-600 shadow-lg
|
bg-theme-100 dark:bg-theme-600 shadow-lg
|
||||||
ring-1 ring-black ring-opacity-5 focus:outline-hidden"
|
ring-1 ring-black ring-opacity-5 focus:outline-hidden"
|
||||||
@@ -218,7 +228,7 @@ export default function Search({ options }) {
|
|||||||
{availableProviderIds.map((providerId) => {
|
{availableProviderIds.map((providerId) => {
|
||||||
const p = searchProviders[providerId];
|
const p = searchProviders[providerId];
|
||||||
return (
|
return (
|
||||||
<Listbox.Option key={providerId} value={p} as={Fragment}>
|
<ListboxOption key={providerId} value={p} as={Fragment}>
|
||||||
{({ active }) => (
|
{({ active }) => (
|
||||||
<li
|
<li
|
||||||
className={classNames(
|
className={classNames(
|
||||||
@@ -229,23 +239,23 @@ export default function Search({ options }) {
|
|||||||
<p.icon className="h-4 w-4 mx-4 my-2" />
|
<p.icon className="h-4 w-4 mx-4 my-2" />
|
||||||
</li>
|
</li>
|
||||||
)}
|
)}
|
||||||
</Listbox.Option>
|
</ListboxOption>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</Listbox.Options>
|
</ListboxOptions>
|
||||||
</Transition>
|
</Transition>
|
||||||
</Listbox>
|
</Listbox>
|
||||||
|
|
||||||
{searchSuggestions[1]?.length > 0 && (
|
{searchSuggestions[1]?.length > 0 && (
|
||||||
<Combobox.Options className="mt-1 rounded-md bg-theme-50 dark:bg-theme-800 border border-theme-300 dark:border-theme-200/30 cursor-pointer shadow-lg">
|
<ComboboxOptions className="mt-1 rounded-md bg-theme-50 dark:bg-theme-800 border border-theme-300 dark:border-theme-200/30 cursor-pointer shadow-lg">
|
||||||
<div className="p-1 bg-white/50 dark:bg-white/10 text-theme-900/90 dark:text-white/90 text-xs">
|
<div className="p-1 bg-white/50 dark:bg-white/10 text-theme-900/90 dark:text-white/90 text-xs">
|
||||||
<Combobox.Option key={query} value={query} />
|
<ComboboxOption key={query} value={query} />
|
||||||
{searchSuggestions[1].map((suggestion) => (
|
{searchSuggestions[1].map((suggestion) => (
|
||||||
<Combobox.Option
|
<ComboboxOption
|
||||||
key={suggestion}
|
key={suggestion}
|
||||||
value={suggestion}
|
value={suggestion}
|
||||||
onClick={() => {
|
onMouseDown={() => {
|
||||||
doSearch(suggestion);
|
doSearch(suggestion);
|
||||||
}}
|
}}
|
||||||
className="flex w-full"
|
className="flex w-full"
|
||||||
@@ -266,10 +276,10 @@ export default function Search({ options }) {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
</Combobox.Option>
|
</ComboboxOption>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</Combobox.Options>
|
</ComboboxOptions>
|
||||||
)}
|
)}
|
||||||
</Combobox>
|
</Combobox>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -24,12 +24,12 @@ export default function Resource({
|
|||||||
wide ? " min-w-[120px]" : "min-w-[85px]"
|
wide ? " min-w-[120px]" : "min-w-[85px]"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
|
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between gap-2">
|
||||||
<div className="pl-0.5">{value}</div>
|
<div className="pl-0.5">{value}</div>
|
||||||
<div className="pr-1">{label}</div>
|
<div className="pr-1">{label}</div>
|
||||||
</div>
|
</div>
|
||||||
{expanded && (
|
{expanded && (
|
||||||
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between">
|
<div className="text-theme-800 dark:text-theme-200 text-xs flex flex-row justify-between gap-2">
|
||||||
<div className="pl-0.5">{expandedValue}</div>
|
<div className="pl-0.5">{expandedValue}</div>
|
||||||
<div className="pr-1">{expandedLabel}</div>
|
<div className="pr-1">{expandedLabel}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export function middleware(req) {
|
|||||||
// Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set
|
// Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set
|
||||||
const host = req.headers.get("host");
|
const host = req.headers.get("host");
|
||||||
const port = process.env.PORT || 3000;
|
const port = process.env.PORT || 3000;
|
||||||
let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`];
|
let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`, `[::1]:${port}`];
|
||||||
const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*";
|
const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*";
|
||||||
if (process.env.HOMEPAGE_ALLOWED_HOSTS) {
|
if (process.env.HOMEPAGE_ALLOWED_HOSTS) {
|
||||||
allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(","));
|
allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(","));
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export default async function handler(req, res) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (type === "network") {
|
if (type === "network") {
|
||||||
let networkData = await si.networkStats();
|
let networkData = await si.networkStats("*");
|
||||||
let interfaceDefault;
|
let interfaceDefault;
|
||||||
logger.debug("networkData:", JSON.stringify(networkData));
|
logger.debug("networkData:", JSON.stringify(networkData));
|
||||||
if (interfaceName && interfaceName !== "default") {
|
if (interfaceName && interfaceName !== "default") {
|
||||||
|
|||||||
@@ -41,6 +41,17 @@ const Version = dynamic(() => import("components/version"), {
|
|||||||
|
|
||||||
const rightAlignedWidgets = ["weatherapi", "openweathermap", "weather", "openmeteo", "search", "datetime"];
|
const rightAlignedWidgets = ["weatherapi", "openweathermap", "weather", "openmeteo", "search", "datetime"];
|
||||||
|
|
||||||
|
// Normalize language codes so older config values like zh-CN still point to Crowdin-provided ones
|
||||||
|
const LANGUAGE_ALIASES = {
|
||||||
|
"zh-cn": "zh-Hans",
|
||||||
|
};
|
||||||
|
|
||||||
|
const normalizeLanguage = (language) => {
|
||||||
|
if (!language) return "en";
|
||||||
|
const alias = LANGUAGE_ALIASES[language.toLowerCase()];
|
||||||
|
return alias || language;
|
||||||
|
};
|
||||||
|
|
||||||
export async function getStaticProps() {
|
export async function getStaticProps() {
|
||||||
let logger;
|
let logger;
|
||||||
try {
|
try {
|
||||||
@@ -50,6 +61,7 @@ export async function getStaticProps() {
|
|||||||
const services = await servicesResponse();
|
const services = await servicesResponse();
|
||||||
const bookmarks = await bookmarksResponse();
|
const bookmarks = await bookmarksResponse();
|
||||||
const widgets = await widgetsResponse();
|
const widgets = await widgetsResponse();
|
||||||
|
const language = normalizeLanguage(settings.language);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
@@ -60,7 +72,7 @@ export async function getStaticProps() {
|
|||||||
"/api/widgets": widgets,
|
"/api/widgets": widgets,
|
||||||
"/api/hash": false,
|
"/api/hash": false,
|
||||||
},
|
},
|
||||||
...(await serverSideTranslations(settings.language ?? "en")),
|
...(await serverSideTranslations(language)),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -218,8 +230,9 @@ function Home({ initialSettings }) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (settings.language) {
|
const language = normalizeLanguage(settings.language);
|
||||||
i18n.changeLanguage(settings.language);
|
if (language) {
|
||||||
|
i18n.changeLanguage(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.theme && theme !== settings.theme) {
|
if (settings.theme && theme !== settings.theme) {
|
||||||
@@ -400,6 +413,7 @@ function Home({ initialSettings }) {
|
|||||||
"A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
|
"A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
{settings.disableIndexing && <meta name="robots" content="noindex, nofollow" />}
|
||||||
{settings.base && <base href={settings.base} />}
|
{settings.base && <base href={settings.base} />}
|
||||||
{settings.favicon ? (
|
{settings.favicon ? (
|
||||||
<>
|
<>
|
||||||
@@ -417,6 +431,7 @@ function Home({ initialSettings }) {
|
|||||||
)}
|
)}
|
||||||
<meta name="msapplication-TileColor" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
<meta name="msapplication-TileColor" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||||
<meta name="theme-color" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
<meta name="theme-color" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||||
|
<meta name="color-scheme" content="dark light"></meta>
|
||||||
</Head>
|
</Head>
|
||||||
|
|
||||||
<Script src="/api/config/custom.js" />
|
<Script src="/api/config/custom.js" />
|
||||||
@@ -424,7 +439,7 @@ function Home({ initialSettings }) {
|
|||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
settings.fullWidth ? "" : "container",
|
settings.fullWidth ? "" : "container",
|
||||||
"relative m-auto flex flex-col justify-start z-10 h-full",
|
"relative m-auto flex flex-col justify-start z-10 h-full min-h-screen",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<QuickLaunch
|
<QuickLaunch
|
||||||
|
|||||||
19
src/pages/robots.txt.js
Normal file
19
src/pages/robots.txt.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { getSettings } from "utils/config/config";
|
||||||
|
|
||||||
|
export async function getServerSideProps({ res }) {
|
||||||
|
const settings = getSettings();
|
||||||
|
const content = ["User-agent: *", !!settings.disableIndexing ? "Disallow: /" : "Allow: /"].join("\n");
|
||||||
|
|
||||||
|
res.setHeader("Content-Type", "text/plain");
|
||||||
|
res.write(content);
|
||||||
|
res.end();
|
||||||
|
|
||||||
|
return {
|
||||||
|
props: {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function RobotsTxt() {
|
||||||
|
// placeholder component
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@@ -111,7 +111,7 @@ export async function servicesFromDocker() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
let substitutedVal = substituteEnvironmentVars(containerLabels[label]);
|
let substitutedVal = substituteEnvironmentVars(containerLabels[label]);
|
||||||
if (value === "widget.version") {
|
if (value === "widget.version" || /^widgets\[\d+\]\.version$/.test(value)) {
|
||||||
substitutedVal = parseInt(substitutedVal, 10);
|
substitutedVal = parseInt(substitutedVal, 10);
|
||||||
}
|
}
|
||||||
shvl.set(constructedService, value, substitutedVal);
|
shvl.set(constructedService, value, substitutedVal);
|
||||||
@@ -254,6 +254,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
// all widgets
|
// all widgets
|
||||||
fields,
|
fields,
|
||||||
hideErrors,
|
hideErrors,
|
||||||
|
highlight,
|
||||||
type,
|
type,
|
||||||
|
|
||||||
// azuredevops
|
// azuredevops
|
||||||
@@ -278,12 +279,16 @@ export function cleanServiceGroups(groups) {
|
|||||||
slugs,
|
slugs,
|
||||||
symbols,
|
symbols,
|
||||||
|
|
||||||
|
// crowdsec
|
||||||
|
limit24h,
|
||||||
|
|
||||||
// customapi
|
// customapi
|
||||||
mappings,
|
mappings,
|
||||||
display,
|
display,
|
||||||
|
|
||||||
// deluge, qbittorrent
|
// deluge, qbittorrent
|
||||||
enableLeechProgress,
|
enableLeechProgress,
|
||||||
|
enableLeechSize,
|
||||||
|
|
||||||
// diskstation
|
// diskstation
|
||||||
volume,
|
volume,
|
||||||
@@ -408,6 +413,9 @@ export function cleanServiceGroups(groups) {
|
|||||||
// wgeasy
|
// wgeasy
|
||||||
threshold,
|
threshold,
|
||||||
|
|
||||||
|
// yourspotify
|
||||||
|
interval,
|
||||||
|
|
||||||
// technitium
|
// technitium
|
||||||
range,
|
range,
|
||||||
|
|
||||||
@@ -437,6 +445,21 @@ export function cleanServiceGroups(groups) {
|
|||||||
index,
|
index,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (highlight) {
|
||||||
|
let parsedHighlight = highlight;
|
||||||
|
if (typeof highlight === "string") {
|
||||||
|
try {
|
||||||
|
parsedHighlight = JSON.parse(highlight);
|
||||||
|
} catch (e) {
|
||||||
|
logger.error("Invalid highlight configuration detected in config for service '%s'", service.name);
|
||||||
|
parsedHighlight = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (parsedHighlight && typeof parsedHighlight === "object") {
|
||||||
|
widget.highlight = parsedHighlight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (type === "azuredevops") {
|
if (type === "azuredevops") {
|
||||||
if (userEmail) widget.userEmail = userEmail;
|
if (userEmail) widget.userEmail = userEmail;
|
||||||
if (repositoryId) widget.repositoryId = repositoryId;
|
if (repositoryId) widget.repositoryId = repositoryId;
|
||||||
@@ -453,6 +476,10 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (defaultinterval) widget.defaultinterval = defaultinterval;
|
if (defaultinterval) widget.defaultinterval = defaultinterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (limit24h !== undefined) {
|
||||||
|
widget.limit24h = !!limit24h;
|
||||||
|
}
|
||||||
|
|
||||||
if (type === "docker") {
|
if (type === "docker") {
|
||||||
if (server) widget.server = server;
|
if (server) widget.server = server;
|
||||||
if (container) widget.container = container;
|
if (container) widget.container = container;
|
||||||
@@ -490,6 +517,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
}
|
}
|
||||||
if (["deluge", "qbittorrent"].includes(type)) {
|
if (["deluge", "qbittorrent"].includes(type)) {
|
||||||
if (enableLeechProgress !== undefined) widget.enableLeechProgress = JSON.parse(enableLeechProgress);
|
if (enableLeechProgress !== undefined) widget.enableLeechProgress = JSON.parse(enableLeechProgress);
|
||||||
|
if (enableLeechSize !== undefined) widget.enableLeechSize = JSON.parse(enableLeechSize);
|
||||||
}
|
}
|
||||||
if (["opnsense", "pfsense"].includes(type)) {
|
if (["opnsense", "pfsense"].includes(type)) {
|
||||||
if (wan) widget.wan = wan;
|
if (wan) widget.wan = wan;
|
||||||
@@ -535,6 +563,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
"speedtest",
|
"speedtest",
|
||||||
"wgeasy",
|
"wgeasy",
|
||||||
"grafana",
|
"grafana",
|
||||||
|
"gluetun",
|
||||||
].includes(type)
|
].includes(type)
|
||||||
) {
|
) {
|
||||||
if (version) widget.version = parseInt(version, 10);
|
if (version) widget.version = parseInt(version, 10);
|
||||||
@@ -623,6 +652,11 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (pool3) widget.pool3 = pool3;
|
if (pool3) widget.pool3 = pool3;
|
||||||
if (pool4) widget.pool4 = pool4;
|
if (pool4) widget.pool4 = pool4;
|
||||||
}
|
}
|
||||||
|
if (type === "yourspotify") {
|
||||||
|
if (interval !== undefined) {
|
||||||
|
widget.interval = interval;
|
||||||
|
}
|
||||||
|
}
|
||||||
return widget;
|
return widget;
|
||||||
});
|
});
|
||||||
return cleanedService;
|
return cleanedService;
|
||||||
|
|||||||
257
src/utils/highlights.js
Normal file
257
src/utils/highlights.js
Normal file
@@ -0,0 +1,257 @@
|
|||||||
|
const DEFAULT_LEVEL_CLASSES = {
|
||||||
|
good: "bg-emerald-500/40 text-emerald-950 dark:bg-emerald-900/60 dark:text-emerald-400",
|
||||||
|
warn: "bg-amber-300/30 text-amber-900 dark:bg-amber-900/30 dark:text-amber-200",
|
||||||
|
danger: "bg-rose-700/45 text-rose-200 dark:bg-rose-950/70 dark:text-rose-400",
|
||||||
|
};
|
||||||
|
|
||||||
|
const normalizeFieldKeys = (fields, widgetType) => {
|
||||||
|
if (!fields || typeof fields !== "object") return {};
|
||||||
|
|
||||||
|
return Object.entries(fields).reduce((acc, [key, value]) => {
|
||||||
|
if (value === null || value === undefined) return acc;
|
||||||
|
if (typeof key !== "string") return acc;
|
||||||
|
const trimmedKey = key.trim();
|
||||||
|
if (trimmedKey === "") return acc;
|
||||||
|
|
||||||
|
acc[trimmedKey] = value;
|
||||||
|
|
||||||
|
if (widgetType && !trimmedKey.includes(".")) {
|
||||||
|
const namespacedKey = `${widgetType}.${trimmedKey}`;
|
||||||
|
if (!(namespacedKey in acc)) {
|
||||||
|
acc[namespacedKey] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const buildHighlightConfig = (globalConfig, widgetConfig, widgetType) => {
|
||||||
|
const levels = {
|
||||||
|
...DEFAULT_LEVEL_CLASSES,
|
||||||
|
...(globalConfig?.levels || {}),
|
||||||
|
...(widgetConfig?.levels || {}),
|
||||||
|
};
|
||||||
|
|
||||||
|
const { levels: _levels, ...fields } = widgetConfig || {};
|
||||||
|
const normalizedFields = normalizeFieldKeys(fields, widgetType);
|
||||||
|
|
||||||
|
const hasLevels = Object.values(levels).some(Boolean);
|
||||||
|
const hasFields = Object.keys(normalizedFields).length > 0;
|
||||||
|
|
||||||
|
if (!hasLevels && !hasFields) return null;
|
||||||
|
|
||||||
|
return { levels, fields: normalizedFields };
|
||||||
|
};
|
||||||
|
|
||||||
|
const NUMERIC_OPERATORS = {
|
||||||
|
gt: (value, target) => value > target,
|
||||||
|
gte: (value, target) => value >= target,
|
||||||
|
lt: (value, target) => value < target,
|
||||||
|
lte: (value, target) => value <= target,
|
||||||
|
eq: (value, target) => value === target,
|
||||||
|
ne: (value, target) => value !== target,
|
||||||
|
};
|
||||||
|
|
||||||
|
const STRING_OPERATORS = {
|
||||||
|
equals: (value, target, caseSensitive) =>
|
||||||
|
caseSensitive ? value === target : value.toLowerCase() === target.toLowerCase(),
|
||||||
|
includes: (value, target, caseSensitive) =>
|
||||||
|
caseSensitive ? value.includes(target) : value.toLowerCase().includes(target.toLowerCase()),
|
||||||
|
startsWith: (value, target, caseSensitive) =>
|
||||||
|
caseSensitive ? value.startsWith(target) : value.toLowerCase().startsWith(target.toLowerCase()),
|
||||||
|
endsWith: (value, target, caseSensitive) =>
|
||||||
|
caseSensitive ? value.endsWith(target) : value.toLowerCase().endsWith(target.toLowerCase()),
|
||||||
|
};
|
||||||
|
|
||||||
|
const toNumber = (value) => {
|
||||||
|
if (typeof value === "number" && Number.isFinite(value)) return value;
|
||||||
|
if (typeof value === "string" && value.trim()) {
|
||||||
|
const trimmed = value.trim();
|
||||||
|
const candidate = Number(trimmed);
|
||||||
|
if (!Number.isNaN(candidate)) return candidate;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const parseNumericValue = (value) => {
|
||||||
|
if (value === null || value === undefined) return undefined;
|
||||||
|
if (typeof value === "number" && Number.isFinite(value)) return value;
|
||||||
|
|
||||||
|
if (typeof value === "string") {
|
||||||
|
const trimmed = value.trim();
|
||||||
|
if (!trimmed) return undefined;
|
||||||
|
|
||||||
|
const direct = Number(trimmed);
|
||||||
|
if (!Number.isNaN(direct)) return direct;
|
||||||
|
|
||||||
|
const compact = trimmed.replace(/\s+/g, "");
|
||||||
|
if (!compact || !/^[-+]?[0-9.,]+$/.test(compact)) return undefined;
|
||||||
|
|
||||||
|
const commaCount = (compact.match(/,/g) || []).length;
|
||||||
|
const dotCount = (compact.match(/\./g) || []).length;
|
||||||
|
|
||||||
|
if (commaCount && dotCount) {
|
||||||
|
const lastComma = compact.lastIndexOf(",");
|
||||||
|
const lastDot = compact.lastIndexOf(".");
|
||||||
|
if (lastComma > lastDot) {
|
||||||
|
const asDecimal = compact.replace(/\./g, "").replace(/,/g, ".");
|
||||||
|
const parsed = Number(asDecimal);
|
||||||
|
return Number.isNaN(parsed) ? undefined : parsed;
|
||||||
|
}
|
||||||
|
const asThousands = compact.replace(/,/g, "");
|
||||||
|
const parsed = Number(asThousands);
|
||||||
|
return Number.isNaN(parsed) ? undefined : parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commaCount) {
|
||||||
|
const parts = compact.split(",");
|
||||||
|
if (commaCount === 1 && parts[1]?.length <= 2) {
|
||||||
|
const parsed = Number(compact.replace(",", "."));
|
||||||
|
if (!Number.isNaN(parsed)) return parsed;
|
||||||
|
}
|
||||||
|
const isGrouped = parts.length > 1 && parts.slice(1).every((part) => part.length === 3);
|
||||||
|
if (isGrouped) {
|
||||||
|
const parsed = Number(compact.replace(/,/g, ""));
|
||||||
|
if (!Number.isNaN(parsed)) return parsed;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dotCount) {
|
||||||
|
const parts = compact.split(".");
|
||||||
|
if (dotCount === 1 && parts[1]?.length <= 2) {
|
||||||
|
const parsed = Number(compact);
|
||||||
|
if (!Number.isNaN(parsed)) return parsed;
|
||||||
|
}
|
||||||
|
const isGrouped = parts.length > 1 && parts.slice(1).every((part) => part.length === 3);
|
||||||
|
if (isGrouped) {
|
||||||
|
const parsed = Number(compact.replace(/\./g, ""));
|
||||||
|
if (!Number.isNaN(parsed)) return parsed;
|
||||||
|
}
|
||||||
|
const parsed = Number(compact);
|
||||||
|
return Number.isNaN(parsed) ? undefined : parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsed = Number(compact);
|
||||||
|
return Number.isNaN(parsed) ? undefined : parsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === "object" && value !== null && "props" in value) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const evaluateNumericRule = (value, rule) => {
|
||||||
|
if (!rule || typeof rule !== "object") return false;
|
||||||
|
const operator = rule.when && NUMERIC_OPERATORS[rule.when];
|
||||||
|
const numericValue = toNumber(rule.value);
|
||||||
|
if (operator && numericValue !== undefined) {
|
||||||
|
const passes = operator(value, numericValue);
|
||||||
|
return rule.negate ? !passes : passes;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rule.when === "between") {
|
||||||
|
const min = toNumber(rule.min ?? rule.value?.min);
|
||||||
|
const max = toNumber(rule.max ?? rule.value?.max);
|
||||||
|
if (min === undefined && max === undefined) return false;
|
||||||
|
const lowerBound = min ?? Number.NEGATIVE_INFINITY;
|
||||||
|
const upperBound = max ?? Number.POSITIVE_INFINITY;
|
||||||
|
const passes = value >= lowerBound && value <= upperBound;
|
||||||
|
return rule.negate ? !passes : passes;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rule.when === "outside") {
|
||||||
|
const min = toNumber(rule.min ?? rule.value?.min);
|
||||||
|
const max = toNumber(rule.max ?? rule.value?.max);
|
||||||
|
if (min === undefined && max === undefined) return false;
|
||||||
|
const passes = value < (min ?? Number.NEGATIVE_INFINITY) || value > (max ?? Number.POSITIVE_INFINITY);
|
||||||
|
return rule.negate ? !passes : passes;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const evaluateStringRule = (value, rule) => {
|
||||||
|
if (!rule || typeof rule !== "object") return false;
|
||||||
|
if (rule.when === "regex" && typeof rule.value === "string") {
|
||||||
|
try {
|
||||||
|
const flags = rule.flags || (rule.caseSensitive ? "" : "i");
|
||||||
|
const regex = new RegExp(rule.value, flags);
|
||||||
|
const passes = regex.test(value);
|
||||||
|
return rule.negate ? !passes : passes;
|
||||||
|
} catch (error) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const operator = rule.when && STRING_OPERATORS[rule.when];
|
||||||
|
if (!operator || typeof rule.value !== "string") return false;
|
||||||
|
const passes = operator(value, rule.value, Boolean(rule.caseSensitive));
|
||||||
|
return rule.negate ? !passes : passes;
|
||||||
|
};
|
||||||
|
|
||||||
|
const ensureArray = (value) => {
|
||||||
|
if (Array.isArray(value)) return value;
|
||||||
|
if (value === undefined || value === null) return [];
|
||||||
|
return [value];
|
||||||
|
};
|
||||||
|
|
||||||
|
const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
||||||
|
const { numeric, string, valueOnly } = ruleSet;
|
||||||
|
|
||||||
|
if (numeric && numericValue !== undefined) {
|
||||||
|
const numericRules = ensureArray(numeric);
|
||||||
|
const numericCandidates = Array.isArray(numericValue) ? numericValue : [numericValue];
|
||||||
|
for (const candidate of numericCandidates) {
|
||||||
|
for (const rule of numericRules) {
|
||||||
|
if (rule?.level && evaluateNumericRule(candidate, rule)) {
|
||||||
|
return { level: rule.level, source: "numeric", rule, valueOnly };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string && stringValue !== undefined) {
|
||||||
|
const stringRules = ensureArray(string);
|
||||||
|
for (const rule of stringRules) {
|
||||||
|
if (rule?.level && evaluateStringRule(stringValue, rule)) {
|
||||||
|
return { level: rule.level, source: "string", rule, valueOnly };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const evaluateHighlight = (fieldKey, value, highlightConfig) => {
|
||||||
|
if (!highlightConfig || !fieldKey) return null;
|
||||||
|
const { fields } = highlightConfig;
|
||||||
|
if (!fields || typeof fields !== "object") return null;
|
||||||
|
|
||||||
|
const ruleSet = fields[fieldKey];
|
||||||
|
if (!ruleSet) return null;
|
||||||
|
|
||||||
|
const numericValue = parseNumericValue(value);
|
||||||
|
let stringValue;
|
||||||
|
if (typeof value === "string") {
|
||||||
|
stringValue = value;
|
||||||
|
} else if (typeof value === "number" || typeof value === "bigint") {
|
||||||
|
stringValue = String(value);
|
||||||
|
} else if (typeof value === "boolean") {
|
||||||
|
stringValue = value ? "true" : "false";
|
||||||
|
}
|
||||||
|
|
||||||
|
const normalizedString = typeof stringValue === "string" ? stringValue.trim() : stringValue;
|
||||||
|
|
||||||
|
return findHighlightLevel(ruleSet, numericValue, normalizedString);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getHighlightClass = (level, highlightConfig) => {
|
||||||
|
if (!level || !highlightConfig) return undefined;
|
||||||
|
return highlightConfig.levels?.[level];
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getDefaultHighlightLevels = () => DEFAULT_LEVEL_CLASSES;
|
||||||
@@ -27,6 +27,9 @@ export default async function credentialedProxyHandler(req, res, map) {
|
|||||||
|
|
||||||
const headers = {
|
const headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
|
...(widgets[widget.type].headers ?? {}),
|
||||||
|
...(widget.headers ?? {}),
|
||||||
|
...(req.extraHeaders ?? {}),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (widget.type === "stocks") {
|
if (widget.type === "stocks") {
|
||||||
@@ -53,6 +56,7 @@ export default async function credentialedProxyHandler(req, res, map) {
|
|||||||
"linkwarden",
|
"linkwarden",
|
||||||
"mealie",
|
"mealie",
|
||||||
"netalertx",
|
"netalertx",
|
||||||
|
"pangolin",
|
||||||
"tailscale",
|
"tailscale",
|
||||||
"tandoor",
|
"tandoor",
|
||||||
"pterodactyl",
|
"pterodactyl",
|
||||||
|
|||||||
@@ -25,7 +25,11 @@ export default async function genericProxyHandler(req, res, map) {
|
|||||||
}
|
}
|
||||||
const url = new URL(urlString);
|
const url = new URL(urlString);
|
||||||
|
|
||||||
const headers = req.extraHeaders ?? widget.headers ?? widgets[widget.type].headers ?? {};
|
const headers = {
|
||||||
|
...(widgets[widget.type].headers ?? {}),
|
||||||
|
...(widget.headers ?? {}),
|
||||||
|
...(req.extraHeaders ?? {}),
|
||||||
|
};
|
||||||
|
|
||||||
if (widget.username && widget.password) {
|
if (widget.username && widget.password) {
|
||||||
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
|
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ 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 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 } : { autoSelectFamilyAttemptTimeout: 500 };
|
||||||
|
|
||||||
let request = null;
|
let request = null;
|
||||||
if (constructedUrl.protocol === "https:") {
|
if (constructedUrl.protocol === "https:") {
|
||||||
|
|||||||
@@ -24,10 +24,11 @@ function buildResponse(plans) {
|
|||||||
|
|
||||||
plans.forEach((plan) => {
|
plans.forEach((plan) => {
|
||||||
const statuses = plan?.recentBackups?.status;
|
const statuses = plan?.recentBackups?.status;
|
||||||
|
// See https://github.com/garethgeorge/backrest/blob/4357295a17cb2e71639473c9929a060c4dd1b624/proto/v1/operations.proto#L78-L87
|
||||||
if (Array.isArray(statuses) && statuses.length > 0) {
|
if (Array.isArray(statuses) && statuses.length > 0) {
|
||||||
if (statuses[0] === "STATUS_SUCCESS") {
|
if (statuses[0] === "STATUS_SUCCESS") {
|
||||||
numSuccessLatest++;
|
numSuccessLatest++;
|
||||||
} else {
|
} else if (statuses[0] === "STATUS_ERROR") {
|
||||||
numFailureLatest++;
|
numFailureLatest++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,13 +106,19 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
|||||||
};
|
};
|
||||||
|
|
||||||
const eventsToAdd = [];
|
const eventsToAdd = [];
|
||||||
events.forEach((event, index) => {
|
events.forEach((event) => {
|
||||||
const occurrences = getOcurrencesFromRange(event);
|
const occurrences = getOcurrencesFromRange(event);
|
||||||
|
|
||||||
occurrences.forEach((icalDate) => {
|
occurrences.forEach((icalDate) => {
|
||||||
const date = icalDate.toJSDate();
|
const date = icalDate.toJSDate();
|
||||||
|
|
||||||
const hash = simpleHash(`${event.id}-${event.title}-${index}-${date.toString()}`);
|
const occurrenceTimestamp = date.getTime();
|
||||||
|
const eventIdentifier =
|
||||||
|
event.id ??
|
||||||
|
simpleHash(
|
||||||
|
`${event.title ?? ""}-${event.type ?? ""}-${event.status ?? ""}-${event.url ?? ""}-${event.location ?? ""}`,
|
||||||
|
);
|
||||||
|
const hash = simpleHash(`${eventIdentifier}-${occurrenceTimestamp}`);
|
||||||
|
|
||||||
let title = event.title;
|
let title = event.title;
|
||||||
if (showName) {
|
if (showName) {
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ const components = {
|
|||||||
openmediavault: dynamic(() => import("./openmediavault/component")),
|
openmediavault: dynamic(() => import("./openmediavault/component")),
|
||||||
openwrt: dynamic(() => import("./openwrt/component")),
|
openwrt: dynamic(() => import("./openwrt/component")),
|
||||||
paperlessngx: dynamic(() => import("./paperlessngx/component")),
|
paperlessngx: dynamic(() => import("./paperlessngx/component")),
|
||||||
|
pangolin: dynamic(() => import("./pangolin/component")),
|
||||||
pfsense: dynamic(() => import("./pfsense/component")),
|
pfsense: dynamic(() => import("./pfsense/component")),
|
||||||
photoprism: dynamic(() => import("./photoprism/component")),
|
photoprism: dynamic(() => import("./photoprism/component")),
|
||||||
proxmoxbackupserver: dynamic(() => import("./proxmoxbackupserver/component")),
|
proxmoxbackupserver: dynamic(() => import("./proxmoxbackupserver/component")),
|
||||||
@@ -150,6 +151,7 @@ const components = {
|
|||||||
wgeasy: dynamic(() => import("./wgeasy/component")),
|
wgeasy: dynamic(() => import("./wgeasy/component")),
|
||||||
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
||||||
xteve: dynamic(() => import("./xteve/component")),
|
xteve: dynamic(() => import("./xteve/component")),
|
||||||
|
yourspotify: dynamic(() => import("./yourspotify/component")),
|
||||||
zabbix: dynamic(() => import("./zabbix/component")),
|
zabbix: dynamic(() => import("./zabbix/component")),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export default function Component({ service }) {
|
|||||||
|
|
||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
|
|
||||||
const { data: alerts, error: alertsError } = useWidgetAPI(widget, "alerts");
|
const { data: alerts, error: alertsError } = useWidgetAPI(widget, !!widget.limit24h ? "alerts24h" : "alerts");
|
||||||
const { data: bans, error: bansError } = useWidgetAPI(widget, "bans");
|
const { data: bans, error: bansError } = useWidgetAPI(widget, "bans");
|
||||||
|
|
||||||
if (alertsError || bansError) {
|
if (alertsError || bansError) {
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ const widget = {
|
|||||||
alerts: {
|
alerts: {
|
||||||
endpoint: "alerts",
|
endpoint: "alerts",
|
||||||
},
|
},
|
||||||
|
alerts24h: {
|
||||||
|
endpoint: "alerts?limit=0&since=24h",
|
||||||
|
},
|
||||||
bans: {
|
bans: {
|
||||||
endpoint: "alerts?decision_type=ban&origin=crowdsec&has_active_decision=1",
|
endpoint: "alerts?decision_type=ban&origin=crowdsec&has_active_decision=1",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -166,7 +166,11 @@ export default function Component({ service }) {
|
|||||||
refreshInterval: Math.max(1000, refreshInterval),
|
refreshInterval: Math.max(1000, refreshInterval),
|
||||||
});
|
});
|
||||||
|
|
||||||
if (customError) {
|
// if mappings includes an error field and the data contains an error field then show data even if there is an error
|
||||||
|
const mappingsIncludesError = Array.isArray(mappings) && mappings.find((mapping) => mapping.field === "error");
|
||||||
|
const errorIsData = customData && typeof customData === "object" && "error" in customData;
|
||||||
|
|
||||||
|
if (customError && !(mappingsIncludesError && errorIsData)) {
|
||||||
return <Container service={service} error={customError} />;
|
return <Container service={service} error={customError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -205,13 +205,14 @@ export default function Component({ service }) {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
|
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
data: sessionsData,
|
data: sessionsData,
|
||||||
error: sessionsError,
|
error: sessionsError,
|
||||||
mutate: sessionMutate,
|
mutate: sessionMutate,
|
||||||
} = useWidgetAPI(widget, "Sessions", {
|
} = useWidgetAPI(widget, enableNowPlaying ? "Sessions" : "", {
|
||||||
refreshInterval: 5000,
|
refreshInterval: enableNowPlaying ? 5000 : undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { data: countData, error: countError } = useWidgetAPI(widget, "Count", {
|
const { data: countData, error: countError } = useWidgetAPI(widget, "Count", {
|
||||||
@@ -239,13 +240,12 @@ export default function Component({ service }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const enableBlocks = service.widget?.enableBlocks;
|
const enableBlocks = service.widget?.enableBlocks;
|
||||||
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
|
||||||
const enableMediaControl = service.widget?.enableMediaControl !== false; // default is 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
|
||||||
|
|
||||||
if (!sessionsData || !countData) {
|
if ((enableNowPlaying && !sessionsData) || !countData) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{enableBlocks && <CountBlocks service={service} countData={null} />}
|
{enableBlocks && <CountBlocks service={service} countData={null} />}
|
||||||
|
|||||||
@@ -14,6 +14,12 @@ export default function Component({ service }) {
|
|||||||
return <Container service={service} error={resultError} />;
|
return <Container service={service} error={resultError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!widget.fields || widget.fields.length === 0) {
|
||||||
|
widget.fields = ["online", "offline", "offline_alt", "total"];
|
||||||
|
} else if (widget.fields.length > 4) {
|
||||||
|
widget.fields = widget.fields.slice(0, 4);
|
||||||
|
}
|
||||||
|
|
||||||
if (!resultData) {
|
if (!resultData) {
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
|
|||||||
95
src/widgets/frigate/proxy.js
Normal file
95
src/widgets/frigate/proxy.js
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import getServiceWidget from "utils/config/service-helpers";
|
||||||
|
import createLogger from "utils/logger";
|
||||||
|
import { asJson, formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers";
|
||||||
|
import { addCookieToJar } from "utils/proxy/cookie-jar";
|
||||||
|
import { httpProxy } from "utils/proxy/http";
|
||||||
|
import widgets from "widgets/widgets";
|
||||||
|
|
||||||
|
const proxyName = "frigateProxyHandler";
|
||||||
|
const logger = createLogger(proxyName);
|
||||||
|
|
||||||
|
export default async function frigateProxyHandler(req, res, map) {
|
||||||
|
const { group, service, endpoint, index } = req.query;
|
||||||
|
|
||||||
|
if (group && service) {
|
||||||
|
const widget = await getServiceWidget(group, service, index);
|
||||||
|
|
||||||
|
if (!widgets?.[widget.type]?.api) {
|
||||||
|
return res.status(403).json({ error: "Service does not support API calls" });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (widget) {
|
||||||
|
const url = formatApiCall(widgets[widget.type].api, { endpoint, ...widget });
|
||||||
|
|
||||||
|
const params = {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let [status, , data] = await httpProxy(url, params);
|
||||||
|
|
||||||
|
if (status === 401 && widget.username && widget.password) {
|
||||||
|
const loginUrl = `${widget.url}/api/login`;
|
||||||
|
logger.debug("Attempting login to Frigate at %s", loginUrl);
|
||||||
|
const [loginStatus, , , loginResponseHeaders] = await httpProxy(loginUrl, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify({ user: widget.username, password: widget.password }),
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (loginStatus !== 200) {
|
||||||
|
logger.error("HTTP Error %d calling %s", loginStatus, sanitizeErrorURL(loginUrl));
|
||||||
|
return res.status(status).json({
|
||||||
|
error: {
|
||||||
|
message: `HTTP Error ${status} while trying to login to Frigate`,
|
||||||
|
url: sanitizeErrorURL(url),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addCookieToJar(url, loginResponseHeaders);
|
||||||
|
// Retry original request with cookie set
|
||||||
|
[status, , data] = await httpProxy(url, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status >= 400) {
|
||||||
|
logger.error("HTTP Error %d calling %s", status, sanitizeErrorURL(url));
|
||||||
|
return res.status(status).json({
|
||||||
|
error: {
|
||||||
|
message: `HTTP Error ${status} from Frigate`,
|
||||||
|
url: sanitizeErrorURL(url),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
data = asJson(data);
|
||||||
|
|
||||||
|
if (endpoint == "stats") {
|
||||||
|
res.status(status).send({
|
||||||
|
num_cameras: data?.cameras !== undefined ? Object.keys(data?.cameras).length : 0,
|
||||||
|
uptime: data?.service?.uptime,
|
||||||
|
version: data?.service.version,
|
||||||
|
});
|
||||||
|
} else if (endpoint == "events") {
|
||||||
|
return res.status(status).send(
|
||||||
|
data.slice(0, 5).map((event) => ({
|
||||||
|
id: event.id,
|
||||||
|
camera: event.camera,
|
||||||
|
label: event.label,
|
||||||
|
start_time: new Date(event.start_time * 1000),
|
||||||
|
thumbnail: event.thumbnail,
|
||||||
|
score: event.data.score,
|
||||||
|
type: event.data.type,
|
||||||
|
})),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Invalid or missing proxy service type '%s' in group '%s'", service, group);
|
||||||
|
return res.status(400).json({ error: "Invalid proxy service type" });
|
||||||
|
}
|
||||||
@@ -1,37 +1,12 @@
|
|||||||
import { asJson } from "utils/proxy/api-helpers";
|
import frigateProxyHandler from "./proxy";
|
||||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
|
||||||
|
|
||||||
const widget = {
|
const widget = {
|
||||||
api: "{url}/api/{endpoint}",
|
api: "{url}/api/{endpoint}",
|
||||||
proxyHandler: genericProxyHandler,
|
proxyHandler: frigateProxyHandler,
|
||||||
|
|
||||||
mappings: {
|
mappings: {
|
||||||
stats: {
|
stats: { endpoint: "stats" },
|
||||||
endpoint: "stats",
|
events: { endpoint: "events" },
|
||||||
map: (data) => {
|
|
||||||
const jsonData = asJson(data);
|
|
||||||
return {
|
|
||||||
num_cameras: jsonData?.cameras !== undefined ? Object.keys(jsonData?.cameras).length : 0,
|
|
||||||
uptime: jsonData?.service?.uptime,
|
|
||||||
version: jsonData?.service.version,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
},
|
|
||||||
events: {
|
|
||||||
endpoint: "events",
|
|
||||||
map: (data) =>
|
|
||||||
asJson(data)
|
|
||||||
.slice(0, 5)
|
|
||||||
.map((event) => ({
|
|
||||||
id: event.id,
|
|
||||||
camera: event.camera,
|
|
||||||
label: event.label,
|
|
||||||
start_time: new Date(event.start_time * 1000),
|
|
||||||
thumbnail: event.thumbnail,
|
|
||||||
score: event.data.score,
|
|
||||||
type: event.data.type,
|
|
||||||
})),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user