Merge branch 'dev'

This commit is contained in:
shamoon 2025-03-14 09:00:16 -07:00
commit 3ff61cfad6
No known key found for this signature in database
290 changed files with 4833 additions and 12555 deletions

View File

@ -1,3 +0,0 @@
{
"presets": ["next/babel"]
}

View File

@ -1,5 +1,9 @@
{
"extends": ["airbnb", "next/core-web-vitals", "prettier"],
"extends": [
"next/core-web-vitals",
"prettier",
"plugin:react-hooks/recommended"
],
"plugins": ["prettier"],
"rules": {
"import/no-cycle": [
@ -27,5 +31,12 @@
"paths": ["src"]
}
}
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"modules": true
}
}
}

View File

@ -51,7 +51,7 @@ body:
id: troubleshooting
attributes:
label: Troubleshooting
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
description: Please include output from your [troubleshooting steps](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
validations:
required: true
- type: markdown

View File

@ -46,6 +46,24 @@ jobs:
-
name: Check files
uses: pre-commit/action@v3.0.1
-
name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
-
name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
-
name: Install dependencies
run: pnpm install
-
name: Lint frontend
run: pnpm run lint
build:
name: Docker Build & Push
@ -64,26 +82,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
# Setup QEMU
# https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
# Workaround: https://github.com/docker/build-push-action/issues/461
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
# This step is being disabled because the runner is on a self-hosted machine
# where the cache will stick between runs.
# - name: Cache Docker layers
# uses: actions/cache@v3
# with:
# path: /tmp/.buildx-cache
# key: ${{ runner.os }}-buildx-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-buildx-
# Login against a Docker registry except on PR
# Login to Docker Registry
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
@ -99,6 +98,15 @@ jobs:
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
@ -127,7 +135,7 @@ jobs:
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,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max

View File

@ -5,8 +5,6 @@ on:
types: [created, edited]
pull_request_review_comment:
types: [created, edited]
schedule:
- cron: '0 0 * * *'
permissions:
actions: write

View File

@ -1,7 +1,5 @@
# syntax = docker/dockerfile:latest
# Install dependencies only when needed
FROM docker.io/node:18-alpine AS deps
FROM docker.io/node:22-alpine AS deps
WORKDIR /app
@ -17,9 +15,11 @@ RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm f
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:18-alpine AS builder
FROM docker.io/node:22-alpine AS builder
WORKDIR /app
RUN mkdir config
ARG BUILDTIME
ARG VERSION
ARG REVISION
@ -28,12 +28,12 @@ COPY --link --from=deps /app/node_modules ./node_modules/
COPY . .
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN npm run telemetry \
&& mkdir config \
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
RUN npm install -g pnpm \
&& pnpm run telemetry \
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build
# Production image, copy all the files and run next
FROM docker.io/node:18-alpine AS runner
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/gethomepage/homepage"
@ -41,7 +41,7 @@ LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/hom
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
LABEL org.opencontainers.image.licenses='Apache-2.0'
ENV NODE_ENV production
ENV NODE_ENV=production
WORKDIR /app
@ -56,7 +56,8 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
RUN apk add --no-cache su-exec
ENV PORT 3000
ENV HOSTNAME=::
ENV PORT=3000
EXPOSE $PORT
HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \

View File

@ -10,7 +10,7 @@ RUN <<EOF
apk add libc6-compat
apk add --virtual .gyp python3 make g++
npm install -g pnpm
npm install -g next
pnpm install -g next
EOF
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"

View File

@ -38,7 +38,7 @@ With features like quick search, bookmarks, weather support, a wide range of int
- **Fast** - The site is statically generated at build time for instant load times.
- **Secure** - All API requests to backend services are proxied, keeping your API keys hidden. Constantly reviewed for security by the community.
- **For Everyone** - Images built for AMD64, ARM64, ARMv7, and ARMv6.
- **For Everyone** - Images built for AMD64, ARM64.
- **Full i18n** - Support for over 40 languages.
- **Service & Web Bookmarks** - Add custom links to the homepage.
- **Docker Integration** - Container status and stats. Automatic service discovery via labels.
@ -111,7 +111,7 @@ First, clone the repository:
git clone https://github.com/gethomepage/homepage.git
```
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
Then install dependencies and build the production bundle:
```bash
pnpm install

View File

@ -8,6 +8,7 @@ The Kubernetes connectivity has the following requirements:
- Kubernetes 1.19+
- Metrics Service
- An Ingress controller
- Optionally: Gateway-API
The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from:
@ -19,6 +20,22 @@ The Kubernetes connection is configured in the `kubernetes.yaml` file. There are
mode: default
```
To configure Kubernetes gateway-api, ingress or ingressRoute service discovery, add one or multiple of the following settings.
Example settings:
```yaml
ingress: true # enable ingress only
```
or
```yaml
ingress: true # enable ingress
traefik: true # enable traefik ingressRoute
gateway: true # enable gateway-api
```
## Services
Once the Kubernetes connection is configured, individual services can be configured to pull statistics. Only CPU and Memory are currently supported.
@ -142,6 +159,10 @@ spec:
If the `href` attribute is not present, Homepage will ignore the specific IngressRoute.
### Gateway API HttpRoute support
Homepage also features automatic service discovery for Gateway API. Service definitions are read by annotating the HttpRoute custom resource definition and are indentical to the Ingress example as defined in [Automatic Service Discovery](#automatic-service-discovery).
## Caveats
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.

View File

@ -447,7 +447,7 @@ quicklaunch:
suggestionUrl: https://ac.ecosia.org/autocomplete?type=list&q=
```
## Homepage Version
## Homepage Version & Update Checking
By default the release version is displayed at the bottom of the page. To hide this, use the `hideVersion` setting, like so:
@ -455,6 +455,12 @@ By default the release version is displayed at the bottom of the page. To hide t
hideVersion: true
```
You can disable checking for new versions from GitHub (enabled by default) with:
```yaml
disableUpdateCheck: true
```
## Log Path
By default the homepage logfile is written to the a `logs` subdirectory of the `config` folder. In order to customize this path, you can set the `logpath` setting. A `logs` folder will be created in that location where the logfile will be written.

View File

@ -15,6 +15,8 @@ services:
volumes:
- /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL
```
### Running as non-root
@ -36,6 +38,7 @@ services:
- /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL
PUID: $PUID
PGID: $PGID
```
@ -43,7 +46,7 @@ services:
### With Docker Run
```bash
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
```
### Using Environment Secrets

View File

@ -4,11 +4,9 @@ description: Docs intro
icon: simple/docker
---
<p>
You have a few options for deploying homepage, depending on your needs. We offer docker images for a majority of platforms. You can also install and run homepage from source if Docker is not your thing. It can even be installed on Kubernetes with Helm.
</p>
!!! warning
!!! info
Please note that when using features such as widgets, Homepage can access personal information (for example from your home automation system) and Homepage currently does not (and is not planned to) include any authentication layer itself. Thus, we recommend homepage be deployed behind a reverse proxy including authentication, SSL etc, and / or behind a VPN.
@ -28,3 +26,7 @@ You have a few options for deploying homepage, depending on your needs. We offer
{ .card }
</div>
### `HOMEPAGE_ALLOWED_HOSTS`
As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples.

View File

@ -216,6 +216,14 @@ rules:
verbs:
- get
- list
- apiGroups:
- gateway.networking.k8s.io
resources:
- httproutes
- gateways
verbs:
- get
- list
- apiGroups:
- metrics.k8s.io
resources:

View File

@ -21,7 +21,7 @@ If this is your first time starting, copy the `src/skeleton` directory to `confi
Finally, run the server:
```bash
pnpm start
HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev pnpm start
```
When updating homepage versions you will need to re-build the static files i.e. repeat the process above.

View File

@ -15,9 +15,9 @@ hide:
## Service Widget Errors
All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to try:
All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to check:
1. **URLs should not end with a / or other API path. Each widget will handle the path on its own.**. Including a trailing slash can result in an error.
1. URLs should not end with a / or other API path. Each widget will handle the path on its own.
2. All services with a widget require a unique name.

View File

@ -22,9 +22,8 @@ An optional 'site' parameter can be supplied, if it is not the widget will use t
```yaml
- unifi_console:
url: https://unifi.host.or.ip:port
site: Site Name # optional
username: user
password: pass
site: Site Name # optional
key: unifiapikey # required if using API key instead of username/password
```
_Added in v0.4.18, updated in 0.6.7_

View File

@ -0,0 +1,16 @@
---
title: APC UPS Monitoring
description: Lightweight monitoring widget for APC UPSs using apcupsd daemon
---
This widget extracts UPS information from an apcupsd daemon.
Only works for [APC/Schneider](https://www.se.com/us/en/product-range/61915-smartups/#products) UPS products.
[!NOTE]
By default apcupsd daemon is bound to 127.0.0.1. Edit `/etc/apcupsd.conf` and change `NISIP` to an IP accessible from your homepage docker (usually your internal LAN interface).
```yaml
widget:
type: apcups
url: tcp://your.acpupsd.host:3551
```

View File

@ -0,0 +1,17 @@
---
title: Firefly III
description: Firefly III Widget Configuration
---
Learn more about [Firefly III](https://www.firefly-iii.org/).
Find your API key under `Options > Profile > OAuth > Personal Access Tokens`.
Allowed fields: `["networth" ,"budget"]`.
```yaml
widget:
type: firefly
url: https://firefly.host.or.ip
key: personalaccesstoken.personalaccesstoken.personalaccesstoken
```

View File

@ -13,7 +13,7 @@ Home Network > Network > Network Settings > Access Settings in the Home Network
Credentials are not needed and, as such, you may want to consider using `http` instead of `https` as those requests are significantly faster.
Allowed fields (limited to a max of 4): `["connectionStatus", "uptime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress"]`.
Allowed fields (limited to a max of 4): `["connectionStatus", "uptime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress", "externalIPv6Address", "externalIPv6Prefix"]`.
```yaml
widget:

View File

@ -0,0 +1,17 @@
---
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

@ -8,6 +8,7 @@ search:
You can also find a list of all available service widgets in the sidebar navigation.
- [Adguard Home](adguard-home.md)
- [APC UPS](apcups.md)
- [ArgoCD](argocd.md)
- [Atsumeru](atsumeru.md)
- [Audiobookshelf](audiobookshelf.md)
@ -33,6 +34,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [ESPHome](esphome.md)
- [EVCC](evcc.md)
- [Fileflows](fileflows.md)
- [Firefly III](firefly.md)
- [Flood](flood.md)
- [FreshRSS](freshrss.md)
- [Frigate](frigate.md)
@ -49,6 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [HDHomeRun](hdhomerun.md)
- [Headscale](headscale.md)
- [Healthchecks](healthchecks.md)
- [Hoarder](hoarder.md)
- [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md)
- [Homebridge](homebridge.md)

View File

@ -15,4 +15,5 @@ widget:
url: http://kavita.host.or.ip:port
username: username
password: password
key: kavitaapikey # Optional, e.g. if not using username and password
```

View File

@ -9,6 +9,11 @@ Uses the same username and password used to login from the web.
Allowed fields: `["libraries", "series", "books"]`.
| Komga API Version | Homepage Widget Version |
| ----------------- | ----------------------- |
| < v2 | 1 (default) |
| >= v2 | 2 |
```yaml
widget:
type: komga

View File

@ -20,4 +20,6 @@ widget:
type: peanut
url: http://peanut.host.or.ip:port
key: nameofyourups
username: username # only needed if set
password: password # only needed if set
```

View File

@ -10,7 +10,5 @@ If more than (4) fields are provided, only the first (4) will be used.
widget:
type: romm
url: http://romm.host.or.ip
username: username # optional
password: password # optional
fields: ["platforms", "totalRoms", "saves", "states"] # optional - default fields shown
```

View File

@ -8,7 +8,12 @@ Learn more about [Speedtest Tracker](https://github.com/alexjustesen/speedtest-t
No extra configuration is required.
This widget is compatible with both [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker) and [henrywhitaker3/Speedtest-Tracker](https://github.com/henrywhitaker3/Speedtest-Tracker).
Version 1 of the widget is compatible with both [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker) and [henrywhitaker3/Speedtest-Tracker](https://github.com/henrywhitaker3/Speedtest-Tracker), while version 2 is only compatible with [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker).
| Speedtest Version (AJ) | Speedtest Version (HW) | Homepage Widget Version |
| ---------------------- | ---------------------- | ----------------------- |
| < 1.2.1 | 1.12.0 | 1 (default) |
| >= 1.2.1 | N/A | 2 |
Allowed fields: `["download", "upload", "ping"]`.
@ -16,5 +21,7 @@ Allowed fields: `["download", "upload", "ping"]`.
widget:
type: speedtest
url: http://speedtest.host.or.ip
version: 1 # optional, default is 1
key: speedtestapikey # required for version 2
bitratePrecision: 3 # optional, default is 0
```

View File

@ -19,15 +19,14 @@ Allowed fields: `["uptime", "wan", "lan", "lan_users", "lan_devices", "wlan", "w
!!! hint
If you enter e.g. incorrect credentials and receive an "API Error", you may need to recreate the container to clear the cache.
If you enter e.g. incorrect credentials and receive an "API Error", you may need to recreate the container or restart the service to clear the cache.
```yaml
widget:
type: unifi
url: https://unifi.host.or.ip:port
username: username
password: password
site: Site Name # optional
username: user
password: pass
key: unifiapikey # required if using API key instead of username/password
```
_Added in v0.4.18, updated in 0.6.7_

View File

@ -23,6 +23,12 @@ Set the `mode` in the `kubernetes.yaml` to `cluster`.
mode: default
```
To enable Kubernetes gateway-api compatibility, set `route` to `gateway`.
```yaml
route: gateway
```
## Widgets
The Kubernetes widget can show a high-level overview of the cluster,

View File

@ -31,6 +31,7 @@ nav:
- "Service Widgets":
- widgets/services/index.md
- widgets/services/adguard-home.md
- widgets/services/apcups.md
- widgets/services/argocd.md
- widgets/services/atsumeru.md
- widgets/services/audiobookshelf.md
@ -56,6 +57,7 @@ nav:
- widgets/services/esphome.md
- widgets/services/evcc.md
- widgets/services/fileflows.md
- widgets/services/firefly.md
- widgets/services/flood.md
- widgets/services/freshrss.md
- widgets/services/frigate.md
@ -72,6 +74,7 @@ nav:
- widgets/services/hdhomerun.md
- widgets/services/headscale.md
- widgets/services/healthchecks.md
- widgets/services/hoarder.md
- widgets/services/homeassistant.md
- widgets/services/homebox.md
- widgets/services/homebridge.md

8768
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,9 @@
{
"name": "homepage",
"version": "0.9.6",
"version": "0.10.9",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
"dev": "next dev",
"build": "next build",
"start": "next start",
@ -10,55 +11,54 @@
"telemetry": "next telemetry disable"
},
"dependencies": {
"@headlessui/react": "^1.7.18",
"@kubernetes/client-node": "^0.17.1",
"@headlessui/react": "^1.7.19",
"@kubernetes/client-node": "^1.0.0",
"cal-parser": "^1.0.2",
"classnames": "^2.5.1",
"compare-versions": "^6.1.0",
"dockerode": "^4.0.2",
"compare-versions": "^6.1.1",
"dockerode": "^4.0.4",
"follow-redirects": "^1.15.9",
"gamedig": "^5.1.4",
"gamedig": "^5.2.0",
"i18next": "^21.10.0",
"js-yaml": "^4.1.0",
"json-rpc-2.0": "^1.7.0",
"luxon": "^3.5.0",
"memory-cache": "^0.2.0",
"minecraft-ping-js": "^1.0.2",
"next": "^12.3.4",
"minecraftstatuspinger": "^1.2.1",
"next": "^15.1.7",
"next-i18next": "^12.1.0",
"ping": "^0.4.4",
"pretty-bytes": "^6.1.1",
"raw-body": "^3.0.0",
"react": "^18.3.1",
"react-dom": "^18.2.0",
"react-dom": "^18.3.1",
"react-i18next": "^11.18.6",
"react-icons": "^5.4.0",
"recharts": "^2.12.6",
"recharts": "^2.15.1",
"rrule": "^2.8.1",
"swr": "^1.3.0",
"systeminformation": "^5.24.3",
"tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.52.1",
"winston": "^3.11.0",
"systeminformation": "^5.25.11",
"tough-cookie": "^5.1.2",
"urbackup-server-api": "^0.8.9",
"winston": "^3.17.0",
"xml-js": "^1.6.11"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.8",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.0.9",
"eslint": "^9.21.0",
"eslint-config-next": "^15.1.7",
"eslint-config-prettier": "^10.0.2",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^4.6.2",
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.17",
"typescript": "^5.6.3"
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-react": "^7.37.4",
"eslint-plugin-react-hooks": "^5.1.0",
"postcss": "^8.5.2",
"prettier": "^3.5.2",
"tailwind-scrollbar": "^4.0.1",
"tailwindcss": "^4.0.9",
"typescript": "^5.7.3"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"

4292
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,5 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
"@tailwindcss/postcss": {},
},
};

View File

@ -148,7 +148,9 @@
"up": "Op",
"received": "Ontvang",
"sent": "Gestuur",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Voorvoegsel"
},
"caddy": {
"upstreams": "Stroomop",
@ -176,7 +178,7 @@
"connectedAp": "Gekoppelde APs",
"activeUser": "Aktiewe toestelle",
"alerts": "Waarskuwings",
"connectedGateway": "Gekoppelde poorte",
"connectedGateways": "Gekoppelde poorte",
"connectedSwitches": "Gekoppelde skakelaars"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Verwerk",
"time": "Tyd"
},
"firefly": {
"networth": "Netto Waarde",
"budget": "Begroting"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Databronne",
@ -1010,5 +1016,19 @@
"issues": "Kwessies",
"merges": "Saamvleg Versoeke",
"projects": "Projekte"
},
"apcups": {
"status": "Status",
"load": "Las",
"bcharge": "Batterylading",
"timeleft": "Oorblywende Tyd"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Merkers"
}
}

