Compare commits

...

56 Commits
v1.6.0 ... dev

Author SHA1 Message Date
shamoon
08da8e66fd Add @tailwindcss/oxide to onlyBuiltDependencies
Some checks failed
Docker CI / Linting Checks (push) Waiting to run
Docker CI / Docker Build & Push (push) Blocked by required conditions
Crowdin Action / Crowdin Sync (push) Has been cancelled
2025-12-30 19:24:42 -08:00
shamoon
682e0cbc82 Enhancement: Add support for Pyload 0.5.0 CSRF-protected API (#6142) 2025-12-30 19:18:56 -08:00
shamoon
f7ad322d4c Revert "Fix: restore bg image to body again (#5828)"
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
This reverts commit 06cf76d724.
2025-12-30 19:01:08 -08:00
shamoon
2b31c23b9e Fix: support latest homebridge status labels (#6139)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
2025-12-29 14:15:42 -08:00
Daniel
ae258b8276 Fix: ensure minimum gap for resource widget items (#6137) 2025-12-29 14:03:09 -08:00
I-am-not-a-number
ff296be4a4 Enhancement: include prefix length when displaying ipv6 prefix (#6130)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-12-27 17:44:30 +00:00
Cameron Horn
31da9ee417 Fix: prevent cache collision with multiple plex widgets (#6126)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-12-24 14:47:22 -08:00
shamoon
be7a00d631 Enhancement: fully support custom headers (#6125)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-12-23 08:02:58 -08:00
shamoon
0d99a8766f Fix: retrieve stats from all network interfaces (#6102)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-12-15 14:05:00 -08:00
dependabot[bot]
e66b58dc53 Chore(deps): Bump next from 15.5.7 to 15.5.9 (#6089)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 23:17:21 +00:00
shamoon
1b32cbbbfd Enhancement: refactor UptimeRobot widget (#6088) 2025-12-12 15:04:22 -08:00
dependabot[bot]
681a8a828b Chore(deps): Bump actions/cache from 4 to 5 (#6085)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Crowdin Action / Crowdin Sync (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 16:22:01 +00:00
dependabot[bot]
f8009a7067 Chore(deps): Bump dessant/lock-threads from 5 to 6 (#6084)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 08:12:51 -08:00
shamoon
1ed2f16cbf Enhancement: improve dual-stack support (#6070)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-12-10 08:26:58 -08:00
github-actions[bot]
ba2b3eeb9e New Crowdin translations by GitHub Action (#5970) 2025-12-10 07:35:47 -08:00
shamoon
45ca94eb6d Use ComboboxInput 2025-12-10 07:34:26 -08:00
shamoon
a07cc25441 Fix: restore clickable suggestions in search widget (#6069) 2025-12-10 07:32:29 -08:00
Erv Walter
0dcd25d5ad Feature: Pangolin service widget (#6065)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-12-08 13:30:08 -08:00
shamoon
cd34796b9d Merge branch 'main' into dev
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-12-07 08:53:57 -08:00
shamoon
0d788e3d06 Documentation: note instructions for enabling IPv6 in Docker
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-12-07 08:49:27 -08:00
shamoon
ed1dafadde Improvement: include longer auto-select timeout in http agent options (#6059)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Crowdin Action / Crowdin Sync (push) Has been cancelled
2025-12-06 21:29:18 -08:00
shamoon
96ac9046b3 Fix: handle widget version parsing for array labels (#6053)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-12-04 08:53:28 -08:00
shamoon
6d5f35f07e Enhancement: add valueOnly option to block highlighting feature (#6051) 2025-12-04 08:42:24 -08:00
dependabot[bot]
c77dfa4c64 Chore(deps): Bump next from 15.5.2 to 15.5.7 (#6044)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-03 11:48:45 -08:00
shamoon
307d7f4b2d [BREAKING] Chore: remove deprecated widget field colorizing (#6043) 2025-12-03 10:46:29 -08:00
shamoon
fb9927ab0c Fix: correct language handling and remove zh-CN locale (#6041) 2025-12-03 10:33:25 -08:00
dependabot[bot]
d13165699b Chore(deps-dev): Bump prettier from 3.6.2 to 3.7.3 (#6033)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 22:26:24 +00:00
dependabot[bot]
65ff248ee7 Chore(deps): Bump systeminformation from 5.27.7 to 5.27.11 (#6032)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 21:28:58 +00:00
dependabot[bot]
87e5643892 Chore(deps): Bump raw-body from 3.0.1 to 3.0.2 (#6034)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 12:21:53 -08:00
shamoon
8887281246 Documentation: make docker.sock mount read-only in docs
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-11-30 20:04:42 -08:00
shamoon
5b50e8ff81 Enhancement: handle gluetun port forwarded API change (#6011)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
2025-11-25 13:28:50 -08:00
Romloader
c36c6a9012 Enhancement: support authentication for Frigate widget (#6006)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-11-25 11:34:54 -08:00
shamoon
cf990063b9 Add AI tools disclosure to PR template
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-23 23:27:05 -08:00
dependabot[bot]
610f1bd974 Chore(deps): Bump actions/checkout from 5 to 6 (#5998)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-23 08:03:17 -08:00
shamoon
4031178831 Enhancement: treat 'error' as custom api field when mapped (#5999) 2025-11-21 10:36:31 -08:00
shamoon
b65c8399d8 Handle raw number errors, I guess 2025-11-21 10:05:01 -08:00
Darkangeel_hd
6b63cfd491 Chore: change MySpeed blocks layout order (#5984)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-17 06:57:47 -08:00
shamoon
196c51bf73 Enhancement: support limit crowdsec alerts to 24h (#5981)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Crowdin Action / Crowdin Sync (push) Has been cancelled
Co-authored-by: MountainGod2 <admin@reid.ca>
2025-11-16 16:38:55 -08:00
qmph22
17c9b2631e Enhancement: add net worth field for ghostfolio (#5958)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-11-13 00:31:55 +00:00
Diego Barreiro Perez
1a21189643 Enhancement: Allow Disabling Indexing (#5954)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-11-13 00:13:16 +00:00
shamoon
b6b428363c 1.7.0
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-11-11 09:03:26 -08:00
shamoon
e707fa46cf Revert "Development: specify pnpm version (#5364)"
This reverts commit 0c6c40dae7.
2025-11-11 09:03:15 -08:00
shamoon
3d040362cb Merge branch 'dev' 2025-11-11 09:00:14 -08:00
github-actions[bot]
57b193b037 New Crowdin translations by GitHub Action (#5953) 2025-11-11 08:59:39 -08:00
shamoon
8a75c9b6e3 Fixhancement: improve UID support (#5963) 2025-11-11 08:56:44 -08:00
Alessandro Travi
0dafc792f7 Documentation: note support for omada controller version 6 (#5961)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Crowdin Action / Crowdin Sync (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-10 23:07:28 -08:00
shamoon
afc0fe29ee Fix: enforce max field blocks for esp home widget (#5951)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-08 12:32:41 -08:00
shamoon
817a9bbce5 Clarify showSummary precedence in Komodo widget docs
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-11-05 08:44:31 -08:00
dependabot[bot]
3ef7031eb0 Chore(deps): Bump docker/setup-qemu-action from 3.6.0 to 3.7.0 (#5939)
Some checks failed
Crowdin Action / Crowdin Sync (push) Has been cancelled
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-05 16:41:24 +00:00
shamoon
6faf32eae9 Chore: better guard against empty data in komodo widget 2025-11-05 08:32:33 -08:00
shamoon
455e86571a Chore: improve event hash generation in iCal integration (#5938) 2025-11-05 08:11:24 -08:00
shamoon
7d1e0c087a Bump version to 1.6.1
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build Docs (push) Has been cancelled
Docs / Build & Deploy Docs (push) Has been cancelled
2025-11-04 16:20:12 -08:00
shamoon
d48ef4c038 Merge branch 'dev' 2025-11-04 16:19:56 -08:00
shamoon
4a2eeaa8b9 Fix: correct cached version check (#5933) 2025-11-04 13:59:35 -08:00
shamoon
faa2e6bb36 Fix: ensure minimum height for inner container (#5930)
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
Crowdin Action / Crowdin Sync (push) Has been cancelled
Repository Maintenance / Stale (push) Has been cancelled
Repository Maintenance / Lock Old Threads (push) Has been cancelled
Repository Maintenance / Close Answered Discussions (push) Has been cancelled
Repository Maintenance / Close Outdated Discussions (push) Has been cancelled
Repository Maintenance / Close Unsupported Feature Requests (push) Has been cancelled
2025-11-04 10:12:49 -08:00
github-actions[bot]
529814cf03 New Crowdin translations by GitHub Action (#5802)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-04 07:54:08 -08:00
108 changed files with 2717 additions and 2418 deletions

View File

@@ -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.

View File

@@ -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:

View File

@@ -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,6 +35,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
with: with:
version: 10
run_install: false run_install: false
- name: Setup Node.js - name: Setup Node.js
@@ -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,6 +94,7 @@ jobs:
- name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
with: with:
version: 10
run_install: false run_install: false
- name: Setup Node.js - name: Setup Node.js
@@ -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

View File

@@ -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

View File

@@ -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'

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.
@@ -159,6 +178,19 @@ Widgets can tint their metric block text automatically based on rules defined al
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>`. 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,

View File

@@ -396,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.
@@ -571,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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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
``` ```

View File

@@ -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
``` ```

View File

@@ -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:

View File

@@ -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
``` ```

View File

@@ -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
``` ```

View File

@@ -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"]`.

View 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.

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{ {
"name": "homepage", "name": "homepage",
"version": "1.6.0", "version": "1.7.0",
"private": true, "private": true,
"scripts": { "scripts": {
"preinstall": "npx only-allow pnpm", "preinstall": "npx only-allow pnpm",
@@ -25,18 +25,18 @@
"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": "^7.1.0", "pretty-bytes": "^7.1.0",
"raw-body": "^3.0.1", "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",
@@ -54,7 +54,7 @@
"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.3.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",
@@ -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"
] ]

434
pnpm-lock.yaml generated
View File

@@ -51,11 +51,11 @@ importers:
specifier: ^1.2.2 specifier: ^1.2.2
version: 1.2.2 version: 1.2.2
next: next:
specifier: ^15.5.2 specifier: ^15.5.9
version: 15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 15.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-i18next: next-i18next:
specifier: ^12.1.0 specifier: ^12.1.0
version: 12.1.0(next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 12.1.0(next@15.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
ping: ping:
specifier: ^0.4.4 specifier: ^0.4.4
version: 0.4.4 version: 0.4.4
@@ -63,8 +63,8 @@ importers:
specifier: ^7.1.0 specifier: ^7.1.0
version: 7.1.0 version: 7.1.0
raw-body: raw-body:
specifier: ^3.0.1 specifier: ^3.0.2
version: 3.0.1 version: 3.0.2
react: react:
specifier: ^18.3.1 specifier: ^18.3.1
version: 18.3.1 version: 18.3.1
@@ -84,8 +84,8 @@ importers:
specifier: ^2.3.3 specifier: ^2.3.3
version: 2.3.3(react@18.3.1) version: 2.3.3(react@18.3.1)
systeminformation: systeminformation:
specifier: ^5.27.7 specifier: ^5.27.11
version: 5.27.7 version: 5.27.11
tough-cookie: tough-cookie:
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.0 version: 6.0.0
@@ -122,7 +122,7 @@ importers:
version: 6.10.2(eslint@9.25.1(jiti@2.6.1)) version: 6.10.2(eslint@9.25.1(jiti@2.6.1))
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: ^5.5.4 specifier: ^5.5.4
version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.6.2) version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.7.3)
eslint-plugin-react: eslint-plugin-react:
specifier: ^7.37.4 specifier: ^7.37.4
version: 7.37.4(eslint@9.25.1(jiti@2.6.1)) version: 7.37.4(eslint@9.25.1(jiti@2.6.1))
@@ -133,11 +133,11 @@ importers:
specifier: ^8.5.6 specifier: ^8.5.6
version: 8.5.6 version: 8.5.6
prettier: prettier:
specifier: ^3.6.2 specifier: ^3.7.3
version: 3.6.2 version: 3.7.3
prettier-plugin-organize-imports: prettier-plugin-organize-imports:
specifier: ^4.3.0 specifier: ^4.3.0
version: 4.3.0(prettier@3.6.2)(typescript@5.7.3) version: 4.3.0(prettier@3.7.3)(typescript@5.7.3)
tailwind-scrollbar: tailwind-scrollbar:
specifier: ^4.0.2 specifier: ^4.0.2
version: 4.0.2(react@18.3.1)(tailwindcss@4.0.9) version: 4.0.2(react@18.3.1)(tailwindcss@4.0.9)
@@ -183,8 +183,8 @@ packages:
'@emnapi/core@1.4.0': '@emnapi/core@1.4.0':
resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==}
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.7.1':
resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
'@emnapi/wasi-threads@1.0.1': '@emnapi/wasi-threads@1.0.1':
resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==}
@@ -284,124 +284,139 @@ packages:
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'} engines: {node: '>=18.18'}
'@img/sharp-darwin-arm64@0.34.3': '@img/colour@1.0.0':
resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.34.5':
resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-darwin-x64@0.34.3': '@img/sharp-darwin-x64@0.34.5':
resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-arm64@1.2.0': '@img/sharp-libvips-darwin-arm64@1.2.4':
resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-darwin-x64@1.2.0': '@img/sharp-libvips-darwin-x64@1.2.4':
resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@img/sharp-libvips-linux-arm64@1.2.0': '@img/sharp-libvips-linux-arm64@1.2.4':
resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-arm@1.2.0': '@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-ppc64@1.2.0': '@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-s390x@1.2.0': '@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
'@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-libvips-linux-x64@1.2.0': '@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-arm64@1.2.0': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-libvips-linuxmusl-x64@1.2.0': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linux-arm64@0.34.3': '@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linux-arm@0.34.3': '@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@img/sharp-linux-ppc64@0.34.3': '@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@img/sharp-linux-s390x@0.34.3': '@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
'@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@img/sharp-linux-x64@0.34.3': '@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-arm64@0.34.3': '@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@img/sharp-linuxmusl-x64@0.34.3': '@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@img/sharp-wasm32@0.34.3': '@img/sharp-wasm32@0.34.5':
resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [wasm32] cpu: [wasm32]
'@img/sharp-win32-arm64@0.34.3': '@img/sharp-win32-arm64@0.34.5':
resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@img/sharp-win32-ia32@0.34.3': '@img/sharp-win32-ia32@0.34.5':
resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@img/sharp-win32-x64@0.34.3': '@img/sharp-win32-x64@0.34.5':
resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -451,56 +466,56 @@ packages:
'@napi-rs/wasm-runtime@0.2.8': '@napi-rs/wasm-runtime@0.2.8':
resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==}
'@next/env@15.5.2': '@next/env@15.5.9':
resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==} resolution: {integrity: sha512-4GlTZ+EJM7WaW2HEZcyU317tIQDjkQIyENDLxYJfSWlfqguN+dHkZgyQTV/7ykvobU7yEH5gKvreNrH4B6QgIg==}
'@next/eslint-plugin-next@15.2.4': '@next/eslint-plugin-next@15.2.4':
resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==}
'@next/swc-darwin-arm64@15.5.2': '@next/swc-darwin-arm64@15.5.7':
resolution: {integrity: sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==} resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@15.5.2': '@next/swc-darwin-x64@15.5.7':
resolution: {integrity: sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==} resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@15.5.2': '@next/swc-linux-arm64-gnu@15.5.7':
resolution: {integrity: sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==} resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@15.5.2': '@next/swc-linux-arm64-musl@15.5.7':
resolution: {integrity: sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==} resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@15.5.2': '@next/swc-linux-x64-gnu@15.5.7':
resolution: {integrity: sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==} resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@15.5.2': '@next/swc-linux-x64-musl@15.5.7':
resolution: {integrity: sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==} resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@15.5.2': '@next/swc-win32-arm64-msvc@15.5.7':
resolution: {integrity: sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==} resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@15.5.2': '@next/swc-win32-x64-msvc@15.5.7':
resolution: {integrity: sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==} resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -1105,8 +1120,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
caniuse-lite@1.0.30001739: caniuse-lite@1.0.30001760:
resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1152,10 +1167,6 @@ packages:
color@3.2.1: color@3.2.1:
resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
color@4.2.3:
resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines: {node: '>=12.5.0'}
colorspace@1.1.4: colorspace@1.1.4:
resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
@@ -1309,14 +1320,14 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'} engines: {node: '>=6'}
detect-libc@2.0.4:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'}
detect-libc@2.1.1: detect-libc@2.1.1:
resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==}
engines: {node: '>=8'} engines: {node: '>=8'}
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
docker-modem@5.0.6: docker-modem@5.0.6:
resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==}
engines: {node: '>= 8.0'} engines: {node: '>= 8.0'}
@@ -1749,8 +1760,8 @@ packages:
http-cache-semantics@4.2.0: http-cache-semantics@4.2.0:
resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
http-errors@2.0.0: http-errors@2.0.1:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
http2-wrapper@2.2.1: http2-wrapper@2.2.1:
@@ -2201,8 +2212,8 @@ packages:
next: '>= 10.0.0' next: '>= 10.0.0'
react: '>= 16.8.0' react: '>= 16.8.0'
next@15.5.2: next@15.5.9:
resolution: {integrity: sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==} resolution: {integrity: sha512-agNLK89seZEtC5zUHwtut0+tNrc0Xw4FT/Dg+B/VLEo9pAcS9rtTKpek3V6kVcVwsB2YlqMaHdfZL4eLEVYuCg==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -2371,8 +2382,8 @@ packages:
vue-tsc: vue-tsc:
optional: true optional: true
prettier@3.6.2: prettier@3.7.3:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} resolution: {integrity: sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
@@ -2409,8 +2420,8 @@ packages:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'} engines: {node: '>=10'}
raw-body@3.0.1: raw-body@3.0.2:
resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
react-dom@18.3.1: react-dom@18.3.1:
@@ -2597,8 +2608,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true hasBin: true
semver@7.7.2: semver@7.7.3:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@@ -2617,8 +2628,8 @@ packages:
setprototypeof@1.2.0: setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
sharp@0.34.3: sharp@0.34.5:
resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@2.0.0: shebang-command@2.0.0:
@@ -2669,8 +2680,8 @@ packages:
stack-trace@0.0.10: stack-trace@0.0.10:
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
statuses@2.0.1: statuses@2.0.2:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
stop-iteration-iterator@1.1.0: stop-iteration-iterator@1.1.0:
@@ -2776,8 +2787,8 @@ packages:
resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}
systeminformation@5.27.7: systeminformation@5.27.11:
resolution: {integrity: sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==} resolution: {integrity: sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true hasBin: true
@@ -3078,7 +3089,7 @@ snapshots:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
'@emnapi/runtime@1.5.0': '@emnapi/runtime@1.7.1':
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
optional: true optional: true
@@ -3192,90 +3203,101 @@ snapshots:
'@humanwhocodes/retry@0.4.2': {} '@humanwhocodes/retry@0.4.2': {}
'@img/sharp-darwin-arm64@0.34.3': '@img/colour@1.0.0':
optional: true
'@img/sharp-darwin-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.2.0 '@img/sharp-libvips-darwin-arm64': 1.2.4
optional: true optional: true
'@img/sharp-darwin-x64@0.34.3': '@img/sharp-darwin-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.2.0 '@img/sharp-libvips-darwin-x64': 1.2.4
optional: true optional: true
'@img/sharp-libvips-darwin-arm64@1.2.0': '@img/sharp-libvips-darwin-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-darwin-x64@1.2.0': '@img/sharp-libvips-darwin-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm64@1.2.0': '@img/sharp-libvips-linux-arm64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-arm@1.2.0': '@img/sharp-libvips-linux-arm@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-ppc64@1.2.0': '@img/sharp-libvips-linux-ppc64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-s390x@1.2.0': '@img/sharp-libvips-linux-riscv64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linux-x64@1.2.0': '@img/sharp-libvips-linux-s390x@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-arm64@1.2.0': '@img/sharp-libvips-linux-x64@1.2.4':
optional: true optional: true
'@img/sharp-libvips-linuxmusl-x64@1.2.0': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
optional: true optional: true
'@img/sharp-linux-arm64@0.34.3': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
optional: true
'@img/sharp-linux-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.2.0 '@img/sharp-libvips-linux-arm64': 1.2.4
optional: true optional: true
'@img/sharp-linux-arm@0.34.3': '@img/sharp-linux-arm@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.2.0 '@img/sharp-libvips-linux-arm': 1.2.4
optional: true optional: true
'@img/sharp-linux-ppc64@0.34.3': '@img/sharp-linux-ppc64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-ppc64': 1.2.0 '@img/sharp-libvips-linux-ppc64': 1.2.4
optional: true optional: true
'@img/sharp-linux-s390x@0.34.3': '@img/sharp-linux-riscv64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.2.0 '@img/sharp-libvips-linux-riscv64': 1.2.4
optional: true optional: true
'@img/sharp-linux-x64@0.34.3': '@img/sharp-linux-s390x@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.2.0 '@img/sharp-libvips-linux-s390x': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-arm64@0.34.3': '@img/sharp-linux-x64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.2.0 '@img/sharp-libvips-linux-x64': 1.2.4
optional: true optional: true
'@img/sharp-linuxmusl-x64@0.34.3': '@img/sharp-linuxmusl-arm64@0.34.5':
optionalDependencies: optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.2.0 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
optional: true optional: true
'@img/sharp-wasm32@0.34.3': '@img/sharp-linuxmusl-x64@0.34.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.2.4
optional: true
'@img/sharp-wasm32@0.34.5':
dependencies: dependencies:
'@emnapi/runtime': 1.5.0 '@emnapi/runtime': 1.7.1
optional: true optional: true
'@img/sharp-win32-arm64@0.34.3': '@img/sharp-win32-arm64@0.34.5':
optional: true optional: true
'@img/sharp-win32-ia32@0.34.3': '@img/sharp-win32-ia32@0.34.5':
optional: true optional: true
'@img/sharp-win32-x64@0.34.3': '@img/sharp-win32-x64@0.34.5':
optional: true optional: true
'@isaacs/cliui@8.0.2': '@isaacs/cliui@8.0.2':
@@ -3348,38 +3370,38 @@ snapshots:
'@napi-rs/wasm-runtime@0.2.8': '@napi-rs/wasm-runtime@0.2.8':
dependencies: dependencies:
'@emnapi/core': 1.4.0 '@emnapi/core': 1.4.0
'@emnapi/runtime': 1.5.0 '@emnapi/runtime': 1.7.1
'@tybys/wasm-util': 0.9.0 '@tybys/wasm-util': 0.9.0
optional: true optional: true
'@next/env@15.5.2': {} '@next/env@15.5.9': {}
'@next/eslint-plugin-next@15.2.4': '@next/eslint-plugin-next@15.2.4':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
'@next/swc-darwin-arm64@15.5.2': '@next/swc-darwin-arm64@15.5.7':
optional: true optional: true
'@next/swc-darwin-x64@15.5.2': '@next/swc-darwin-x64@15.5.7':
optional: true optional: true
'@next/swc-linux-arm64-gnu@15.5.2': '@next/swc-linux-arm64-gnu@15.5.7':
optional: true optional: true
'@next/swc-linux-arm64-musl@15.5.2': '@next/swc-linux-arm64-musl@15.5.7':
optional: true optional: true
'@next/swc-linux-x64-gnu@15.5.2': '@next/swc-linux-x64-gnu@15.5.7':
optional: true optional: true
'@next/swc-linux-x64-musl@15.5.2': '@next/swc-linux-x64-musl@15.5.7':
optional: true optional: true
'@next/swc-win32-arm64-msvc@15.5.2': '@next/swc-win32-arm64-msvc@15.5.7':
optional: true optional: true
'@next/swc-win32-x64-msvc@15.5.2': '@next/swc-win32-x64-msvc@15.5.7':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@@ -3727,7 +3749,7 @@ snapshots:
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
semver: 7.7.2 semver: 7.7.3
ts-api-utils: 2.1.0(typescript@5.7.3) ts-api-utils: 2.1.0(typescript@5.7.3)
typescript: 5.7.3 typescript: 5.7.3
transitivePeerDependencies: transitivePeerDependencies:
@@ -4002,7 +4024,7 @@ snapshots:
callsites@3.1.0: {} callsites@3.1.0: {}
caniuse-lite@1.0.30001739: {} caniuse-lite@1.0.30001760: {}
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
@@ -4047,12 +4069,6 @@ snapshots:
color-convert: 1.9.3 color-convert: 1.9.3
color-string: 1.9.1 color-string: 1.9.1
color@4.2.3:
dependencies:
color-convert: 2.0.1
color-string: 1.9.1
optional: true
colorspace@1.1.4: colorspace@1.1.4:
dependencies: dependencies:
color: 3.2.1 color: 3.2.1
@@ -4184,11 +4200,11 @@ snapshots:
dequal@2.0.3: {} dequal@2.0.3: {}
detect-libc@2.0.4:
optional: true
detect-libc@2.1.1: {} detect-libc@2.1.1: {}
detect-libc@2.1.2:
optional: true
docker-modem@5.0.6: docker-modem@5.0.6:
dependencies: dependencies:
debug: 4.4.1 debug: 4.4.1
@@ -4506,10 +4522,10 @@ snapshots:
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1 string.prototype.includes: 2.0.1
eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.6.2): eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.25.1(jiti@2.6.1)))(eslint@9.25.1(jiti@2.6.1))(prettier@3.7.3):
dependencies: dependencies:
eslint: 9.25.1(jiti@2.6.1) eslint: 9.25.1(jiti@2.6.1)
prettier: 3.6.2 prettier: 3.7.3
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
synckit: 0.11.11 synckit: 0.11.11
optionalDependencies: optionalDependencies:
@@ -4850,12 +4866,12 @@ snapshots:
http-cache-semantics@4.2.0: {} http-cache-semantics@4.2.0: {}
http-errors@2.0.0: http-errors@2.0.1:
dependencies: dependencies:
depd: 2.0.0 depd: 2.0.0
inherits: 2.0.4 inherits: 2.0.4
setprototypeof: 1.2.0 setprototypeof: 1.2.0
statuses: 2.0.1 statuses: 2.0.2
toidentifier: 1.0.1 toidentifier: 1.0.1
http2-wrapper@2.2.1: http2-wrapper@2.2.1:
@@ -4931,7 +4947,7 @@ snapshots:
is-bun-module@2.0.0: is-bun-module@2.0.0:
dependencies: dependencies:
semver: 7.7.2 semver: 7.7.3
is-callable@1.2.7: {} is-callable@1.2.7: {}
@@ -5243,7 +5259,7 @@ snapshots:
net@1.0.2: {} net@1.0.2: {}
next-i18next@12.1.0(next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): next-i18next@12.1.0(next@15.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@babel/runtime': 7.26.9 '@babel/runtime': 7.26.9
'@types/hoist-non-react-statics': 3.3.6 '@types/hoist-non-react-statics': 3.3.6
@@ -5251,32 +5267,32 @@ snapshots:
hoist-non-react-statics: 3.3.2 hoist-non-react-statics: 3.3.2
i18next: 21.10.0 i18next: 21.10.0
i18next-fs-backend: 1.2.0 i18next-fs-backend: 1.2.0
next: 15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 15.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
transitivePeerDependencies: transitivePeerDependencies:
- react-dom - react-dom
- react-native - react-native
next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): next@15.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@next/env': 15.5.2 '@next/env': 15.5.9
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001739 caniuse-lite: 1.0.30001760
postcss: 8.4.31 postcss: 8.4.31
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.6(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.5.2 '@next/swc-darwin-arm64': 15.5.7
'@next/swc-darwin-x64': 15.5.2 '@next/swc-darwin-x64': 15.5.7
'@next/swc-linux-arm64-gnu': 15.5.2 '@next/swc-linux-arm64-gnu': 15.5.7
'@next/swc-linux-arm64-musl': 15.5.2 '@next/swc-linux-arm64-musl': 15.5.7
'@next/swc-linux-x64-gnu': 15.5.2 '@next/swc-linux-x64-gnu': 15.5.7
'@next/swc-linux-x64-musl': 15.5.2 '@next/swc-linux-x64-musl': 15.5.7
'@next/swc-win32-arm64-msvc': 15.5.2 '@next/swc-win32-arm64-msvc': 15.5.7
'@next/swc-win32-x64-msvc': 15.5.2 '@next/swc-win32-x64-msvc': 15.5.7
sharp: 0.34.3 sharp: 0.34.5
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros
@@ -5416,12 +5432,12 @@ snapshots:
dependencies: dependencies:
fast-diff: 1.3.0 fast-diff: 1.3.0
prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.7.3): prettier-plugin-organize-imports@4.3.0(prettier@3.7.3)(typescript@5.7.3):
dependencies: dependencies:
prettier: 3.6.2 prettier: 3.7.3
typescript: 5.7.3 typescript: 5.7.3
prettier@3.6.2: {} prettier@3.7.3: {}
pretty-bytes@7.1.0: {} pretty-bytes@7.1.0: {}
@@ -5465,10 +5481,10 @@ snapshots:
quick-lru@5.1.1: {} quick-lru@5.1.1: {}
raw-body@3.0.1: raw-body@3.0.2:
dependencies: dependencies:
bytes: 3.1.2 bytes: 3.1.2
http-errors: 2.0.0 http-errors: 2.0.1
iconv-lite: 0.7.0 iconv-lite: 0.7.0
unpipe: 1.0.0 unpipe: 1.0.0
@@ -5668,7 +5684,7 @@ snapshots:
semver@6.3.1: {} semver@6.3.1: {}
semver@7.7.2: {} semver@7.7.3: {}
set-function-length@1.2.2: set-function-length@1.2.2:
dependencies: dependencies:
@@ -5694,34 +5710,36 @@ snapshots:
setprototypeof@1.2.0: {} setprototypeof@1.2.0: {}
sharp@0.34.3: sharp@0.34.5:
dependencies: dependencies:
color: 4.2.3 '@img/colour': 1.0.0
detect-libc: 2.0.4 detect-libc: 2.1.2
semver: 7.7.2 semver: 7.7.3
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.3 '@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.3 '@img/sharp-darwin-x64': 0.34.5
'@img/sharp-libvips-darwin-arm64': 1.2.0 '@img/sharp-libvips-darwin-arm64': 1.2.4
'@img/sharp-libvips-darwin-x64': 1.2.0 '@img/sharp-libvips-darwin-x64': 1.2.4
'@img/sharp-libvips-linux-arm': 1.2.0 '@img/sharp-libvips-linux-arm': 1.2.4
'@img/sharp-libvips-linux-arm64': 1.2.0 '@img/sharp-libvips-linux-arm64': 1.2.4
'@img/sharp-libvips-linux-ppc64': 1.2.0 '@img/sharp-libvips-linux-ppc64': 1.2.4
'@img/sharp-libvips-linux-s390x': 1.2.0 '@img/sharp-libvips-linux-riscv64': 1.2.4
'@img/sharp-libvips-linux-x64': 1.2.0 '@img/sharp-libvips-linux-s390x': 1.2.4
'@img/sharp-libvips-linuxmusl-arm64': 1.2.0 '@img/sharp-libvips-linux-x64': 1.2.4
'@img/sharp-libvips-linuxmusl-x64': 1.2.0 '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
'@img/sharp-linux-arm': 0.34.3 '@img/sharp-libvips-linuxmusl-x64': 1.2.4
'@img/sharp-linux-arm64': 0.34.3 '@img/sharp-linux-arm': 0.34.5
'@img/sharp-linux-ppc64': 0.34.3 '@img/sharp-linux-arm64': 0.34.5
'@img/sharp-linux-s390x': 0.34.3 '@img/sharp-linux-ppc64': 0.34.5
'@img/sharp-linux-x64': 0.34.3 '@img/sharp-linux-riscv64': 0.34.5
'@img/sharp-linuxmusl-arm64': 0.34.3 '@img/sharp-linux-s390x': 0.34.5
'@img/sharp-linuxmusl-x64': 0.34.3 '@img/sharp-linux-x64': 0.34.5
'@img/sharp-wasm32': 0.34.3 '@img/sharp-linuxmusl-arm64': 0.34.5
'@img/sharp-win32-arm64': 0.34.3 '@img/sharp-linuxmusl-x64': 0.34.5
'@img/sharp-win32-ia32': 0.34.3 '@img/sharp-wasm32': 0.34.5
'@img/sharp-win32-x64': 0.34.3 '@img/sharp-win32-arm64': 0.34.5
'@img/sharp-win32-ia32': 0.34.5
'@img/sharp-win32-x64': 0.34.5
optional: true optional: true
shebang-command@2.0.0: shebang-command@2.0.0:
@@ -5780,7 +5798,7 @@ snapshots:
stack-trace@0.0.10: {} stack-trace@0.0.10: {}
statuses@2.0.1: {} statuses@2.0.2: {}
stop-iteration-iterator@1.1.0: stop-iteration-iterator@1.1.0:
dependencies: dependencies:
@@ -5905,7 +5923,7 @@ snapshots:
dependencies: dependencies:
'@pkgr/core': 0.2.9 '@pkgr/core': 0.2.9
systeminformation@5.27.7: {} systeminformation@5.27.11: {}
tabbable@6.3.0: {} tabbable@6.3.0: {}

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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",

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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 lASI", "ups_load": "Charge de lASI",
@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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": "Извођачи"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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ĩ"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -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"
}
}

View File

@@ -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"
} }
} }

View File

@@ -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"
} }
} }

View File

@@ -32,6 +32,8 @@ export default function Block({ value, label, field }) {
return getHighlightClass(highlight.level, highlightConfig); return getHighlightClass(highlight.level, highlightConfig);
}, [highlight, highlightConfig]); }, [highlight, highlightConfig]);
const applyToValueOnly = highlight?.valueOnly === true;
return ( return (
<div <div
className={classNames( className={classNames(
@@ -44,7 +46,11 @@ export default function Block({ value, label, field }) {
data-highlight-source={highlight?.source} 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>
); );
} }

View File

@@ -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) {

View File

@@ -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}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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(","));

View File

@@ -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") {

View File

@@ -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 ? (
<> <>
@@ -425,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
@@ -540,48 +554,38 @@ export default function Wrapper({ initialSettings, fallback }) {
html.classList.add(desiredThemeClass); html.classList.add(desiredThemeClass);
} }
if (backgroundImage) { // Remove any previously applied inline styles
const safeBackgroundImage = backgroundImage.replace(/'/g, "\\'"); body.style.backgroundImage = "";
body.style.backgroundImage = `linear-gradient(rgb(var(--bg-color) / ${opacity}), rgb(var(--bg-color) / ${opacity})), url('${safeBackgroundImage}')`; body.style.backgroundColor = "";
body.style.backgroundSize = "cover"; body.style.backgroundAttachment = "";
body.style.backgroundPosition = "center";
body.style.backgroundAttachment = "fixed";
body.style.backgroundRepeat = "no-repeat";
body.style.backgroundColor = "";
} else {
body.style.backgroundImage = "none";
body.style.backgroundColor = "rgb(var(--bg-color))";
body.style.backgroundSize = "";
body.style.backgroundPosition = "";
body.style.backgroundAttachment = "";
body.style.backgroundRepeat = "";
}
return () => {
body.style.backgroundImage = "";
body.style.backgroundColor = "";
body.style.backgroundSize = "";
body.style.backgroundPosition = "";
body.style.backgroundAttachment = "";
body.style.backgroundRepeat = "";
};
}, [backgroundImage, opacity, theme, color, initialSettings.color]); }, [backgroundImage, opacity, theme, color, initialSettings.color]);
return ( return (
<div id="page_wrapper" className="relative min-h-screen"> <>
<div {backgroundImage && (
id="inner_wrapper" <div
tabIndex="-1" id="background"
className={classNames( aria-hidden="true"
"w-full min-h-screen overflow-auto", style={{
backgroundBlur && backgroundImage: `linear-gradient(rgb(var(--bg-color) / ${opacity}), rgb(var(--bg-color) / ${opacity})), url('${backgroundImage}')`,
`backdrop-blur${initialSettings.background.blur?.length ? `-${initialSettings.background.blur}` : ""}`, }}
backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`, />
backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`, )}
)} <div id="page_wrapper" className="relative h-full">
> <div
<Index initialSettings={initialSettings} fallback={fallback} /> id="inner_wrapper"
tabIndex="-1"
className={classNames(
"w-full h-full overflow-auto",
backgroundBlur &&
`backdrop-blur${initialSettings.background.blur?.length ? `-${initialSettings.background.blur}` : ""}`,
backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`,
backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`,
)}
>
<Index initialSettings={initialSettings} fallback={fallback} />
</div>
</div> </div>
</div> </>
); );
} }

19
src/pages/robots.txt.js Normal file
View 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;
}

View File

@@ -30,6 +30,18 @@ body,
height: 100%; height: 100%;
margin: 0; margin: 0;
padding: 0; padding: 0;
background-color: rgb(var(--bg-color));
}
#background {
position: fixed;
inset: 0;
z-index: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
background-attachment: scroll;
pointer-events: none;
} }
html, html,

View File

@@ -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);
@@ -279,6 +279,9 @@ export function cleanServiceGroups(groups) {
slugs, slugs,
symbols, symbols,
// crowdsec
limit24h,
// customapi // customapi
mappings, mappings,
display, display,
@@ -473,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;
@@ -556,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);

View File

@@ -200,7 +200,7 @@ const ensureArray = (value) => {
}; };
const findHighlightLevel = (ruleSet, numericValue, stringValue) => { const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
const { numeric, string } = ruleSet; const { numeric, string, valueOnly } = ruleSet;
if (numeric && numericValue !== undefined) { if (numeric && numericValue !== undefined) {
const numericRules = ensureArray(numeric); const numericRules = ensureArray(numeric);
@@ -208,7 +208,7 @@ const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
for (const candidate of numericCandidates) { for (const candidate of numericCandidates) {
for (const rule of numericRules) { for (const rule of numericRules) {
if (rule?.level && evaluateNumericRule(candidate, rule)) { if (rule?.level && evaluateNumericRule(candidate, rule)) {
return { level: rule.level, source: "numeric", rule }; return { level: rule.level, source: "numeric", rule, valueOnly };
} }
} }
} }
@@ -218,7 +218,7 @@ const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
const stringRules = ensureArray(string); const stringRules = ensureArray(string);
for (const rule of stringRules) { for (const rule of stringRules) {
if (rule?.level && evaluateStringRule(stringValue, rule)) { if (rule?.level && evaluateStringRule(stringValue, rule)) {
return { level: rule.level, source: "string", rule }; return { level: rule.level, source: "string", rule, valueOnly };
} }
} }
} }

View File

@@ -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",

View File

@@ -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")}`;

View File

@@ -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:") {

View File

@@ -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) {

View File

@@ -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")),

View File

@@ -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) {

View File

@@ -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",
}, },

View File

@@ -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} />;
} }

View File

@@ -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}>

View 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" });
}

View File

@@ -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,
})),
},
}, },
}; };

