Compare commits

..

28 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
347 changed files with 1825 additions and 1518 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

@ -1,9 +1,4 @@
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:
@ -28,43 +23,40 @@ on:
workflow_dispatch: 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:
@ -80,33 +72,6 @@ jobs:
- 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
@ -114,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
@ -128,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.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/di0ik/homepage-plus" LABEL org.opencontainers.image.url="https://github.com/di0ik/homepage-plus"
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/di0ik/homepage-plus' 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
RUN apk add --no-cache su-exec iputils-ping
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0 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://127.0.0.1:$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

@ -189,6 +189,7 @@ widget:
name: id # required, field in each item to use as the item name (left side) 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) 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 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 target: https://example.com/server/{id} # optional, makes items clickable with template support
``` ```

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)

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

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

@ -131,8 +131,8 @@ module.exports = {
? BIBIT_UNITS ? BIBIT_UNITS
: BIT_UNITS : BIT_UNITS
: options.binary : options.binary
? BIBYTE_UNITS ? BIBYTE_UNITS
: BYTE_UNITS; : BYTE_UNITS;
if (value === 0) return `0 ${sizes[0]}/s`; if (value === 0) return `0 ${sizes[0]}/s`;

View file

@ -1,6 +1,6 @@
{ {
"name": "homepage", "name": "homepage",
"version": "1.1.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.2", "minecraftstatuspinger": "^1.2.2",
"next": "^15.2.3", "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"

628
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -1024,7 +1024,7 @@
"bcharge": "Batterylading", "bcharge": "Batterylading",
"timeleft": "Oorblywende Tyd" "timeleft": "Oorblywende Tyd"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Boekmerke", "bookmarks": "Boekmerke",
"favorites": "Gunstelinge", "favorites": "Gunstelinge",
"archived": "Geargiveer", "archived": "Geargiveer",

View file

@ -1024,7 +1024,7 @@
"bcharge": "شحن البطارية", "bcharge": "شحن البطارية",
"timeleft": "الوقت المتبقي" "timeleft": "الوقت المتبقي"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

@ -394,7 +394,7 @@
"strelaysrv": { "strelaysrv": {
"numActiveSessions": "Сесии", "numActiveSessions": "Сесии",
"numConnections": "Connections", "numConnections": "Connections",
"dataRelayed": "Relayed", "dataRelayed": "",
"transferRate": "Скорост" "transferRate": "Скорост"
}, },
"mastodon": { "mastodon": {
@ -1002,7 +1002,7 @@
"argocd": { "argocd": {
"apps": "Приложения", "apps": "Приложения",
"synced": "Synced", "synced": "Synced",
"outOfSync": "Out Of Sync", "outOfSync": "",
"healthy": "Здрав", "healthy": "Здрав",
"degraded": "Деградирани", "degraded": "Деградирани",
"progressing": "Progressing", "progressing": "Progressing",
@ -1024,7 +1024,7 @@
"bcharge": "Заряд на батерията", "bcharge": "Заряд на батерията",
"timeleft": "Оставащо Време" "timeleft": "Оставащо Време"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

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

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,95 +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": "Repositories" "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": "",
@ -928,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",
@ -939,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",
@ -986,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",
@ -997,50 +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": { "slskd": {
"slskStatus": "Network", "slskStatus": "Síť",
"connected": "", "connected": "",
"disconnected": "Odpojeno", "disconnected": "Odpojeno",
"updateStatus": "Update", "updateStatus": "Aktualizace",
"update_yes": "Dostupné", "update_yes": "Dostupné",
"update_no": "Žádné", "update_no": "Žádné",
"downloads": "Downloads", "downloads": "Stažení",
"uploads": "Uploads", "uploads": "Nahrávání",
"sharedFiles": "Soubory" "sharedFiles": "Soubory"
} }
} }

View file

@ -1024,7 +1024,7 @@
"bcharge": "Batteriniveau", "bcharge": "Batteriniveau",
"timeleft": "Resterende tid" "timeleft": "Resterende tid"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

@ -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",
@ -1024,12 +1024,12 @@
"bcharge": "Akkuladung", "bcharge": "Akkuladung",
"timeleft": "Verbleibende Zeit" "timeleft": "Verbleibende Zeit"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Lesezeichen", "bookmarks": "Bookmarks",
"favorites": "Favoriten", "favorites": "Favorites",
"archived": "Archiviert", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Listen", "lists": "Lists",
"tags": "Schlagwörter" "tags": "Schlagwörter"
}, },
"slskd": { "slskd": {

View file

@ -1024,7 +1024,7 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Χρόνος που απομένει" "timeleft": "Χρόνος που απομένει"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

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

View file

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

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",
@ -886,7 +886,7 @@
"notifications": "Notificaciones", "notifications": "Notificaciones",
"issues": "Números", "issues": "Números",
"pulls": "Solicitudes de cambios", "pulls": "Solicitudes de cambios",
"repositories": "Repositories" "repositories": "Repositorios"
}, },
"stash": { "stash": {
"scenes": "Escenas", "scenes": "Escenas",
@ -1024,7 +1024,7 @@
"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",
@ -1036,11 +1036,11 @@
"slskStatus": "Red", "slskStatus": "Red",
"connected": "Conectado", "connected": "Conectado",
"disconnected": "Desconectado", "disconnected": "Desconectado",
"updateStatus": "Update", "updateStatus": "Actualización",
"update_yes": "Disponible", "update_yes": "Disponible",
"update_no": "Actualizado", "update_no": "Actualizado",
"downloads": "Downloads", "downloads": "Descargas",
"uploads": "Uploads", "uploads": "Subidas",
"sharedFiles": "Archivos" "sharedFiles": "Archivos"
} }
} }