View File

@ -148,7 +148,9 @@
"up": "يعمل",
"received": "تم الإستلام",
"sent": "تم الإرسال",
"externalIPAddress": "IP الخارجي"
"externalIPAddress": "IP الخارجي",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "تدفق",
@ -176,7 +178,7 @@
"connectedAp": "المتصلة APs",
"activeUser": "الأجهزة النشطة",
"alerts": "تنبيهات",
"connectedGateway": "البوابات المتصلة",
"connectedGateways": "Connected gateways",
"connectedSwitches": "مفاتيح التبديل المتصلة"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "معالجة",
"time": "الوقت"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "لوحات المعلومات",
"datasources": "مصادر البيانات",
@ -1010,5 +1016,19 @@
"issues": "المُشكِلات",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "الحالة",
"load": "الضغط",
"bcharge": "شحن البطارية",
"timeleft": "الوقت المتبقي"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "التصنيفات"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -148,7 +148,9 @@
"up": "Actiu",
"received": "Rebuts",
"sent": "Enviats",
"externalIPAddress": "IP ext."
"externalIPAddress": "IP ext.",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "AP connectats",
"activeUser": "Dispositius actius",
"alerts": "Alertes",
"connectedGateway": "Pasarel·les connectades",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Conmutadors connectats"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processat",
"time": "Temps"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Taulells",
"datasources": "Orígens de dades",
@ -1010,5 +1016,19 @@
"issues": "Problemes",
"merges": "Merge Requests",
"projects": "Projectes"
},
"apcups": {
"status": "Estat",
"load": "Càrrega",
"bcharge": "Càrrega de la bateria",
"timeleft": "Temps restant"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetes"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Přijaté",
"sent": "Odeslané",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Odesílání dat",
@ -176,7 +178,7 @@
"connectedAp": "Připojené APs",
"activeUser": "Aktivní zařízení",
"alerts": "Upozornění",
"connectedGateway": "Připojené brány",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Připojené přepínače"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Zpracováno",
"time": "Čas"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Nástěnky",
"datasources": "Zdroje dat",
@ -1010,5 +1016,19 @@
"issues": "Problémy",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stav",
"load": "Zatížení",
"bcharge": "Battery Charge",
"timeleft": "Zbývající čas"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Op",
"received": "Modtaget",
"sent": "Sendt",
"externalIPAddress": "Ekstern IP"
"externalIPAddress": "Ekstern IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Forbundne APs",
"activeUser": "Aktive enheder",
"alerts": "Advarsler",
"connectedGateway": "Forbundne gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Forbundne switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Behandlet",
"time": "Tid"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Kontrolpanel",
"datasources": "Data Kilder",
@ -1010,5 +1016,19 @@
"issues": "Problemer",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Belastning",
"bcharge": "Batteriniveau",
"timeleft": "Resterende tid"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -85,16 +85,16 @@
"ping": {
"error": "Fehler",
"ping": "Ping",
"down": "Empfangen",
"up": "Senden",
"down": "Offline",
"up": "Online",
"not_available": "Nicht verfügbar"
},
"siteMonitor": {
"http_status": "HTTP-Status",
"error": "Fehler",
"response": "Antwort",
"down": "Empfangen",
"up": "Senden",
"down": "Offline",
"up": "Online",
"not_available": "Nicht verfügbar"
},
"emby": {
@ -144,11 +144,13 @@
"uptime": "Betriebszeit",
"maxDown": "Max. Down",
"maxUp": "Max. Up",
"down": "Empfangen",
"up": "Senden",
"down": "Offline",
"up": "Online",
"received": "Empfangen",
"sent": "Gesendet",
"externalIPAddress": "Externe IP"
"externalIPAddress": "Externe IP",
"externalIPv6Address": "Externe IPv6",
"externalIPv6Prefix": "Externer IPv4-Präfix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Verbundene APs",
"activeUser": "Aktive Geräte",
"alerts": "Warnungen",
"connectedGateway": "Verbundene Gateways",
"connectedGateways": "Verbundene Gateways",
"connectedSwitches": "Verbundene Switche"
},
"nzbget": {
@ -350,7 +352,7 @@
"queue": "Warteschlange",
"processed": "Verarbeitet",
"errored": "Fehlgeschlagen",
"saved": "Gespeichert"
"saved": "Eingespart"
},
"traefik": {
"routers": "Router",
@ -521,15 +523,15 @@
"up_to_date": "Aktuell",
"child_bridges": "Unter-Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Senden",
"up": "Online",
"pending": "Ausstehend",
"down": "Empfangen"
"down": "Offline"
},
"healthchecks": {
"new": "Neu",
"up": "Senden",
"up": "Online",
"grace": "In Karenzzeit",
"down": "Empfangen",
"down": "Offline",
"paused": "Pausiert",
"status": "Status",
"last_ping": "Letzter Ping",
@ -644,8 +646,8 @@
"load": "Durchschnittliche Last",
"memory": "Speichernutzung",
"wanStatus": "WAN-Status",
"up": "Senden",
"down": "Empfangen",
"up": "Online",
"down": "Offline",
"temp": "Temperatur",
"disk": "Datenträgernutzung",
"wanIP": "WAN-IP"
@ -702,6 +704,10 @@
"processed": "Verarbeitet",
"time": "Zeit"
},
"firefly": {
"networth": "Reinvermögen",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Datenquellen",
@ -826,8 +832,8 @@
"openwrt": {
"uptime": "Betriebszeit",
"cpuLoad": "CPU-Last (5 min-Durchschnitt)",
"up": "Senden",
"down": "Empfangen",
"up": "Online",
"down": "Offline",
"bytesTx": "Übertragen",
"bytesRx": "Empfangen"
},
@ -840,9 +846,9 @@
"sitesDown": "Seiten nicht verfügbar",
"paused": "Pausiert",
"notyetchecked": "Noch nicht geprüft",
"up": "Senden",
"up": "Online",
"seemsdown": "Scheint nicht verfügbar",
"down": "Empfangen",
"down": "Offline",
"unknown": "Unbekannt"
},
"calendar": {
@ -981,8 +987,8 @@
"beszel": {
"name": "Name",
"systems": "Systeme",
"up": "Senden",
"down": "Empfangen",
"up": "Online",
"down": "Offline",
"paused": "Pausiert",
"pending": "Ausstehend",
"status": "Status",
@ -1010,5 +1016,19 @@
"issues": "Probleme",
"merges": "Merge Requests",
"projects": "Projekte"
},
"apcups": {
"status": "Status",
"load": "Last",
"bcharge": "Akkuladung",
"timeleft": "Verbleibende Zeit"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Schlagwörter"
}
}

View File

@ -148,7 +148,9 @@
"up": "Ping up",
"received": "Ληφθέντα",
"sent": "Απεσταλμένα",
"externalIPAddress": "Εξωτερική IP"
"externalIPAddress": "Εξωτερική IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Συνδεδεμένα APs",
"activeUser": "Ενεργές συσκευές",
"alerts": "Ειδοποιήσεις",
"connectedGateway": "Συνδεδεμένα gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Συνδεδεμένα switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Σε επεξεργασία",
"time": "Ώρα"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Πίνακας Ελέγχου",
"datasources": "Πηγές Δεδομένων",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Κατάσταση",
"load": "Φόρτωση",
"bcharge": "Battery Charge",
"timeleft": "Χρόνος που απομένει"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Ετικέτες"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge":"Battery Charge",
"timeleft":"Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stato",
"load": "Ŝarĝo",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Activo",
"received": "Recibido",
"sent": "Enviado",
"externalIPAddress": "IP ext."
"externalIPAddress": "IP ext.",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstream (desarrollo de software)",
@ -176,7 +178,7 @@
"connectedAp": "AP conectados",
"activeUser": "Dispositivos activos",
"alerts": "Alertas",
"connectedGateway": "Puertas de enlace conectadas",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Conmutadores conectados"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Procesado",
"time": "Tiempo"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Tableros",
"datasources": "Fuentes de datos",
@ -1010,5 +1016,19 @@
"issues": "Números",
"merges": "Solicitudes de fusión",
"projects": "Proyectos"
},
"apcups": {
"status": "Estado",
"load": "Carga",
"bcharge": "Carga de la batería",
"timeleft": "Tiempo restante"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetas"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Tila",
"load": "Kuorma",
"bcharge": "Battery Charge",
"timeleft": "Aikaa jäljellä"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -57,14 +57,14 @@
"lan": "LAN",
"wlan": "WLAN",
"devices": "Équipt.",
"lan_devices": "Équipt. LAN",
"lan_devices": "Périphériques LAN",
"wlan_devices": "Périphériques WLAN",
"lan_users": "Utilisateurs LAN",
"wlan_users": "Utilisateurs WLAN",
"up": "Up",
"down": "INACTIF",
"wait": "Veuillez patienter",
"empty_data": "Statut sous-système inconnu"
"empty_data": "Statut du sous-système inconnu"
},
"docker": {
"rx": "Rx",
@ -77,24 +77,24 @@
"unknown": "Inconnu",
"healthy": "Fonctionnel",
"starting": "Démarrage",
"unhealthy": "Dysfonctionnement",
"not_found": "Inconnu",
"unhealthy": "Mauvaise santé",
"not_found": "Introuvable",
"exited": "Arrêté",
"partial": "Partiel"
},
"ping": {
"error": "Erreur",
"ping": "Ping",
"down": "Down",
"up": "Up",
"ping": "Latence",
"down": "Bas",
"up": "Haut",
"not_available": "Non disponible"
},
"siteMonitor": {
"http_status": "Statut HTTP",
"error": "Erreur",
"response": "Réponse",
"down": "Down",
"up": "Up",
"down": "Bas",
"up": "Haut",
"not_available": "Non disponible"
},
"emby": {
@ -105,7 +105,7 @@
"movies": "Films",
"series": "Séries TV",
"episodes": "Épisodes",
"songs": "Musique"
"songs": "Chansons"
},
"esphome": {
"offline": "Hors ligne",
@ -124,7 +124,7 @@
},
"flood": {
"download": "Récep.",
"upload": "Envoi",
"upload": "Téléverser",
"leech": "Leech",
"seed": "Seed"
},
@ -144,23 +144,25 @@
"uptime": "Démarré depuis",
"maxDown": "Max. Bas",
"maxUp": "Max. Haut",
"down": "Down",
"up": "Up",
"down": "Bas",
"up": "Haut",
"received": "Reçu",
"sent": "Envoyé",
"externalIPAddress": "IP externe"
"externalIPAddress": "IP externe",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
"upstreams": "En amont",
"requests": "Demandes en cours",
"requests_failed": "Demandes échouées"
},
"changedetectionio": {
"totalObserved": "Total Observé",
"diffsDetected": "Diffs détectées"
"diffsDetected": "Différences détectées"
},
"channelsdvrserver": {
"shows": "Affichages",
"shows": "Séries",
"recordings": "Enregistrements",
"scheduled": "Planifié",
"passes": "Passes"
@ -174,10 +176,10 @@
},
"omada": {
"connectedAp": "AP connectés",
"activeUser": "Équipts actifs",
"activeUser": "Périphériques actifs",
"alerts": "Alertes",
"connectedGateway": "Passerelles connectées",
"connectedSwitches": "Switches connectés"
"connectedGateways": "Connected gateways",
"connectedSwitches": "Switchs connectés"
},
"nzbget": {
"rate": "Débit",
@ -188,7 +190,7 @@
"streams": "Flux actif",
"albums": "Albums",
"movies": "Films",
"tv": "Séries TV"
"tv": "Séries"
},
"sabnzbd": {
"rate": "Débit",
@ -197,32 +199,32 @@
},
"rutorrent": {
"active": "Actif",
"upload": "Envoi",
"upload": "Téléverser",
"download": "Récep."
},
"transmission": {
"download": "Récep.",
"upload": "Envoi",
"upload": "Téléverser",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Récep.",
"upload": "Envoi",
"upload": "Téléverser",
"leech": "Leech",
"seed": "Seed"
},
"qnap": {
"cpuUsage": "Cpu",
"memUsage": "Mém",
"systemTempC": "Temp",
"poolUsage": "Pool",
"volumeUsage": "Volume",
"cpuUsage": "Processeur utilisé",
"memUsage": "Mémoire utilisée",
"systemTempC": "Température système",
"poolUsage": "Utilisation de la pool",
"volumeUsage": "Utilisation du volume",
"invalid": "Invalide"
},
"deluge": {
"download": "Récep.",
"upload": "Envoi",
"upload": "Téléverser",
"leech": "Leech",
"seed": "Seed"
},
@ -232,33 +234,33 @@
},
"downloadstation": {
"download": "Récep.",
"upload": "Envoi",
"upload": "Téléverser",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Demande",
"queued": "Attente",
"wanted": "Demandé",
"queued": "En file d'attente",
"series": "Séries TV",
"queue": "En attente",
"unknown": "Inconnu"
},
"radarr": {
"wanted": "Demande",
"wanted": "Demandé",
"missing": "Manquant",
"queued": "Attente",
"queued": "En file d'attente",
"movies": "Films",
"queue": "En attente",
"unknown": "Inconnu"
},
"lidarr": {
"wanted": "Demande",
"queued": "Attente",
"wanted": "Demandé",
"queued": "En file d'attente",
"artists": "Artistes"
},
"readarr": {
"wanted": "Demande",
"queued": "Attente",
"wanted": "Demandé",
"queued": "En file d'attente",
"books": "Livres"
},
"bazarr": {
@ -267,18 +269,18 @@
},
"ombi": {
"pending": "En attente",
"approved": "Validé",
"approved": "Approuvé",
"available": "Disponible"
},
"jellyseerr": {
"pending": "En attente",
"approved": "Validé",
"approved": "Approuvé",
"available": "Disponible"
},
"overseerr": {
"pending": "En attente",
"processing": "Traitement",
"approved": "Validé",
"processing": "En cours de traitement",
"approved": "Approuvé",
"available": "Disponible"
},
"netalertx": {
@ -290,7 +292,7 @@
"pihole": {
"queries": "Requêtes",
"blocked": "Bloqué",
"blocked_percent": "Bloqué %",
"blocked_percent": "% bloqué",
"gravity": "Listes dom. bloqués"
},
"adguard": {
@ -300,9 +302,9 @@
"latency": "Latence"
},
"speedtest": {
"upload": "Envoi",
"upload": "Téléverser",
"download": "Récep.",
"ping": "Ping"
"ping": "Latence"
},
"portainer": {
"running": "Démarré",
@ -335,7 +337,7 @@
},
"technitium": {
"totalQueries": "Requêtes",
"totalNoError": "Effectué avec succès",
"totalNoError": "Succès",
"totalServerFailure": "Échecs",
"totalNxDomain": "Domaines NX",
"totalRefused": "Refusés",
@ -349,8 +351,8 @@
"tdarr": {
"queue": "En attente",
"processed": "Traité",
"errored": "En erreur",
"saved": "Libéré"
"errored": "Erroné",
"saved": "Enregistré"
},
"traefik": {
"routers": "Routeurs",
@ -374,35 +376,35 @@
"30days": "30 Jours"
},
"gotify": {
"apps": "Applis",
"apps": "Applications",
"clients": "Clients",
"messages": "Msg"
"messages": "Messages"
},
"prowlarr": {
"enableIndexers": "Indexeur",
"numberOfGrabs": "Capture",
"numberOfGrabs": "Captures",
"numberOfQueries": "Requêtes",
"numberOfFailGrabs": "Capt. échouée",
"numberOfFailQueries": "Dem. échouée"
"numberOfFailGrabs": "Captures échouées",
"numberOfFailQueries": "Demandes échouées"
},
"jackett": {
"configured": "Configuré",
"errored": "En erreur"
"errored": "Erroné"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
"numConnections": "Cnx",
"numConnections": "Connexions",
"dataRelayed": "Relayé",
"transferRate": "Débit"
},
"mastodon": {
"user_count": "Utilisateurs",
"status_count": "Messages",
"status_count": "Articles",
"domain_count": "Domaines"
},
"medusa": {
"wanted": "Demande",
"queued": "Attente",
"wanted": "Demandé",
"queued": "En file d'attente",
"series": "Séries TV"
},
"minecraft": {
@ -418,13 +420,13 @@
},
"authentik": {
"users": "Utilisateurs",
"loginsLast24H": "Cnx. (24h)",
"failedLoginsLast24H": "Cnx. échouées (24h)"
"loginsLast24H": "Connexions (24 h)",
"failedLoginsLast24H": "Connexions échouées (24 h)"
},
"proxmox": {
"mem": "MÉM",
"cpu": "CPU",
"lxc": "LxC",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
@ -432,7 +434,7 @@
"load": "Charge",
"wait": "Veuillez patienter",
"temp": "Temp",
"_temp": "T°",
"_temp": "Température",
"warn": "Alerte",
"uptime": "Up",
"total": "Total",
@ -443,12 +445,12 @@
"crit": "Crit.",
"read": "Lu",
"write": "Écrit.",
"gpu": "GPU",
"gpu": "Carte Graphique",
"mem": "Mém.",
"swap": "Swap"
},
"quicklaunch": {
"bookmark": "Signet",
"bookmark": "Marque-Page",
"service": "Service",
"search": "Recherche",
"custom": "Personnalisé",
@ -458,13 +460,13 @@
},
"wmo": {
"0-day": "Ensoleillé",
"0-night": "Ciel clair",
"0-night": "Clair",
"1-day": "Principalement ensoleillé",
"1-night": "Principalement clair",
"2-day": "Partiellement couvert",
"2-night": "Partiellement couvert",
"3-day": "Couvert",
"3-night": "Couvert",
"2-day": "Partiellement nuageux",
"2-night": "Partiellement nuageux",
"3-day": "Nuageux",
"3-night": "Nuageux",
"45-day": "Brumeux",
"45-night": "Brumeux",
"48-day": "Brumeux",
@ -483,14 +485,14 @@
"61-night": "Pluie légère",
"63-day": "Pluie",
"63-night": "Pluie",
"65-day": "Pluie forte",
"65-night": "Pluie forte",
"65-day": "Forte pluie",
"65-night": "Forte pluie",
"66-day": "Pluie verglaçante",
"66-night": "Pluie verglaçante",
"67-day": "Pluie verglaçante",
"67-night": "Pluie verglaçante",
"71-day": "Neige légère",
"71-night": "Neige légère",
"71-day": "Légères chutes de neige",
"71-night": "Légères chutes de neige",
"73-day": "Neige",
"73-night": "Neige",
"75-day": "Neige abondante",
@ -521,15 +523,15 @@
"up_to_date": "À jour",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"up": "Haut",
"pending": "En attente",
"down": "Down"
"down": "Bas"
},
"healthchecks": {
"new": "Nouveau",
"up": "Up",
"up": "Haut",
"grace": "En Période de Grâce",
"down": "Down",
"down": "Bas",
"paused": "En Pause",
"status": "Statut",
"last_ping": "Dernier Ping",
@ -541,7 +543,7 @@
"containers_failed": "Échoué"
},
"autobrr": {
"approvedPushes": "Validé",
"approvedPushes": "Approuvé",
"rejectedPushes": "Rejeté",
"filters": "Filtres",
"indexers": "Indexeur"
@ -550,7 +552,7 @@
"downloads": "En attente",
"videos": "Vidéos",
"channels": "Chaînes",
"playlists": "Playlists"
"playlists": "Listes de lecture"
},
"truenas": {
"load": "Charge Système",
@ -590,9 +592,9 @@
"total": "Total"
},
"peanut": {
"battery_charge": "Charge Batterie",
"ups_load": "Charge de l'UPS",
"ups_status": "État de l'UPS",
"battery_charge": "Charge de la batterie",
"ups_load": "Charge de lASI",
"ups_status": "État de lASI",
"online": "En ligne",
"on_battery": "Sur Batterie",
"low_battery": "Batterie Faible"
@ -602,8 +604,8 @@
"no_devices": "Aucune donnée d'appareil reçue"
},
"mikrotik": {
"cpuLoad": "Charge CPU",
"memoryUsed": "Mém. Utilisée",
"cpuLoad": "Charge du processeur",
"memoryUsed": "Mémoire utilisée",
"uptime": "Démarré depuis",
"numberOfLeases": "Baux"
},
@ -615,25 +617,25 @@
"opendtu": {
"yieldDay": "Aujourd'hui",
"absolutePower": "Puissance",
"relativePower": "Puissance %",
"relativePower": "% de puissance",
"limit": "Limite"
},
"opnsense": {
"cpu": "Charge CPU",
"memory": "Mém. utilisée",
"cpu": "Charge du processeur",
"memory": "Mémoire utilisée",
"wanUpload": "WAN Envoi",
"wanDownload": "WAN Récep."
},
"moonraker": {
"printer_state": "État Imprimante",
"print_status": "Statut Imprimante",
"printer_state": "État de l'imprimante",
"print_status": "Statut de l'imprimante",
"print_progress": "Progression",
"layers": "Couches"
},
"octoprint": {
"printer_state": "Statut",
"temp_tool": "Tool T°",
"temp_bed": "Bed T°",
"temp_tool": "Temp. de l'outil",
"temp_bed": "Temp. du lit",
"job_completion": "Achèvement"
},
"cloudflared": {
@ -644,9 +646,9 @@
"load": "Charge moy.",
"memory": "Util. Mém.",
"wanStatus": "Statut WAN",
"up": "Up",
"down": "Down",
"temp": "T°",
"up": "Haut",
"down": "Bas",
"temp": "Température",
"disk": "Util. Disque",
"wanIP": "IP WAN"
},
@ -688,7 +690,7 @@
"mylar": {
"series": "Séries TV",
"issues": "Anomalies",
"wanted": "Demande"
"wanted": "Demandé"
},
"photoprism": {
"albums": "Albums",
@ -698,10 +700,14 @@
},
"fileflows": {
"queue": "En attente",
"processing": "Traitement",
"processing": "En cours de traitement",
"processed": "Traité",
"time": "Temps"
},
"firefly": {
"networth": "Valeur Nette",
"budget": "Budget"
},
"grafana": {
"dashboards": "Tableau de bord",
"datasources": "Sources données",
@ -754,9 +760,9 @@
"booksDuration": "Durée"
},
"homeassistant": {
"people_home": "People Home",
"people_home": "Personne à la maison",
"lights_on": "Lumières allumées",
"switches_on": "Commutateur On"
"switches_on": "Interrupteurs allumés"
},
"whatsupdocker": {
"monitoring": "Conteneurs",
@ -789,7 +795,7 @@
"inProgress": "En cours",
"totalPrs": "PRs Total",
"myPrs": "Mes PRs",
"approved": "Validé"
"approved": "Approuvé"
},
"gamedig": {
"status": "Statut",
@ -800,8 +806,8 @@
"currentPlayers": "Joueurs actuels",
"players": "Joueurs",
"maxPlayers": "Joueurs max",
"bots": "Bots",
"ping": "Ping"
"bots": "Robots",
"ping": "Latence"
},
"urbackup": {
"ok": "Ok",
@ -826,8 +832,8 @@
"openwrt": {
"uptime": "Démarré depuis",
"cpuLoad": "Charge moyenne CPU (5 min)",
"up": "Up",
"down": "Down",
"up": "Haut",
"down": "Bas",
"bytesTx": "Transmis",
"bytesRx": "Reçu"
},
@ -840,9 +846,9 @@
"sitesDown": "Hors ligne",
"paused": "En Pause",
"notyetchecked": "Non vérifié",
"up": "Up",
"up": "Haut",
"seemsdown": "Semble hors ligne",
"down": "Down",
"down": "Bas",
"unknown": "Inconnu"
},
"calendar": {
@ -912,7 +918,7 @@
},
"crowdsec": {
"alerts": "Alertes",
"bans": "Exclusions"
"bans": "Bannissements"
},
"wgeasy": {
"connected": "Connecté",
@ -927,12 +933,12 @@
"banned": "Banni"
},
"myspeed": {
"ping": "Ping",
"ping": "Latence",
"download": "Récep.",
"upload": "Envoi"
"upload": "Téléverser"
},
"stocks": {
"stocks": "Actions",
"stocks": "Stocks",
"loading": "Chargement",
"open": "Ouvert - Marché américain",
"closed": "Fermé - marché américain",
@ -981,8 +987,8 @@
"beszel": {
"name": "Nom",
"systems": "Systèmes",
"up": "Up",
"down": "Down",
"up": "Haut",
"down": "Bas",
"paused": "En Pause",
"pending": "En attente",
"status": "Statut",
@ -1010,5 +1016,19 @@
"issues": "Anomalies",
"merges": "Demandes de fusion de branches",
"projects": "Projets"
},
"apcups": {
"status": "Statut",
"load": "Charge",
"bcharge": "Charge de la batterie",
"timeleft": "Temps restant"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Étiquettes"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "סטטוס",
"load": "עומס",
"bcharge": "Battery Charge",
"timeleft": "זמן שנותר"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Dostupno",
"received": "Primljeno",
"sent": "Poslano",
"externalIPAddress": "Eksterna IP adresa"
"externalIPAddress": "Eksterna IP adresa",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Glavne grane",
@ -176,7 +178,7 @@
"connectedAp": "Povezani AP-ovi",
"activeUser": "Aktivni uređaji",
"alerts": "Upozorenja",
"connectedGateway": "Povezani pristupi",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Povezani prekidači"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Obrađeno",
"time": "Vrijeme"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Pregledne ploče",
"datasources": "Izvori podataka",
@ -1010,5 +1016,19 @@
"issues": "Problemi",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stanje",
"load": "Opterećenje",
"bcharge": "Napunjenost baterije",
"timeleft": "Preostalo vrijeme"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Oznake"
}
}

View File

@ -148,7 +148,9 @@
"up": "Fel",
"received": "Fogadott",
"sent": "Küldött",
"externalIPAddress": "Külső IP cím"
"externalIPAddress": "Külső IP cím",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreamek",
@ -176,7 +178,7 @@
"connectedAp": "Csatlakoztatott AP-k",
"activeUser": "Aktív eszközök",
"alerts": "Riasztások",
"connectedGateway": "Csatlakoztatott gateway-ek",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Csatlakoztatott switch-ek"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Feldolgozott",
"time": "Idő"
},
"firefly": {
"networth": "Nettó érték",
"budget": "Költségkeret"
},
"grafana": {
"dashboards": "Műszerfalak",
"datasources": "Adatforrások",
@ -1010,5 +1016,19 @@
"issues": "Problémák",
"merges": "Merge kérések",
"projects": "Projektek"
},
"apcups": {
"status": "Státusz",
"load": "Terhelés",
"bcharge": "Akku töltöttsége",
"timeleft": "Hátralévő idő"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Címkék"
}
}