View File

@@ -85,6 +85,9 @@ export default async function fritzboxProxyHandler(req, res) {
requestExternalIPv6Prefix ? requestEndpoint(apiBaseUrl, "WANIPConnection", "X_AVM_DE_GetIPv6Prefix") : null, requestExternalIPv6Prefix ? requestEndpoint(apiBaseUrl, "WANIPConnection", "X_AVM_DE_GetIPv6Prefix") : null,
]) ])
.then(([statusInfo, linkProperties, addonInfos, externalIPAddress, externalIPv6Address, externalIPv6Prefix]) => { .then(([statusInfo, linkProperties, addonInfos, externalIPAddress, externalIPv6Address, externalIPv6Prefix]) => {
const ipv6Prefix = externalIPv6Prefix?.NewIPv6Prefix;
const ipv6Len = externalIPv6Prefix?.NewPrefixLength;
res.status(200).json({ res.status(200).json({
connectionStatus: statusInfo?.NewConnectionStatus || "Unconfigured", connectionStatus: statusInfo?.NewConnectionStatus || "Unconfigured",
uptime: statusInfo?.NewUptime || 0, uptime: statusInfo?.NewUptime || 0,
@@ -96,7 +99,7 @@ export default async function fritzboxProxyHandler(req, res) {
sent: addonInfos?.NewX_AVM_DE_TotalBytesSent64 || 0, sent: addonInfos?.NewX_AVM_DE_TotalBytesSent64 || 0,
externalIPAddress: externalIPAddress?.NewExternalIPAddress || null, externalIPAddress: externalIPAddress?.NewExternalIPAddress || null,
externalIPv6Address: externalIPv6Address?.NewExternalIPv6Address || null, externalIPv6Address: externalIPv6Address?.NewExternalIPv6Address || null,
externalIPv6Prefix: externalIPv6Prefix?.NewIPv6Prefix || null, externalIPv6Prefix: ipv6Prefix && ipv6Len != null ? `${ipv6Prefix}/${ipv6Len}` : (ipv6Prefix ?? null),
}); });
}) })
.catch((error) => { .catch((error) => {

View File

@@ -38,11 +38,7 @@ export default function Component({ service }) {
); );
} }
const status = serverData.online ? ( const status = serverData.online ? t("gamedig.online") : t("gamedig.offline");
<span className="text-green-500">{t("gamedig.online")}</span>
) : (
<span className="text-red-500">{t("gamedig.offline")}</span>
);
const name = serverData.online ? serverData.name : "-"; const name = serverData.online ? serverData.name : "-";
const map = serverData.online ? serverData.map : "-"; const map = serverData.online ? serverData.map : "-";
const currentPlayers = serverData.online ? `${serverData.players} / ${serverData.maxplayers}` : "-"; const currentPlayers = serverData.online ? `${serverData.players} / ${serverData.maxplayers}` : "-";

View File

@@ -20,13 +20,15 @@ function getPerformancePercent(t, performanceRange) {
export default function Component({ service }) { export default function Component({ service }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { widget } = service; const { widget } = service;
const includeNetWorth = widget.fields?.includes("net_worth");
const { data: performanceToday, error: ghostfolioErrorToday } = useWidgetAPI(widget, "today"); const { data: performanceToday, error: ghostfolioErrorToday } = useWidgetAPI(widget, "today");
const { data: performanceYear, error: ghostfolioErrorYear } = useWidgetAPI(widget, "year"); const { data: performanceYear, error: ghostfolioErrorYear } = useWidgetAPI(widget, "year");
const { data: performanceMax, error: ghostfolioErrorMax } = useWidgetAPI(widget, "max"); const { data: performanceMax, error: ghostfolioErrorMax } = useWidgetAPI(widget, "max");
const { data: userInfo, error: ghostfolioErrorUserInfo } = useWidgetAPI(widget, includeNetWorth ? "userInfo" : "");
if (ghostfolioErrorToday || ghostfolioErrorYear || ghostfolioErrorMax) { if (ghostfolioErrorToday || ghostfolioErrorYear || ghostfolioErrorMax || ghostfolioErrorUserInfo) {
const finalError = ghostfolioErrorToday ?? ghostfolioErrorYear ?? ghostfolioErrorMax; const finalError = ghostfolioErrorToday ?? ghostfolioErrorYear ?? ghostfolioErrorMax ?? ghostfolioErrorUserInfo;
return <Container service={service} error={finalError} />; return <Container service={service} error={finalError} />;
} }
@@ -34,12 +36,13 @@ export default function Component({ service }) {
return <Container service={service} error={performanceToday} />; return <Container service={service} error={performanceToday} />;
} }
if (!performanceToday || !performanceYear || !performanceMax) { if (!performanceToday || !performanceYear || !performanceMax || (includeNetWorth && !userInfo)) {
return ( return (
<Container service={service}> <Container service={service}>
<Block label="ghostfolio.gross_percent_today" /> <Block label="ghostfolio.gross_percent_today" />
<Block label="ghostfolio.gross_percent_1y" /> <Block label="ghostfolio.gross_percent_1y" />
<Block label="ghostfolio.gross_percent_max" /> <Block label="ghostfolio.gross_percent_max" />
{includeNetWorth && <Block label="ghostfolio.net_worth" />}
</Container> </Container>
); );
} }
@@ -49,6 +52,12 @@ export default function Component({ service }) {
<Block label="ghostfolio.gross_percent_today" value={getPerformancePercent(t, performanceToday)} /> <Block label="ghostfolio.gross_percent_today" value={getPerformancePercent(t, performanceToday)} />
<Block label="ghostfolio.gross_percent_1y" value={getPerformancePercent(t, performanceYear)} /> <Block label="ghostfolio.gross_percent_1y" value={getPerformancePercent(t, performanceYear)} />
<Block label="ghostfolio.gross_percent_max" value={getPerformancePercent(t, performanceMax)} /> <Block label="ghostfolio.gross_percent_max" value={getPerformancePercent(t, performanceMax)} />
{includeNetWorth && (
<Block
label="ghostfolio.net_worth"
value={`${performanceToday.performance.currentNetWorth.toFixed(2)} ${userInfo?.settings?.currency ?? ""}`}
/>
)}
</Container> </Container>
); );
} }

View File

@@ -1,18 +1,21 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = { const widget = {
api: "{url}/api/v2/portfolio/performance?range={endpoint}", api: "{url}/api/{endpoint}",
proxyHandler: credentialedProxyHandler, proxyHandler: credentialedProxyHandler,
mappings: { mappings: {
today: { today: {
endpoint: "1d", endpoint: "v2/portfolio/performance?range=1d",
}, },
year: { year: {
endpoint: "1y", endpoint: "v2/portfolio/performance?range=1y",
}, },
max: { max: {
endpoint: "max", endpoint: "v2/portfolio/performance?range=max",
},
userInfo: {
endpoint: "v1/user",
}, },
}, },
}; };

View File

@@ -12,10 +12,8 @@ export default function Component({ service }) {
const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip"); const { data: gluetunData, error: gluetunError } = useWidgetAPI(widget, "ip");
const includePF = widget.fields.includes("port_forwarded"); const includePF = widget.fields.includes("port_forwarded");
const { data: portForwardedData, error: portForwardedError } = useWidgetAPI( const pfEndpoint = widget.version > 1 ? "port_forwarded_v2" : "port_forwarded";
widget, const { data: portForwardedData, error: portForwardedError } = useWidgetAPI(widget, includePF ? pfEndpoint : "");
includePF ? "port_forwarded" : "",
);
if (gluetunError || (includePF && portForwardedError)) { if (gluetunError || (includePF && portForwardedError)) {
return <Container service={service} error={gluetunError || portForwardedError} />; return <Container service={service} error={gluetunError || portForwardedError} />;

View File

@@ -13,6 +13,10 @@ const widget = {
endpoint: "openvpn/portforwarded", endpoint: "openvpn/portforwarded",
validate: ["port"], validate: ["port"],
}, },
port_forwarded_v2: {
endpoint: "portforward",
validate: ["port"],
},
}, },
}; };