View file

@ -1024,12 +1024,12 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "Time Left" "timeleft": "Time Left"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Laster-markak", "bookmarks": "Bookmarks",
"favorites": "Gogokoak", "favorites": "Favorites",
"archived": "Artxibatuta", "archived": "Archived",
"highlights": "Highlights", "highlights": "Highlights",
"lists": "Zerrendak", "lists": "Lists",
"tags": "Etiketak" "tags": "Etiketak"
}, },
"slskd": { "slskd": {

View file

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

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,10 +142,10 @@
"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",
@ -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": {
@ -886,7 +886,7 @@
"notifications": "Notifications", "notifications": "Notifications",
"issues": "Anomalies", "issues": "Anomalies",
"pulls": "Demandes de tirage", "pulls": "Demandes de tirage",
"repositories": "Repositories" "repositories": "Dépôts"
}, },
"stash": { "stash": {
"scenes": "Scènes", "scenes": "Scènes",
@ -988,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",
@ -1024,7 +1024,7 @@
"bcharge": "Charge de la batterie", "bcharge": "Charge de la batterie",
"timeleft": "Temps restant" "timeleft": "Temps restant"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Marque-pages", "bookmarks": "Marque-pages",
"favorites": "Favoris", "favorites": "Favoris",
"archived": "Archivé", "archived": "Archivé",

View file

@ -1024,7 +1024,7 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "זמן שנותר" "timeleft": "זמן שנותר"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

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

View file

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

View file

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

View file

@ -1024,12 +1024,12 @@
"bcharge": "Sisa Baterai", "bcharge": "Sisa Baterai",
"timeleft": "Sisa Waktu" "timeleft": "Sisa Waktu"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Markah", "bookmarks": "Bookmarks",
"favorites": "Favorit", "favorites": "Favorites",
"archived": "Diarsipkan", "archived": "Archived",
"highlights": "Sorotan", "highlights": "Highlights",
"lists": "Daftar", "lists": "Lists",
"tags": "Tag" "tags": "Tag"
}, },
"slskd": { "slskd": {

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",
@ -943,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",
@ -959,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"
}, },
@ -987,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",
@ -996,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"
@ -1013,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",
@ -1024,12 +1024,12 @@
"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": { "slskd": {
@ -1039,7 +1039,7 @@
"updateStatus": "Update", "updateStatus": "Update",
"update_yes": "Disponibili", "update_yes": "Disponibili",
"update_no": "Aggiornato", "update_no": "Aggiornato",
"downloads": "Downloads", "downloads": "Download",
"uploads": "Uploads", "uploads": "Uploads",
"sharedFiles": "File" "sharedFiles": "File"
} }

View file