View File

@ -14,7 +14,7 @@
"date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}",
"duration": "{{value, duration}}",
"months": "bulan",
"months": "bln",
"days": "h",
"hours": "j",
"minutes": "m",
@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "Menunggu Terputus",
"connectionStatusDisconnecting": "Sedan Memutus",
"connectionStatusDisconnected": "Terputus",
"connectionStatusConnected": "Connected",
"connectionStatusConnected": "Tersambung",
"uptime": "Waktu Aktif",
"maxDown": "Maks Unduh",
"maxUp": "Maks Unggah",
@ -148,7 +148,9 @@
"up": "Hidup",
"received": "Diterima",
"sent": "Terkirim",
"externalIPAddress": "IP Eksternal"
"externalIPAddress": "IP Eksternal",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Strim Luar",
@ -176,7 +178,7 @@
"connectedAp": "AP Tersambung",
"activeUser": "Perangakat yang Aktif",
"alerts": "Peringatan",
"connectedGateway": "Gateway Tersambung",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Switch Tersambung"
},
"nzbget": {
@ -283,9 +285,9 @@
},
"netalertx": {
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
"connected": "Tersambung",
"new_devices": "Perangkat Baru",
"down_alerts": "Peringatan Pemadaman"
},
"pihole": {
"queries": "Kueri",
@ -311,17 +313,17 @@
},
"suwayomi": {
"download": "Terunduh",
"nondownload": "Non-Downloaded",
"nondownload": "Belum Diunduh",
"read": "Baca",
"unread": "Belum Dibaca",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
"downloadedread": "Diunduh & Dibaca",
"downloadedunread": "Diunduh & Belum Dibaca",
"nondownloadedread": "Belum Diunduh & Dibaca",
"nondownloadedunread": "Belum Diunduh & Belum Dibaca"
},
"tailscale": {
"address": "Alamat",
"expires": "Kadaluarsa",
"expires": "Kedaluwarsa",
"never": "Tidak Pernah",
"last_seen": "Terakhir terlihat",
"now": "Sekarang",
@ -335,10 +337,10 @@
},
"technitium": {
"totalQueries": "Kueri",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalNoError": "Berhasil",
"totalServerFailure": "Gagal",
"totalNxDomain": "Domain NX",
"totalRefused": "Ditolak",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
@ -702,6 +704,10 @@
"processed": "Terproses",
"time": "Waktu"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dasbor",
"datasources": "Sumber Data",
@ -854,16 +860,16 @@
},
"romm": {
"platforms": "Platform",
"totalRoms": "Games",
"totalRoms": "Permainan",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"states": "Kondisi",
"screenshots": "Tangkapan Layar",
"totalfilesize": "Total Ukuran"
},
"mailcow": {
"domains": "Jumlah Domain",
"mailboxes": "Mailboxes",
"mails": "Mails",
"mailboxes": "Kotak surat",
"mails": "Surat",
"storage": "Penyimpanan"
},
"netdata": {
@ -882,48 +888,48 @@
"pulls": "Pull Requests"
},
"stash": {
"scenes": "Scenes",
"scenesPlayed": "Scenes Played",
"playCount": "Total Plays",
"playDuration": "Time Watched",
"sceneSize": "Scenes Size",
"sceneDuration": "Scenes Duration",
"images": "Images",
"imageSize": "Images Size",
"galleries": "Galleries",
"performers": "Performers",
"studios": "Studios",
"scenes": "Adegan",
"scenesPlayed": "Adegan Dimainkan",
"playCount": "Total Dimainkan",
"playDuration": "Waktu Ditonton",
"sceneSize": "Ukuran Adegan",
"sceneDuration": "Durasi Adegan",
"images": "Gambar",
"imageSize": "Ukuran Gambar",
"galleries": "Galeri",
"performers": "Pemain",
"studios": "Studio",
"movies": "Film",
"tags": "Tag",
"oCount": "O Count"
"oCount": "Jumlah O"
},
"tandoor": {
"users": "Pengguna",
"recipes": "Resep",
"keywords": "Keywords"
"keywords": "Kata Kunci"
},
"homebox": {
"items": "Items",
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"totalWithWarranty": "Dengan Garansi",
"locations": "Lokasi",
"labels": "Label",
"users": "Pengguna",
"totalValue": "Total Value"
"totalValue": "Total Nilai"
},
"crowdsec": {
"alerts": "Peringatan",
"bans": "Bans"
},
"wgeasy": {
"connected": "Connected",
"connected": "Tersambung",
"enabled": "Aktif",
"disabled": "Nonaktif",
"total": "Total"
},
"swagdashboard": {
"proxied": "Proxied",
"proxied": "Diproksi",
"auth": "With Auth",
"outdated": "Outdated",
"outdated": "Usang",
"banned": "Banned"
},
"myspeed": {
@ -932,43 +938,43 @@
"upload": "Unggah"
},
"stocks": {
"stocks": "Stocks",
"loading": "Loading",
"open": "Open - US Market",
"closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration"
"stocks": "Saham",
"loading": "Memuat",
"open": "Buka - Pasar AS",
"closed": "Tutup - Pasar AS",
"invalidConfiguration": "Konfigurasi Invalid"
},
"frigate": {
"cameras": "Cameras",
"cameras": "Kamera",
"uptime": "Waktu Aktif",
"version": "Versi"
},
"linkwarden": {
"links": "Links",
"collections": "Collections",
"links": "Tautan",
"collections": "Koleksi",
"tags": "Tag"
},
"zabbix": {
"unclassified": "Not classified",
"information": "Informasi",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Peringatan",
"average": "Rata-rata",
"high": "Tinggi",
"disaster": "Bencana"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"vehicle": "Kendaraan",
"vehicles": "Kendaraan",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
"reminders": "Pengingat",
"nextReminder": "Pengingat Berikutnya",
"none": "Tidak ada"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
"projects": "Proyek Aktif",
"tasks7d": "Tugas Jatuh Tempo Minggu Ini",
"tasksOverdue": "Tugas Terlewat",
"tasksInProgress": "Tugas Berlangsung"
},
"headscale": {
"name": "Nama",
@ -980,7 +986,7 @@
},
"beszel": {
"name": "Nama",
"systems": "Systems",
"systems": "Sistem",
"up": "Hidup",
"down": "Mati",
"paused": "Pause",
@ -989,26 +995,40 @@
"updated": "Terbarui",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"disk": "Diska",
"network": "NET"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"apps": "Apl",
"synced": "Tersinkron",
"outOfSync": "Tidak Sinkron",
"healthy": "Lancar",
"degraded": "Degraded",
"degraded": "Terdegradasi",
"progressing": "Progressing",
"missing": "Tidak Ditemukan",
"suspended": "Suspended"
"suspended": "Ditangguhkan"
},
"spoolman": {
"loading": "Loading"
"loading": "Memuat"
},
"gitlab": {
"groups": "Groups",
"groups": "Grup",
"issues": "Isu",
"merges": "Merge Requests",
"projects": "Projects"
"projects": "Proyek"
},
"apcups": {
"status": "Status",
"load": "Beban",
"bcharge": "Sisa Baterai",
"timeleft": "Sisa Waktu"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tag"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Ricevuti",
"sent": "Inviati",
"externalIPAddress": "IP Esterno"
"externalIPAddress": "IP Esterno",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstream",
@ -176,7 +178,7 @@
"connectedAp": "AP Connessi",
"activeUser": "Dispositivi attivi",
"alerts": "Allarmi",
"connectedGateway": "Gateway connessi",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Switch connessi"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Elaborati",
"time": "Tempo"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboard",
"datasources": "Origine dei Dati",
@ -1010,5 +1016,19 @@
"issues": "Problemi",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stato",
"load": "Carico",
"bcharge": "Carica Batteria",
"timeleft": "Tempo Rimanente"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tag"
}
}

