Compare commits

...

98 commits

Author SHA1 Message Date
1370cd195a homepage-plus
Some checks failed
Docker CI / Linting Checks (push) Has been cancelled
Docker CI / Docker Build & Push (push) Has been cancelled
2025-05-07 09:16:23 +02:00
shamoon
2376184b14
Bump version to 1.2.0 2025-04-28 10:43:35 -07:00
github-actions[bot]
7272823d20
New Crowdin translations by GitHub Action (#5092)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-04-28 10:43:35 -07:00
choehn86
4a9ca62efd
Enhancement: Add support for specifying a datastore to PBS widget (#4614)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-04-28 08:00:02 -07:00
Rayan Mestiri
a35da39c03
Enhancement: add label formatting for dynamic-list customapi widget (#5217) 2025-04-25 01:11:03 -07:00
xethlyx
d99c3cb691
Fix: kubernetes statistics not respecting selector (#5199) 2025-04-20 17:39:56 -07:00
Kevin Stone
1fe4f49771
Fix: Longhorn still showing Total despite total: false (#5200) 2025-04-20 17:39:25 -07:00
dependabot[bot]
0a1bf3b2be
Chore(deps): Bump next from 15.2.3 to 15.2.4 (#5159)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 15:08:54 -07:00
shamoon
e2c997f29d
Change: install iputils-ping inside docker image (#5153) 2025-04-07 23:59:22 -07:00
shamoon
ae9fbdcb8b
Chore: change hoarder widget to karakeep (#5143) 2025-04-05 23:54:48 -07:00
shamoon
6597ec566b
Fix translation issue 2025-04-01 09:52:33 -07:00
shamoon
52399e21e1
Fix depth issue with t 2025-04-01 09:48:28 -07:00
dependabot[bot]
dbc26e835c
Chore(deps): Bump swr from 1.3.0 to 2.3.3 (#5111)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:36:44 -07:00
dependabot[bot]
a59ee5a605
Chore(deps-dev): Bump eslint-config-next from 15.1.7 to 15.2.4 (#5113)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:32:05 -07:00
dependabot[bot]
f46568ec2a
Chore(deps-dev): Bump eslint-config-prettier from 10.0.2 to 10.1.1 (#5112)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:24:46 -07:00
dependabot[bot]
5e946ed2c2
Chore(deps-dev): Bump postcss from 8.5.2 to 8.5.3 (#5110)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:24:24 -07:00
dependabot[bot]
6741eb723d
Chore(deps): Bump i18next from 21.10.0 to 24.2.3 (#5109)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:22:36 -07:00
RoboMagus
1666106dcd
Chore: add more Docker Semver Tags (#5107)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-31 06:44:17 -07:00
shamoon
eda06965fa
Chore: add organize imports to pre-commit (#5104) 2025-03-30 21:40:03 -07:00
shamoon
954ab54493
Speed up CI: Skip unnecessary build steps, optimize caching etc (#5098) 2025-03-30 08:52:23 -07:00
Chris
30cb893354
Fix: remove unneeded import from Hoarder widget.js (#5097) 2025-03-29 19:49:53 -07:00
shamoon
4567427b9c
Enhancement: add shvl fallback for custom api dynamic list (#5091) 2025-03-28 16:32:56 -07:00
Matheus Vellone
ee7e8fab61
Fix: support shvl on customapi dynamic list target (#5081)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-28 16:29:23 -07:00
shamoon
313835c0e6
Bump version to 1.1.1 2025-03-27 20:20:02 -07:00
shamoon
999dade861
Fix: add fallback for shvl syntax (#5080) 2025-03-27 20:16:50 -07:00
shamoon
2cabe77b55
Fix: add fallback for shvl syntax 2025-03-27 20:15:39 -07:00
shamoon
0a50d5a6aa
Merge branch 'main' into dev 2025-03-27 13:27:26 -07:00
shamoon
e19dcc2729
Only deploy docs from main branch 2025-03-27 13:27:20 -07:00
shamoon
cadf1433af
Bump version to 1.1.0 2025-03-27 13:22:02 -07:00
shamoon
6bae078a8d
Merge branch 'dev' 2025-03-27 13:21:45 -07:00
github-actions[bot]
77bbdc6a04
New Crowdin translations by GitHub Action (#5010)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-27 13:21:33 -07:00
shamoon
1f8fd1c69d
Add install pnpm to source instructions 2025-03-23 07:11:20 -07:00
dependabot[bot]
5d557844cc
Chore(deps): Bump next from 15.1.7 to 15.2.3 (#5055)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-22 07:49:16 -07:00
chiragkrishna
a4b07b91fe
Enhancement: Add Repositories field to Gitea (#5053)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-22 07:45:27 -07:00
Chris
d853bbfe44
Feature: Slskd Service Widget (#5045)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-20 21:46:54 -07:00
IhatemyISP
7fd5e6ccb1
Tweak: change moonraker widget standby output (#4060)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-19 16:26:49 -07:00
shamoon
aed602ad70
Tweak: try to reduce rootless startup time (#5037) 2025-03-18 19:29:43 -07:00
shamoon
fa28a11658
Fix: include new backdrop-blur-xs option (#5030) 2025-03-17 23:30:07 -07:00
shamoon
a3b693e2b6
Support maxBookmarkGroupColumns too 2025-03-17 13:03:04 -07:00
shamoon
708c4e64d1
Tweak this 2025-03-17 12:47:34 -07:00
shamoon
11a6b5d0b8
Enhancement: support maximum group cols up 8 (#5022) 2025-03-17 12:32:09 -07:00
shamoon
ce0102eb6f
Enhancement: support full width container (#5021) 2025-03-17 12:25:10 -07:00
shamoon
42f1ed3c47
Update customapi.md 2025-03-17 11:49:35 -07:00
shamoon
dca23e8547
Enhancement: support shvl syntax for customapi fields (#5020) 2025-03-17 11:47:55 -07:00
morliont
8d20f22932
Enhancement: support dynamic list rendering in custom api widget (#5012)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-17 11:30:01 -07:00
shamoon
071b5275bc
Documentation: fix install page buttons 2025-03-17 11:19:27 -07:00
shamoon
de9c015f7f
Fix: fix minecraft players after move to minecraftstatuspinger (#5017) 2025-03-17 07:24:12 -07:00
shamoon
b4dc53c7c0
Feature: allow disable ipv6 in proxy, refactor cacheFetch to use proxy (#5011) 2025-03-16 20:09:34 -07:00
shamoon
934ad3a6f1
Fix: remove medusa widget trailing slash (#5007) 2025-03-16 15:33:38 -07:00
shamoon
6fbe080b28
Bump version to 1.0.4 2025-03-16 14:13:12 -07:00
shamoon
4047f8d6e8
Merge branch 'dev' 2025-03-16 14:12:45 -07:00
github-actions[bot]
59cd5564f8
New Crowdin translations by GitHub Action (#4985)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-16 14:12:30 -07:00
shamoon
5f19e4af91
Fix: fix custom quicklaunch search without search widget (#5003) 2025-03-16 13:12:20 -07:00
shamoon
5ea46881ee
Fix: re-add tailwind css safelist (#4999) 2025-03-16 08:32:27 -07:00
shamoon
9545757bb9
Fix: fix bookmark heights again (#4997) 2025-03-16 07:33:30 -07:00
shamoon
95507aab54
Change: re-enable k8s ingress by default (#4988) 2025-03-16 02:35:43 -07:00
shamoon
564dfb7ce3
Add k3d ingress setting and HOMEPAGE_ALLOWED_HOSTS 2025-03-15 21:05:11 -07:00
shamoon
7b72442114
Update index.md 2025-03-15 16:29:02 -07:00
shamoon
65370a7668
Fix: fix Kubernetes stats in v1.0.0 (#4984)
Co-authored-by: djeinstine <2105133+djeinstine@users.noreply.github.com>
2025-03-15 16:23:29 -07:00
shamoon
6e9339b14c
Chore: update minecraftstatuspinger to 1.2.2 (#4982) 2025-03-15 15:30:21 -07:00
shamoon
241c786710
Merge branch 'main' into dev 2025-03-15 10:18:34 -07:00
shamoon
801ce479d8
Add links to docs 2025-03-15 10:18:26 -07:00
shamoon
16730ffec2
Merge branch 'main' into dev 2025-03-15 09:46:36 -07:00
shamoon
b35dd80e8c
Improve docs 2025-03-15 09:46:23 -07:00
shamoon
82b159bf14
Improve docs 2025-03-15 09:30:10 -07:00
shamoon
6292a0709c
Bump version to 1.0.3 2025-03-15 07:43:43 -07:00
shamoon
42af93bef3
Merge branch 'dev' 2025-03-15 07:43:30 -07:00
Xavier Alexander
964991781c
Documentation: add HOMEPAGE_ALLOWED_HOSTS to k8s docs (#4969) 2025-03-15 07:40:26 -07:00
shamoon
607a14083e
Fix: jellyfin handle empty episode numbers (#4970) 2025-03-15 07:38:35 -07:00
shamoon
133a0a6539
Fix this 2025-03-15 07:31:15 -07:00
shamoon
0d0f465e16
Update index.md 2025-03-15 07:16:42 -07:00
shamoon
16c1b2da9b
Enhancement: allow disabling host header checking (#4967) 2025-03-15 07:14:41 -07:00
shamoon
4761a56b3d
Remove reference to helm chart 2025-03-15 07:13:23 -07:00
shamoon
9d40b67d49
Change: prefer IPv4 in docker image (#4954) 2025-03-14 22:51:07 -07:00
shamoon
97f4bcbdb0
Documentation: note disable ipv6 2025-03-14 22:35:47 -07:00
brikim
ea1375e575
Fix: correct units for speedtest tracker API v2 (#4950)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-14 22:02:13 -07:00
shamoon
733a3140d1
Documentation: note komga api key 2025-03-14 21:16:20 -07:00
shamoon
b5ac617597
Fix: fix kavita API body with key (#4948) 2025-03-14 21:09:46 -07:00
shamoon
9b06212a92
Fix: wrapping in bookmarks (#4945) 2025-03-14 18:29:27 -07:00
shamoon
6b4182ab96
Merge branch 'dev' 2025-03-14 18:16:55 -07:00
shamoon
8656b8e2f1
Revert hostname change 2025-03-14 18:16:45 -07:00
shamoon
dd8e9270f2 bump version 2025-03-14 17:59:05 -07:00
shamoon
90dd8e5967
Update index.md 2025-03-14 16:59:52 -07:00
shamoon
6fca9e342d
Bump version to 1.0.1 2025-03-14 15:42:56 -07:00
shamoon
66a8b1c21e
Just remove hostname 2025-03-14 15:13:08 -07:00
shamoon
a0dc8c9ccb
Fix: fix larger breakpoint (#4935) 2025-03-14 14:20:33 -07:00
shamoon
8190260400
Fix: fix plex total size with larger libraries (#4933) 2025-03-14 14:12:33 -07:00
shamoon
7ced73b206
Merge branch 'main' into dev 2025-03-14 12:49:46 -07:00
shamoon
a2f4dd289b
Update README.md 2025-03-14 12:48:03 -07:00
shamoon
0c7cac74ea
Update docker.md 2025-03-14 12:47:32 -07:00
shamoon
d81fcee31f
Merge branch 'main' into dev 2025-03-14 12:31:20 -07:00
shamoon
f7889eab27
Clarify port 2025-03-14 12:31:10 -07:00
shamoon
91518d972d
Update index.md 2025-03-14 12:30:22 -07:00
shamoon
a090f98fab
Add HOMEPAGE_ALLOWED_HOSTS to readme 2025-03-14 12:30:22 -07:00
shamoon
5629440acf
Fix: fix fiveColumns option (#4924) 2025-03-14 12:20:10 -07:00
shamoon
471800d5bc
Update index.md 2025-03-14 12:18:57 -07:00
shamoon
6ab57b7b14
Update middleware.js 2025-03-14 11:58:44 -07:00
shamoon
f767ff047f
Add HOMEPAGE_ALLOWED_HOSTS to readme 2025-03-14 11:23:52 -07:00
378 changed files with 3314 additions and 2005 deletions

View file

@ -16,11 +16,11 @@
**/compose* **/compose*
**/Dockerfile* **/Dockerfile*
**/node_modules **/node_modules
!.next/standalone/node_modules
**/npm-debug.log **/npm-debug.log
**/obj **/obj
**/secrets.dev.yaml **/secrets.dev.yaml
**/values.dev.yaml **/values.dev.yaml
**/.next
README.md README.md
config/ config/
k3d/ k3d/

View file

@ -2,8 +2,8 @@ name: Crowdin Action
on: on:
workflow_dispatch: workflow_dispatch:
schedule: # schedule:
- cron: '2 */12 * * *' # - cron: '2 */12 * * *'
push: push:
paths: [ paths: [
'/public/locales/en/**', '/public/locales/en/**',

View file

@ -1,20 +1,16 @@
name: Docker name: Docker CI
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
on: on:
schedule: # schedule:
- cron: '20 0 * * *' # - cron: '20 0 * * *'
push: push:
branches: branches:
- main - main
- feature/** - feature/**
- dev - dev
- homepage-plus
# Publish semver tags as releases. # Publish semver tags as releases.
tags: [ 'v*.*.*' ] tags: [ 'v*.*.*-plus' ]
paths-ignore: paths-ignore:
- 'docs/**' - 'docs/**'
- 'mkdocs.yml' - 'mkdocs.yml'
@ -24,91 +20,58 @@ on:
- 'docs/**' - 'docs/**'
- 'mkdocs.yml' - 'mkdocs.yml'
merge_group: merge_group:
workflow_dispatch:
env: env:
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }} IMAGE_NAME: ${{ github.repository }}
jobs: jobs:
pre-commit: pre-commit:
name: Linting Checks name: Linting Checks
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- - name: Checkout repository
name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
-
name: Install python - name: Install python
uses: actions/setup-python@v5 uses: actions/setup-python@v5
with: with:
python-version: 3.x python-version: 3.x
-
name: Check files - name: Check files
uses: pre-commit/action@v3.0.1 uses: pre-commit/action@v3.0.1
-
name: Install pnpm - name: Install pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
with: with:
version: 10 version: 10
run_install: false run_install: false
-
name: Install Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
cache: 'pnpm' cache: 'pnpm'
-
name: Install dependencies - name: Install dependencies
run: pnpm install run: pnpm install
-
name: Lint frontend - name: Lint frontend
run: pnpm run lint run: pnpm run lint
build: build:
name: Docker Build & Push name: Docker Build & Push
if: github.repository == 'gethomepage/homepage' runs-on: ubuntu-latest
runs-on: self-hosted
needs: needs:
- pre-commit - pre-commit
permissions: permissions:
contents: read contents: read
packages: write packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v4
# Login to Docker Registry
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Setup QEMU
# https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- name: Setup QEMU
uses: docker/setup-qemu-action@v3.6.0
# Workaround: https://github.com/docker/build-push-action/issues/461
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata - name: Extract Docker metadata
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
@ -116,11 +79,69 @@ jobs:
images: | images: |
${{ env.IMAGE_NAME }} ${{ env.IMAGE_NAME }}
ghcr.io/${{ env.IMAGE_NAME }} ghcr.io/${{ env.IMAGE_NAME }}
tags: |
# Default tags
type=schedule,pattern=nightly
type=ref,event=branch
type=ref,event=tag
# Versioning tags
type=semver,pattern=v{{version}}
type=semver,pattern=v{{major}}.{{minor}}
type=semver,pattern=v{{major}}
flavor: | flavor: |
latest=auto latest=auto
# Build and push Docker image with Buildx (don't push on PR) - name: Next.js build cache
# https://github.com/docker/build-push-action uses: actions/cache@v4
with:
path: .next/cache
key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }}
restore-keys: |
nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build app
run: |
NEXT_PUBLIC_BUILDTIME="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" \
NEXT_PUBLIC_VERSION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" \
NEXT_PUBLIC_REVISION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" \
pnpm run build
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Setup QEMU
uses: docker/setup-qemu-action@v3.6.0
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image - name: Build and push Docker image
id: build-and-push id: build-and-push
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
@ -130,18 +151,15 @@ jobs:
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
build-args: | build-args: |
CI=true
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
# https://github.com/docker/setup-qemu-action#about
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
cache-from: type=local,src=/tmp/.buildx-cache cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
# Temp fix # https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
- name: Move cache - name: Move cache
run: | run: |
rm -rf /tmp/.buildx-cache rm -rf /tmp/.buildx-cache

View file

@ -55,7 +55,7 @@ jobs:
run: MKINSIDERS=false mkdocs build run: MKINSIDERS=false mkdocs build
deploy: deploy:
name: Build & Deploy name: Build & Deploy
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: needs:
- pre-commit - pre-commit

View file

@ -9,11 +9,14 @@ repos:
- id: check-yaml - id: check-yaml
exclude: "(^mkdocs\\.yml$)" exclude: "(^mkdocs\\.yml$)"
- id: check-added-large-files - id: check-added-large-files
- repo: https://github.com/pre-commit/mirrors-prettier - repo: https://github.com/rbubley/mirrors-prettier
rev: 'v3.0.3' rev: 'v3.3.3'
hooks: hooks:
- id: prettier - id: prettier
types_or: types_or:
- javascript - javascript
- markdown - markdown
- jsx - jsx
additional_dependencies:
- prettier@3.3.3
- 'prettier-plugin-organize-imports@4.1.0'

View file

@ -1 +0,0 @@
{}

5
.prettierrc.js Normal file
View file

@ -0,0 +1,5 @@
const config = {
plugins: [require("prettier-plugin-organize-imports")],
};
module.exports = config;

View file

@ -1,67 +1,63 @@
# Install dependencies only when needed # =========================
FROM docker.io/node:22-alpine AS deps # Builder Stage
# =========================
WORKDIR /app FROM node:22-slim AS builder
COPY --link package.json pnpm-lock.yaml* ./
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN apk add --no-cache libc6-compat \
&& apk add --no-cache --virtual .gyp python3 make g++ \
&& npm install -g pnpm
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store"
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm install -r --offline
# Rebuild the source code only when needed
FROM docker.io/node:22-alpine AS builder
WORKDIR /app WORKDIR /app
# Setup
RUN mkdir config RUN mkdir config
COPY . .
ARG CI
ARG BUILDTIME ARG BUILDTIME
ARG VERSION ARG VERSION
ARG REVISION ARG REVISION
ENV CI=$CI
COPY --link --from=deps /app/node_modules ./node_modules/ # Install and build only outside CI
COPY . . RUN if [ "$CI" != "true" ]; then \
corepack enable && corepack prepare pnpm@latest --activate && \
pnpm install --frozen-lockfile --prefer-offline && \
NEXT_TELEMETRY_DISABLED=1 \
NEXT_PUBLIC_BUILDTIME=$BUILDTIME \
NEXT_PUBLIC_VERSION=$VERSION \
NEXT_PUBLIC_REVISION=$REVISION \
pnpm run build; \
else \
echo "✅ Using prebuilt app from CI context"; \
fi
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] # =========================
RUN npm install -g pnpm \ # Runtime Stage
&& pnpm run telemetry \ # =========================
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build FROM node:22-alpine AS runner
LABEL org.opencontainers.image.title="Homepage"
# Production image, copy all the files and run next LABEL org.opencontainers.image.description="A self-hosted services landing page, with docker and service integrations."
FROM docker.io/node:22-alpine AS runner LABEL org.opencontainers.image.url="https://github.com/di0ik/homepage-plus"
LABEL org.opencontainers.image.title "Homepage"
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage"
LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki' LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage' LABEL org.opencontainers.image.source='https://github.com/di0ik/homepage-plus'
LABEL org.opencontainers.image.licenses='Apache-2.0' LABEL org.opencontainers.image.licenses='Apache-2.0'
ENV NODE_ENV=production # Setup
WORKDIR /app WORKDIR /app
# Copy files from context (this allows the files to copy before the builder stage is done). # Copy some files from context
COPY --link --chown=1000:1000 package.json next.config.js ./
COPY --link --chown=1000:1000 /public ./public/ COPY --link --chown=1000:1000 /public ./public/
# Copy files from builder
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/
COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
RUN apk add --no-cache su-exec # Copy only necessary files from the build stage
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
ENV HOSTNAME=:: RUN apk add --no-cache su-exec iputils-ping
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000 ENV PORT=3000
EXPOSE $PORT EXPOSE $PORT
HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \ HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \
CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://localhost:$PORT/api/healthcheck || exit 1 CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:$PORT/api/healthcheck || exit 1
ENTRYPOINT ["docker-entrypoint.sh"] ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "server.js"] CMD ["node", "server.js"]

View file

@ -80,6 +80,7 @@ services:
image: ghcr.io/gethomepage/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
environment: environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
PUID: 1000 # optional, your user id PUID: 1000 # optional, your user id
PGID: 1000 # optional, your group id PGID: 1000 # optional, your group id
ports: ports:
@ -94,6 +95,7 @@ or docker run:
```bash ```bash
docker run --name homepage \ docker run --name homepage \
-e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev \
-e PUID=1000 \ -e PUID=1000 \
-e PGID=1000 \ -e PGID=1000 \
-p 3000:3000 \ -p 3000:3000 \

View file

@ -15,7 +15,7 @@ export HOMEPAGE_BUILDTIME=$(date +%s)
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges. # Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own. # If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
# Running chown in that case (as non-root) will cause error # Running chown in that case (as non-root) will cause error
[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public
# 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

View file

@ -1,3 +0,0 @@
.md-typeset[data-page-id="landing"] .md-header-anchor {
display: none;
}

View file

@ -25,13 +25,13 @@ To configure Kubernetes gateway-api, ingress or ingressRoute service discovery,
Example settings: Example settings:
```yaml ```yaml
ingress: true # enable ingress only ingress: true # default, enable ingress only
``` ```
or or
```yaml ```yaml
ingress: true # enable ingress ingress: true # default, enable ingress
traefik: true # enable traefik ingressRoute traefik: true # enable traefik ingressRoute
gateway: true # enable gateway-api gateway: true # enable gateway-api
``` ```

View file

@ -78,7 +78,7 @@ background:
You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters. You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters.
```yaml ```yaml
cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur cardBlur: xs # xs, md, etc... see https://tailwindcss.com/docs/backdrop-blur
``` ```
## Favicon ## Favicon
@ -254,15 +254,29 @@ layout:
columns: 4 columns: 4
``` ```
### Five Columns ### Full Width
You can add a fifth column to services (when `style: columns` which is default) by adding: You can make homepage take up the entire window width by adding:
```yaml ```yaml
fiveColumns: true fullWidth: true
``` ```
By default homepage will max out at 4 columns for services with `columns` style ### Maximum Group Columns
You can set the maximum number of columns of groups on larger screen sizes (note this is only for groups with the default `style: columns`, not groups with `stle: row`) by adding:
```yaml
maxGroupColumns: 8 # default is 4 for services, 6 for bookmarks, max 8
```
By default homepage will max out at 4 columns for services and 6 for bookmarks, thus the minimum for this setting is _5_. Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well.
If you want to set the maximum columns for bookmark groups separately, you can do so by adding:
```yaml
maxBookmarkGroupColumns: 6 # default is 6, max 8
```
### Collapsible sections ### Collapsible sections
@ -542,3 +556,42 @@ 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.
## Identity Based Visibiltiy
Basic user identity integration is implemeted via an `identity` section. An identity provider can be configured using the `provider` section with the given type. Currently the only provider supported is `proxy`, where the users identification and group membership are passed via HTTP Request headers (in plaintext). The expectation is that the application will be accessed only via an authenticating proxy (i.e traefik or nginx).
The group and user headers are both configurable like so:
```yaml
identity:
provider:
type: proxy
groupHeader: "X-group-header"
userHeader: "X-user-header"
```
Identity based visibility can be configured on the service, bookmark, and widget level using the `allowUsers` and `allowGroups` list. The default is to allow all users and groups.
```yaml
- Example Servie:
allowGroups:
- Group1
- Group2
- Group3
allowUsers:
- User1
- User2
- User3
```
Identity visibility for groups can be set in the `groups` under `identity`. In general the `groups` tag follows the format of the `layout` section. For example:
```yaml
identity:
groups:
- My Service Group:
allowGroups: ["Group1", "Group2"]
- My Other Group:
allowGroups: ["Group1"]
```

View file

@ -16,7 +16,7 @@ services:
- /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 # (optional) For docker integrations
environment: environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
``` ```
### Running as non-root ### Running as non-root
@ -38,7 +38,7 @@ services:
- /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 # (optional) For docker integrations, see alternative methods
environment: environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
PUID: $PUID PUID: $PUID
PGID: $PGID PGID: $PGID
``` ```

View file

@ -13,20 +13,28 @@ You have a few options for deploying homepage, depending on your needs. We offer
<br> <br>
<div class="grid cards" style="margin: 0 auto;" markdown> <div class="grid cards" style="margin: 0 auto;" markdown>
:simple-docker: [&nbsp; Install on Docker :octicons-arrow-right-24:](docker.md) [:simple-docker: &nbsp; Install on Docker :octicons-arrow-right-24:](docker.md)
{ .card } { .card }
:simple-kubernetes: [&nbsp; Install on Kubernetes :octicons-arrow-right-24:](k8s.md) [:simple-kubernetes: &nbsp; Install on Kubernetes :octicons-arrow-right-24:](k8s.md)
{ .card } { .card }
:simple-unraid: [&nbsp; Install on UNRAID :octicons-arrow-right-24:](unraid.md) [:simple-unraid: &nbsp; Install on UNRAID :octicons-arrow-right-24:](unraid.md)
{ .card } { .card }
:simple-nextdotjs: [&nbsp; Building from source :octicons-arrow-right-24:](source.md) [:simple-nextdotjs: &nbsp; Building from source :octicons-arrow-right-24:](source.md)
{ .card } { .card }
</div> </div>
### `HOMEPAGE_ALLOWED_HOSTS` ### `HOMEPAGE_ALLOWED_HOSTS`
As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. As of v1.0 there is one required environment variable to access homepage via a URL other than `localhost`, <code>HOMEPAGE_ALLOWED_HOSTS</code>. The setting helps prevent certain kinds of attacks when retrieving data from the homepage API proxy.
The value is a comma-separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md), [kubernetes](k8s.md) and [source](source.md) installation pages for more information about where / how to set the variable.
`localhost:3000` and `127.0.0.1:3000` are always included, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc.
If you are seeing errors about host validation, check the homepage logs and ensure that the host exactly as output in the logs is in the `HOMEPAGE_ALLOWED_HOSTS` list.
This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended.

View file

@ -3,85 +3,6 @@ title: Kubernetes Installation
description: Install on Kubernetes description: Install on Kubernetes
--- ---
## Install with Helm
There is an [unofficial helm chart](https://github.com/jameswynn/helm-charts/tree/main/charts/homepage) that creates all the necessary manifests, including the service account and RBAC entities necessary for service discovery.
```sh
helm repo add jameswynn https://jameswynn.github.io/helm-charts
helm install homepage jameswynn/homepage -f values.yaml
```
The helm chart allows for all the configurations to be inlined directly in your `values.yaml`:
```yaml
config:
bookmarks:
- Developer:
- Github:
- abbr: GH
href: https://github.com/
services:
- My First Group:
- My First Service:
href: http://localhost/
description: Homepage is awesome
- My Second Group:
- My Second Service:
href: http://localhost/
description: Homepage is the best
- My Third Group:
- My Third Service:
href: http://localhost/
description: Homepage is 😎
widgets:
# show the kubernetes widget, with the cluster summary and individual nodes
- kubernetes:
cluster:
show: true
cpu: true
memory: true
showLabel: true
label: "cluster"
nodes:
show: true
cpu: true
memory: true
showLabel: true
- search:
provider: duckduckgo
target: _blank
kubernetes:
mode: cluster
settings:
# The service account is necessary to allow discovery of other services
serviceAccount:
create: true
name: homepage
# This enables the service account to access the necessary resources
enableRbac: true
ingress:
main:
enabled: true
annotations:
# Example annotations to add Homepage to your Homepage!
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Homepage"
gethomepage.dev/description: "Dynamically Detected Homepage"
gethomepage.dev/group: "Dynamic"
gethomepage.dev/icon: "homepage.png"
hosts:
- host: homepage.example.com
paths:
- path: /
pathType: Prefix
```
## Install with Kubernetes Manifests ## Install with Kubernetes Manifests
If you don't want to use the unofficial Helm chart, you can also create your own Kubernetes manifest(s) and apply them with `kubectl apply -f filename.yaml`. If you don't want to use the unofficial Helm chart, you can also create your own Kubernetes manifest(s) and apply them with `kubectl apply -f filename.yaml`.
@ -302,6 +223,9 @@ spec:
- name: homepage - name: homepage
image: "ghcr.io/gethomepage/homepage:latest" image: "ghcr.io/gethomepage/homepage:latest"
imagePullPolicy: Always imagePullPolicy: Always
env:
- name: HOMEPAGE_ALLOWED_HOSTS
value: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
ports: ports:
- name: http - name: http
containerPort: 3000 containerPort: 3000

View file

@ -9,7 +9,13 @@ First, clone the repository:
git clone https://github.com/gethomepage/homepage.git git clone https://github.com/gethomepage/homepage.git
``` ```
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like): If `pnpm` is not installed, install it:
```bash
npm install -g pnpm
```
Then install dependencies and build the production bundle:
```bash ```bash
pnpm install pnpm install
@ -21,7 +27,9 @@ If this is your first time starting, copy the `src/skeleton` directory to `confi
Finally, run the server: Finally, run the server:
```bash ```bash
HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev pnpm start HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 pnpm start
``` ```
When updating homepage versions you will need to re-build the static files i.e. repeat the process above. When updating homepage versions you will need to re-build the static files i.e. repeat the process above.
See [HOMEPAGE_ALLOWED_HOSTS](index.md#homepage_allowed_hosts) for more information on this environment variable.

View file

@ -286,3 +286,13 @@ body[data-md-color-scheme="default"] {
.md-tabs__link { .md-tabs__link {
transform: translateZ(0); transform: translateZ(0);
} }
.grid.cards .card {
padding: 0;
}
.grid.cards .card a {
display: block;
padding: 0.8rem;
text-decoration: none;
}

View file

@ -12,6 +12,7 @@ hide:
- Check config/logs/homepage.log, on docker simply e.g. `docker logs homepage`. This may provide some insight into the reason for an error. - Check config/logs/homepage.log, on docker simply e.g. `docker logs homepage`. This may provide some insight into the reason for an error.
- Check the browser error console, this can also sometimes provide useful information. - Check the browser error console, this can also sometimes provide useful information.
- Consider setting the `ENV` variable `LOG_LEVEL` to `debug`. - Consider setting the `ENV` variable `LOG_LEVEL` to `debug`.
- If certain widgets are failing when connecting to public APIs, consider [disabling IPv6](#disabling-ipv6).
## Service Widget Errors ## Service Widget Errors
@ -66,3 +67,17 @@ All service widgets work essentially the same, that is, homepage makes a proxied
## Missing custom icons ## Missing custom icons
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
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.
Alternatively, you can use the `sysctls` option in your docker-compose file to disable IPv6 for the homepage container completely:
```yaml
services:
homepage:
...
sysctls:
- net.ipv6.conf.all.disable_ipv6=1
```

View file

@ -19,27 +19,22 @@ widget:
requestBody: # optional, can be string or object, see below requestBody: # optional, can be string or object, see below
display: # optional, default to block, see below display: # optional, default to block, see below
mappings: mappings:
- field: key # needs to be YAML string or object - field: key
label: Field 1 label: Field 1
format: text # optional - defaults to text format: text # optional - defaults to text
- field: # needs to be YAML string or object - field: path.to.key2
path:
to: key2
format: number # optional - defaults to text format: number # optional - defaults to text
label: Field 2 label: Field 2
- field: # needs to be YAML string or object - field: path.to.another.key3
path:
to:
another: key3
label: Field 3 label: Field 3
format: percent # optional - defaults to text format: percent # optional - defaults to text
- field: key # needs to be YAML string or object - field: key
label: Field 4 label: Field 4
format: date # optional - defaults to text format: date # optional - defaults to text
locale: nl # optional locale: nl # optional
dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`. dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`.
timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`. timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`.
- field: key # needs to be YAML string or object - field: key
label: Field 5 label: Field 5
format: relativeDate # optional - defaults to text format: relativeDate # optional - defaults to text
locale: nl # optional locale: nl # optional
@ -49,9 +44,7 @@ widget:
label: Field 6 label: Field 6
format: text format: text
additionalField: # optional additionalField: # optional
field: field: hourly.time.key
hourly:
time: other key
color: theme # optional - defaults to "". Allowed values: `["theme", "adaptive", "black", "white"]`. color: theme # optional - defaults to "". Allowed values: `["theme", "adaptive", "black", "white"]`.
format: date # optional format: date # optional
- field: key - field: key
@ -103,9 +96,16 @@ mappings:
label: Name label: Name
- field: status # Alive - field: status # Alive
label: Status label: Status
- field: - field: origin.name # Earth (C-137)
origin: name # Earth (C-137)
label: Origin label: Origin
- field: locations.1.name # Citadel of Ricks
label: Location
```
Note that older versions of the widget accepted fields as a yaml object, which is still supported. E.g.:
```yaml
mappings:
- field: - field:
locations: locations:
1: name # Citadel of Ricks 1: name # Citadel of Ricks
@ -138,7 +138,15 @@ You can manipulate data with the following tools `remap`, `scale`, `prefix` and
prefix: "$" prefix: "$"
``` ```
## List View ## Display Options
The widget supports different display modes that can be set using the `display` property.
### Block View (Default)
The default display mode is `block`, which shows fields in a block format.
### List View
You can change the default block view to a list view by setting the `display` option to `list`. You can change the default block view to a list view by setting the `display` option to `list`.
@ -162,13 +170,54 @@ The list view can optionally display an additional field next to the primary fie
- any: true # will map all other values - any: true # will map all other values
to: Unknown to: Unknown
additionalField: additionalField:
field: field: hourly.time.key
hourly:
time: key
color: theme color: theme
format: date format: date
``` ```
### Dynamic List View
To display a list of items from an array in the API response, set the `display` property to `dynamic-list` and configure the `mappings` object with the following properties:
```yaml
widget:
type: customapi
url: https://example.com/api/servers
display: dynamic-list
mappings:
items: data # optional, the path to the array in the API response. Omit this option if the array is at the root level
name: id # required, field in each item to use as the item name (left side)
label: ip_address # required, field in each item to use as the item label (right side)
limit: 5 # optional, limit the number of items to display
format: text # optional - format of the label field
target: https://example.com/server/{id} # optional, makes items clickable with template support
```
This configuration would work with an API that returns a response like:
```json
{
"data": [
{ "id": "server1", "name": "Server 1", "ip_address": "192.168.0.1" },
{ "id": "server2", "name": "Server 2", "ip_address": "192.168.0.2" }
]
}
```
The widget would display a list with two items:
- "Server 1" on the left and "192.168.0.1" on the right, clickable to "https://example.com/server/server1"
- "Server 2" on the left and "192.168.0.2" on the right, clickable to "https://example.com/server/server2"
For nested fields in the items, you can use dot notation:
```yaml
mappings:
items: data.results.servers
name: details.id
label: details.name
```
## Custom Headers ## Custom Headers
Pass custom headers using the `headers` option, for example: Pass custom headers using the `headers` option, for example:

View file

@ -7,7 +7,7 @@ Learn more about [Gitea](https://gitea.com).
API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens.
Allowed fields: `["notifications", "issues", "pulls"]`. Allowed fields: `["repositories", "notifications", "issues", "pulls"]`.
```yaml ```yaml
widget: widget:

View file

@ -1,17 +0,0 @@
---
title: Hoarder
description: Hoarder Widget Configuration
---
Learn more about [Hoarder](https://hoarder.app).
Generate an API key for your user at `User Settings > API Keys`.
Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4).
```yaml
widget:
type: hoarder
url: http[s]://hoarder.host.or.ip[:port]
key: hoarderapikey
```

View file

@ -51,7 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [HDHomeRun](hdhomerun.md) - [HDHomeRun](hdhomerun.md)
- [Headscale](headscale.md) - [Headscale](headscale.md)
- [Healthchecks](healthchecks.md) - [Healthchecks](healthchecks.md)
- [Hoarder](hoarder.md) - [Karakeep](karakeep.md)
- [Home Assistant](homeassistant.md) - [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md) - [HomeBox](homebox.md)
- [Homebridge](homebridge.md) - [Homebridge](homebridge.md)
@ -117,6 +117,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [ruTorrent](rutorrent.md) - [ruTorrent](rutorrent.md)
- [SABnzbd](sabnzbd.md) - [SABnzbd](sabnzbd.md)
- [Scrutiny](scrutiny.md) - [Scrutiny](scrutiny.md)
- [Slskd](slskd.md)
- [Sonarr](sonarr.md) - [Sonarr](sonarr.md)
- [Speedtest Tracker](speedtest-tracker.md) - [Speedtest Tracker](speedtest-tracker.md)
- [Stash](stash.md) - [Stash](stash.md)

View file

@ -0,0 +1,17 @@
---
title: Karakeep
description: Karakeep Widget Configuration
---
Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder).
Generate an API key for your user at `User Settings > API Keys`.
Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4).
```yaml
widget:
type: karakeep
url: http[s]://karakeep.host.or.ip[:port]
key: karakeep_api_key
```

View file

@ -20,4 +20,5 @@ widget:
url: http://komga.host.or.ip:port url: http://komga.host.or.ip:port
username: username username: username
password: password password: password
key: komgaapikey # optional
``` ```

View file

@ -0,0 +1,25 @@
---
title: Slskd
description: Slskd Widget Configuration
---
Learn more about [Slskd](https://github.com/slskd/slskd).
Generate an API key for slskd with `openssl rand -base64 48`.
Add it to your `path/to/config/slskd.yml` in `web > authentication > api_keys`:
```yaml
homepage_widget:
key: <generated key>
role: readonly
cidr: <homepage subnet>
```
Allowed fields: `["slskStatus", "updateStatus", "downloads", "uploads", "sharedFiles"]` (maximum of 4).
```yaml
widget:
type: slskd
url: http[s]://slskd.host.or.ip[:5030]
key: generatedapikey
```

View file

@ -46,6 +46,10 @@ config:
docker: docker:
settings: settings:
env:
- name: HOMEPAGE_ALLOWED_HOSTS
value: "homepage.k3d.localhost:8080"
serviceAccount: serviceAccount:
create: true create: true
name: homepage name: homepage

View file

@ -4,9 +4,9 @@ site_name: Homepage
site_url: https://gethomepage.dev/ site_url: https://gethomepage.dev/
# Repository # Repository
repo_name: gethomepage/homepage repo_name: di0ik/homepage-plus
repo_url: https://github.com/gethomepage/homepage repo_url: https://github.com/di0ik/homepage-plus
edit_uri: https://github.com/gethomepage/homepage/tree/main/docs/ edit_uri: https://github.com/di0ik/homepage-plus/tree/main/docs/
nav: nav:
- "Home": - "Home":
@ -74,7 +74,7 @@ nav:
- widgets/services/hdhomerun.md - widgets/services/hdhomerun.md
- widgets/services/headscale.md - widgets/services/headscale.md
- widgets/services/healthchecks.md - widgets/services/healthchecks.md
- widgets/services/hoarder.md - widgets/services/karakeep.md
- widgets/services/homeassistant.md - widgets/services/homeassistant.md
- widgets/services/homebox.md - widgets/services/homebox.md
- widgets/services/homebridge.md - widgets/services/homebridge.md

View file

@ -1,6 +1,6 @@
{ {
"name": "homepage", "name": "homepage",
"version": "1.0.0", "version": "1.2.0",
"private": true, "private": true,
"scripts": { "scripts": {
"preinstall": "npx only-allow pnpm", "preinstall": "npx only-allow pnpm",
@ -19,13 +19,13 @@
"dockerode": "^4.0.4", "dockerode": "^4.0.4",
"follow-redirects": "^1.15.9", "follow-redirects": "^1.15.9",
"gamedig": "^5.2.0", "gamedig": "^5.2.0",
"i18next": "^21.10.0", "i18next": "^24.2.3",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"json-rpc-2.0": "^1.7.0", "json-rpc-2.0": "^1.7.0",
"luxon": "^3.5.0", "luxon": "^3.5.0",
"memory-cache": "^0.2.0", "memory-cache": "^0.2.0",
"minecraftstatuspinger": "^1.2.1", "minecraftstatuspinger": "^1.2.2",
"next": "^15.1.7", "next": "^15.2.4",
"next-i18next": "^12.1.0", "next-i18next": "^12.1.0",
"ping": "^0.4.4", "ping": "^0.4.4",
"pretty-bytes": "^6.1.1", "pretty-bytes": "^6.1.1",
@ -36,7 +36,7 @@
"react-icons": "^5.4.0", "react-icons": "^5.4.0",
"recharts": "^2.15.1", "recharts": "^2.15.1",
"rrule": "^2.8.1", "rrule": "^2.8.1",
"swr": "^1.3.0", "swr": "^2.3.3",
"systeminformation": "^5.25.11", "systeminformation": "^5.25.11",
"tough-cookie": "^5.1.2", "tough-cookie": "^5.1.2",
"urbackup-server-api": "^0.8.9", "urbackup-server-api": "^0.8.9",
@ -47,15 +47,16 @@
"@tailwindcss/forms": "^0.5.10", "@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.0.9", "@tailwindcss/postcss": "^4.0.9",
"eslint": "^9.21.0", "eslint": "^9.21.0",
"eslint-config-next": "^15.1.7", "eslint-config-next": "^15.2.4",
"eslint-config-prettier": "^10.0.2", "eslint-config-prettier": "^10.1.1",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.2.3", "eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-react": "^7.37.4", "eslint-plugin-react": "^7.37.4",
"eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-hooks": "^5.1.0",
"postcss": "^8.5.2", "postcss": "^8.5.3",
"prettier": "^3.5.2", "prettier": "^3.5.2",
"prettier-plugin-organize-imports": "^4.1.0",
"tailwind-scrollbar": "^4.0.1", "tailwind-scrollbar": "^4.0.1",
"tailwindcss": "^4.0.9", "tailwindcss": "^4.0.9",
"typescript": "^5.7.3" "typescript": "^5.7.3"

641
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Kennisgewings", "notifications": "Kennisgewings",
"issues": "Kwessies", "issues": "Kwessies",
"pulls": "Trek Versoeke" "pulls": "Trek Versoeke",
"repositories": "Bewaarplekke"
}, },
"stash": { "stash": {
"scenes": "Tonele", "scenes": "Tonele",
@ -1023,12 +1024,23 @@
"bcharge": "Batterylading", "bcharge": "Batterylading",
"timeleft": "Oorblywende Tyd" "timeleft": "Oorblywende Tyd"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Boekmerke",
"favorites": "Favorites", "favorites": "Gunstelinge",
"archived": "Archived", "archived": "Geargiveer",
"highlights": "Highlights", "highlights": "Hoogtepunte",
"lists": "Lists", "lists": "Lyste",
"tags": "Merkers" "tags": "Merkers"
},
"slskd": {
"slskStatus": "Netwerk",
"connected": "Gekoppel",
"disconnected": "Ontkoppel",
"updateStatus": "Opdateer",
"update_yes": "Beskikbaar",
"update_no": "Op Datum",
"downloads": "Aflaaie",
"uploads": "Oplaaie",
"sharedFiles": "Lêers"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "الإشعارات", "notifications": "الإشعارات",
"issues": "المُشكِلات", "issues": "المُشكِلات",
"pulls": "طلبات السحب" "pulls": "طلبات السحب",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "المشاهد", "scenes": "المشاهد",
@ -1023,12 +1024,23 @@
"bcharge": "شحن البطارية", "bcharge": "شحن البطارية",
"timeleft": "الوقت المتبقي" "timeleft": "الوقت المتبقي"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "التصنيفات" "tags": "التصنيفات"
},
"slskd": {
"slskStatus": "الشبكة",
"connected": "متصل",
"disconnected": "غير متصل",
"updateStatus": "Update",
"update_yes": "متاح",
"update_no": "حتى الآن",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "ملفات"
} }
} }

View file

@ -394,7 +394,7 @@
"strelaysrv": { "strelaysrv": {
"numActiveSessions": "Сесии", "numActiveSessions": "Сесии",
"numConnections": "Connections", "numConnections": "Connections",
"dataRelayed": "Relayed", "dataRelayed": "",
"transferRate": "Скорост" "transferRate": "Скорост"
}, },
"mastodon": { "mastodon": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Известия", "notifications": "Известия",
"issues": "Издания", "issues": "Издания",
"pulls": "Заявки за сливане" "pulls": "Заявки за сливане",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Сцени", "scenes": "Сцени",
@ -1001,7 +1002,7 @@
"argocd": { "argocd": {
"apps": "Приложения", "apps": "Приложения",
"synced": "Synced", "synced": "Synced",
"outOfSync": "Out Of Sync", "outOfSync": "",
"healthy": "Здрав", "healthy": "Здрав",
"degraded": "Деградирани", "degraded": "Деградирани",
"progressing": "Progressing", "progressing": "Progressing",
@ -1023,12 +1024,23 @@
"bcharge": "Заряд на батерията", "bcharge": "Заряд на батерията",
"timeleft": "Оставащо Време" "timeleft": "Оставащо Време"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Тагове" "tags": "Тагове"
},
"slskd": {
"slskStatus": "Мрежа",
"connected": "Свързан",
"disconnected": "Не е свързан",
"updateStatus": "Update",
"update_yes": "Наличен",
"update_no": "Актуално",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Файлове"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notificacions", "notifications": "Notificacions",
"issues": "Problemes", "issues": "Problemes",
"pulls": "Sol·licitud de Canvis" "pulls": "Sol·licitud de Canvis",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Escenes", "scenes": "Escenes",
@ -1023,12 +1024,23 @@
"bcharge": "Càrrega de la bateria", "bcharge": "Càrrega de la bateria",
"timeleft": "Temps restant" "timeleft": "Temps restant"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Etiquetes" "tags": "Etiquetes"
},
"slskd": {
"slskStatus": "Xarxa",
"connected": "Connectat",
"disconnected": "Desconnectat",
"updateStatus": "Update",
"update_yes": "Disponible",
"update_no": "Actualitzat",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Fitxers"
} }
} }

View file

@ -85,16 +85,16 @@
"ping": { "ping": {
"error": "Chyba", "error": "Chyba",
"ping": "Odezva", "ping": "Odezva",
"down": "Down", "down": "Výpadek",
"up": "Up", "up": "Běží",
"not_available": "Není k dispozici" "not_available": "Není k dispozici"
}, },
"siteMonitor": { "siteMonitor": {
"http_status": "Stav HTTP", "http_status": "Stav HTTP",
"error": "Chyba", "error": "Chyba",
"response": "Odpověď", "response": "Odpověď",
"down": "Down", "down": "Výpadek",
"up": "Up", "up": "Běží",
"not_available": "Není k dispozici" "not_available": "Není k dispozici"
}, },
"emby": { "emby": {
@ -144,13 +144,13 @@
"uptime": "Doba spuštění", "uptime": "Doba spuštění",
"maxDown": "Max. Down", "maxDown": "Max. Down",
"maxUp": "Max. Up", "maxUp": "Max. Up",
"down": "Down", "down": "Výpadek",
"up": "Up", "up": "Běží",
"received": "Přijaté", "received": "Přijaté",
"sent": "Odeslané", "sent": "Odeslané",
"externalIPAddress": "Ext. IP", "externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "Veřejná IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Věřejná IPv6 prefix"
}, },
"caddy": { "caddy": {
"upstreams": "Odesílání dat", "upstreams": "Odesílání dat",
@ -178,7 +178,7 @@
"connectedAp": "Připojené APs", "connectedAp": "Připojené APs",
"activeUser": "Aktivní zařízení", "activeUser": "Aktivní zařízení",
"alerts": "Upozornění", "alerts": "Upozornění",
"connectedGateways": "Connected gateways", "connectedGateways": "Připojené brány",
"connectedSwitches": "Připojené přepínače" "connectedSwitches": "Připojené přepínače"
}, },
"nzbget": { "nzbget": {
@ -229,8 +229,8 @@
"seed": "Seedované" "seed": "Seedované"
}, },
"develancacheui": { "develancacheui": {
"cachehitbytes": "Cache Hit Bytes", "cachehitbytes": "Byty nalezené v mezipaměti",
"cachemissbytes": "Cache Miss Bytes" "cachemissbytes": "Byty nenalezené v mezipaměti"
}, },
"downloadstation": { "downloadstation": {
"download": "Stahování", "download": "Stahování",
@ -287,7 +287,7 @@
"total": "Celkem", "total": "Celkem",
"connected": "", "connected": "",
"new_devices": "", "new_devices": "",
"down_alerts": "Down Alerts" "down_alerts": "Upozornění na výpadek"
}, },
"pihole": { "pihole": {
"queries": "Dotazy", "queries": "Dotazy",
@ -313,13 +313,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "Staženo", "download": "Staženo",
"nondownload": "Non-Downloaded", "nondownload": "Nestaženo",
"read": "Přečteno", "read": "Přečteno",
"unread": "Nepřečteno", "unread": "Nepřečteno",
"downloadedread": "Downloaded & Read", "downloadedread": "Staženo a přečteno",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "Staženo a nepřečteno",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "Nestaženo a přečteno",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "Nestaženo a nepřečteno"
}, },
"tailscale": { "tailscale": {
"address": "Adresa", "address": "Adresa",
@ -337,15 +337,15 @@
}, },
"technitium": { "technitium": {
"totalQueries": "Dotazy", "totalQueries": "Dotazy",
"totalNoError": "Success", "totalNoError": "Úspěšně",
"totalServerFailure": "Failures", "totalServerFailure": "Chyby",
"totalNxDomain": "NX Domains", "totalNxDomain": "NX domény",
"totalRefused": "Refused", "totalRefused": "Odmítnuto",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "Autoritativní",
"totalRecursive": "Recursive", "totalRecursive": "Rekurzivní",
"totalCached": "Cached", "totalCached": "V mezipaměti",
"totalBlocked": "Blokováno", "totalBlocked": "Blokováno",
"totalDropped": "Dropped", "totalDropped": "Vynecháno",
"totalClients": "Klienti" "totalClients": "Klienti"
}, },
"tdarr": { "tdarr": {
@ -434,7 +434,7 @@
"load": "Zatížení", "load": "Zatížení",
"wait": "Počkejte prosím", "wait": "Počkejte prosím",
"temp": "TEPLOTA", "temp": "TEPLOTA",
"_temp": "Temp", "_temp": "Teplota",
"warn": "Varováni", "warn": "Varováni",
"uptime": "BĚŽÍ", "uptime": "BĚŽÍ",
"total": "Celkem", "total": "Celkem",
@ -442,12 +442,12 @@
"used": "Využité", "used": "Využité",
"days": "d", "days": "d",
"hours": "h", "hours": "h",
"crit": "Crit", "crit": "Kritické",
"read": "Přečteno", "read": "Přečteno",
"write": "Write", "write": "Zápis",
"gpu": "GPU", "gpu": "Grafická karta",
"mem": "Mem", "mem": "Pamět RAM",
"swap": "Swap" "swap": "Swap RAM"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Záložka", "bookmark": "Záložka",
@ -456,7 +456,7 @@
"custom": "Vlastní", "custom": "Vlastní",
"visit": "Navštivte", "visit": "Navštivte",
"url": "Odkaz", "url": "Odkaz",
"searchsuggestion": "Suggestion" "searchsuggestion": "Doporučení"
}, },
"wmo": { "wmo": {
"0-day": "Slunečno", "0-day": "Slunečno",
@ -523,15 +523,15 @@
"up_to_date": "Žádné", "up_to_date": "Žádné",
"child_bridges": "Podřízené můstky", "child_bridges": "Podřízené můstky",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Up", "up": "Běží",
"pending": "Čeká", "pending": "Čeká",
"down": "Down" "down": "Výpadek"
}, },
"healthchecks": { "healthchecks": {
"new": "Nové", "new": "Nové",
"up": "Up", "up": "Běží",
"grace": "V období odkladu", "grace": "V období odkladu",
"down": "Down", "down": "Výpadek",
"paused": "Pozastaveno", "paused": "Pozastaveno",
"status": "Stav", "status": "Stav",
"last_ping": "Poslední ping", "last_ping": "Poslední ping",
@ -573,14 +573,14 @@
"hdhomerun": { "hdhomerun": {
"channels": "Kanály", "channels": "Kanály",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "Tuner",
"channelNumber": "Channel", "channelNumber": "Kanál",
"channelNetwork": "Network", "channelNetwork": "Síť",
"signalStrength": "Strength", "signalStrength": "Síla",
"signalQuality": "Quality", "signalQuality": "Kvalita",
"symbolQuality": "Quality", "symbolQuality": "Kvalita",
"networkRate": "Přenosová rychlost", "networkRate": "Přenosová rychlost",
"clientIP": "Client" "clientIP": "Klient"
}, },
"scrutiny": { "scrutiny": {
"passed": "Úspěšné", "passed": "Úspěšné",
@ -592,12 +592,12 @@
"total": "Celkem" "total": "Celkem"
}, },
"peanut": { "peanut": {
"battery_charge": "Battery Charge", "battery_charge": "Úroveň baterie",
"ups_load": "UPS Load", "ups_load": "Zítěž UPS",
"ups_status": "UPS Status", "ups_status": "Stav UPS",
"online": "Online", "online": "Online",
"on_battery": "On Battery", "on_battery": "Na baterii",
"low_battery": "Low Battery" "low_battery": "Nízký stav baterie"
}, },
"nextdns": { "nextdns": {
"wait": "Čekejte prosím", "wait": "Čekejte prosím",
@ -615,9 +615,9 @@
"streams_xepg": "Kanály XEPG" "streams_xepg": "Kanály XEPG"
}, },
"opendtu": { "opendtu": {
"yieldDay": "Today", "yieldDay": "Dnes",
"absolutePower": "Power", "absolutePower": "Výkon",
"relativePower": "Power %", "relativePower": "Výkon %",
"limit": "Limit" "limit": "Limit"
}, },
"opnsense": { "opnsense": {
@ -646,9 +646,9 @@
"load": "Prům. zatížení", "load": "Prům. zatížení",
"memory": "Využití paměti", "memory": "Využití paměti",
"wanStatus": "Stav WAN", "wanStatus": "Stav WAN",
"up": "Up", "up": "Běží",
"down": "Down", "down": "Výpadek",
"temp": "Temp", "temp": "Teplota",
"disk": "Využití disku", "disk": "Využití disku",
"wanIP": "IP WAN" "wanIP": "IP WAN"
}, },
@ -668,14 +668,14 @@
"up": "Stránky Up", "up": "Stránky Up",
"down": "Stránky Down", "down": "Stránky Down",
"uptime": "Doba spuštění", "uptime": "Doba spuštění",
"incident": "Incident", "incident": "Událost",
"m": "m" "m": "m"
}, },
"atsumeru": { "atsumeru": {
"series": "Seriály", "series": "Seriály",
"archives": "Archives", "archives": "Archivy",
"chapters": "Chapters", "chapters": "Kapitoly",
"categories": "Categories" "categories": "Kategorie"
}, },
"komga": { "komga": {
"libraries": "Knihovny", "libraries": "Knihovny",
@ -705,13 +705,13 @@
"time": "Čas" "time": "Čas"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Čisté jmění",
"budget": "Budget" "budget": "Rozpočet"
}, },
"grafana": { "grafana": {
"dashboards": "Nástěnky", "dashboards": "Nástěnky",
"datasources": "Zdroje dat", "datasources": "Zdroje dat",
"totalalerts": "Celkový počet upozornění", "totalalerts": "Celkový počet upozornění2",
"alertstriggered": "Spuštěné výstrahy" "alertstriggered": "Spuštěné výstrahy"
}, },
"nextcloud": { "nextcloud": {
@ -749,7 +749,7 @@
"uptime": "Doba spuštění" "uptime": "Doba spuštění"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Dnes",
"gross_percent_1y": "Jeden rok", "gross_percent_1y": "Jeden rok",
"gross_percent_max": "Za celou dobu" "gross_percent_max": "Za celou dobu"
}, },
@ -770,8 +770,8 @@
}, },
"calibreweb": { "calibreweb": {
"books": "Knihy", "books": "Knihy",
"authors": "Authors", "authors": "Autoři",
"categories": "Categories", "categories": "Kategorie",
"series": "Seriály" "series": "Seriály"
}, },
"jdownloader": { "jdownloader": {
@ -785,44 +785,44 @@
"totalFiles": "Soubory" "totalFiles": "Soubory"
}, },
"azuredevops": { "azuredevops": {
"result": "Result", "result": "Výsledek",
"status": "Stav", "status": "Stav",
"buildId": "Build ID", "buildId": "ID sestavení",
"succeeded": "Succeeded", "succeeded": "Úspěšně",
"notStarted": "Not Started", "notStarted": "Nezahájeno",
"failed": "Selhalo", "failed": "Selhalo",
"canceled": "Canceled", "canceled": "Zrušeno",
"inProgress": "In Progress", "inProgress": "Probíhá",
"totalPrs": "Total PRs", "totalPrs": "Celkem PR",
"myPrs": "My PRs", "myPrs": "Moje PR",
"approved": "Schváleno" "approved": "Schváleno"
}, },
"gamedig": { "gamedig": {
"status": "Stav", "status": "Stav",
"online": "Online", "online": "Online",
"offline": "Offline", "offline": "Offline",
"name": "Name", "name": "Jméno",
"map": "Map", "map": "Mapa",
"currentPlayers": "Current players", "currentPlayers": "Počet hráčů",
"players": "Hráči", "players": "Hráči",
"maxPlayers": "Max players", "maxPlayers": "Maximální počet hráčů",
"bots": "Bots", "bots": "Boti",
"ping": "Odezva" "ping": "Odezva"
}, },
"urbackup": { "urbackup": {
"ok": "Ok", "ok": "Ok",
"errored": "Errors", "errored": "Chyby",
"noRecent": "Out of Date", "noRecent": "Zastaralý",
"totalUsed": "Used Storage" "totalUsed": "Využití úložiště"
}, },
"mealie": { "mealie": {
"recipes": "Recipes", "recipes": "Recepty",
"users": "Uživatelé", "users": "Uživatelé",
"categories": "Categories", "categories": "Kategorie",
"tags": "Tags" "tags": "Štítky"
}, },
"openmediavault": { "openmediavault": {
"downloading": "Downloading", "downloading": "Stahování",
"total": "Celkem", "total": "Celkem",
"running": "Běží", "running": "Běží",
"stopped": "Zastaveno", "stopped": "Zastaveno",
@ -831,94 +831,95 @@
}, },
"openwrt": { "openwrt": {
"uptime": "Doba spuštění", "uptime": "Doba spuštění",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "Prům. zatížení procesoru (5m)",
"up": "Up", "up": "Běží",
"down": "Down", "down": "Výpadek",
"bytesTx": "Transmitted", "bytesTx": "Přeneseno",
"bytesRx": "Přijaté" "bytesRx": "Přijaté"
}, },
"uptimerobot": { "uptimerobot": {
"status": "Stav", "status": "Stav",
"uptime": "Doba spuštění", "uptime": "Doba spuštění",
"lastDown": "Last Downtime", "lastDown": "Poslední výpadek",
"downDuration": "Downtime Duration", "downDuration": "Trvání výpadku",
"sitesUp": "Stránky Up", "sitesUp": "Stránky Up",
"sitesDown": "Stránky Down", "sitesDown": "Stránky Down",
"paused": "Pozastaveno", "paused": "Pozastaveno",
"notyetchecked": "Not Yet Checked", "notyetchecked": "Zatím nezkontrolováno",
"up": "Up", "up": "Běží",
"seemsdown": "Seems Down", "seemsdown": "Zdá se nedostupný",
"down": "Down", "down": "Výpadek",
"unknown": "Neznámý" "unknown": "Neznámý"
}, },
"calendar": { "calendar": {
"inCinemas": "In cinemas", "inCinemas": "V kinech",
"physicalRelease": "Physical release", "physicalRelease": "Fyzické vydání",
"digitalRelease": "Digital release", "digitalRelease": "Digitální vydání",
"noEventsToday": "No events for today!", "noEventsToday": "Pro dnešek žádné události!",
"noEventsFound": "No events found" "noEventsFound": "Nemáte žádné události"
}, },
"romm": { "romm": {
"platforms": "Platforms", "platforms": "Platformy",
"totalRoms": "Games", "totalRoms": "Hry",
"saves": "Saves", "saves": "Uložené",
"states": "States", "states": "Stavy",
"screenshots": "Screenshots", "screenshots": "Snímky obrazovky",
"totalfilesize": "Total Size" "totalfilesize": "Celková velikost"
}, },
"mailcow": { "mailcow": {
"domains": "Domény", "domains": "Domény",
"mailboxes": "Mailboxes", "mailboxes": "E-mailové schránky",
"mails": "Mails", "mails": "Maily",
"storage": "Úložiště" "storage": "Úložiště"
}, },
"netdata": { "netdata": {
"warnings": "Warnings", "warnings": "Upozornění",
"criticals": "Criticals" "criticals": "Kritické"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Události",
"plants": "Plants", "plants": "Rostliny",
"photos": "Fotografie", "photos": "Fotografie",
"species": "Species" "species": "Druhy"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Oznámení",
"issues": "Problémy", "issues": "Problémy",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repozitáře"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scény",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Přehrané scény",
"playCount": "Total Plays", "playCount": "Celkový počet přehrání",
"playDuration": "Time Watched", "playDuration": "Čas sledování",
"sceneSize": "Scenes Size", "sceneSize": "Velikost scén",
"sceneDuration": "Scenes Duration", "sceneDuration": "Délka scény",
"images": "Images", "images": "Obrázky",
"imageSize": "Images Size", "imageSize": "Velikost obrázků",
"galleries": "Galleries", "galleries": "Galerie",
"performers": "Performers", "performers": "Herci",
"studios": "Studios", "studios": "Studia",
"movies": "Filmy", "movies": "Filmy",
"tags": "Tags", "tags": "Štítky",
"oCount": "O Count" "oCount": "Počet O"
}, },
"tandoor": { "tandoor": {
"users": "Uživatelé", "users": "Uživatelé",
"recipes": "Recipes", "recipes": "Recepty",
"keywords": "Keywords" "keywords": "Klíčová slova"
}, },
"homebox": { "homebox": {
"items": "Items", "items": "Položky",
"totalWithWarranty": "With Warranty", "totalWithWarranty": "Se zárukou",
"locations": "Locations", "locations": "Lokality",
"labels": "Labels", "labels": "Štítky",
"users": "Uživatelé", "users": "Uživatelé",
"totalValue": "Total Value" "totalValue": "Celková hodnota"
}, },
"crowdsec": { "crowdsec": {
"alerts": "Upozornění", "alerts": "Upozornění",
"bans": "Bans" "bans": "Bany"
}, },
"wgeasy": { "wgeasy": {
"connected": "", "connected": "",
@ -927,10 +928,10 @@
"total": "Celkem" "total": "Celkem"
}, },
"swagdashboard": { "swagdashboard": {
"proxied": "Proxied", "proxied": "Přes proxy",
"auth": "With Auth", "auth": "S ověřením",
"outdated": "Outdated", "outdated": "Zastaralé",
"banned": "Banned" "banned": "Zabanován"
}, },
"myspeed": { "myspeed": {
"ping": "Odezva", "ping": "Odezva",
@ -938,46 +939,46 @@
"upload": "Nahrávání" "upload": "Nahrávání"
}, },
"stocks": { "stocks": {
"stocks": "Stocks", "stocks": "Akcie",
"loading": "Loading", "loading": "Načítání",
"open": "Open - US Market", "open": "Otevřeno - US trh",
"closed": "Closed - US Market", "closed": "Uzavřeno - US trh",
"invalidConfiguration": "Invalid Configuration" "invalidConfiguration": "Neplatná konfigurace"
}, },
"frigate": { "frigate": {
"cameras": "Cameras", "cameras": "Kamery",
"uptime": "Doba spuštění", "uptime": "Doba spuštění",
"version": "Verze" "version": "Verze"
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": "Linky",
"collections": "Collections", "collections": "Sbírky",
"tags": "Tags" "tags": "Štítky"
}, },
"zabbix": { "zabbix": {
"unclassified": "Not classified", "unclassified": "Neklasifikováno",
"information": "Informace", "information": "Informace",
"warning": "Warning", "warning": "Upozornění",
"average": "Average", "average": "Průměr",
"high": "High", "high": "Vysoký",
"disaster": "Disaster" "disaster": "Katastrofa"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "Vozidlo",
"vehicles": "Vehicles", "vehicles": "Vozidla",
"serviceRecords": "Service Records", "serviceRecords": "Servisní záznamy",
"reminders": "Reminders", "reminders": "Připomenutí",
"nextReminder": "Next Reminder", "nextReminder": "Další připomenutí",
"none": "None" "none": "Žádné"
}, },
"vikunja": { "vikunja": {
"projects": "Active Projects", "projects": "Aktivní projekty",
"tasks7d": "Tasks Due This Week", "tasks7d": "Úkoly k dokončení tento týden",
"tasksOverdue": "Overdue Tasks", "tasksOverdue": "Zpožděné úkoly",
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "Probíhají úkoly"
}, },
"headscale": { "headscale": {
"name": "Name", "name": "Jméno",
"address": "Adresa", "address": "Adresa",
"last_seen": "Naposledy viděno", "last_seen": "Naposledy viděno",
"status": "Stav", "status": "Stav",
@ -985,10 +986,10 @@
"offline": "Offline" "offline": "Offline"
}, },
"beszel": { "beszel": {
"name": "Name", "name": "Jméno",
"systems": "Systems", "systems": "Systém",
"up": "Up", "up": "Běží",
"down": "Down", "down": "Výpadek",
"paused": "Pozastaveno", "paused": "Pozastaveno",
"pending": "Čeká", "pending": "Čeká",
"status": "Stav", "status": "Stav",
@ -996,39 +997,50 @@
"cpu": "CPU", "cpu": "CPU",
"memory": "RAM", "memory": "RAM",
"disk": "Disk", "disk": "Disk",
"network": "NET" "network": "Síť"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Aplikace",
"synced": "Synced", "synced": "Synchronizováno",
"outOfSync": "Out Of Sync", "outOfSync": "Nesynchronizováno",
"healthy": "Zdravý", "healthy": "Zdravý",
"degraded": "Degraded", "degraded": "Degradováno",
"progressing": "Progressing", "progressing": "Probíhá",
"missing": "Chybějící", "missing": "Chybějící",
"suspended": "Suspended" "suspended": "Pozastaveno"
}, },
"spoolman": { "spoolman": {
"loading": "Loading" "loading": "Načítání"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Skupiny",
"issues": "Problémy", "issues": "Problémy",
"merges": "Merge Requests", "merges": "Žádosti o sloučení",
"projects": "Projects" "projects": "Projekty"
}, },
"apcups": { "apcups": {
"status": "Stav", "status": "Stav",
"load": "Zatížení", "load": "Zatížení",
"bcharge": "Battery Charge", "bcharge": "Úroveň baterie",
"timeleft": "Zbývající čas" "timeleft": "Zbývající čas"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Záložky",
"favorites": "Favorites", "favorites": "Oblíbené",
"archived": "Archived", "archived": "Archivováno",
"highlights": "Highlights", "highlights": "Zvýraznění",
"lists": "Lists", "lists": "Seznamy",
"tags": "Tags" "tags": "Štítky"
},
"slskd": {
"slskStatus": "Síť",
"connected": "",
"disconnected": "Odpojeno",
"updateStatus": "Aktualizace",
"update_yes": "Dostupné",
"update_no": "Žádné",
"downloads": "Stažení",
"uploads": "Nahrávání",
"sharedFiles": "Soubory"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Problemer", "issues": "Problemer",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Batteriniveau", "bcharge": "Batteriniveau",
"timeleft": "Resterende tid" "timeleft": "Resterende tid"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Tilgængelig",
"update_no": "Opdateret",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Filer"
} }
} }

View file

@ -447,7 +447,7 @@
"write": "Schreiben", "write": "Schreiben",
"gpu": "GPU", "gpu": "GPU",
"mem": "RAM", "mem": "RAM",
"swap": "Swap" "swap": "Auslagerung"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Lesezeichen", "bookmark": "Lesezeichen",
@ -665,8 +665,8 @@
"storage": "Speicher" "storage": "Speicher"
}, },
"uptimekuma": { "uptimekuma": {
"up": "Seiten verfügbar", "up": "Up",
"down": "Seiten nicht verfügbar", "down": "Down",
"uptime": "Betriebszeit", "uptime": "Betriebszeit",
"incident": "Vorfall", "incident": "Vorfall",
"m": "min" "m": "min"
@ -744,8 +744,8 @@
"targets_total": "Alle Ziele" "targets_total": "Alle Ziele"
}, },
"gatus": { "gatus": {
"up": "Seiten verfügbar", "up": "Up",
"down": "Seiten nicht verfügbar", "down": "Down",
"uptime": "Betriebszeit" "uptime": "Betriebszeit"
}, },
"ghostfolio": { "ghostfolio": {
@ -842,8 +842,8 @@
"uptime": "Betriebszeit", "uptime": "Betriebszeit",
"lastDown": "Letzter Ausfall", "lastDown": "Letzter Ausfall",
"downDuration": "Ausfalldauer", "downDuration": "Ausfalldauer",
"sitesUp": "Seiten verfügbar", "sitesUp": "Up",
"sitesDown": "Seiten nicht verfügbar", "sitesDown": "Down",
"paused": "Pausiert", "paused": "Pausiert",
"notyetchecked": "Noch nicht geprüft", "notyetchecked": "Noch nicht geprüft",
"up": "Online", "up": "Online",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Benachrichtigungen", "notifications": "Benachrichtigungen",
"issues": "Probleme", "issues": "Probleme",
"pulls": "Pull-Requests" "pulls": "Pull-Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Szenen", "scenes": "Szenen",
@ -1023,12 +1024,23 @@
"bcharge": "Akkuladung", "bcharge": "Akkuladung",
"timeleft": "Verbleibende Zeit" "timeleft": "Verbleibende Zeit"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Schlagwörter" "tags": "Schlagwörter"
},
"slskd": {
"slskStatus": "Netzwerk",
"connected": "Verbunden",
"disconnected": "Getrennt",
"updateStatus": "Update",
"update_yes": "Verfügbar",
"update_no": "Aktuell",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Dateien"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Χρόνος που απομένει" "timeleft": "Χρόνος που απομένει"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Ετικέτες" "tags": "Ετικέτες"
},
"slskd": {
"slskStatus": "Δίκτυο",
"connected": "Συνδέθηκε",
"disconnected": "Αποσυνδέθηκε",
"updateStatus": "Update",
"update_yes": "Διαθέσιμο",
"update_no": "Ενημερωμένο",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Αρχεία"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge":"Battery Charge", "bcharge":"Battery Charge",
"timeleft":"Time Left" "timeleft":"Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Havebla",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -149,8 +149,8 @@
"received": "Recibido", "received": "Recibido",
"sent": "Enviado", "sent": "Enviado",
"externalIPAddress": "IP ext.", "externalIPAddress": "IP ext.",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "IPv6 ext.",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Prefijo IPv6 ext."
}, },
"caddy": { "caddy": {
"upstreams": "Upstream (desarrollo de software)", "upstreams": "Upstream (desarrollo de software)",
@ -178,7 +178,7 @@
"connectedAp": "AP conectados", "connectedAp": "AP conectados",
"activeUser": "Dispositivos activos", "activeUser": "Dispositivos activos",
"alerts": "Alertas", "alerts": "Alertas",
"connectedGateways": "Connected gateways", "connectedGateways": "Puertas de enlace conectadas",
"connectedSwitches": "Conmutadores conectados" "connectedSwitches": "Conmutadores conectados"
}, },
"nzbget": { "nzbget": {
@ -705,8 +705,8 @@
"time": "Tiempo" "time": "Tiempo"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Patrimonio neto",
"budget": "Budget" "budget": "Presupuesto"
}, },
"grafana": { "grafana": {
"dashboards": "Tableros", "dashboards": "Tableros",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notificaciones", "notifications": "Notificaciones",
"issues": "Números", "issues": "Números",
"pulls": "Solicitudes de cambios" "pulls": "Solicitudes de cambios",
"repositories": "Repositorios"
}, },
"stash": { "stash": {
"scenes": "Escenas", "scenes": "Escenas",
@ -1023,12 +1024,23 @@
"bcharge": "Carga de la batería", "bcharge": "Carga de la batería",
"timeleft": "Tiempo restante" "timeleft": "Tiempo restante"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Etiquetas" "tags": "Etiquetas"
},
"slskd": {
"slskStatus": "Red",
"connected": "Conectado",
"disconnected": "Desconectado",
"updateStatus": "Actualización",
"update_yes": "Disponible",
"update_no": "Actualizado",
"downloads": "Descargas",
"uploads": "Subidas",
"sharedFiles": "Archivos"
} }
} }

View file

@ -85,16 +85,16 @@
"ping": { "ping": {
"error": "Error", "error": "Error",
"ping": "Ping", "ping": "Ping",
"down": "Down", "down": "Behera",
"up": "Up", "up": "Gora",
"not_available": "Not Available" "not_available": "Not Available"
}, },
"siteMonitor": { "siteMonitor": {
"http_status": "HTTP status", "http_status": "HTTP status",
"error": "Error", "error": "Error",
"response": "Response", "response": "Erantzuna",
"down": "Down", "down": "Behera",
"up": "Up", "up": "Gora",
"not_available": "Not Available" "not_available": "Not Available"
}, },
"emby": { "emby": {
@ -102,8 +102,8 @@
"transcoding": "Transcoding", "transcoding": "Transcoding",
"bitrate": "Bit-tasa", "bitrate": "Bit-tasa",
"no_active": "No Active Streams", "no_active": "No Active Streams",
"movies": "Movies", "movies": "Filmak",
"series": "Series", "series": "Serieak",
"episodes": "Episodes", "episodes": "Episodes",
"songs": "Abestiak" "songs": "Abestiak"
}, },
@ -115,39 +115,39 @@
"unknown": "Ezezaguna" "unknown": "Ezezaguna"
}, },
"evcc": { "evcc": {
"pv_power": "Production", "pv_power": "Produkzioak",
"battery_soc": "Battery", "battery_soc": "Bateria",
"grid_power": "Grid", "grid_power": "Sarea",
"home_power": "Consumption", "home_power": "Kontsumoa",
"charge_power": "Charger", "charge_power": "Kargagailua",
"kilowatt": "kW" "kilowatt": "kW"
}, },
"flood": { "flood": {
"download": "Download", "download": "Jeitsierak",
"upload": "Upload", "upload": "Kargatu",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
"freshrss": { "freshrss": {
"subscriptions": "Subscriptions", "subscriptions": "Harpidetzak",
"unread": "Unread" "unread": "Irakurri gabe"
}, },
"fritzbox": { "fritzbox": {
"connectionStatus": "Status", "connectionStatus": "Status",
"connectionStatusUnconfigured": "Unconfigured", "connectionStatusUnconfigured": "Unconfigured",
"connectionStatusConnecting": "Connecting", "connectionStatusConnecting": "Konektatzen",
"connectionStatusAuthenticating": "Authenticating", "connectionStatusAuthenticating": "Authenticating",
"connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusPendingDisconnect": "Pending Disconnect",
"connectionStatusDisconnecting": "Disconnecting", "connectionStatusDisconnecting": "Disconnecting",
"connectionStatusDisconnected": "Disconnected", "connectionStatusDisconnected": "Deskonektatuta",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "Konektatuta",
"uptime": "Uptime", "uptime": "Uptime",
"maxDown": "Max. Down", "maxDown": "Max. Down",
"maxUp": "Max. Up", "maxUp": "Max. Up",
"down": "Down", "down": "Behera",
"up": "Up", "up": "Gora",
"received": "Received", "received": "Received",
"sent": "Sent", "sent": "Bidalita",
"externalIPAddress": "Ext. IP", "externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Ext. IPv6-Prefix"
@ -189,7 +189,7 @@
"plex": { "plex": {
"streams": "Active Streams", "streams": "Active Streams",
"albums": "Albums", "albums": "Albums",
"movies": "Movies", "movies": "Filmak",
"tv": "TV Shows" "tv": "TV Shows"
}, },
"sabnzbd": { "sabnzbd": {
@ -199,18 +199,18 @@
}, },
"rutorrent": { "rutorrent": {
"active": "Active", "active": "Active",
"upload": "Upload", "upload": "Kargatu",
"download": "Download" "download": "Jeitsierak"
}, },
"transmission": { "transmission": {
"download": "Download", "download": "Jeitsierak",
"upload": "Upload", "upload": "Kargatu",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
"qbittorrent": { "qbittorrent": {
"download": "Download", "download": "Jeitsierak",
"upload": "Upload", "upload": "Kargatu",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
@ -223,8 +223,8 @@
"invalid": "Invalid" "invalid": "Invalid"
}, },
"deluge": { "deluge": {
"download": "Download", "download": "Jeitsierak",
"upload": "Upload", "upload": "Kargatu",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
@ -233,15 +233,15 @@
"cachemissbytes": "Cache Miss Bytes" "cachemissbytes": "Cache Miss Bytes"
}, },
"downloadstation": { "downloadstation": {
"download": "Download", "download": "Jeitsierak",
"upload": "Upload", "upload": "Kargatu",
"leech": "Leech", "leech": "Leech",
"seed": "Seed" "seed": "Seed"
}, },
"sonarr": { "sonarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series", "series": "Serieak",
"queue": "Queue", "queue": "Queue",
"unknown": "Ezezaguna" "unknown": "Ezezaguna"
}, },
@ -249,7 +249,7 @@
"wanted": "Wanted", "wanted": "Wanted",
"missing": "Missing", "missing": "Missing",
"queued": "Queued", "queued": "Queued",
"movies": "Movies", "movies": "Filmak",
"queue": "Queue", "queue": "Queue",
"unknown": "Ezezaguna" "unknown": "Ezezaguna"
}, },
@ -285,7 +285,7 @@
}, },
"netalertx": { "netalertx": {
"total": "Guztira", "total": "Guztira",
"connected": "Connected", "connected": "Konektatuta",
"new_devices": "New Devices", "new_devices": "New Devices",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
}, },
@ -302,8 +302,8 @@
"latency": "Latency" "latency": "Latency"
}, },
"speedtest": { "speedtest": {
"upload": "Upload", "upload": "Kargatu",
"download": "Download", "download": "Jeitsierak",
"ping": "Ping" "ping": "Ping"
}, },
"portainer": { "portainer": {
@ -315,7 +315,7 @@
"download": "Downloaded", "download": "Downloaded",
"nondownload": "Non-Downloaded", "nondownload": "Non-Downloaded",
"read": "Read", "read": "Read",
"unread": "Unread", "unread": "Irakurri gabe",
"downloadedread": "Downloaded & Read", "downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "Non-Downloaded & Read",
@ -405,7 +405,7 @@
"medusa": { "medusa": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",
"series": "Series" "series": "Serieak"
}, },
"minecraft": { "minecraft": {
"players": "Jokalariak", "players": "Jokalariak",
@ -416,7 +416,7 @@
}, },
"miniflux": { "miniflux": {
"read": "Read", "read": "Read",
"unread": "Unread" "unread": "Irakurri gabe"
}, },
"authentik": { "authentik": {
"users": "Users", "users": "Users",
@ -523,15 +523,15 @@
"up_to_date": "Up to Date", "up_to_date": "Up to Date",
"child_bridges": "Child Bridges", "child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Up", "up": "Gora",
"pending": "Pending", "pending": "Pending",
"down": "Down" "down": "Behera"
}, },
"healthchecks": { "healthchecks": {
"new": "New", "new": "New",
"up": "Up", "up": "Gora",
"grace": "In Grace Period", "grace": "In Grace Period",
"down": "Down", "down": "Behera",
"paused": "Paused", "paused": "Paused",
"status": "Status", "status": "Status",
"last_ping": "Last Ping", "last_ping": "Last Ping",
@ -646,8 +646,8 @@
"load": "Load Avg", "load": "Load Avg",
"memory": "Mem Usage", "memory": "Mem Usage",
"wanStatus": "WAN Status", "wanStatus": "WAN Status",
"up": "Up", "up": "Gora",
"down": "Down", "down": "Behera",
"temp": "Temp", "temp": "Temp",
"disk": "Disk Usage", "disk": "Disk Usage",
"wanIP": "WAN IP" "wanIP": "WAN IP"
@ -660,7 +660,7 @@
}, },
"immich": { "immich": {
"users": "Users", "users": "Users",
"photos": "Photos", "photos": "Argazkiak",
"videos": "Videos", "videos": "Videos",
"storage": "Storage" "storage": "Storage"
}, },
@ -672,14 +672,14 @@
"m": "m" "m": "m"
}, },
"atsumeru": { "atsumeru": {
"series": "Series", "series": "Serieak",
"archives": "Archives", "archives": "Archives",
"chapters": "Chapters", "chapters": "Chapters",
"categories": "Categories" "categories": "Categories"
}, },
"komga": { "komga": {
"libraries": "Libraries", "libraries": "Libraries",
"series": "Series", "series": "Serieak",
"books": "Books" "books": "Books"
}, },
"diskstation": { "diskstation": {
@ -688,13 +688,13 @@
"volumeAvailable": "Available" "volumeAvailable": "Available"
}, },
"mylar": { "mylar": {
"series": "Series", "series": "Serieak",
"issues": "Issues", "issues": "Arazoak",
"wanted": "Wanted" "wanted": "Wanted"
}, },
"photoprism": { "photoprism": {
"albums": "Albums", "albums": "Albums",
"photos": "Photos", "photos": "Argazkiak",
"videos": "Videos", "videos": "Videos",
"people": "People" "people": "People"
}, },
@ -772,7 +772,7 @@
"books": "Books", "books": "Books",
"authors": "Authors", "authors": "Authors",
"categories": "Categories", "categories": "Categories",
"series": "Series" "series": "Serieak"
}, },
"jdownloader": { "jdownloader": {
"downloadCount": "Queue", "downloadCount": "Queue",
@ -781,7 +781,7 @@
"downloadSpeed": "Speed" "downloadSpeed": "Speed"
}, },
"kavita": { "kavita": {
"seriesCount": "Series", "seriesCount": "Serieak",
"totalFiles": "Files" "totalFiles": "Files"
}, },
"azuredevops": { "azuredevops": {
@ -801,8 +801,8 @@
"status": "Status", "status": "Status",
"online": "Online", "online": "Online",
"offline": "Offline", "offline": "Offline",
"name": "Name", "name": "Izena",
"map": "Map", "map": "Mapa",
"currentPlayers": "Current players", "currentPlayers": "Current players",
"players": "Jokalariak", "players": "Jokalariak",
"maxPlayers": "Max players", "maxPlayers": "Max players",
@ -819,10 +819,10 @@
"recipes": "Recipes", "recipes": "Recipes",
"users": "Users", "users": "Users",
"categories": "Categories", "categories": "Categories",
"tags": "Tags" "tags": "Etiketak"
}, },
"openmediavault": { "openmediavault": {
"downloading": "Downloading", "downloading": "Deskargatzen",
"total": "Guztira", "total": "Guztira",
"running": "Running", "running": "Running",
"stopped": "Stopped", "stopped": "Stopped",
@ -832,8 +832,8 @@
"openwrt": { "openwrt": {
"uptime": "Uptime", "uptime": "Uptime",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "CPU Load Avg (5m)",
"up": "Up", "up": "Gora",
"down": "Down", "down": "Behera",
"bytesTx": "Transmitted", "bytesTx": "Transmitted",
"bytesRx": "Received" "bytesRx": "Received"
}, },
@ -846,9 +846,9 @@
"sitesDown": "Sites Down", "sitesDown": "Sites Down",
"paused": "Paused", "paused": "Paused",
"notyetchecked": "Not Yet Checked", "notyetchecked": "Not Yet Checked",
"up": "Up", "up": "Gora",
"seemsdown": "Seems Down", "seemsdown": "Seems Down",
"down": "Down", "down": "Behera",
"unknown": "Ezezaguna" "unknown": "Ezezaguna"
}, },
"calendar": { "calendar": {
@ -856,7 +856,7 @@
"physicalRelease": "Physical release", "physicalRelease": "Physical release",
"digitalRelease": "Digital release", "digitalRelease": "Digital release",
"noEventsToday": "No events for today!", "noEventsToday": "No events for today!",
"noEventsFound": "No events found" "noEventsFound": "Ez da gertaerarik aurkitu."
}, },
"romm": { "romm": {
"platforms": "Platforms", "platforms": "Platforms",
@ -868,7 +868,7 @@
}, },
"mailcow": { "mailcow": {
"domains": "Domains", "domains": "Domains",
"mailboxes": "Mailboxes", "mailboxes": "Gutunontziak",
"mails": "Mails", "mails": "Mails",
"storage": "Storage" "storage": "Storage"
}, },
@ -877,15 +877,16 @@
"criticals": "Criticals" "criticals": "Criticals"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Ekitaldiak",
"plants": "Plants", "plants": "Landareak",
"photos": "Photos", "photos": "Argazkiak",
"species": "Species" "species": "Species"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Jakinarazpenak",
"issues": "Issues", "issues": "Arazoak",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -894,34 +895,34 @@
"playDuration": "Time Watched", "playDuration": "Time Watched",
"sceneSize": "Scenes Size", "sceneSize": "Scenes Size",
"sceneDuration": "Scenes Duration", "sceneDuration": "Scenes Duration",
"images": "Images", "images": "Irudia",
"imageSize": "Images Size", "imageSize": "Irudiaren tamaina",
"galleries": "Galleries", "galleries": "Galleries",
"performers": "Performers", "performers": "Performers",
"studios": "Studios", "studios": "Studios",
"movies": "Movies", "movies": "Filmak",
"tags": "Tags", "tags": "Etiketak",
"oCount": "O Count" "oCount": "O Count"
}, },
"tandoor": { "tandoor": {
"users": "Users", "users": "Users",
"recipes": "Recipes", "recipes": "Recipes",
"keywords": "Keywords" "keywords": "Hitz gakoak"
}, },
"homebox": { "homebox": {
"items": "Items", "items": "Elementuak",
"totalWithWarranty": "With Warranty", "totalWithWarranty": "With Warranty",
"locations": "Locations", "locations": "Locations",
"labels": "Labels", "labels": "Etiketak",
"users": "Users", "users": "Users",
"totalValue": "Total Value" "totalValue": "Guztira"
}, },
"crowdsec": { "crowdsec": {
"alerts": "Alerts", "alerts": "Alerts",
"bans": "Bans" "bans": "Bans"
}, },
"wgeasy": { "wgeasy": {
"connected": "Connected", "connected": "Konektatuta",
"enabled": "Enabled", "enabled": "Enabled",
"disabled": "Disabled", "disabled": "Disabled",
"total": "Guztira" "total": "Guztira"
@ -934,8 +935,8 @@
}, },
"myspeed": { "myspeed": {
"ping": "Ping", "ping": "Ping",
"download": "Download", "download": "Jeitsierak",
"upload": "Upload" "upload": "Kargatu"
}, },
"stocks": { "stocks": {
"stocks": "Stocks", "stocks": "Stocks",
@ -951,23 +952,23 @@
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": "Links",
"collections": "Collections", "collections": "Bildumak",
"tags": "Tags" "tags": "Etiketak"
}, },
"zabbix": { "zabbix": {
"unclassified": "Not classified", "unclassified": "Not classified",
"information": "Informazioa", "information": "Informazioa",
"warning": "Warning", "warning": "Abisua",
"average": "Average", "average": "Batez besteko",
"high": "High", "high": "Altua",
"disaster": "Disaster" "disaster": "Disaster"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "Vehicle",
"vehicles": "Vehicles", "vehicles": "Ibilgailuak",
"serviceRecords": "Service Records", "serviceRecords": "Service Records",
"reminders": "Reminders", "reminders": "Oroigarriak",
"nextReminder": "Next Reminder", "nextReminder": "Hurrengo abisua",
"none": "None" "none": "None"
}, },
"vikunja": { "vikunja": {
@ -977,7 +978,7 @@
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "Tasks In Progress"
}, },
"headscale": { "headscale": {
"name": "Name", "name": "Izena",
"address": "Address", "address": "Address",
"last_seen": "Last Seen", "last_seen": "Last Seen",
"status": "Status", "status": "Status",
@ -985,10 +986,10 @@
"offline": "Offline" "offline": "Offline"
}, },
"beszel": { "beszel": {
"name": "Name", "name": "Izena",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Gora",
"down": "Down", "down": "Behera",
"paused": "Paused", "paused": "Paused",
"pending": "Pending", "pending": "Pending",
"status": "Status", "status": "Status",
@ -999,23 +1000,23 @@
"network": "NET" "network": "NET"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Aplikazioak",
"synced": "Synced", "synced": "Sinkronizatuta",
"outOfSync": "Out Of Sync", "outOfSync": "Out Of Sync",
"healthy": "Osasuntsu", "healthy": "Osasuntsu",
"degraded": "Degraded", "degraded": "Degraded",
"progressing": "Progressing", "progressing": "Progressing",
"missing": "Missing", "missing": "Missing",
"suspended": "Suspended" "suspended": "Etenda"
}, },
"spoolman": { "spoolman": {
"loading": "Loading" "loading": "Loading"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Taldeak",
"issues": "Issues", "issues": "Arazoak",
"merges": "Merge Requests", "merges": "Merge Requests",
"projects": "Projects" "projects": "Proiektuak"
}, },
"apcups": { "apcups": {
"status": "Status", "status": "Status",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Etiketak"
},
"slskd": {
"slskStatus": "Network",
"connected": "Konektatuta",
"disconnected": "Deskonektatuta",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Aikaa jäljellä" "timeleft": "Aikaa jäljellä"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Saatavilla",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -85,16 +85,16 @@
"ping": { "ping": {
"error": "Erreur", "error": "Erreur",
"ping": "Latence", "ping": "Latence",
"down": "Bas", "down": "Down",
"up": "Haut", "up": "Up",
"not_available": "Non disponible" "not_available": "Non disponible"
}, },
"siteMonitor": { "siteMonitor": {
"http_status": "Statut HTTP", "http_status": "Statut HTTP",
"error": "Erreur", "error": "Erreur",
"response": "Réponse", "response": "Réponse",
"down": "Bas", "down": "Down",
"up": "Haut", "up": "Up",
"not_available": "Non disponible" "not_available": "Non disponible"
}, },
"emby": { "emby": {
@ -142,15 +142,15 @@
"connectionStatusDisconnected": "Déconnecté", "connectionStatusDisconnected": "Déconnecté",
"connectionStatusConnected": "Connecté", "connectionStatusConnected": "Connecté",
"uptime": "Démarré depuis", "uptime": "Démarré depuis",
"maxDown": "Max. Bas", "maxDown": "Max. Down",
"maxUp": "Max. Haut", "maxUp": "Max. Up",
"down": "Bas", "down": "Down",
"up": "Haut", "up": "Up",
"received": "Reçu", "received": "Reçu",
"sent": "Envoyé", "sent": "Envoyé",
"externalIPAddress": "IP externe", "externalIPAddress": "IP externe",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "IPv6 externe",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Préfixe IPv6 externe"
}, },
"caddy": { "caddy": {
"upstreams": "En amont", "upstreams": "En amont",
@ -178,7 +178,7 @@
"connectedAp": "AP connectés", "connectedAp": "AP connectés",
"activeUser": "Périphériques actifs", "activeUser": "Périphériques actifs",
"alerts": "Alertes", "alerts": "Alertes",
"connectedGateways": "Connected gateways", "connectedGateways": "Passerelles connectées",
"connectedSwitches": "Switchs connectés" "connectedSwitches": "Switchs connectés"
}, },
"nzbget": { "nzbget": {
@ -523,15 +523,15 @@
"up_to_date": "À jour", "up_to_date": "À jour",
"child_bridges": "Child Bridges", "child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Haut", "up": "Up",
"pending": "En attente", "pending": "En attente",
"down": "Bas" "down": "Down"
}, },
"healthchecks": { "healthchecks": {
"new": "Nouveau", "new": "Nouveau",
"up": "Haut", "up": "Up",
"grace": "En Période de Grâce", "grace": "En Période de Grâce",
"down": "Bas", "down": "Down",
"paused": "En Pause", "paused": "En Pause",
"status": "Statut", "status": "Statut",
"last_ping": "Dernier Ping", "last_ping": "Dernier Ping",
@ -646,8 +646,8 @@
"load": "Charge moy.", "load": "Charge moy.",
"memory": "Util. Mém.", "memory": "Util. Mém.",
"wanStatus": "Statut WAN", "wanStatus": "Statut WAN",
"up": "Haut", "up": "Up",
"down": "Bas", "down": "Down",
"temp": "Température", "temp": "Température",
"disk": "Util. Disque", "disk": "Util. Disque",
"wanIP": "IP WAN" "wanIP": "IP WAN"
@ -832,8 +832,8 @@
"openwrt": { "openwrt": {
"uptime": "Démarré depuis", "uptime": "Démarré depuis",
"cpuLoad": "Charge moyenne CPU (5 min)", "cpuLoad": "Charge moyenne CPU (5 min)",
"up": "Haut", "up": "Up",
"down": "Bas", "down": "Down",
"bytesTx": "Transmis", "bytesTx": "Transmis",
"bytesRx": "Reçu" "bytesRx": "Reçu"
}, },
@ -846,9 +846,9 @@
"sitesDown": "Hors ligne", "sitesDown": "Hors ligne",
"paused": "En Pause", "paused": "En Pause",
"notyetchecked": "Non vérifié", "notyetchecked": "Non vérifié",
"up": "Haut", "up": "Up",
"seemsdown": "Semble hors ligne", "seemsdown": "Semble hors ligne",
"down": "Bas", "down": "Down",
"unknown": "Inconnu" "unknown": "Inconnu"
}, },
"calendar": { "calendar": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Anomalies", "issues": "Anomalies",
"pulls": "Demandes de tirage" "pulls": "Demandes de tirage",
"repositories": "Dépôts"
}, },
"stash": { "stash": {
"scenes": "Scènes", "scenes": "Scènes",
@ -987,8 +988,8 @@
"beszel": { "beszel": {
"name": "Nom", "name": "Nom",
"systems": "Systèmes", "systems": "Systèmes",
"up": "Haut", "up": "Up",
"down": "Bas", "down": "Down",
"paused": "En Pause", "paused": "En Pause",
"pending": "En attente", "pending": "En attente",
"status": "Statut", "status": "Statut",
@ -1023,12 +1024,23 @@
"bcharge": "Charge de la batterie", "bcharge": "Charge de la batterie",
"timeleft": "Temps restant" "timeleft": "Temps restant"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Marque-pages",
"favorites": "Favorites", "favorites": "Favoris",
"archived": "Archived", "archived": "Archivé",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Listes",
"tags": "Étiquettes" "tags": "Étiquettes"
},
"slskd": {
"slskStatus": "Réseau",
"connected": "Connecté",
"disconnected": "Déconnecté",
"updateStatus": "Mise à jour",
"update_yes": "Disponible",
"update_no": "À jour",
"downloads": "Téléchargements",
"uploads": "Téléversements",
"sharedFiles": "Fichiers"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "זמן שנותר" "timeleft": "זמן שנותר"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "זמין",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Obavijesti", "notifications": "Obavijesti",
"issues": "Problemi", "issues": "Problemi",
"pulls": "Zahtjevi za povlačenje" "pulls": "Zahtjevi za povlačenje",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scene", "scenes": "Scene",
@ -1023,12 +1024,23 @@
"bcharge": "Napunjenost baterije", "bcharge": "Napunjenost baterije",
"timeleft": "Preostalo vrijeme" "timeleft": "Preostalo vrijeme"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Oznake" "tags": "Oznake"
},
"slskd": {
"slskStatus": "Mreža",
"connected": "Povezano",
"disconnected": "Odspojeno",
"updateStatus": "Update",
"update_yes": "Dostupno",
"update_no": "Aktualno",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Datoteke"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Üzenetek", "notifications": "Üzenetek",
"issues": "Problémák", "issues": "Problémák",
"pulls": "Pull request-ek" "pulls": "Pull request-ek",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Jelenetek", "scenes": "Jelenetek",
@ -1023,12 +1024,23 @@
"bcharge": "Akku töltöttsége", "bcharge": "Akku töltöttsége",
"timeleft": "Hátralévő idő" "timeleft": "Hátralévő idő"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Címkék" "tags": "Címkék"
},
"slskd": {
"slskStatus": "Hálózat",
"connected": "Csatlakozva",
"disconnected": "Kapcsolat bontva",
"updateStatus": "Update",
"update_yes": "Elérhető",
"update_no": "Naprakész",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Fájlok"
} }
} }

View file

@ -342,7 +342,7 @@
"totalNxDomain": "Domain NX", "totalNxDomain": "Domain NX",
"totalRefused": "Ditolak", "totalRefused": "Ditolak",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive", "totalRecursive": "Rekursif",
"totalCached": "Cached", "totalCached": "Cached",
"totalBlocked": "Terblokir", "totalBlocked": "Terblokir",
"totalDropped": "Dropped", "totalDropped": "Dropped",
@ -705,8 +705,8 @@
"time": "Waktu" "time": "Waktu"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Kekayaan Bersih",
"budget": "Budget" "budget": "Anggaran"
}, },
"grafana": { "grafana": {
"dashboards": "Dasbor", "dashboards": "Dasbor",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifikasi", "notifications": "Notifikasi",
"issues": "Isu", "issues": "Isu",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Adegan", "scenes": "Adegan",
@ -965,7 +966,7 @@
"lubelogger": { "lubelogger": {
"vehicle": "Kendaraan", "vehicle": "Kendaraan",
"vehicles": "Kendaraan", "vehicles": "Kendaraan",
"serviceRecords": "Service Records", "serviceRecords": "Catatan Servis",
"reminders": "Pengingat", "reminders": "Pengingat",
"nextReminder": "Pengingat Berikutnya", "nextReminder": "Pengingat Berikutnya",
"none": "Tidak ada" "none": "Tidak ada"
@ -1023,12 +1024,23 @@
"bcharge": "Sisa Baterai", "bcharge": "Sisa Baterai",
"timeleft": "Sisa Waktu" "timeleft": "Sisa Waktu"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tag" "tags": "Tag"
},
"slskd": {
"slskStatus": "Jaringan",
"connected": "Tersambung",
"disconnected": "Terputus",
"updateStatus": "Update",
"update_yes": "Tersedia",
"update_no": "Terbaru",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "File"
} }
} }

View file

@ -149,8 +149,8 @@
"received": "Ricevuti", "received": "Ricevuti",
"sent": "Inviati", "sent": "Inviati",
"externalIPAddress": "IP Esterno", "externalIPAddress": "IP Esterno",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "IPv6 Esterno",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Prefisso IPv6 Esterno"
}, },
"caddy": { "caddy": {
"upstreams": "Upstream", "upstreams": "Upstream",
@ -178,7 +178,7 @@
"connectedAp": "AP Connessi", "connectedAp": "AP Connessi",
"activeUser": "Dispositivi attivi", "activeUser": "Dispositivi attivi",
"alerts": "Allarmi", "alerts": "Allarmi",
"connectedGateways": "Connected gateways", "connectedGateways": "Gateway connessi",
"connectedSwitches": "Switch connessi" "connectedSwitches": "Switch connessi"
}, },
"nzbget": { "nzbget": {
@ -338,7 +338,7 @@
"technitium": { "technitium": {
"totalQueries": "Richieste", "totalQueries": "Richieste",
"totalNoError": "Successo", "totalNoError": "Successo",
"totalServerFailure": "Failures", "totalServerFailure": "Fallimenti",
"totalNxDomain": "NX Domains", "totalNxDomain": "NX Domains",
"totalRefused": "Refused", "totalRefused": "Refused",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "Authoritative",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifiche", "notifications": "Notifiche",
"issues": "Problemi", "issues": "Problemi",
"pulls": "Richieste di Pull" "pulls": "Richieste di Pull",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scene", "scenes": "Scene",
@ -942,7 +943,7 @@
"loading": "Caricamento", "loading": "Caricamento",
"open": "Open - US Market", "open": "Open - US Market",
"closed": "Closed - US Market", "closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration" "invalidConfiguration": "Configurazione non valida"
}, },
"frigate": { "frigate": {
"cameras": "Cameras", "cameras": "Cameras",
@ -958,7 +959,7 @@
"unclassified": "Not classified", "unclassified": "Not classified",
"information": "Informazioni", "information": "Informazioni",
"warning": "Warning", "warning": "Warning",
"average": "Average", "average": "Media",
"high": "High", "high": "High",
"disaster": "Disaster" "disaster": "Disaster"
}, },
@ -986,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "Nome", "name": "Nome",
"systems": "Systems", "systems": "Sistemi",
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"paused": "In Pausa", "paused": "In Pausa",
@ -995,15 +996,15 @@
"updated": "Aggiornato", "updated": "Aggiornato",
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"disk": "Disk", "disk": "Disco",
"network": "NET" "network": "NET"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Applicazioni",
"synced": "Synced", "synced": "Sincronizzato",
"outOfSync": "Out Of Sync", "outOfSync": "Non Sincronizzato",
"healthy": "Sano", "healthy": "Sano",
"degraded": "Degraded", "degraded": "Degradato",
"progressing": "Progressing", "progressing": "Progressing",
"missing": "Mancanti", "missing": "Mancanti",
"suspended": "Suspended" "suspended": "Suspended"
@ -1012,10 +1013,10 @@
"loading": "Caricamento" "loading": "Caricamento"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Gruppi",
"issues": "Problemi", "issues": "Problemi",
"merges": "Merge Requests", "merges": "Richieste di merge",
"projects": "Projects" "projects": "Progetti"
}, },
"apcups": { "apcups": {
"status": "Stato", "status": "Stato",
@ -1023,12 +1024,23 @@
"bcharge": "Carica Batteria", "bcharge": "Carica Batteria",
"timeleft": "Tempo Rimanente" "timeleft": "Tempo Rimanente"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Segnalibri",
"favorites": "Favorites", "favorites": "Preferiti",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Liste",
"tags": "Tag" "tags": "Tag"
},
"slskd": {
"slskStatus": "Rete",
"connected": "Connesso",
"disconnected": "Disconnesso",
"updateStatus": "Update",
"update_yes": "Disponibili",
"update_no": "Aggiornato",
"downloads": "Download",
"uploads": "Uploads",
"sharedFiles": "File"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "通知", "notifications": "通知",
"issues": "課題", "issues": "課題",
"pulls": "プルリクエスト" "pulls": "プルリクエスト",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "シーン", "scenes": "シーン",
@ -1023,12 +1024,23 @@
"bcharge": "バッテリー充電", "bcharge": "バッテリー充電",
"timeleft": "残り時間" "timeleft": "残り時間"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "タグ" "tags": "タグ"
},
"slskd": {
"slskStatus": "ネットワーク",
"connected": "接続済",
"disconnected": "切断されました",
"updateStatus": "Update",
"update_yes": "利用可",
"update_no": "最新",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "ファイル"
} }
} }

View file

@ -14,11 +14,11 @@
"date": "{{value, date}}", "date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}", "relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}", "duration": "{{value, duration}}",
"months": "mo", "months": "",
"days": "d", "days": "",
"hours": "h", "hours": "",
"minutes": "m", "minutes": "",
"seconds": "s" "seconds": ""
}, },
"widget": { "widget": {
"missing_type": "없는 위젯 유형: {{type}}", "missing_type": "없는 위젯 유형: {{type}}",
@ -51,7 +51,7 @@
}, },
"unifi": { "unifi": {
"users": "사용자", "users": "사용자",
"uptime": "Uptime", "uptime": "가동 시간",
"days": "일", "days": "일",
"wan": "WAN", "wan": "WAN",
"lan": "LAN", "lan": "LAN",
@ -141,7 +141,7 @@
"connectionStatusDisconnecting": "연결을 끊는 중...", "connectionStatusDisconnecting": "연결을 끊는 중...",
"connectionStatusDisconnected": "연결 끊김", "connectionStatusDisconnected": "연결 끊김",
"connectionStatusConnected": "연결됨", "connectionStatusConnected": "연결됨",
"uptime": "Uptime", "uptime": "가동 시간",
"maxDown": "Max. Down", "maxDown": "Max. Down",
"maxUp": "Max. Up", "maxUp": "Max. Up",
"down": "Down", "down": "Down",
@ -188,7 +188,7 @@
}, },
"plex": { "plex": {
"streams": "활성 스트림", "streams": "활성 스트림",
"albums": "Albums", "albums": "앨범",
"movies": "영화", "movies": "영화",
"tv": "TV 쇼" "tv": "TV 쇼"
}, },
@ -440,8 +440,8 @@
"total": "총합", "total": "총합",
"free": "남음", "free": "남음",
"used": "사용", "used": "사용",
"days": "d", "days": "",
"hours": "h", "hours": "",
"crit": "Crit", "crit": "Crit",
"read": "읽음", "read": "읽음",
"write": "쓰기", "write": "쓰기",
@ -556,7 +556,7 @@
}, },
"truenas": { "truenas": {
"load": "System Load", "load": "System Load",
"uptime": "Uptime", "uptime": "가동 시간",
"alerts": "경고" "alerts": "경고"
}, },
"pyload": { "pyload": {
@ -606,7 +606,7 @@
"mikrotik": { "mikrotik": {
"cpuLoad": "CPU Load", "cpuLoad": "CPU Load",
"memoryUsed": "메모리 사용량", "memoryUsed": "메모리 사용량",
"uptime": "Uptime", "uptime": "가동 시간",
"numberOfLeases": "Leases" "numberOfLeases": "Leases"
}, },
"xteve": { "xteve": {
@ -667,9 +667,9 @@
"uptimekuma": { "uptimekuma": {
"up": "Sites Up", "up": "Sites Up",
"down": "Sites Down", "down": "Sites Down",
"uptime": "Uptime", "uptime": "가동 시간",
"incident": "Incident", "incident": "Incident",
"m": "m" "m": ""
}, },
"atsumeru": { "atsumeru": {
"series": "시리즈", "series": "시리즈",
@ -684,7 +684,7 @@
}, },
"diskstation": { "diskstation": {
"days": "일", "days": "일",
"uptime": "Uptime", "uptime": "가동 시간",
"volumeAvailable": "이용 가능" "volumeAvailable": "이용 가능"
}, },
"mylar": { "mylar": {
@ -693,7 +693,7 @@
"wanted": "요청" "wanted": "요청"
}, },
"photoprism": { "photoprism": {
"albums": "Albums", "albums": "앨범",
"photos": "사진", "photos": "사진",
"videos": "동영상", "videos": "동영상",
"people": "People" "people": "People"
@ -705,8 +705,8 @@
"time": "Time" "time": "Time"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "순자산",
"budget": "Budget" "budget": "예산"
}, },
"grafana": { "grafana": {
"dashboards": "대시보드", "dashboards": "대시보드",
@ -746,7 +746,7 @@
"gatus": { "gatus": {
"up": "Sites Up", "up": "Sites Up",
"down": "Sites Down", "down": "Sites Down",
"uptime": "Uptime" "uptime": "가동 시간"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "오늘", "gross_percent_today": "오늘",
@ -816,7 +816,7 @@
"totalUsed": "Used Storage" "totalUsed": "Used Storage"
}, },
"mealie": { "mealie": {
"recipes": "Recipes", "recipes": "레시피",
"users": "사용자", "users": "사용자",
"categories": "분류", "categories": "분류",
"tags": "태그" "tags": "태그"
@ -830,7 +830,7 @@
"failed": "Failed" "failed": "Failed"
}, },
"openwrt": { "openwrt": {
"uptime": "Uptime", "uptime": "가동 시간",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "CPU Load Avg (5m)",
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
@ -839,7 +839,7 @@
}, },
"uptimerobot": { "uptimerobot": {
"status": "상태", "status": "상태",
"uptime": "Uptime", "uptime": "가동 시간",
"lastDown": "Last Downtime", "lastDown": "Last Downtime",
"downDuration": "Downtime Duration", "downDuration": "Downtime Duration",
"sitesUp": "Sites Up", "sitesUp": "Sites Up",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "알림", "notifications": "알림",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "장면", "scenes": "장면",
@ -905,7 +906,7 @@
}, },
"tandoor": { "tandoor": {
"users": "사용자", "users": "사용자",
"recipes": "Recipes", "recipes": "레시피",
"keywords": "키워드" "keywords": "키워드"
}, },
"homebox": { "homebox": {
@ -946,7 +947,7 @@
}, },
"frigate": { "frigate": {
"cameras": "카메라", "cameras": "카메라",
"uptime": "Uptime", "uptime": "가동 시간",
"version": "버전" "version": "버전"
}, },
"linkwarden": { "linkwarden": {
@ -1023,12 +1024,23 @@
"bcharge": "배터리 충전 중", "bcharge": "배터리 충전 중",
"timeleft": "남은 시간" "timeleft": "남은 시간"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "태그" "tags": "태그"
},
"slskd": {
"slskStatus": "네트워크",
"connected": "연결됨",
"disconnected": "연결 끊김",
"updateStatus": "Update",
"update_yes": "이용 가능",
"update_no": "최신 상태",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "파일"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Atlikušais laiks" "timeleft": "Atlikušais laiks"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Adegan", "scenes": "Adegan",
@ -1023,12 +1024,23 @@
"bcharge": "Bateri dicas", "bcharge": "Bateri dicas",
"timeleft": "Masa Tinggal" "timeleft": "Masa Tinggal"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tanda nama" "tags": "Tanda nama"
},
"slskd": {
"slskStatus": "Rangkaian",
"connected": "Connected",
"disconnected": "Sambungan Terputus",
"updateStatus": "Update",
"update_yes": "Sudah Ada",
"update_no": "Terkemaskini",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notificaties", "notifications": "Notificaties",
"issues": "Problemen", "issues": "Problemen",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scènes", "scenes": "Scènes",
@ -1023,12 +1024,23 @@
"bcharge": "Batterij opladen", "bcharge": "Batterij opladen",
"timeleft": "Resterende Tijd" "timeleft": "Resterende Tijd"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Label" "tags": "Label"
},
"slskd": {
"slskStatus": "Netwerk",
"connected": "Verbonden",
"disconnected": "Verbinding verbroken",
"updateStatus": "Update",
"update_yes": "Beschikbaar",
"update_no": "Bijgewerkt",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Bestanden"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Varslinger", "notifications": "Varslinger",
"issues": "Issues", "issues": "Issues",
"pulls": "Forespørsel" "pulls": "Forespørsel",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scener", "scenes": "Scener",
@ -1023,12 +1024,23 @@
"bcharge": "Batteriladning", "bcharge": "Batteriladning",
"timeleft": "Gjenstående tid" "timeleft": "Gjenstående tid"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Stikkord" "tags": "Stikkord"
},
"slskd": {
"slskStatus": "Nettverk",
"connected": "Tilkoblet",
"disconnected": "Frakoblet",
"updateStatus": "Update",
"update_yes": "Tilgjengelig",
"update_no": "Oppdatert",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -149,8 +149,8 @@
"received": "Odebrane", "received": "Odebrane",
"sent": "Wysłane", "sent": "Wysłane",
"externalIPAddress": "Pub. IP", "externalIPAddress": "Pub. IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "Zewn. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Zewn. prefiks IPv6"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstreams",
@ -705,8 +705,8 @@
"time": "Czas" "time": "Czas"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Wartość netto",
"budget": "Budget" "budget": "Budżet"
}, },
"grafana": { "grafana": {
"dashboards": "Panel główny", "dashboards": "Panel główny",
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Powiadomienia", "notifications": "Powiadomienia",
"issues": "Zgłoszenia", "issues": "Zgłoszenia",
"pulls": "Żądania Pull" "pulls": "Żądania Pull",
"repositories": "Repozytoria"
}, },
"stash": { "stash": {
"scenes": "Sceny", "scenes": "Sceny",
@ -1023,12 +1024,23 @@
"bcharge": "Stan baterii", "bcharge": "Stan baterii",
"timeleft": "Pozostało" "timeleft": "Pozostało"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Zakładki",
"favorites": "Favorites", "favorites": "Ulubione",
"archived": "Archived", "archived": "Zarchiwizowane",
"highlights": "Highlights", "highlights": "Wyróżnione",
"lists": "Lists", "lists": "Listy",
"tags": "Tagi" "tags": "Tagi"
},
"slskd": {
"slskStatus": "Sieć",
"connected": "Połączono",
"disconnected": "Rozłączono",
"updateStatus": "Update",
"update_yes": "Dostępne",
"update_no": "Aktualny",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Pliki"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notificações", "notifications": "Notificações",
"issues": "Problemas", "issues": "Problemas",
"pulls": "Solicitar pull" "pulls": "Solicitar pull",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Cenas", "scenes": "Cenas",
@ -1023,12 +1024,23 @@
"bcharge": "Carga da bateria", "bcharge": "Carga da bateria",
"timeleft": "Tempo Restante" "timeleft": "Tempo Restante"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Etiquetas" "tags": "Etiquetas"
},
"slskd": {
"slskStatus": "Rede",
"connected": "Conectado",
"disconnected": "Desconectado",
"updateStatus": "Update",
"update_yes": "Disponível",
"update_no": "Atualizado",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Ficheiros"
} }
} }

View file

@ -47,7 +47,7 @@
"load": "Carga", "load": "Carga",
"temp": "TEMP", "temp": "TEMP",
"max": "Máximo", "max": "Máximo",
"uptime": "CIMA" "uptime": "ATIVO"
}, },
"unifi": { "unifi": {
"users": "Usuários", "users": "Usuários",
@ -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": "CIMA", "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"
@ -149,8 +149,8 @@
"received": "Recebido", "received": "Recebido",
"sent": "Enviado", "sent": "Enviado",
"externalIPAddress": "IP Externo", "externalIPAddress": "IP Externo",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "IPv6 Externo",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Prefixo IPv6 Externo"
}, },
"caddy": { "caddy": {
"upstreams": "Streams de Envio", "upstreams": "Streams de Envio",
@ -178,7 +178,7 @@
"connectedAp": "APs Ligados", "connectedAp": "APs Ligados",
"activeUser": "Dispositivos ativos", "activeUser": "Dispositivos ativos",
"alerts": "Alertas", "alerts": "Alertas",
"connectedGateways": "Connected gateways", "connectedGateways": "Gateways conectados",
"connectedSwitches": "Switches conectados" "connectedSwitches": "Switches conectados"
}, },
"nzbget": { "nzbget": {
@ -229,8 +229,8 @@
"seed": "Semente" "seed": "Semente"
}, },
"develancacheui": { "develancacheui": {
"cachehitbytes": "Cache Hit Bytes", "cachehitbytes": "Bytes de Acerto de Cache",
"cachemissbytes": "Cache Miss Bytes" "cachemissbytes": "Bytes de Falha de Cache"
}, },
"downloadstation": { "downloadstation": {
"download": "Descarregar", "download": "Descarregar",
@ -313,13 +313,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "Baixado", "download": "Baixado",
"nondownload": "Non-Downloaded", "nondownload": "Não Baixado",
"read": "Lido", "read": "Lido",
"unread": "Não lida", "unread": "Não lida",
"downloadedread": "Downloaded & Read", "downloadedread": "Baixado e Lido",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "Baixado e Não Lido",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "Não Baixado e Lido",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "Não Baixado e Não Lido"
}, },
"tailscale": { "tailscale": {
"address": "Endereço", "address": "Endereço",
@ -337,15 +337,15 @@
}, },
"technitium": { "technitium": {
"totalQueries": "Consultas", "totalQueries": "Consultas",
"totalNoError": "Success", "totalNoError": "Sucesso",
"totalServerFailure": "Failures", "totalServerFailure": "Falhas",
"totalNxDomain": "NX Domains", "totalNxDomain": "Domínios NX",
"totalRefused": "Refused", "totalRefused": "Recusado",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "Autoritativo",
"totalRecursive": "Recursive", "totalRecursive": "Recursivo",
"totalCached": "Cached", "totalCached": "Em cache",
"totalBlocked": "Bloqueado", "totalBlocked": "Bloqueado",
"totalDropped": "Dropped", "totalDropped": "Perdidos",
"totalClients": "Clientes" "totalClients": "Clientes"
}, },
"tdarr": { "tdarr": {
@ -436,7 +436,7 @@
"temp": "TEMP", "temp": "TEMP",
"_temp": "Temperatura", "_temp": "Temperatura",
"warn": "Aviso", "warn": "Aviso",
"uptime": "CIMA", "uptime": "ATIVO",
"total": "Total", "total": "Total",
"free": "Livre", "free": "Livre",
"used": "Utilizado", "used": "Utilizado",
@ -705,8 +705,8 @@
"time": "Hora" "time": "Hora"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Valor Líquido",
"budget": "Budget" "budget": "Orçamento"
}, },
"grafana": { "grafana": {
"dashboards": "Painéis", "dashboards": "Painéis",
@ -860,16 +860,16 @@
}, },
"romm": { "romm": {
"platforms": "Plataformas", "platforms": "Plataformas",
"totalRoms": "Games", "totalRoms": "Jogos",
"saves": "Saves", "saves": "Saves",
"states": "States", "states": "Estados",
"screenshots": "Screenshots", "screenshots": "Capturas de Tela",
"totalfilesize": "Total Size" "totalfilesize": "Tamanho total"
}, },
"mailcow": { "mailcow": {
"domains": "Domínios", "domains": "Domínios",
"mailboxes": "Mailboxes", "mailboxes": "Caixas de e-mail",
"mails": "Mails", "mails": "Mensagens",
"storage": "Armazenamento" "storage": "Armazenamento"
}, },
"netdata": { "netdata": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notificações", "notifications": "Notificações",
"issues": "Problemas", "issues": "Problemas",
"pulls": "Solicitações de Envio" "pulls": "Solicitações de Envio",
"repositories": "Repositórios"
}, },
"stash": { "stash": {
"scenes": "Cenas", "scenes": "Cenas",
@ -951,30 +952,30 @@
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": "Links",
"collections": "Collections", "collections": "Coleções",
"tags": "Marcadores" "tags": "Marcadores"
}, },
"zabbix": { "zabbix": {
"unclassified": "Not classified", "unclassified": "Não classificado",
"information": "Informação", "information": "Informação",
"warning": "Warning", "warning": "Aviso",
"average": "Average", "average": "Médio",
"high": "High", "high": "Alto",
"disaster": "Disaster" "disaster": "Desastre"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "Veículo",
"vehicles": "Vehicles", "vehicles": "Veículos",
"serviceRecords": "Service Records", "serviceRecords": "Registros de Serviço",
"reminders": "Reminders", "reminders": "Lembretes",
"nextReminder": "Next Reminder", "nextReminder": "Próximo Lembrete",
"none": "None" "none": "Nenhum"
}, },
"vikunja": { "vikunja": {
"projects": "Active Projects", "projects": "Projetos Ativos",
"tasks7d": "Tasks Due This Week", "tasks7d": "Tarefas que vencem nesta semana",
"tasksOverdue": "Overdue Tasks", "tasksOverdue": "Tarefas Atrasadas",
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "Tarefas em Andamento"
}, },
"headscale": { "headscale": {
"name": "Nome", "name": "Nome",
@ -986,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "Nome", "name": "Nome",
"systems": "Systems", "systems": "Sistemas",
"up": "Ativo", "up": "Ativo",
"down": "Inativo", "down": "Inativo",
"paused": "Pausado", "paused": "Pausado",
@ -995,27 +996,27 @@
"updated": "Atualizado", "updated": "Atualizado",
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"disk": "Disk", "disk": "Disco",
"network": "NET" "network": "Rede"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Aplicativos",
"synced": "Synced", "synced": "Sincronizado",
"outOfSync": "Out Of Sync", "outOfSync": "Fora de sincronia",
"healthy": "Saudável", "healthy": "Saudável",
"degraded": "Degraded", "degraded": "Degradado",
"progressing": "Progressing", "progressing": "Progredindo",
"missing": "Faltando", "missing": "Faltando",
"suspended": "Suspended" "suspended": "Suspenso"
}, },
"spoolman": { "spoolman": {
"loading": "Carregando" "loading": "Carregando"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Grupos",
"issues": "Problemas", "issues": "Problemas",
"merges": "Merge Requests", "merges": "Solicitações de mesclagem",
"projects": "Projects" "projects": "Projetos"
}, },
"apcups": { "apcups": {
"status": "Status", "status": "Status",
@ -1023,12 +1024,23 @@
"bcharge": "Carga da bateria", "bcharge": "Carga da bateria",
"timeleft": "Tempo restante" "timeleft": "Tempo restante"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Marcadores",
"favorites": "Favorites", "favorites": "Favoritos",
"archived": "Archived", "archived": "Arquivados",
"highlights": "Highlights", "highlights": "Destaques",
"lists": "Lists", "lists": "Listas",
"tags": "Marcadores" "tags": "Marcadores"
},
"slskd": {
"slskStatus": "Rede",
"connected": "Conectado",
"disconnected": "Desconectado",
"updateStatus": "Atualize",
"update_yes": "Disponível",
"update_no": "Atualizado",
"downloads": "Transferências",
"uploads": "Envios",
"sharedFiles": "Arquivos"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Timp rămas" "timeleft": "Timp rămas"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Disponibile",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -149,8 +149,8 @@
"received": "Получено", "received": "Получено",
"sent": "Отправлено", "sent": "Отправлено",
"externalIPAddress": "Внеш. IP", "externalIPAddress": "Внеш. IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "Внешний IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Внешний IPv6 префикс"
}, },
"caddy": { "caddy": {
"upstreams": "Входящие каналы", "upstreams": "Входящие каналы",
@ -178,7 +178,7 @@
"connectedAp": "Подключенные точки доступа", "connectedAp": "Подключенные точки доступа",
"activeUser": "Активные устройства", "activeUser": "Активные устройства",
"alerts": "Предупреждения", "alerts": "Предупреждения",
"connectedGateways": "Connected gateways", "connectedGateways": "Подключенные шлюзы",
"connectedSwitches": "Подключенные коммутаторы" "connectedSwitches": "Подключенные коммутаторы"
}, },
"nzbget": { "nzbget": {
@ -705,8 +705,8 @@
"time": "Время" "time": "Время"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Общая средства",
"budget": "Budget" "budget": "Бюджет"
}, },
"grafana": { "grafana": {
"dashboards": "Панели", "dashboards": "Панели",
@ -861,7 +861,7 @@
"romm": { "romm": {
"platforms": "Платформы", "platforms": "Платформы",
"totalRoms": "Игры", "totalRoms": "Игры",
"saves": "Сейвы", "saves": "Сохранения",
"states": "Состояния", "states": "Состояния",
"screenshots": "Скриншоты", "screenshots": "Скриншоты",
"totalfilesize": "Общий объем" "totalfilesize": "Общий объем"
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Уведомления", "notifications": "Уведомления",
"issues": "Вопросы", "issues": "Вопросы",
"pulls": "Запросы на слияние (Pull Request)" "pulls": "Запросы на слияние (Pull Request)",
"repositories": "Репозитории"
}, },
"stash": { "stash": {
"scenes": "Сцены", "scenes": "Сцены",
@ -927,7 +928,7 @@
"total": "Всего" "total": "Всего"
}, },
"swagdashboard": { "swagdashboard": {
"proxied": "Прокси", "proxied": "Проксировано",
"auth": "С Авторизацией", "auth": "С Авторизацией",
"outdated": "Устаревшие", "outdated": "Устаревшие",
"banned": "Заблокированные" "banned": "Заблокированные"
@ -958,17 +959,17 @@
"unclassified": "Не классифицировано", "unclassified": "Не классифицировано",
"information": "Информация", "information": "Информация",
"warning": "Предупреждение", "warning": "Предупреждение",
"average": "Средняя", "average": "Среднее",
"high": "Высокая", "high": "Высокая",
"disaster": "Чрезвычайная" "disaster": "Чрезвычайное"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Автомобиль", "vehicle": "Транспорт",
"vehicles": "Автомобили", "vehicles": "Транспорты",
"serviceRecords": "Сервисные работы", "serviceRecords": "Сервисные записи",
"reminders": "Напоминания", "reminders": "Напоминания",
"nextReminder": "Следующее напоминание", "nextReminder": "Следующее напоминание",
"none": "Нет" "none": "Отсутствует"
}, },
"vikunja": { "vikunja": {
"projects": "Активные Проекты", "projects": "Активные Проекты",
@ -1023,12 +1024,23 @@
"bcharge": "Заряд батареи", "bcharge": "Заряд батареи",
"timeleft": "Осталось" "timeleft": "Осталось"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Закладки",
"favorites": "Favorites", "favorites": "Избранное",
"archived": "Archived", "archived": "Архив",
"highlights": "Highlights", "highlights": "События",
"lists": "Lists", "lists": "Список",
"tags": "Теги" "tags": "Теги"
},
"slskd": {
"slskStatus": "Сеть",
"connected": "Подключено",
"disconnected": "Отключено",
"updateStatus": "Обновление",
"update_yes": "Доступно",
"update_no": "Последняя версия",
"downloads": "Скачивания",
"uploads": "Загрузки",
"sharedFiles": "Файлов"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Oznámenia", "notifications": "Oznámenia",
"issues": "Problémy", "issues": "Problémy",
"pulls": "Pull requesty" "pulls": "Pull requesty",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scény", "scenes": "Scény",
@ -1023,12 +1024,23 @@
"bcharge": "Nabitie batérie", "bcharge": "Nabitie batérie",
"timeleft": "Zostávajúci čas" "timeleft": "Zostávajúci čas"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Štítky" "tags": "Štítky"
},
"slskd": {
"slskStatus": "Sieť",
"connected": "Pripojené",
"disconnected": "Odpojené",
"updateStatus": "Update",
"update_yes": "Dostupné",
"update_no": "Aktuálny",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Súborov"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Obvestila", "notifications": "Obvestila",
"issues": "Težave", "issues": "Težave",
"pulls": "Zahteve za prenos" "pulls": "Zahteve za prenos",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scene", "scenes": "Scene",
@ -1023,12 +1024,23 @@
"bcharge": "Napolnjenost baterije", "bcharge": "Napolnjenost baterije",
"timeleft": "Preostali čas" "timeleft": "Preostali čas"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Značke" "tags": "Značke"
},
"slskd": {
"slskStatus": "Omrežje",
"connected": "Povezan",
"disconnected": "Prekinjeno",
"updateStatus": "Update",
"update_yes": "Na voljo",
"update_no": "Posodobljeno",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Datotek"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Tid kvar" "timeleft": "Tid kvar"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Tillgänglig",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "మిగిలి వున్న సమయం" "timeleft": "మిగిలి వున్న సమయం"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "అందుబాటులో వున్నవి",
"update_no": "తాజాగా",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Bildirimler", "notifications": "Bildirimler",
"issues": "Sorunlar", "issues": "Sorunlar",
"pulls": "Değişiklik İstekleri" "pulls": "Değişiklik İstekleri",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Sahneler", "scenes": "Sahneler",
@ -1023,12 +1024,23 @@
"bcharge": "Pil Yüzdesi", "bcharge": "Pil Yüzdesi",
"timeleft": "Kalan Zaman" "timeleft": "Kalan Zaman"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Etiketler" "tags": "Etiketler"
},
"slskd": {
"slskStatus": "Ağ",
"connected": "Bağlandı",
"disconnected": "Bağlantı kesildi",
"updateStatus": "Update",
"update_yes": "Kullanılabilir",
"update_no": "Güncel",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Dosyalar"
} }
} }

View file

@ -120,7 +120,7 @@
"grid_power": "Сітка", "grid_power": "Сітка",
"home_power": "Споживання", "home_power": "Споживання",
"charge_power": "Зарядний пристрій", "charge_power": "Зарядний пристрій",
"kilowatt": "kW" "kilowatt": "кВт"
}, },
"flood": { "flood": {
"download": "Завантажено", "download": "Завантажено",
@ -149,8 +149,8 @@
"received": "Отримано", "received": "Отримано",
"sent": "Надіслано", "sent": "Надіслано",
"externalIPAddress": "Зовнішній IP", "externalIPAddress": "Зовнішній IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "Зовнішній IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "Зовнішній Префікс IPv6-"
}, },
"caddy": { "caddy": {
"upstreams": "Потоки", "upstreams": "Потоки",
@ -178,7 +178,7 @@
"connectedAp": "Підключені точки доступу", "connectedAp": "Підключені точки доступу",
"activeUser": "Активні пристрої", "activeUser": "Активні пристрої",
"alerts": "Оповіщення", "alerts": "Оповіщення",
"connectedGateways": "Connected gateways", "connectedGateways": "Підключені шлюзи",
"connectedSwitches": "Підключені перемикачі" "connectedSwitches": "Підключені перемикачі"
}, },
"nzbget": { "nzbget": {
@ -420,8 +420,8 @@
}, },
"authentik": { "authentik": {
"users": "Користувачі", "users": "Користувачі",
"loginsLast24H": "Вхід (24 години)", "loginsLast24H": "Вхід (протягом доби)",
"failedLoginsLast24H": "Невдалі входи (24 години)" "failedLoginsLast24H": "Невдалі входи (протягом доби)"
}, },
"proxmox": { "proxmox": {
"mem": "ОЗП", "mem": "ОЗП",
@ -434,7 +434,7 @@
"load": "Завантаження", "load": "Завантаження",
"wait": "Будь ласка, зачекайте", "wait": "Будь ласка, зачекайте",
"temp": "Температура", "temp": "Температура",
"_temp": "Темп.", "_temp": "Температура",
"warn": "Увага", "warn": "Увага",
"uptime": "Онлайн", "uptime": "Онлайн",
"total": "Усього", "total": "Усього",
@ -616,7 +616,7 @@
}, },
"opendtu": { "opendtu": {
"yieldDay": "Сьогодні", "yieldDay": "Сьогодні",
"absolutePower": "Абс. потуж.", "absolutePower": "Потужність",
"relativePower": "Заряд %", "relativePower": "Заряд %",
"limit": "Ліміт" "limit": "Ліміт"
}, },
@ -648,13 +648,13 @@
"wanStatus": "Статус WAN", "wanStatus": "Статус WAN",
"up": "Онлайн", "up": "Онлайн",
"down": "Офлайн", "down": "Офлайн",
"temp": "Темп.", "temp": "Температура",
"disk": "Використання диска", "disk": "Використання диска",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
"datastore_usage": "Сховище даних", "datastore_usage": "Сховище даних",
"failed_tasks_24h": "Невиконані завдання 24 години", "failed_tasks_24h": "Невиконані завдання за останню добу",
"cpu_usage": "ЦП", "cpu_usage": "ЦП",
"memory_usage": "Пам'ять" "memory_usage": "Пам'ять"
}, },
@ -705,8 +705,8 @@
"time": "Час" "time": "Час"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "Чисті Активи",
"budget": "Budget" "budget": "Бюджет"
}, },
"grafana": { "grafana": {
"dashboards": "Інформаційні панелі", "dashboards": "Інформаційні панелі",
@ -831,7 +831,7 @@
}, },
"openwrt": { "openwrt": {
"uptime": "Час роботи", "uptime": "Час роботи",
"cpuLoad": "Сер. навантаження ЦП (5 хв)", "cpuLoad": "Сер. навантаження ЦП (\"5\" хв)",
"up": "Онлайн", "up": "Онлайн",
"down": "Офлайн", "down": "Офлайн",
"bytesTx": "Передано", "bytesTx": "Передано",
@ -855,7 +855,7 @@
"inCinemas": "У кінотеатрах", "inCinemas": "У кінотеатрах",
"physicalRelease": "Фізичний реліз", "physicalRelease": "Фізичний реліз",
"digitalRelease": "Цифровий реліз", "digitalRelease": "Цифровий реліз",
"noEventsToday": "Події на сьогодні відсутні", "noEventsToday": "Події на сьогодні відсутні!",
"noEventsFound": "Події не знайдено" "noEventsFound": "Події не знайдено"
}, },
"romm": { "romm": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Сповіщення", "notifications": "Сповіщення",
"issues": "Питання", "issues": "Питання",
"pulls": "Pull-запити" "pulls": "Pull-запити",
"repositories": "Репозиторії"
}, },
"stash": { "stash": {
"scenes": "Сцени", "scenes": "Сцени",
@ -1023,12 +1024,23 @@
"bcharge": "Заряд батареї", "bcharge": "Заряд батареї",
"timeleft": "Залишилось" "timeleft": "Залишилось"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Закладки",
"favorites": "Favorites", "favorites": "Обране",
"archived": "Archived", "archived": "Заархівовані",
"highlights": "Highlights", "highlights": "Основні моменти",
"lists": "Lists", "lists": "Списки",
"tags": "Теги" "tags": "Теги"
},
"slskd": {
"slskStatus": "Мережа",
"connected": "З'єднано",
"disconnected": "Відключено",
"updateStatus": "Оновити",
"update_yes": "Доступно",
"update_no": "Актуально",
"downloads": "Завантаження",
"uploads": "Вивантаження",
"sharedFiles": "Файли"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Pull Requests",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Scenes",
@ -1023,12 +1024,23 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Thời gian còn lại" "timeleft": "Thời gian còn lại"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -5,9 +5,9 @@
"bbytes": "{{value, bytes(binary: true)}}", "bbytes": "{{value, bytes(binary: true)}}",
"bbits": "{{value, bytes(bits: true; binary: true)}}", "bbits": "{{value, bytes(bits: true; binary: true)}}",
"byterate": "{{value, rate(bits: false)}}", "byterate": "{{value, rate(bits: false)}}",
"bibyterate": "{{value, rate(bits: false; binary: true)}}", "bibyterate": "{{value, bytes(bits: true; binary: true)}}",
"bitrate": "{{value, rate(bits: true)}}", "bitrate": "{{value, rate(bits: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}", "bibitrate": "{{value, bytes(bits: true; binary: true)}}",
"percent": "{{value, percent}}", "percent": "{{value, percent}}",
"number": "{{value, number}}", "number": "{{value, number}}",
"ms": "{{value, number}}", "ms": "{{value, number}}",
@ -120,7 +120,7 @@
"grid_power": "電網", "grid_power": "電網",
"home_power": "電源使用率", "home_power": "電源使用率",
"charge_power": "充電", "charge_power": "充電",
"kilowatt": "kW" "kilowatt": "千瓦"
}, },
"flood": { "flood": {
"download": "下載速率", "download": "下載速率",
@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusPendingDisconnect": "待辦的斷開",
"connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnecting": "正在中斷連線",
"connectionStatusDisconnected": "連接已中斷", "connectionStatusDisconnected": "連接已中斷",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "已連線",
"uptime": "運行時間", "uptime": "運行時間",
"maxDown": "最大下載速率", "maxDown": "最大下載速率",
"maxUp": "最大上傳速率", "maxUp": "最大上傳速率",
@ -149,8 +149,8 @@
"received": "已接收", "received": "已接收",
"sent": "已送出", "sent": "已送出",
"externalIPAddress": "外部 IP", "externalIPAddress": "外部 IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "外部 IP",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "擴展 IPv-前綴"
}, },
"caddy": { "caddy": {
"upstreams": "上行", "upstreams": "上行",
@ -178,7 +178,7 @@
"connectedAp": "已連接的存取點", "connectedAp": "已連接的存取點",
"activeUser": "在線裝置", "activeUser": "在線裝置",
"alerts": "警示", "alerts": "警示",
"connectedGateways": "Connected gateways", "connectedGateways": "已連繫的網關",
"connectedSwitches": "已連接的交換器" "connectedSwitches": "已連接的交換器"
}, },
"nzbget": { "nzbget": {
@ -229,8 +229,8 @@
"seed": "已完成下載" "seed": "已完成下載"
}, },
"develancacheui": { "develancacheui": {
"cachehitbytes": "Cache Hit Bytes", "cachehitbytes": "快取未命中位元組",
"cachemissbytes": "Cache Miss Bytes" "cachemissbytes": "快取未命中位元組"
}, },
"downloadstation": { "downloadstation": {
"download": "下載速率", "download": "下載速率",
@ -285,9 +285,9 @@
}, },
"netalertx": { "netalertx": {
"total": "全部", "total": "全部",
"connected": "Connected", "connected": "已連線",
"new_devices": "New Devices", "new_devices": "新裝置",
"down_alerts": "Down Alerts" "down_alerts": "離線警告"
}, },
"pihole": { "pihole": {
"queries": "查詢", "queries": "查詢",
@ -313,13 +313,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "下載咗", "download": "下載咗",
"nondownload": "Non-Downloaded", "nondownload": "已下載",
"read": "已讀", "read": "已讀",
"unread": "未讀", "unread": "未讀",
"downloadedread": "Downloaded & Read", "downloadedread": "已下載且已閱讀",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "已下載且未閱讀",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "未下載但已閱讀",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "未下載且未閱讀"
}, },
"tailscale": { "tailscale": {
"address": "位址", "address": "位址",
@ -337,15 +337,15 @@
}, },
"technitium": { "technitium": {
"totalQueries": "查詢", "totalQueries": "查詢",
"totalNoError": "Success", "totalNoError": "成功",
"totalServerFailure": "Failures", "totalServerFailure": "失敗",
"totalNxDomain": "NX Domains", "totalNxDomain": "網域",
"totalRefused": "Refused", "totalRefused": "對方拒投誠信",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "權威的",
"totalRecursive": "Recursive", "totalRecursive": "遞迴",
"totalCached": "Cached", "totalCached": "快取",
"totalBlocked": "封鎖", "totalBlocked": "封鎖",
"totalDropped": "Dropped", "totalDropped": "丟棄",
"totalClients": "客戶端" "totalClients": "客戶端"
}, },
"tdarr": { "tdarr": {
@ -705,8 +705,8 @@
"time": "時間" "time": "時間"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "淨值",
"budget": "Budget" "budget": "預算"
}, },
"grafana": { "grafana": {
"dashboards": "控制面板", "dashboards": "控制面板",
@ -860,16 +860,16 @@
}, },
"romm": { "romm": {
"platforms": "平台", "platforms": "平台",
"totalRoms": "Games", "totalRoms": "遊戲",
"saves": "Saves", "saves": "已儲存",
"states": "States", "states": "",
"screenshots": "Screenshots", "screenshots": "螢幕截圖",
"totalfilesize": "Total Size" "totalfilesize": "大小總計"
}, },
"mailcow": { "mailcow": {
"domains": "域", "domains": "域",
"mailboxes": "Mailboxes", "mailboxes": "信箱",
"mails": "Mails", "mails": "郵件數",
"storage": "儲存空間" "storage": "儲存空間"
}, },
"netdata": { "netdata": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "信息", "notifications": "信息",
"issues": "出版", "issues": "出版",
"pulls": "提取請求" "pulls": "提取請求",
"repositories": "套件來源"
}, },
"stash": { "stash": {
"scenes": "場景", "scenes": "場景",
@ -921,16 +922,16 @@
"bans": "禁止" "bans": "禁止"
}, },
"wgeasy": { "wgeasy": {
"connected": "Connected", "connected": "已連線",
"enabled": "啟用", "enabled": "啟用",
"disabled": "停用咗", "disabled": "停用咗",
"total": "全部" "total": "全部"
}, },
"swagdashboard": { "swagdashboard": {
"proxied": "Proxied", "proxied": "已代理",
"auth": "With Auth", "auth": "已授權",
"outdated": "Outdated", "outdated": "須更新",
"banned": "Banned" "banned": "已封鎖"
}, },
"myspeed": { "myspeed": {
"ping": "延遲", "ping": "延遲",
@ -938,43 +939,43 @@
"upload": "上傳速率" "upload": "上傳速率"
}, },
"stocks": { "stocks": {
"stocks": "Stocks", "stocks": "股票",
"loading": "Loading", "loading": "載入中 ",
"open": "Open - US Market", "open": "美國市場已開放",
"closed": "Closed - US Market", "closed": "美國市場已關閉",
"invalidConfiguration": "Invalid Configuration" "invalidConfiguration": "無效的設定"
}, },
"frigate": { "frigate": {
"cameras": "Cameras", "cameras": " ",
"uptime": "運行時間", "uptime": "運行時間",
"version": "版本" "version": "版本"
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": " ",
"collections": "Collections", "collections": "收藏庫",
"tags": "標籤" "tags": "標籤"
}, },
"zabbix": { "zabbix": {
"unclassified": "Not classified", "unclassified": "未分類",
"information": "資訊", "information": "資訊",
"warning": "Warning", "warning": "警告",
"average": "Average", "average": "平均",
"high": "High", "high": "高優先權",
"disaster": "Disaster" "disaster": "災難"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "車輛",
"vehicles": "Vehicles", "vehicles": "車輛",
"serviceRecords": "Service Records", "serviceRecords": "保養記錄",
"reminders": "Reminders", "reminders": "提醒",
"nextReminder": "Next Reminder", "nextReminder": "下一個提醒",
"none": "None" "none": "沒有"
}, },
"vikunja": { "vikunja": {
"projects": "Active Projects", "projects": "正在應用的項目",
"tasks7d": "Tasks Due This Week", "tasks7d": "本週到期任務",
"tasksOverdue": "Overdue Tasks", "tasksOverdue": "逾期處理",
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "正在執行的任務"
}, },
"headscale": { "headscale": {
"name": "名稱", "name": "名稱",
@ -986,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "系統",
"up": "在線", "up": "在線",
"down": "離線", "down": "離線",
"paused": "擱置中", "paused": "擱置中",
@ -995,27 +996,27 @@
"updated": "已更新", "updated": "已更新",
"cpu": "CPU", "cpu": "CPU",
"memory": "記憶體", "memory": "記憶體",
"disk": "Disk", "disk": "儲存空間",
"network": "NET" "network": "網路"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "應用程式",
"synced": "Synced", "synced": "已同步",
"outOfSync": "Out Of Sync", "outOfSync": "不同步",
"healthy": "健康", "healthy": "健康",
"degraded": "Degraded", "degraded": "已降級",
"progressing": "Progressing", "progressing": "進度",
"missing": "缺少", "missing": "缺少",
"suspended": "Suspended" "suspended": "暫停"
}, },
"spoolman": { "spoolman": {
"loading": "Loading" "loading": "載入中 "
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "群組",
"issues": "出版", "issues": "出版",
"merges": "Merge Requests", "merges": "合併請求",
"projects": "Projects" "projects": ""
}, },
"apcups": { "apcups": {
"status": "狀況", "status": "狀況",
@ -1023,12 +1024,23 @@
"bcharge": "充電", "bcharge": "充電",
"timeleft": "用時" "timeleft": "用時"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "書籤",
"favorites": "Favorites", "favorites": "我的最愛",
"archived": "Archived", "archived": "已存檔",
"highlights": "Highlights", "highlights": "標記",
"lists": "Lists", "lists": "列表",
"tags": "標籤" "tags": "標籤"
},
"slskd": {
"slskStatus": "網絡",
"connected": "已連線",
"disconnected": "連接已中斷",
"updateStatus": "更新",
"update_yes": "可用",
"update_no": "已更新至最新",
"downloads": "下載",
"uploads": "上傳",
"sharedFiles": "檔案"
} }
} }

View file

@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "通知", "notifications": "通知",
"issues": "问题", "issues": "问题",
"pulls": "PR" "pulls": "PR",
"repositories": "Repositories"
}, },
"stash": { "stash": {
"scenes": "场景", "scenes": "场景",
@ -1023,12 +1024,23 @@
"bcharge": "充电中", "bcharge": "充电中",
"timeleft": "剩余时间" "timeleft": "剩余时间"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Lists", "lists": "Lists",
"tags": "Tags" "tags": "Tags"
},
"slskd": {
"slskStatus": "网络",
"connected": "已连接",
"disconnected": "未连接",
"updateStatus": "Update",
"update_yes": "可用",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
} }
} }

View file

@ -5,9 +5,9 @@
"bbytes": "{{value, bytes(binary: true)}}", "bbytes": "{{value, bytes(binary: true)}}",
"bbits": "{{value, bytes(bits: true; binary: true)}}", "bbits": "{{value, bytes(bits: true; binary: true)}}",
"byterate": "{{value, rate(bits: false)}}", "byterate": "{{value, rate(bits: false)}}",
"bibyterate": "{{value, rate(bits: false; binary: true)}}", "bibyterate": "{{value, bytes(bits: true; binary: true)}}",
"bitrate": "{{value, rate(bits: true)}}", "bitrate": "{{value, rate(bits: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}", "bibitrate": "{{value, bytes(bits: true; binary: true)}}",
"percent": "{{value, percent}}", "percent": "{{value, percent}}",
"number": "{{value, number}}", "number": "{{value, number}}",
"ms": "{{value, number}}", "ms": "{{value, number}}",
@ -120,7 +120,7 @@
"grid_power": "電網", "grid_power": "電網",
"home_power": "電源使用率", "home_power": "電源使用率",
"charge_power": "充電", "charge_power": "充電",
"kilowatt": "kW" "kilowatt": "千瓦"
}, },
"flood": { "flood": {
"download": "下載速率", "download": "下載速率",
@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "待辦的斷開", "connectionStatusPendingDisconnect": "待辦的斷開",
"connectionStatusDisconnecting": "正在中斷連線", "connectionStatusDisconnecting": "正在中斷連線",
"connectionStatusDisconnected": "連接已中斷", "connectionStatusDisconnected": "連接已中斷",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "已連線",
"uptime": "運行時間", "uptime": "運行時間",
"maxDown": "最大下載速率", "maxDown": "最大下載速率",
"maxUp": "最大上傳速率", "maxUp": "最大上傳速率",
@ -149,8 +149,8 @@
"received": "已接收", "received": "已接收",
"sent": "已送出", "sent": "已送出",
"externalIPAddress": "外部 IP", "externalIPAddress": "外部 IP",
"externalIPv6Address": "Ext. IPv6", "externalIPv6Address": "外部 IP",
"externalIPv6Prefix": "Ext. IPv6-Prefix" "externalIPv6Prefix": "擴展 IPv-前綴"
}, },
"caddy": { "caddy": {
"upstreams": "上行", "upstreams": "上行",
@ -178,7 +178,7 @@
"connectedAp": "已連接的存取點", "connectedAp": "已連接的存取點",
"activeUser": "在線裝置", "activeUser": "在線裝置",
"alerts": "警示", "alerts": "警示",
"connectedGateways": "Connected gateways", "connectedGateways": "已連繫的網關",
"connectedSwitches": "已連接的交換器" "connectedSwitches": "已連接的交換器"
}, },
"nzbget": { "nzbget": {
@ -229,8 +229,8 @@
"seed": "已完成下載" "seed": "已完成下載"
}, },
"develancacheui": { "develancacheui": {
"cachehitbytes": "Cache Hit Bytes", "cachehitbytes": "快取未命中位元組",
"cachemissbytes": "Cache Miss Bytes" "cachemissbytes": "快取未命中位元組"
}, },
"downloadstation": { "downloadstation": {
"download": "下載速率", "download": "下載速率",
@ -285,9 +285,9 @@
}, },
"netalertx": { "netalertx": {
"total": "全部", "total": "全部",
"connected": "Connected", "connected": "已連線",
"new_devices": "New Devices", "new_devices": "新裝置",
"down_alerts": "Down Alerts" "down_alerts": "離線警告"
}, },
"pihole": { "pihole": {
"queries": "查詢", "queries": "查詢",
@ -313,13 +313,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "已下載", "download": "已下載",
"nondownload": "Non-Downloaded", "nondownload": "已下載",
"read": "已讀", "read": "已讀",
"unread": "未讀", "unread": "未讀",
"downloadedread": "Downloaded & Read", "downloadedread": "已下載且已閱讀",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "已下載且未閱讀",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "未下載但已閱讀",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "未下載且未閱讀"
}, },
"tailscale": { "tailscale": {
"address": "位址", "address": "位址",
@ -337,15 +337,15 @@
}, },
"technitium": { "technitium": {
"totalQueries": "查詢", "totalQueries": "查詢",
"totalNoError": "Success", "totalNoError": "成功",
"totalServerFailure": "Failures", "totalServerFailure": "失敗",
"totalNxDomain": "NX Domains", "totalNxDomain": "網域",
"totalRefused": "Refused", "totalRefused": "對方拒投誠信",
"totalAuthoritative": "Authoritative", "totalAuthoritative": "權威的",
"totalRecursive": "Recursive", "totalRecursive": "遞迴",
"totalCached": "Cached", "totalCached": "快取",
"totalBlocked": "已阻擋", "totalBlocked": "已阻擋",
"totalDropped": "Dropped", "totalDropped": "丟棄",
"totalClients": "客戶端" "totalClients": "客戶端"
}, },
"tdarr": { "tdarr": {
@ -705,8 +705,8 @@
"time": "時間" "time": "時間"
}, },
"firefly": { "firefly": {
"networth": "Net Worth", "networth": "淨值",
"budget": "Budget" "budget": "預算"
}, },
"grafana": { "grafana": {
"dashboards": "控制面板", "dashboards": "控制面板",
@ -860,16 +860,16 @@
}, },
"romm": { "romm": {
"platforms": "平台", "platforms": "平台",
"totalRoms": "Games", "totalRoms": "遊戲",
"saves": "Saves", "saves": "已儲存",
"states": "States", "states": "",
"screenshots": "Screenshots", "screenshots": "螢幕截圖",
"totalfilesize": "Total Size" "totalfilesize": "大小總計"
}, },
"mailcow": { "mailcow": {
"domains": "網域", "domains": "網域",
"mailboxes": "Mailboxes", "mailboxes": "信箱",
"mails": "Mails", "mails": "郵件數",
"storage": "儲存空間" "storage": "儲存空間"
}, },
"netdata": { "netdata": {
@ -885,7 +885,8 @@
"gitea": { "gitea": {
"notifications": "信息", "notifications": "信息",
"issues": "出版", "issues": "出版",
"pulls": "提取請求" "pulls": "提取請求",
"repositories": "套件來源"
}, },
"stash": { "stash": {
"scenes": "場景", "scenes": "場景",
@ -921,16 +922,16 @@
"bans": "禁止" "bans": "禁止"
}, },
"wgeasy": { "wgeasy": {
"connected": "Connected", "connected": "已連線",
"enabled": "已啟用", "enabled": "已啟用",
"disabled": "已停用", "disabled": "已停用",
"total": "全部" "total": "全部"
}, },
"swagdashboard": { "swagdashboard": {
"proxied": "Proxied", "proxied": "已代理",
"auth": "With Auth", "auth": "已授權",
"outdated": "Outdated", "outdated": "須更新",
"banned": "Banned" "banned": "已封鎖"
}, },
"myspeed": { "myspeed": {
"ping": "延遲", "ping": "延遲",
@ -938,43 +939,43 @@
"upload": "上傳速率" "upload": "上傳速率"
}, },
"stocks": { "stocks": {
"stocks": "Stocks", "stocks": "股票",
"loading": "Loading", "loading": "載入中 ",
"open": "Open - US Market", "open": "美國市場已開放",
"closed": "Closed - US Market", "closed": "美國市場已關閉",
"invalidConfiguration": "Invalid Configuration" "invalidConfiguration": "無效的設定"
}, },
"frigate": { "frigate": {
"cameras": "Cameras", "cameras": " ",
"uptime": "運行時間", "uptime": "運行時間",
"version": "版本" "version": "版本"
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": " ",
"collections": "Collections", "collections": "收藏庫",
"tags": "標籤" "tags": "標籤"
}, },
"zabbix": { "zabbix": {
"unclassified": "Not classified", "unclassified": "未分類",
"information": "資訊", "information": "資訊",
"warning": "Warning", "warning": "警告",
"average": "Average", "average": "平均",
"high": "High", "high": "高優先權",
"disaster": "Disaster" "disaster": "災難"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "車輛",
"vehicles": "Vehicles", "vehicles": "車輛",
"serviceRecords": "Service Records", "serviceRecords": "保養記錄",
"reminders": "Reminders", "reminders": "提醒",
"nextReminder": "Next Reminder", "nextReminder": "下一個提醒",
"none": "None" "none": "沒有"
}, },
"vikunja": { "vikunja": {
"projects": "Active Projects", "projects": "正在應用的項目",
"tasks7d": "Tasks Due This Week", "tasks7d": "本週到期任務",
"tasksOverdue": "Overdue Tasks", "tasksOverdue": "逾期處理",
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "正在執行的任務"
}, },
"headscale": { "headscale": {
"name": "名稱", "name": "名稱",
@ -986,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "系統",
"up": "在線", "up": "在線",
"down": "離線", "down": "離線",
"paused": "擱置中", "paused": "擱置中",
@ -995,27 +996,27 @@
"updated": "已更新", "updated": "已更新",
"cpu": "CPU", "cpu": "CPU",
"memory": "記憶體", "memory": "記憶體",
"disk": "Disk", "disk": "儲存空間",
"network": "NET" "network": "網路"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "應用程式",
"synced": "Synced", "synced": "已同步",
"outOfSync": "Out Of Sync", "outOfSync": "不同步",
"healthy": "健康", "healthy": "健康",
"degraded": "Degraded", "degraded": "已降級",
"progressing": "Progressing", "progressing": "進度",
"missing": "缺少", "missing": "缺少",
"suspended": "Suspended" "suspended": "暫停"
}, },
"spoolman": { "spoolman": {
"loading": "Loading" "loading": "載入中 "
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "群組",
"issues": "出版", "issues": "出版",
"merges": "Merge Requests", "merges": "合併請求",
"projects": "Projects" "projects": ""
}, },
"apcups": { "apcups": {
"status": "狀態", "status": "狀態",
@ -1023,12 +1024,23 @@
"bcharge": "充電", "bcharge": "充電",
"timeleft": "剩餘時間" "timeleft": "剩餘時間"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "書籤",
"favorites": "Favorites", "favorites": "我的最愛",
"archived": "Archived", "archived": "已存檔",
"highlights": "Highlights", "highlights": "標記",
"lists": "Lists", "lists": "列表",
"tags": "標籤" "tags": "標籤"
},
"slskd": {
"slskStatus": "網絡",
"connected": "已連線",
"disconnected": "連接已中斷",
"updateStatus": "更新",
"update_yes": "可觀看",
"update_no": "已更新至最新",
"downloads": "下載",
"uploads": "上傳",
"sharedFiles": "檔案"
} }
} }

View file

@ -1,10 +1,10 @@
import { useRef, useEffect } from "react";
import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react"; import { Disclosure, Transition } from "@headlessui/react";
import { MdKeyboardArrowDown } from "react-icons/md"; import classNames from "classnames";
import ErrorBoundary from "components/errorboundry";
import List from "components/bookmarks/list"; import List from "components/bookmarks/list";
import ErrorBoundary from "components/errorboundry";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
import { useEffect, useRef } from "react";
import { MdKeyboardArrowDown } from "react-icons/md";
export default function BookmarksGroup({ export default function BookmarksGroup({
bookmarks, bookmarks,
@ -12,6 +12,7 @@ export default function BookmarksGroup({
disableCollapse, disableCollapse,
groupsInitiallyCollapsed, groupsInitiallyCollapsed,
bookmarksStyle, bookmarksStyle,
maxGroupColumns,
}) { }) {
const panel = useRef(); const panel = useRef();
@ -25,6 +26,9 @@ export default function BookmarksGroup({
className={classNames( className={classNames(
"bookmark-group flex-1 overflow-hidden", "bookmark-group flex-1 overflow-hidden",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
layout?.style !== "row" && maxGroupColumns && parseInt(maxGroupColumns, 10) > 6
? `3xl:basis-1/${maxGroupColumns}`
: "",
layout?.header === false ? "px-1" : "p-1 pb-0", layout?.header === false ? "px-1" : "p-1 pb-0",
)} )}
> >

View file

@ -1,7 +1,7 @@
import { useContext } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings";
export default function Item({ bookmark, iconOnly = false }) { export default function Item({ bookmark, iconOnly = false }) {
const description = bookmark.description ?? new URL(bookmark.href).hostname; const description = bookmark.description ?? new URL(bookmark.href).hostname;
@ -22,7 +22,7 @@ export default function Item({ bookmark, iconOnly = false }) {
className={classNames( className={classNames(
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`, settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
"text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10", "text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10",
iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-8 mb-3", iconOnly ? "h-[60px] w-[60px] grid" : "block w-full mb-3",
)} )}
> >
{iconOnly ? ( {iconOnly ? (

View file

@ -1,6 +1,6 @@
/* eslint-disable @next/next/no-img-element */ /* eslint-disable @next/next/no-img-element */
/* eslint-disable jsx-a11y/alt-text */ /* eslint-disable jsx-a11y/alt-text */
import { useRef, useEffect, useContext } from "react"; import { useContext, useEffect, useRef } from "react";
import { ColorContext } from "utils/contexts/color"; import { ColorContext } from "utils/contexts/color";
import themes from "utils/styles/themes"; import themes from "utils/styles/themes";

View file

@ -1,6 +1,6 @@
import { useTranslation } from "react-i18next";
import { useEffect, useState, useRef, useCallback, useContext } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { useTranslation } from "next-i18next";
import { useCallback, useContext, useEffect, useRef, useState } from "react";
import useSWR from "swr"; import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
@ -21,7 +21,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
const [searchSuggestions, setSearchSuggestions] = useState([]); const [searchSuggestions, setSearchSuggestions] = useState([]);
const { data: widgets } = useSWR("/api/widgets"); const { data: widgets } = useSWR("/api/widgets");
const searchWidget = Object.values(widgets).find((w) => w.type === "search"); const searchWidget = widgets && Object.values(widgets).find((w) => w.type === "search");
let searchProvider; let searchProvider;
@ -53,7 +53,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
const result = results[currentItemIndex]; const result = results[currentItemIndex];
window.open( window.open(
result.href, result.href,
newWindow ? "_blank" : result.target ?? searchProvider?.target ?? settings.target ?? "_blank", newWindow ? "_blank" : (result.target ?? searchProvider?.target ?? settings.target ?? "_blank"),
"noreferrer", "noreferrer",
); );
} }
@ -204,7 +204,8 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
return () => { return () => {
abortController.abort(); abortController.abort();
}; };
}, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url, t]); // eslint-disable-next-line react-hooks/exhaustive-deps
}, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url]);
const [hidden, setHidden] = useState(true); const [hidden, setHidden] = useState(true);
useEffect(() => { useEffect(() => {

View file

@ -1,5 +1,5 @@
import { useContext } from "react";
import Image from "next/image"; import Image from "next/image";
import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
import { ThemeContext } from "utils/contexts/theme"; import { ThemeContext } from "utils/contexts/theme";

View file

@ -1,7 +1,7 @@
import { Fragment } from "react";
import { Menu, Transition } from "@headlessui/react"; import { Menu, Transition } from "@headlessui/react";
import { BiCog } from "react-icons/bi";
import classNames from "classnames"; import classNames from "classnames";
import { Fragment } from "react";
import { BiCog } from "react-icons/bi";
export default function Dropdown({ options, value, setValue }) { export default function Dropdown({ options, value, setValue }) {
return ( return (

View file

@ -1,16 +1,16 @@
import { useRef, useEffect } from "react";
import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react"; import { Disclosure, Transition } from "@headlessui/react";
import { MdKeyboardArrowDown } from "react-icons/md"; import classNames from "classnames";
import List from "components/services/list";
import ResolvedIcon from "components/resolvedicon"; import ResolvedIcon from "components/resolvedicon";
import List from "components/services/list";
import { useEffect, useRef } from "react";
import { MdKeyboardArrowDown } from "react-icons/md";
import { columnMap } from "../../utils/layout/columns"; import { columnMap } from "../../utils/layout/columns";
export default function ServicesGroup({ export default function ServicesGroup({
group, group,
layout, layout,
fiveColumns, maxGroupColumns,
disableCollapse, disableCollapse,
useEqualHeights, useEqualHeights,
groupsInitiallyCollapsed, groupsInitiallyCollapsed,
@ -31,7 +31,7 @@ export default function ServicesGroup({
className={classNames( className={classNames(
"services-group flex-1", "services-group flex-1",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4",
layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", layout?.style !== "row" && maxGroupColumns ? `3xl:basis-1/${maxGroupColumns}` : "",
groupPadding, groupPadding,
isSubgroup ? "subgroup" : "", isSubgroup ? "subgroup" : "",
)} )}
@ -97,7 +97,7 @@ export default function ServicesGroup({
key={subgroup.name} key={subgroup.name}
group={subgroup} group={subgroup}
layout={layout?.[subgroup.name]} layout={layout?.[subgroup.name]}
fiveColumns={fiveColumns} maxGroupColumns={maxGroupColumns}
disableCollapse={disableCollapse} disableCollapse={disableCollapse}
useEqualHeights={useEqualHeights} useEqualHeights={useEqualHeights}
groupsInitiallyCollapsed={groupsInitiallyCollapsed} groupsInitiallyCollapsed={groupsInitiallyCollapsed}

View file

@ -1,15 +1,15 @@
import classNames from "classnames"; import classNames from "classnames";
import ResolvedIcon from "components/resolvedicon";
import { useContext, useState } from "react"; import { useContext, useState } from "react";
import { SettingsContext } from "utils/contexts/settings";
import Docker from "widgets/docker/component"; import Docker from "widgets/docker/component";
import Kubernetes from "widgets/kubernetes/component"; import Kubernetes from "widgets/kubernetes/component";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
import Status from "./status"; import KubernetesStatus from "./kubernetes-status";
import Widget from "./widget";
import Ping from "./ping"; import Ping from "./ping";
import SiteMonitor from "./site-monitor"; import SiteMonitor from "./site-monitor";
import KubernetesStatus from "./kubernetes-status"; import Status from "./status";
import Widget from "./widget";
export default function Item({ service, groupName, useEqualHeights }) { export default function Item({ service, groupName, useEqualHeights }) {
const hasLink = service.href && service.href !== "#"; const hasLink = service.href && service.href !== "#";

View file

@ -1,5 +1,5 @@
import useSWR from "swr";
import { t } from "i18next"; import { t } from "i18next";
import useSWR from "swr";
export default function KubernetesStatus({ service, style }) { export default function KubernetesStatus({ service, style }) {
const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : ""; const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : "";

View file

@ -1,4 +1,4 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "next-i18next";
import useSWR from "swr"; import useSWR from "swr";
export default function Ping({ groupName, serviceName, style }) { export default function Ping({ groupName, serviceName, style }) {

View file

@ -1,4 +1,4 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "next-i18next";
import useSWR from "swr"; import useSWR from "swr";
export default function SiteMonitor({ groupName, serviceName, style }) { export default function SiteMonitor({ groupName, serviceName, style }) {

View file

@ -1,4 +1,4 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "next-i18next";
import useSWR from "swr"; import useSWR from "swr";
export default function Status({ service, style }) { export default function Status({ service, style }) {

View file

@ -1,5 +1,5 @@
import { useTranslation } from "next-i18next";
import ErrorBoundary from "components/errorboundry"; import ErrorBoundary from "components/errorboundry";
import { useTranslation } from "next-i18next";
import components from "widgets/components"; import components from "widgets/components";

View file

@ -1,5 +1,5 @@
import { useTranslation } from "next-i18next";
import classNames from "classnames"; import classNames from "classnames";
import { useTranslation } from "next-i18next";
export default function Block({ value, label }) { export default function Block({ value, label }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -3,6 +3,11 @@ import { SettingsContext } from "utils/contexts/settings";
import Error from "./error"; import Error from "./error";
const ALIASED_WIDGETS = {
pialert: "netalertx",
hoarder: "karakeep",
};
export default function Container({ error = false, children, service }) { export default function Container({ error = false, children, service }) {
const { settings } = useContext(SettingsContext); const { settings } = useContext(SettingsContext);
@ -32,7 +37,17 @@ export default function Container({ error = false, children, service }) {
if (!field.includes(".")) { if (!field.includes(".")) {
fullField = `${type}.${field}`; fullField = `${type}.${field}`;
} }
return fullField === child?.props?.label; let matches = fullField === child?.props?.label;
// check if the field is an 'alias'
if (matches) {
return true;
} else if (ALIASED_WIDGETS[type]) {
matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label;
return matches;
}
// no match
return false;
}), }),
); );
} }

View file

@ -1,4 +1,4 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "next-i18next";
import { IoAlertCircle } from "react-icons/io5"; import { IoAlertCircle } from "react-icons/io5";
function displayError(error) { function displayError(error) {

View file

@ -1,5 +1,5 @@
import { useContext } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { useContext } from "react";
import { TabContext } from "utils/contexts/tab"; import { TabContext } from "utils/contexts/tab";
function slugify(tabName) { function slugify(tabName) {

View file

@ -1,7 +1,7 @@
import { useContext, Fragment } from "react";
import { IoColorPalette } from "react-icons/io5";
import { Popover, Transition } from "@headlessui/react"; import { Popover, Transition } from "@headlessui/react";
import classNames from "classnames"; import classNames from "classnames";
import { Fragment, useContext } from "react";
import { IoColorPalette } from "react-icons/io5";
import { ColorContext } from "utils/contexts/color"; import { ColorContext } from "utils/contexts/color";
const colors = [ const colors = [

View file

@ -1,8 +1,8 @@
import { compareVersions, validate } from "compare-versions";
import cache from "memory-cache"; import cache from "memory-cache";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import useSWR from "swr";
import { compareVersions, validate } from "compare-versions";
import { MdNewReleases } from "react-icons/md"; import { MdNewReleases } from "react-icons/md";
import useSWR from "swr";
const LATEST_RELEASE_CACHE_KEY = "latestRelease"; const LATEST_RELEASE_CACHE_KEY = "latestRelease";

View file

@ -1,5 +1,5 @@
import { useState, useEffect } from "react";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useEffect, useState } from "react";
import Container from "../widget/container"; import Container from "../widget/container";
import Raw from "../widget/raw"; import Raw from "../widget/raw";

View file

@ -1,9 +1,9 @@
import useSWR from "swr"; import classNames from "classnames";
import { useTranslation } from "next-i18next";
import { useContext } from "react"; import { useContext } from "react";
import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa"; import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu, FiHardDrive } from "react-icons/fi"; import { FiCpu, FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next"; import useSWR from "swr";
import classNames from "classnames";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
import Error from "../widget/error"; import Error from "../widget/error";

View file

@ -1,8 +1,8 @@
import useSWR from "swr";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import useSWR from "swr";
import Error from "../widget/error";
import Container from "../widget/container"; import Container from "../widget/container";
import Error from "../widget/error";
import Raw from "../widget/raw"; import Raw from "../widget/raw";
import Node from "./node"; import Node from "./node";

View file

@ -1,7 +1,7 @@
import { useTranslation } from "next-i18next";
import { FaMemory } from "react-icons/fa"; import { FaMemory } from "react-icons/fa";
import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi"; import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi";
import { SiKubernetes } from "react-icons/si"; import { SiKubernetes } from "react-icons/si";
import { useTranslation } from "next-i18next";
import UsageBar from "../resources/usage-bar"; import UsageBar from "../resources/usage-bar";

View file

@ -1,7 +1,7 @@
import useSWR from "swr"; import useSWR from "swr";
import Error from "../widget/error";
import Container from "../widget/container"; import Container from "../widget/container";
import Error from "../widget/error";
import Raw from "../widget/raw"; import Raw from "../widget/raw";
import Node from "./node"; import Node from "./node";
@ -32,8 +32,8 @@ export default function Longhorn({ options }) {
<div className="flex flex-row self-center flex-wrap justify-between"> <div className="flex flex-row self-center flex-wrap justify-between">
{data.nodes {data.nodes
.filter((node) => { .filter((node) => {
if (node.id === "total" && total) { if (node.id === "total") {
return true; return total;
} }
if (!nodes) { if (!nodes) {
return false; return false;

View file

@ -1,16 +1,16 @@
import useSWR from "swr";
import { useState } from "react";
import { WiCloudDown } from "react-icons/wi";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { WiCloudDown } from "react-icons/wi";
import useSWR from "swr";
import Error from "../widget/error"; import mapIcon from "../../../utils/weather/openmeteo-condition-map";
import Container from "../widget/container"; import Container from "../widget/container";
import ContainerButton from "../widget/container_button"; import ContainerButton from "../widget/container_button";
import WidgetIcon from "../widget/widget_icon"; import Error from "../widget/error";
import PrimaryText from "../widget/primary_text"; import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text"; import SecondaryText from "../widget/secondary_text";
import mapIcon from "../../../utils/weather/openmeteo-condition-map"; import WidgetIcon from "../widget/widget_icon";
function Widget({ options }) { function Widget({ options }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -1,16 +1,16 @@
import useSWR from "swr";
import { useState } from "react";
import { WiCloudDown } from "react-icons/wi";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { WiCloudDown } from "react-icons/wi";
import useSWR from "swr";
import Error from "../widget/error"; import mapIcon from "../../../utils/weather/owm-condition-map";
import Container from "../widget/container"; import Container from "../widget/container";
import ContainerButton from "../widget/container_button"; import ContainerButton from "../widget/container_button";
import Error from "../widget/error";
import PrimaryText from "../widget/primary_text"; import PrimaryText from "../widget/primary_text";
import SecondaryText from "../widget/secondary_text"; import SecondaryText from "../widget/secondary_text";
import WidgetIcon from "../widget/widget_icon"; import WidgetIcon from "../widget/widget_icon";
import mapIcon from "../../../utils/weather/owm-condition-map";
function Widget({ options }) { function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FiCpu } from "react-icons/fi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FiCpu } from "react-icons/fi";
import useSWR from "swr";
import Resource from "../widget/resource";
import Error from "../widget/error"; import Error from "../widget/error";
import Resource from "../widget/resource";
export default function Cpu({ expanded, refresh = 1500 }) { export default function Cpu({ expanded, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();

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