@ -1024,7 +1024,7 @@
"bcharge": "バッテリー充電", "bcharge": "バッテリー充電",
"timeleft": "残り時間" "timeleft": "残り時間"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

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",
@ -906,7 +906,7 @@
}, },
"tandoor": { "tandoor": {
"users": "사용자", "users": "사용자",
"recipes": "Recipes", "recipes": "레시피",
"keywords": "키워드" "keywords": "키워드"
}, },
"homebox": { "homebox": {
@ -947,7 +947,7 @@
}, },
"frigate": { "frigate": {
"cameras": "카메라", "cameras": "카메라",
"uptime": "Uptime", "uptime": "가동 시간",
"version": "버전" "version": "버전"
}, },
"linkwarden": { "linkwarden": {
@ -1024,7 +1024,7 @@
"bcharge": "배터리 충전 중", "bcharge": "배터리 충전 중",
"timeleft": "남은 시간" "timeleft": "남은 시간"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

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

View file

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

View file

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

View file

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

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",
@ -886,7 +886,7 @@
"notifications": "Powiadomienia", "notifications": "Powiadomienia",
"issues": "Zgłoszenia", "issues": "Zgłoszenia",
"pulls": "Żądania Pull", "pulls": "Żądania Pull",
"repositories": "Repositories" "repositories": "Repozytoria"
}, },
"stash": { "stash": {
"scenes": "Sceny", "scenes": "Sceny",
@ -1024,12 +1024,12 @@
"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": { "slskd": {

View file

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

View file

@ -886,7 +886,7 @@
"notifications": "Notificações", "notifications": "Notificações",
"issues": "Problemas", "issues": "Problemas",
"pulls": "Solicitações de Envio", "pulls": "Solicitações de Envio",
"repositories": "Repositories" "repositories": "Repositórios"
}, },
"stash": { "stash": {
"scenes": "Cenas", "scenes": "Cenas",
@ -1024,8 +1024,8 @@
"bcharge": "Carga da bateria", "bcharge": "Carga da bateria",
"timeleft": "Tempo restante" "timeleft": "Tempo restante"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Favoritos", "bookmarks": "Marcadores",
"favorites": "Favoritos", "favorites": "Favoritos",
"archived": "Arquivados", "archived": "Arquivados",
"highlights": "Destaques", "highlights": "Destaques",
@ -1036,7 +1036,7 @@
"slskStatus": "Rede", "slskStatus": "Rede",
"connected": "Conectado", "connected": "Conectado",
"disconnected": "Desconectado", "disconnected": "Desconectado",
"updateStatus": "Update", "updateStatus": "Atualize",
"update_yes": "Disponível", "update_yes": "Disponível",
"update_no": "Atualizado", "update_no": "Atualizado",
"downloads": "Transferências", "downloads": "Transferências",

View file

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

View file

@ -886,7 +886,7 @@
"notifications": "Уведомления", "notifications": "Уведомления",
"issues": "Вопросы", "issues": "Вопросы",
"pulls": "Запросы на слияние (Pull Request)", "pulls": "Запросы на слияние (Pull Request)",
"repositories": "Repositories" "repositories": "Репозитории"
}, },
"stash": { "stash": {
"scenes": "Сцены", "scenes": "Сцены",
@ -1024,10 +1024,10 @@
"bcharge": "Заряд батареи", "bcharge": "Заряд батареи",
"timeleft": "Осталось" "timeleft": "Осталось"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Закладки", "bookmarks": "Закладки",
"favorites": "Избранное", "favorites": "Избранное",
"archived": "Архивированное", "archived": "Архив",
"highlights": "События", "highlights": "События",
"lists": "Список", "lists": "Список",
"tags": "Теги" "tags": "Теги"

View file

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

View file

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

View file

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

View file

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

View file

@ -1024,7 +1024,7 @@
"bcharge": "Battery Charge", "bcharge": "Battery Charge",
"timeleft": "మిగిలి వున్న సమయం" "timeleft": "మిగిలి వున్న సమయం"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

View file

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

View file

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

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": {
@ -886,7 +886,7 @@
"notifications": "Сповіщення", "notifications": "Сповіщення",
"issues": "Питання", "issues": "Питання",
"pulls": "Pull-запити", "pulls": "Pull-запити",
"repositories": "Repositories" "repositories": "Репозиторії"
}, },
"stash": { "stash": {
"scenes": "Сцени", "scenes": "Сцени",
@ -1024,23 +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": { "slskd": {
"slskStatus": "Мережа", "slskStatus": "Мережа",
"connected": "З'єднано", "connected": "З'єднано",
"disconnected": "Відключено", "disconnected": "Відключено",
"updateStatus": "Update", "updateStatus": "Оновити",
"update_yes": "Доступно", "update_yes": "Доступно",
"update_no": "Актуально", "update_no": "Актуально",
"downloads": "Downloads", "downloads": "Завантаження",
"uploads": "Uploads", "uploads": "Вивантаження",
"sharedFiles": "Файли" "sharedFiles": "Файли"
} }
} }