View File

@ -148,7 +148,9 @@
"up": "稼働",
"received": "受信済み",
"sent": "送信済み",
"externalIPAddress": "退出ID"
"externalIPAddress": "退出ID",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "アップストリーム",
@ -176,7 +178,7 @@
"connectedAp": "接続されたAP",
"activeUser": "アクティブデバイス",
"alerts": "アラート",
"connectedGateway": "接続されたゲートウェイ",
"connectedGateways": "Connected gateways",
"connectedSwitches": "接続スイッチ"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "処理済み",
"time": "時間"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "ダッシュ ボード",
"datasources": "データソース",
@ -1010,5 +1016,19 @@
"issues": "課題",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "状態",
"load": "ロード",
"bcharge": "バッテリー充電",
"timeleft": "残り時間"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "タグ"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "수신됨",
"sent": "전송됨",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "연결된 AP",
"activeUser": "활성 장치",
"alerts": "경고",
"connectedGateway": "연결된 게이트웨이",
"connectedGateways": "Connected gateways",
"connectedSwitches": "연결된 스위치"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "처리됨",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "대시보드",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "상태",
"load": "부하",
"bcharge": "배터리 충전 중",
"timeleft": "남은 시간"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "태그"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Savienotie piekļuves punkti",
"activeUser": "Aktīvās ierīces",
"alerts": "Paziņojumi",
"connectedGateway": "Savienotās vārtejas",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Savienotie komutatori"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Statuss",
"load": "Ielādē",
"bcharge": "Battery Charge",
"timeleft": "Atlikušais laiks"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Hidup",
"received": "Diterima",
"sent": "Telah dihantar",
"externalIPAddress": "IP Luaran"
"externalIPAddress": "IP Luaran",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Peranti aktif",
"alerts": "Perhatian",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Sudah diprosess",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Beban",
"bcharge": "Bateri dicas",
"timeleft": "Masa Tinggal"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tanda nama"
}
}