View File

@@ -32,7 +32,7 @@ export default function Component({ service }) {
if ( if (
(!widget.showStacks && !containersData) || (!widget.showStacks && !containersData) ||
(widget.showSummary && (!stacksData || !serversData)) || (widget.showSummary && (!containersData || !stacksData || !serversData)) ||
(widget.showStacks && !stacksData) (widget.showStacks && !stacksData)
) { ) {
return widget.showSummary ? ( return widget.showSummary ? (

View File

@@ -22,11 +22,7 @@ export default function Component({ service }) {
); );
} }
const statusIndicator = serverData.online ? ( const statusIndicator = serverData.online ? t("minecraft.up") : t("minecraft.down");
<span className="text-green-500">{t("minecraft.up")}</span>
) : (
<span className="text-red-500">{t("minecraft.down")}</span>
);
const players = serverData.players ? `${serverData.players.online} / ${serverData.players.max}` : "-"; const players = serverData.players ? `${serverData.players.online} / ${serverData.players.max}` : "-";
const version = serverData.version || "-"; const version = serverData.version || "-";

View File

@@ -24,9 +24,9 @@ export default function Component({ service }) {
if (!data || (data && data.length === 0)) { if (!data || (data && data.length === 0)) {
return ( return (
<Container service={service}> <Container service={service}>
<Block label="myspeed.ping" />
<Block label="myspeed.download" /> <Block label="myspeed.download" />
<Block label="myspeed.upload" /> <Block label="myspeed.upload" />
<Block label="myspeed.ping" />
</Container> </Container>
); );
} }

View File

@@ -20,16 +20,7 @@ export default function Component({ service }) {
return ( return (
<Container service={service}> <Container service={service}>
<Block <Block label="widget.status" value={up ? t("openwrt.up") : t("openwrt.down")} />
label="widget.status"
value={
up ? (
<span className="text-green-500">{t("openwrt.up")}</span>
) : (
<span className="text-red-500">{t("openwrt.down")}</span>
)
}
/>
<Block label="openwrt.bytesTx" value={t("common.bytes", { value: bytesTx })} /> <Block label="openwrt.bytesTx" value={t("common.bytes", { value: bytesTx })} />
<Block label="openwrt.bytesRx" value={t("common.bytes", { value: bytesRx })} /> <Block label="openwrt.bytesRx" value={t("common.bytes", { value: bytesRx })} />
</Container> </Container>

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