View file

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

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": {
@ -886,7 +886,7 @@
"notifications": "信息", "notifications": "信息",
"issues": "出版", "issues": "出版",
"pulls": "提取請求", "pulls": "提取請求",
"repositories": "Repositories" "repositories": "套件來源"
}, },
"stash": { "stash": {
"scenes": "場景", "scenes": "場景",
@ -922,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": "延遲",
@ -939,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": "名稱",
@ -987,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "系統",
"up": "在線", "up": "在線",
"down": "離線", "down": "離線",
"paused": "擱置中", "paused": "擱置中",
@ -996,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": "狀況",
@ -1024,23 +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": { "slskd": {
"slskStatus": "網絡", "slskStatus": "網絡",
"connected": "Connected", "connected": "已連線",
"disconnected": "連接已中斷", "disconnected": "連接已中斷",
"updateStatus": "Update", "updateStatus": "更新",
"update_yes": "可用", "update_yes": "可用",
"update_no": "已更新至最新", "update_no": "已更新至最新",
"downloads": "Downloads", "downloads": "下載",
"uploads": "Uploads", "uploads": "上傳",
"sharedFiles": "檔案" "sharedFiles": "檔案"
} }
} }

View file

@ -1024,7 +1024,7 @@
"bcharge": "充电中", "bcharge": "充电中",
"timeleft": "剩余时间" "timeleft": "剩余时间"
}, },
"hoarder": { "karakeep": {
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"favorites": "Favorites", "favorites": "Favorites",
"archived": "Archived", "archived": "Archived",

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": {
@ -886,7 +886,7 @@
"notifications": "信息", "notifications": "信息",
"issues": "出版", "issues": "出版",
"pulls": "提取請求", "pulls": "提取請求",
"repositories": "Repositories" "repositories": "套件來源"
}, },
"stash": { "stash": {
"scenes": "場景", "scenes": "場景",
@ -922,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": "延遲",
@ -939,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": "名稱",
@ -987,7 +987,7 @@
}, },
"beszel": { "beszel": {
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "系統",
"up": "在線", "up": "在線",
"down": "離線", "down": "離線",
"paused": "擱置中", "paused": "擱置中",
@ -996,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": "狀態",
@ -1024,23 +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": { "slskd": {
"slskStatus": "網絡", "slskStatus": "網絡",
"connected": "Connected", "connected": "已連線",
"disconnected": "連接已中斷", "disconnected": "連接已中斷",
"updateStatus": "Update", "updateStatus": "更新",
"update_yes": "可觀看", "update_yes": "可觀看",
"update_no": "已更新至最新", "update_no": "已更新至最新",
"downloads": "Downloads", "downloads": "下載",
"uploads": "Uploads", "uploads": "上傳",
"sharedFiles": "檔案" "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,

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;

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";
@ -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,9 +1,9 @@
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";

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();

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FaThermometerHalf } from "react-icons/fa";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FaThermometerHalf } from "react-icons/fa";
import useSWR from "swr";
import Resource from "../widget/resource";
import Error from "../widget/error"; import Error from "../widget/error";
import Resource from "../widget/resource";
function convertToFahrenheit(t) { function convertToFahrenheit(t) {
return (t * 9) / 5 + 32; return (t * 9) / 5 + 32;

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FiHardDrive } 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 Disk({ options, expanded, diskUnits, refresh = 1500 }) { export default function Disk({ options, expanded, diskUnits, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FaMemory } from "react-icons/fa";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FaMemory } from "react-icons/fa";
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 Memory({ expanded, refresh = 1500 }) { export default function Memory({ expanded, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FaNetworkWired } from "react-icons/fa";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FaNetworkWired } from "react-icons/fa";
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 Network({ options, refresh = 1500 }) { export default function Network({ options, refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -1,12 +1,12 @@
import Container from "../widget/container"; import Container from "../widget/container";
import Raw from "../widget/raw"; import Raw from "../widget/raw";
import Disk from "./disk";
import Cpu from "./cpu"; import Cpu from "./cpu";
import Memory from "./memory";
import CpuTemp from "./cputemp"; import CpuTemp from "./cputemp";
import Uptime from "./uptime"; import Disk from "./disk";
import Memory from "./memory";
import Network from "./network"; import Network from "./network";
import Uptime from "./uptime";
export default function Resources({ options }) { export default function Resources({ options }) {
const { expanded, units, diskUnits, tempmin, tempmax } = options; const { expanded, units, diskUnits, tempmin, tempmax } = options;

View file

@ -1,9 +1,9 @@
import useSWR from "swr";
import { FaRegClock } from "react-icons/fa";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { FaRegClock } from "react-icons/fa";
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 Uptime({ refresh = 1500 }) { export default function Uptime({ refresh = 1500 }) {
const { t } = useTranslation(); const { t } = useTranslation();

View file

@ -1,10 +1,10 @@
import { useState, useEffect, Fragment } from "react"; import { Combobox, Listbox, Transition } from "@headlessui/react";
import { useTranslation } from "next-i18next";
import { FiSearch } from "react-icons/fi";
import { SiDuckduckgo, SiGoogle, SiBaidu, SiBrave } from "react-icons/si";
import { BiLogoBing } from "react-icons/bi";
import { Listbox, Transition, Combobox } from "@headlessui/react";
import classNames from "classnames"; import classNames from "classnames";
import { useTranslation } from "next-i18next";
import { Fragment, useEffect, useState } from "react";
import { BiLogoBing } from "react-icons/bi";
import { FiSearch } from "react-icons/fi";
import { SiBaidu, SiBrave, SiDuckduckgo, SiGoogle } from "react-icons/si";
import ContainerForm from "../widget/container_form"; import ContainerForm from "../widget/container_form";
import Raw from "../widget/raw"; import Raw from "../widget/raw";

View file

@ -1,13 +1,13 @@
import useSWR from "swr";
import { useState } from "react";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react";
import { FaChartLine } from "react-icons/fa6"; import { FaChartLine } from "react-icons/fa6";
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 PrimaryText from "../widget/primary_text"; import PrimaryText from "../widget/primary_text";
import WidgetIcon from "../widget/widget_icon";
import Raw from "../widget/raw"; import Raw from "../widget/raw";
import WidgetIcon from "../widget/widget_icon";
export default function Widget({ options }) { export default function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();

View file

@ -1,13 +1,13 @@
import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi";
import { MdSettingsEthernet } from "react-icons/md";
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { BiCheckCircle, BiError, BiNetworkChart, BiWifi, BiXCircle } from "react-icons/bi";
import { MdSettingsEthernet } from "react-icons/md";
import { SiUbiquiti } from "react-icons/si"; import { SiUbiquiti } from "react-icons/si";
import Error from "../widget/error";
import Container from "../widget/container"; import Container from "../widget/container";
import Error from "../widget/error";
import PrimaryText from "../widget/primary_text";
import Raw from "../widget/raw"; import Raw from "../widget/raw";
import WidgetIcon from "../widget/widget_icon"; import WidgetIcon from "../widget/widget_icon";
import PrimaryText from "../widget/primary_text";
import useWidgetAPI from "utils/proxy/use-widget-api"; import useWidgetAPI from "utils/proxy/use-widget-api";

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/condition-map";
import Container from "../widget/container"; import Container from "../widget/container";
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 ContainerButton from "../widget/container_button";
import mapIcon from "../../../utils/weather/condition-map";
function Widget({ options }) { function Widget({ options }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();

View file

@ -1,5 +1,5 @@
import dynamic from "next/dynamic";
import ErrorBoundary from "components/errorboundry"; import ErrorBoundary from "components/errorboundry";
import dynamic from "next/dynamic";
const widgetMappings = { const widgetMappings = {
weatherapi: dynamic(() => import("components/widgets/weather/weather")), weatherapi: dynamic(() => import("components/widgets/weather/weather")),

View file

@ -2,10 +2,10 @@ import classNames from "classnames";
import { useContext } from "react"; import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings"; import { SettingsContext } from "utils/contexts/settings";
import WidgetIcon from "./widget_icon";
import PrimaryText from "./primary_text"; import PrimaryText from "./primary_text";
import SecondaryText from "./secondary_text";
import Raw from "./raw"; import Raw from "./raw";
import SecondaryText from "./secondary_text";
import WidgetIcon from "./widget_icon";
export function getAllClasses(options, additionalClassNames = "") { export function getAllClasses(options, additionalClassNames = "") {
if (options?.style?.header === "boxedWidgets") { if (options?.style?.header === "boxedWidgets") {

View file

@ -1,4 +1,4 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerButton({ children = [], options, additionalClassNames = "", callback }) { export default function ContainerButton({ children = [], options, additionalClassNames = "", callback }) {
return ( return (

View file

@ -1,4 +1,4 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) { export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) {
return ( return (

View file

@ -1,4 +1,4 @@
import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; import { getAllClasses, getBottomBlock, getInnerBlock } from "./container";
export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) { export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) {
return ( return (

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