View File

@ -148,7 +148,9 @@
"up": "Online",
"received": "Ontvangen",
"sent": "Verzonden",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Verbonden APs",
"activeUser": "Actieve apparaten",
"alerts": "Meldingen",
"connectedGateway": "Verbonden gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Verbonden switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Verwerkt",
"time": "Tijd"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Bronnen",
@ -1010,5 +1016,19 @@
"issues": "Problemen",
"merges": "Merge Verzoeken",
"projects": "Projecten"
},
"apcups": {
"status": "Status",
"load": "Belasting",
"bcharge": "Batterij opladen",
"timeleft": "Resterende Tijd"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Label"
}
}

View File

@ -148,7 +148,9 @@
"up": "Oppe",
"received": "Mottatt",
"sent": "Sendt",
"externalIPAddress": "Ekstern IP"
"externalIPAddress": "Ekstern IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Oppstrøms",
@ -176,7 +178,7 @@
"connectedAp": "Tilkoblede AP'er",
"activeUser": "Aktive enheter",
"alerts": "Varsler",
"connectedGateway": "Tilkoblede gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Tilkoblede switcher"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Behandlet",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Last",
"bcharge": "Batteriladning",
"timeleft": "Gjenstående tid"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Stikkord"
}
}

View File

@ -148,7 +148,9 @@
"up": "Dostępny",
"received": "Odebrane",
"sent": "Wysłane",
"externalIPAddress": "Pub. IP"
"externalIPAddress": "Pub. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Połączone punkty dostępowe",
"activeUser": "Aktywne urządzenia",
"alerts": "Alarmy",
"connectedGateway": "Połączone bramy",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Połączone przełączniki"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Przetworzone",
"time": "Czas"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Panel główny",
"datasources": "Źródła danych",
@ -1010,5 +1016,19 @@
"issues": "Zgłoszenia",
"merges": "Żądania scaleń",
"projects": "Projekty"
},
"apcups": {
"status": "Stan",
"load": "Obciążenie",
"bcharge": "Stan baterii",
"timeleft": "Pozostało"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tagi"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Recebido",
"sent": "Enviado",
"externalIPAddress": "Endereço IP Externo"
"externalIPAddress": "Endereço IP Externo",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "APs Ligados",
"activeUser": "Dispositivos activos",
"alerts": "Alertas",
"connectedGateway": "Gateways ligados",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Switches ligados"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processado",
"time": "Hora"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Painéis",
"datasources": "Origem de Dados",
@ -1010,5 +1016,19 @@
"issues": "Problemas",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Estado",
"load": "Carga",
"bcharge": "Carga da bateria",
"timeleft": "Tempo Restante"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiquetas"
}
}

View File

@ -148,7 +148,9 @@
"up": "Ativo",
"received": "Recebido",
"sent": "Enviado",
"externalIPAddress": "IP Externo"
"externalIPAddress": "IP Externo",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Streams de Envio",
@ -176,7 +178,7 @@
"connectedAp": "APs Ligados",
"activeUser": "Dispositivos ativos",
"alerts": "Alertas",
"connectedGateway": "Gateways conectados",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Switches conectados"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processado",
"time": "Hora"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Painéis",
"datasources": "Origem de Dados",
@ -1010,5 +1016,19 @@
"issues": "Problemas",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Carga",
"bcharge": "Carga da bateria",
"timeleft": "Tempo restante"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Marcadores"
}
}

View File

@ -148,7 +148,9 @@
"up": "Sus",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreamuri",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stare",
"load": "Sarcină",
"bcharge": "Battery Charge",
"timeleft": "Timp rămas"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Онлайн",
"received": "Получено",
"sent": "Отправлено",
"externalIPAddress": "Внеш. IP"
"externalIPAddress": "Внеш. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Входящие каналы",
@ -176,7 +178,7 @@
"connectedAp": "Подключенные точки доступа",
"activeUser": "Активные устройства",
"alerts": "Предупреждения",
"connectedGateway": "Подключенные шлюзы",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Подключенные коммутаторы"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Обработано",
"time": "Время"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Панели",
"datasources": "Источники данных",
@ -1010,5 +1016,19 @@
"issues": "Вопросы",
"merges": "Мердж-реквесты",
"projects": "Проекты"
},
"apcups": {
"status": "Статус",
"load": "Загрузка",
"bcharge": "Заряд батареи",
"timeleft": "Осталось"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Теги"
}
}

View File

@ -148,7 +148,9 @@
"up": "Nahrávanie",
"received": "Prijaté",
"sent": "Odoslané",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Odosielanie dát",
@ -176,7 +178,7 @@
"connectedAp": "Pripojené prístupové body",
"activeUser": "Aktívne zariadenia",
"alerts": "Upozornenia",
"connectedGateway": "Pripojené sieťové brány",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Pripojené prepínače"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Spracované",
"time": "Čas"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Panely",
"datasources": "Zdroje dát",
@ -1010,5 +1016,19 @@
"issues": "Problémy",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Stav",
"load": "Záťaž",
"bcharge": "Nabitie batérie",
"timeleft": "Zostávajúci čas"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Štítky"
}
}

View File

@ -148,7 +148,9 @@
"up": "Povezan",
"received": "Prejeto",
"sent": "Poslano",
"externalIPAddress": "Zun. IP"
"externalIPAddress": "Zun. IP",
"externalIPv6Address": "Eks. IPv6",
"externalIPv6Prefix": "Eks. IPv6-predpona"
},
"caddy": {
"upstreams": "Pretok gor",
@ -176,7 +178,7 @@
"connectedAp": "Povezanih AP",
"activeUser": "Aktivne naprave",
"alerts": "Opozorila",
"connectedGateway": "Povezan prehod",
"connectedGateways": "Povezani prehodi",
"connectedSwitches": "Povezana stikala"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Procesiran",
"time": "Čas"
},
"firefly": {
"networth": "Neto vrednost",
"budget": "Proračun"
},
"grafana": {
"dashboards": "Nadzorne plošče",
"datasources": "Viri podatkov",
@ -1010,5 +1016,19 @@
"issues": "Težave",
"merges": "Združi zahtevke",
"projects": "Projekti"
},
"apcups": {
"status": "Stanje",
"load": "Bremenitev",
"bcharge": "Napolnjenost baterije",
"timeleft": "Preostali čas"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Značke"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Laddar",
"bcharge": "Battery Charge",
"timeleft": "Tid kvar"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "హోదా",
"load": "లోడ్",
"bcharge": "Battery Charge",
"timeleft": "మిగిలి వున్న సమయం"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "สถานะ",
"load": "โหลด",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "Yükleme",
"received": "Alınan",
"sent": "Gönderilen",
"externalIPAddress": "Harici IP"
"externalIPAddress": "Harici IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Akış",
@ -176,7 +178,7 @@
"connectedAp": "Bağlı AP'ler",
"activeUser": "Aktif cihazlar",
"alerts": "Alarmlar",
"connectedGateway": "Bağlı ağ geçitleri",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Bağlı anahtarlar"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "İşlendi",
"time": "Zaman"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Kontrol Paneli",
"datasources": "Veri Kaynakları",
@ -1010,5 +1016,19 @@
"issues": "Sorunlar",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Durum",
"load": "Yük",
"bcharge": "Pil Yüzdesi",
"timeleft": "Kalan Zaman"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Etiketler"
}
}

View File

@ -148,7 +148,9 @@
"up": "Онлайн",
"received": "Отримано",
"sent": "Надіслано",
"externalIPAddress": "Зовнішній IP"
"externalIPAddress": "Зовнішній IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Потоки",
@ -176,7 +178,7 @@
"connectedAp": "Підключені точки доступу",
"activeUser": "Активні пристрої",
"alerts": "Оповіщення",
"connectedGateway": "Підключені шлюзи",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Підключені перемикачі"
},
"nzbget": {
@ -285,13 +287,13 @@
"total": "Усього",
"connected": "З'єднано",
"new_devices": "Нові пристрої",
"down_alerts": "Спов. про падіння"
"down_alerts": "Сповіщення про падіння"
},
"pihole": {
"queries": "Запити",
"blocked": "Заблоковано",
"blocked_percent": "Заблоковано %",
"gravity": "Гравітація"
"gravity": "Доменів в списку"
},
"adguard": {
"queries": "Запити",
@ -702,6 +704,10 @@
"processed": "Обробка",
"time": "Час"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Інформаційні панелі",
"datasources": "Джерела даних",
@ -856,7 +862,7 @@
"platforms": "Платформи",
"totalRoms": "Ігри",
"saves": "Збереження",
"states": "Штати",
"states": "Стани",
"screenshots": "Знімки екрану",
"totalfilesize": "Загальний обсяг"
},
@ -1010,5 +1016,19 @@
"issues": "Питання",
"merges": "Запити на злиття",
"projects": "Проєкти"
},
"apcups": {
"status": "Стан",
"load": "Завантаження",
"bcharge": "Заряд батареї",
"timeleft": "Залишилось"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Теги"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@ -1010,5 +1016,19 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Trạng thái",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Thời gian còn lại"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "在線",
"received": "已接收",
"sent": "已送出",
"externalIPAddress": "外部 IP"
"externalIPAddress": "外部 IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "上行",
@ -176,7 +178,7 @@
"connectedAp": "已連接的存取點",
"activeUser": "在線裝置",
"alerts": "警示",
"connectedGateway": "已連接的閘道",
"connectedGateways": "Connected gateways",
"connectedSwitches": "已連接的交換器"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "已處理",
"time": "時間"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "控制面板",
"datasources": "數據來源",
@ -1010,5 +1016,19 @@
"issues": "出版",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "狀況",
"load": "負荷",
"bcharge": "充電",
"timeleft": "用時"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "標籤"
}
}

View File

@ -148,7 +148,9 @@
"up": "Up",
"received": "已接收",
"sent": "已发送",
"externalIPAddress": "外部IP"
"externalIPAddress": "外部IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "上游",
@ -176,7 +178,7 @@
"connectedAp": "连接中的AP",
"activeUser": "活跃设备",
"alerts": "警报",
"connectedGateway": "已连接网关",
"connectedGateways": "Connected gateways",
"connectedSwitches": "已连接开关"
},
"nzbget": {
@ -311,13 +313,13 @@
},
"suwayomi": {
"download": "下载",
"nondownload": "Non-Downloaded",
"nondownload": "未下载",
"read": "已读",
"unread": "未读",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
"downloadedread": "已下载 & 已读",
"downloadedunread": "已下载 & 未读",
"nondownloadedread": "未下载 & 已读",
"nondownloadedunread": "未下载 & 未读"
},
"tailscale": {
"address": "地址",
@ -702,6 +704,10 @@
"processed": "已处理",
"time": "时间"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "控制面板",
"datasources": "数据来源",
@ -980,7 +986,7 @@
},
"beszel": {
"name": "Name",
"systems": "Systems",
"systems": "系统",
"up": "Up",
"down": "Down",
"paused": "暂停",
@ -989,26 +995,40 @@
"updated": "已升级",
"cpu": "CPU",
"memory": "内存",
"disk": "Disk",
"network": "NET"
"disk": "磁盘",
"network": "网络"
},
"argocd": {
"apps": "应用程序",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"synced": "已同步",
"outOfSync": "未同步",
"healthy": "健康",
"degraded": "Degraded",
"progressing": "Progressing",
"degraded": "已降级",
"progressing": "进行中",
"missing": "丢失",
"suspended": "Suspended"
"suspended": "已停用"
},
"spoolman": {
"loading": "正在加载"
},
"gitlab": {
"groups": "Groups",
"groups": "群组",
"issues": "问题",
"merges": "Merge Requests",
"projects": "Projects"
"merges": "合并请求",
"projects": "项目"
},
"apcups": {
"status": "状态",
"load": "负载",
"bcharge": "充电中",
"timeleft": "剩余时间"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
}
}

View File

@ -148,7 +148,9 @@
"up": "在線",
"received": "已接收",
"sent": "已送出",
"externalIPAddress": "外部 IP"
"externalIPAddress": "外部 IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "上行",
@ -176,7 +178,7 @@
"connectedAp": "已連接的存取點",
"activeUser": "在線裝置",
"alerts": "警示",
"connectedGateway": "已連接的閘道",
"connectedGateways": "Connected gateways",
"connectedSwitches": "已連接的交換器"
},
"nzbget": {
@ -702,6 +704,10 @@
"processed": "已處理",
"time": "時間"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "控制面板",
"datasources": "數據來源",
@ -1010,5 +1016,19 @@
"issues": "出版",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "狀態",
"load": "負載",
"bcharge": "充電",
"timeleft": "剩餘時間"
},
"hoarder": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "標籤"
}
}

View File

@ -2,7 +2,6 @@ import { useRef, useEffect } from "react";
import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react";
import { MdKeyboardArrowDown } from "react-icons/md";
import ErrorBoundary from "components/errorboundry";
import List from "components/bookmarks/list";
import ResolvedIcon from "components/resolvedicon";
@ -35,7 +34,7 @@ export default function BookmarksGroup({
{layout?.header !== false && (
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
{layout?.icon && (
<div className="flex-shrink-0 mr-2 w-7 h-7 bookmark-group-icon">
<div className="shrink-0 mr-2 w-7 h-7 bookmark-group-icon">
<ResolvedIcon icon={layout.icon} />
</div>
)}
@ -53,7 +52,7 @@ export default function BookmarksGroup({
)}
<Transition
// Otherwise the transition group does display: none and cancels animation
className="!block"
className="block!"
unmount={false}
beforeLeave={() => {
panel.current.style.height = `${panel.current.scrollHeight}px`;

View File

@ -1,6 +1,5 @@
import { useContext } from "react";
import classNames from "classnames";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
@ -23,7 +22,7 @@ export default function Item({ bookmark, iconOnly = false }) {
className={classNames(
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
"text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10",
iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-15 mb-3",
iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-8 mb-3",
)}
>
{iconOnly ? (
@ -37,9 +36,9 @@ export default function Item({ bookmark, iconOnly = false }) {
</div>
) : (
<div className="flex">
<div className="flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md bookmark-icon">
<div className="shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md bookmark-icon">
{bookmark.icon && (
<div className="flex-shrink-0 w-5 h-5">
<div className="shrink-0 w-5 h-5">
<ResolvedIcon icon={bookmark.icon} alt={bookmark.abbr} />
</div>
)}

View File

@ -1,9 +1,8 @@
import classNames from "classnames";
import Item from "components/bookmarks/item";
import { columnMap } from "../../utils/layout/columns";
import Item from "components/bookmarks/item";
export default function List({ bookmarks, layout, bookmarksStyle }) {
let classes = layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col bookmark-list";
const style = {};

View File

@ -1,9 +1,9 @@
/* eslint-disable @next/next/no-img-element */
/* eslint-disable jsx-a11y/alt-text */
import { useRef, useEffect, useContext } from "react";
import { ColorContext } from "utils/contexts/color";
import themes from "utils/styles/themes";
import { ColorContext } from "utils/contexts/color";
export function Svg({ svgRef = null }) {
const { color } = useContext(ColorContext);

View File

@ -2,12 +2,11 @@ import { useTranslation } from "react-i18next";
import { useEffect, useState, useRef, useCallback, useContext } from "react";
import classNames from "classnames";
import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "./resolvedicon";
import { getStoredProvider, searchProviders } from "./widgets/search/search";
import { SettingsContext } from "utils/contexts/settings";
export default function QuickLaunch({ servicesAndBookmarks, searchString, setSearchString, isOpen, close }) {
const { t } = useTranslation();
@ -255,10 +254,10 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
role="dialog"
aria-modal="true"
>
<div className="fixed inset-0 bg-gray-500 bg-opacity-50" />
<div className="fixed inset-0 bg-gray-500 opacity-50" />
<div className="fixed inset-0 z-20 overflow-y-auto">
<div className="flex min-h-full min-w-full items-start justify-center text-center">
<dialog className="mt-[10%] min-w-[90%] max-w-[90%] md:min-w-[40%] md:max-w-[40%] rounded-md p-0 block font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-50 dark:bg-theme-800">
<dialog className="mt-[10%] mx-auto min-w-[90%] max-w-[90%] md:min-w-[40%] md:max-w-[40%] rounded-md p-0 block font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-50 dark:bg-theme-800">
<input
placeholder="Search"
className={classNames(

View File

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

View File

@ -7,7 +7,7 @@ export default function Dropdown({ options, value, setValue }) {
return (
<Menu as="div" className="relative inline-block text-left">
<div>
<Menu.Button className="text-xs inline-flex w-full items-center rounded bg-theme-200/50 dark:bg-theme-900/20 px-3 py-1.5">
<Menu.Button className="text-xs inline-flex w-full items-center rounded-sm bg-theme-200/50 dark:bg-theme-900/20 px-3 py-1.5">
{options.find((option) => option.value === value).label}
<BiCog className="-mr-1 ml-2 h-4 w-4" aria-hidden="true" />
</Menu.Button>
@ -22,7 +22,7 @@ export default function Dropdown({ options, value, setValue }) {
leaveFrom="transform opacity-100 scale-100"
leaveTo="transform opacity-0 scale-95"
>
<Menu.Items className="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-theme-200/50 dark:bg-theme-900/50 backdrop-blur shadow-md focus:outline-none text-theme-700 dark:text-theme-200">
<Menu.Items className="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-md bg-theme-200/50 dark:bg-theme-900/50 backdrop-blur-sm shadow-md focus:outline-hidden text-theme-700 dark:text-theme-200">
<div className="py-1">
{options.map((option) => (
<Menu.Item key={option.value} as={Fragment}>
@ -33,7 +33,7 @@ export default function Dropdown({ options, value, setValue }) {
type="button"
className={classNames(
value === option.value ? "bg-theme-300/40 dark:bg-theme-900/40" : "",
"w-full block px-3 py-1.5 text-sm hover:bg-theme-300/70 hover:dark:bg-theme-900/70 text-left",
"w-full block px-3 py-1.5 text-sm hover:bg-theme-300/70 dark:hover:bg-theme-900/70 text-left",
)}
>
{option.label}

View File

@ -2,12 +2,11 @@ import { useRef, useEffect } from "react";
import classNames from "classnames";
import { Disclosure, Transition } from "@headlessui/react";
import { MdKeyboardArrowDown } from "react-icons/md";
import { columnMap } from "../../utils/layout/columns";
import List from "components/services/list";
import ResolvedIcon from "components/resolvedicon";
import { columnMap } from "../../utils/layout/columns";
export default function ServicesGroup({
group,
layout,
@ -43,7 +42,7 @@ export default function ServicesGroup({
{layout?.header !== false && (
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
{layout?.icon && (
<div className="flex-shrink-0 mr-2 w-7 h-7 service-group-icon">
<div className="shrink-0 mr-2 w-7 h-7 service-group-icon">
<ResolvedIcon icon={layout.icon} />
</div>
)}
@ -61,7 +60,7 @@ export default function ServicesGroup({
)}
<Transition
// Otherwise the transition group does display: none and cancels animation
className="!block"
className="block!"
unmount={false}
beforeLeave={() => {
panel.current.style.height = `${panel.current.scrollHeight}px`;

View File

@ -1,5 +1,9 @@
import classNames from "classnames";
import { useContext, useState } from "react";
import Docker from "widgets/docker/component";
import Kubernetes from "widgets/kubernetes/component";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
import Status from "./status";
import Widget from "./widget";
@ -7,11 +11,6 @@ import Ping from "./ping";
import SiteMonitor from "./site-monitor";
import KubernetesStatus from "./kubernetes-status";
import Docker from "widgets/docker/component";
import Kubernetes from "widgets/kubernetes/component";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
export default function Item({ service, groupName, useEqualHeights }) {
const hasLink = service.href && service.href !== "#";
const { settings } = useContext(SettingsContext);
@ -47,13 +46,13 @@ export default function Item({ service, groupName, useEqualHeights }) {
href={service.href}
target={service.target ?? settings.target ?? "_blank"}
rel="noreferrer"
className="flex-shrink-0 flex items-center justify-center w-12 service-icon z-10"
className="shrink-0 flex items-center justify-center w-12 service-icon z-10"
aria-label={service.icon}
>
<ResolvedIcon icon={service.icon} />
</a>
) : (
<div className="flex-shrink-0 flex items-center justify-center w-12 service-icon z-10">
<div className="shrink-0 flex items-center justify-center w-12 service-icon z-10">
<ResolvedIcon icon={service.icon} />
</div>
))}
@ -89,14 +88,14 @@ export default function Item({ service, groupName, useEqualHeights }) {
} z-10 service-tags`}
>
{service.ping && (
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">
<div className="shrink-0 flex items-center justify-center service-tag service-ping">
<Ping groupName={groupName} serviceName={service.name} style={statusStyle} />
<span className="sr-only">Ping status</span>
</div>
)}
{service.siteMonitor && (
<div className="flex-shrink-0 flex items-center justify-center service-tag service-site-monitor">
<div className="shrink-0 flex items-center justify-center service-tag service-site-monitor">
<SiteMonitor groupName={groupName} serviceName={service.name} style={statusStyle} />
<span className="sr-only">Site monitor status</span>
</div>
@ -106,7 +105,7 @@ export default function Item({ service, groupName, useEqualHeights }) {
<button
type="button"
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
className="flex-shrink-0 flex items-center justify-center cursor-pointer service-tag service-container-stats"
className="shrink-0 flex items-center justify-center cursor-pointer service-tag service-container-stats"
>
<Status service={service} style={statusStyle} />
<span className="sr-only">View container stats</span>
@ -116,7 +115,7 @@ export default function Item({ service, groupName, useEqualHeights }) {
<button
type="button"
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
className="flex-shrink-0 flex items-center justify-center cursor-pointer service-tag service-app"
className="shrink-0 flex items-center justify-center cursor-pointer service-tag service-app"
>
<KubernetesStatus service={service} style={statusStyle} />
<span className="sr-only">View container stats</span>
@ -128,7 +127,7 @@ export default function Item({ service, groupName, useEqualHeights }) {
{service.container && service.server && (
<div
className={classNames(
showStats || (statsOpen && !statsClosing) ? "max-h-[110px] opacity-100" : " max-h-[0] opacity-0",
showStats || (statsOpen && !statsClosing) ? "max-h-[110px] opacity-100" : " max-h-0 opacity-0",
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats",
)}
>
@ -140,7 +139,7 @@ export default function Item({ service, groupName, useEqualHeights }) {
{service.app && (
<div
className={classNames(
showStats || (statsOpen && !statsClosing) ? "max-h-[55px] opacity-100" : " max-h-[0] opacity-0",
showStats || (statsOpen && !statsClosing) ? "max-h-[55px] opacity-100" : " max-h-0 opacity-0",
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats",
)}
>

View File

@ -1,9 +1,8 @@
import classNames from "classnames";
import Item from "components/services/item";
import { columnMap } from "../../utils/layout/columns";
import Item from "components/services/item";
export default function List({ groupName, services, layout, useEqualHeights, header }) {
return (
<ul

View File

@ -1,6 +1,6 @@
import { useTranslation } from "next-i18next";
import ErrorBoundary from "components/errorboundry";
import components from "widgets/components";
export default function Widget({ widget, service }) {
@ -19,7 +19,7 @@ export default function Widget({ widget, service }) {
}
return (
<div className="bg-theme-200/50 dark:bg-theme-900/20 rounded m-1 flex-1 flex flex-col items-center justify-center p-1 service-missing">
<div className="bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-col items-center justify-center p-1 service-missing">
<div className="font-thin text-sm">{t("widget.missing_type", { type: widget.type })}</div>
</div>
);

View File

@ -7,7 +7,7 @@ export default function Block({ value, label }) {
return (
<div
className={classNames(
"bg-theme-200/50 dark:bg-theme-900/20 rounded m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
"bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
value === undefined ? "animate-pulse" : "",
"service-block",
)}

View File

@ -1,9 +1,8 @@
import { useContext } from "react";
import { SettingsContext } from "utils/contexts/settings";
import Error from "./error";
import { SettingsContext } from "utils/contexts/settings";
export default function Container({ error = false, children, service }) {
const { settings } = useContext(SettingsContext);

View File

@ -22,13 +22,13 @@ export default function Error({ error }) {
return (
<details className="px-1 pb-1">
<summary className="block text-center mt-1 mb-0 mx-auto p-3 rounded bg-rose-900/80 hover:bg-rose-900/95 text-theme-900 cursor-pointer">
<summary className="block text-center mt-1 mb-0 mx-auto p-3 rounded-sm bg-rose-900/80 hover:bg-rose-900/95 text-theme-900 cursor-pointer">
<div className="flex items-center justify-center text-xs font-bold">
<IoAlertCircle className="mr-1 w-5 h-5" />
{t("widget.api_error")} {error.message && t("widget.information")}
</div>
</summary>
<div className="bg-white dark:bg-theme-200/50 mt-2 rounded text-rose-900 text-xs font-mono whitespace-pre-wrap break-all">
<div className="bg-white dark:bg-theme-200/50 mt-2 rounded-sm text-rose-900 text-xs font-mono whitespace-pre-wrap break-all">
<ul className="p-4">
{error.message && (
<li>

View File

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

View File

@ -2,7 +2,6 @@ import { useContext, Fragment } from "react";
import { IoColorPalette } from "react-icons/io5";
import { Popover, Transition } from "@headlessui/react";
import classNames from "classnames";
import { ColorContext } from "utils/contexts/color";
const colors = [
@ -40,7 +39,7 @@ export default function ColorToggle() {
return (
<div id="color" className="w-full self-center">
<Popover className="relative flex items-center">
<Popover.Button className="outline-none">
<Popover.Button className="outline-hidden">
<IoColorPalette
className="h-5 w-5 text-theme-800 dark:text-theme-200 transition duration-150 ease-in-out"
aria-hidden="true"

View File

@ -1,6 +1,5 @@
import { useContext } from "react";
import { MdDarkMode, MdLightMode, MdToggleOff, MdToggleOn } from "react-icons/md";
import { ThemeContext } from "utils/contexts/theme";
export default function ThemeToggle() {

View File

@ -1,9 +1,12 @@
import cache from "memory-cache";
import { useTranslation } from "next-i18next";
import useSWR from "swr";
import { compareVersions } from "compare-versions";
import { compareVersions, validate } from "compare-versions";
import { MdNewReleases } from "react-icons/md";
export default function Version() {
const LATEST_RELEASE_CACHE_KEY = "latestRelease";
export default function Version({ disableUpdateCheck = false }) {
const { t, i18n } = useTranslation();
const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length
@ -12,8 +15,6 @@ export default function Version() {
const revision = process.env.NEXT_PUBLIC_REVISION?.length ? process.env.NEXT_PUBLIC_REVISION : "dev";
const version = process.env.NEXT_PUBLIC_VERSION?.length ? process.env.NEXT_PUBLIC_VERSION : "dev";
const { data: releaseData } = useSWR("/api/releases");
// use Intl.DateTimeFormat to format the date
const formatDate = (date) => {
const options = {
@ -24,7 +25,15 @@ export default function Version() {
return new Intl.DateTimeFormat(i18n.language, options).format(new Date(date));
};
const latestRelease = releaseData?.[0];
let latestRelease = cache.get(LATEST_RELEASE_CACHE_KEY);
const { data: releaseData } = useSWR(latestRelease || disableUpdateCheck ? null : "/api/releases");
if (releaseData) {
latestRelease = releaseData?.[0];
// cache the latest release for 1h
cache.put(LATEST_RELEASE_CACHE_KEY, latestRelease, 3600000);
}
return (
<div id="version" className="flex flex-row items-center">
@ -44,7 +53,7 @@ export default function Version() {
</a>
)}
</span>
{version === "main" || version === "dev" || version === "nightly"
{!validate(version)
? null
: releaseData &&
latestRelease &&

View File

@ -4,14 +4,13 @@ import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa";
import { FiCpu, FiHardDrive } from "react-icons/fi";
import { useTranslation } from "next-i18next";
import classNames from "classnames";
import { SettingsContext } from "utils/contexts/settings";
import Error from "../widget/error";
import Resource from "../widget/resource";
import Resources from "../widget/resources";
import WidgetLabel from "../widget/widget_label";
import { SettingsContext } from "utils/contexts/settings";
const cpuSensorLabels = ["cpu_thermal", "Core", "Tctl"];
function convertToFahrenheit(t) {

View File

@ -1,8 +1,8 @@
import ResolvedIcon from "components/resolvedicon";
import Container from "../widget/container";
import Raw from "../widget/raw";
import ResolvedIcon from "components/resolvedicon";
export default function Logo({ options }) {
return (
<Container

View File

@ -191,7 +191,7 @@ export default function Search({ options }) {
<div>
<Listbox.Button
className="
absolute right-0.5 bottom-0.5 rounded-r-md px-4 py-2 border-1
absolute right-0.5 bottom-0.5 rounded-r-md px-4 py-2
text-white font-medium text-sm
bg-theme-600/40 dark:bg-white/10
focus:ring-theme-500 dark:focus:ring-white/50"
@ -212,7 +212,7 @@ export default function Search({ options }) {
<Listbox.Options
className="absolute right-0 z-10 mt-1 origin-top-right rounded-md
bg-theme-100 dark:bg-theme-600 shadow-lg
ring-1 ring-black ring-opacity-5 focus:outline-none"
ring-1 ring-black ring-opacity-5 focus:outline-hidden"
>
<div className="flex flex-col">
{availableProviderIds.map((providerId) => {

View File

@ -40,7 +40,7 @@ export default function Widget({ options }) {
<button
type="button"
onClick={() => setViewingPercentChange(!viewingPercentChange)}
className="flex items-center w-full h-full hover:outline-none focus:outline-none"
className="flex items-center w-full h-full hover:outline-hidden focus:outline-hidden"
>
<FaChartLine className="flex-none w-5 h-5 text-theme-800 dark:text-theme-200 mr-2" />
<div className="flex flex-wrap items-center gap-0.5">
@ -49,7 +49,7 @@ export default function Widget({ options }) {
stock && (
<div
key={stock.ticker}
className="rounded h-full text-xs px-1 w-[4.75rem] flex flex-col items-center justify-center"
className="rounded-sm h-full text-xs px-1 w-[4.75rem] flex flex-col items-center justify-center"
>
<span className="text-theme-800 dark:text-theme-200 text-xs">
{stock.ticker.split(":").pop()}

View File

@ -1,5 +1,4 @@
import dynamic from "next/dynamic";
import ErrorBoundary from "components/errorboundry";
const widgetMappings = {

View File

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

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