mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-06 21:57:48 +01:00
Compare commits
52 Commits
bd81ac8326
...
v1.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b6b428363c | ||
|
|
e707fa46cf | ||
|
|
3d040362cb | ||
|
|
57b193b037 | ||
|
|
8a75c9b6e3 | ||
|
|
0dafc792f7 | ||
|
|
afc0fe29ee | ||
|
|
817a9bbce5 | ||
|
|
3ef7031eb0 | ||
|
|
6faf32eae9 | ||
|
|
455e86571a | ||
|
|
7d1e0c087a | ||
|
|
d48ef4c038 | ||
|
|
4a2eeaa8b9 | ||
|
|
faa2e6bb36 | ||
|
|
438543d8cd | ||
|
|
5a350cc9ce | ||
|
|
529814cf03 | ||
|
|
9b5275a854 | ||
|
|
e623196ac0 | ||
|
|
973b1f7aaf | ||
|
|
81a322cc99 | ||
|
|
36e82a8b90 | ||
|
|
1383e22acd | ||
|
|
a756a01d63 | ||
|
|
937efc9f1b | ||
|
|
fe6f32f072 | ||
|
|
226603770c | ||
|
|
2f48d21bfd | ||
|
|
4457baffa5 | ||
|
|
91d12c401c | ||
|
|
3f8da51aeb | ||
|
|
837717461f | ||
|
|
effedc28ed | ||
|
|
76b477572e | ||
|
|
6c6660b91b | ||
|
|
6886040798 | ||
|
|
1fb4850bef | ||
|
|
06cf76d724 | ||
|
|
7aeda56af4 | ||
|
|
2058b7fcae | ||
|
|
1e06e93e47 | ||
|
|
8f756d4084 | ||
|
|
02089a35ee | ||
|
|
f7a6b7dbf4 | ||
|
|
4028194830 | ||
|
|
4c04a7a45f | ||
|
|
ce344a9db5 | ||
|
|
8e90ece498 | ||
|
|
151ad552ca | ||
|
|
8ebd0d0b2e | ||
|
|
5fe5a3869e |
8
.github/workflows/docker-publish.yml
vendored
8
.github/workflows/docker-publish.yml
vendored
@@ -35,10 +35,11 @@ jobs:
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
@@ -93,10 +94,11 @@ jobs:
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v5
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 20
|
||||
cache: 'pnpm'
|
||||
@@ -127,7 +129,7 @@ jobs:
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Setup QEMU
|
||||
uses: docker/setup-qemu-action@v3.6.0
|
||||
uses: docker/setup-qemu-action@v3.7.0
|
||||
|
||||
- name: Setup Docker buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
@@ -51,6 +51,8 @@ COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
|
||||
|
||||
RUN apk add --no-cache su-exec iputils-ping shadow
|
||||
|
||||
USER root
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV HOSTNAME=0.0.0.0
|
||||
ENV PORT=3000
|
||||
|
||||
@@ -57,8 +57,8 @@ if [ -d /app/.next ]; then
|
||||
fi
|
||||
|
||||
# Drop privileges (when asked to) if root, otherwise run as current user
|
||||
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
|
||||
su-exec ${PUID}:${PGID} "$@"
|
||||
if [ "$(id -u)" = "0" ] && [ "${PUID}" != "0" ]; then
|
||||
exec su-exec ${PUID}:${PGID} "$@"
|
||||
else
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
@@ -271,4 +271,4 @@ You can show the docker stats by clicking the status indicator but this can also
|
||||
showStats: true
|
||||
```
|
||||
|
||||
Also see the settings for [show docker stats](settings.md#show-docker-stats).
|
||||
Also see the settings for [show docker stats](settings.md#show-container-stats).
|
||||
|
||||
@@ -178,3 +178,32 @@ See [ClusterRole and ClusterRoleBinding](../installation/k8s.md#clusterrole-and-
|
||||
## 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`.
|
||||
|
||||
## Adding extra configuration files
|
||||
|
||||
Some Homepage features (for example, [Proxmox](../configs/proxmox.md)) require additional configuration files such as `proxmox.yaml`.
|
||||
When running Homepage on Kubernetes, these files must be provided via a `ConfigMap` and mounted into the container at `/app/config`.
|
||||
|
||||
### ConfigMap example
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: homepage
|
||||
data:
|
||||
proxmox.yaml: |
|
||||
pve:
|
||||
url: https://proxmox.host.or.ip:8006
|
||||
token: username@pam!Token ID
|
||||
secret: secret
|
||||
```
|
||||
|
||||
Mount the file into `/app/config` by updating the `Deployment`:
|
||||
|
||||
```yaml
|
||||
volumeMounts:
|
||||
- mountPath: /app/config/proxmox.yaml
|
||||
name: homepage-config
|
||||
subPath: proxmox.yaml
|
||||
```
|
||||
|
||||
@@ -4,10 +4,10 @@ description: Proxmox Configuration
|
||||
---
|
||||
|
||||
The Proxmox connection is configured in the `proxmox.yaml` file. See [Create token](#create-token) section below for details on how to generate the required API token.
|
||||
You can configure multiple nodes - be sure to use the exact `proxmoxNode` identifier!
|
||||
To configure multiple nodes, ensure the key name in the `proxmox.yaml` matches the `proxmoxNode` field used in your service configuration.
|
||||
|
||||
```yaml
|
||||
pve:
|
||||
pve: # must match your actual Proxmox node name
|
||||
url: https://proxmox.host.or.ip:8006
|
||||
token: username@pam!Token ID
|
||||
secret: secret
|
||||
|
||||
@@ -118,6 +118,47 @@ Each widget can optionally provide a list of which fields should be visible via
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
```
|
||||
|
||||
### Block Highlighting
|
||||
|
||||
Widgets can tint their metric block text automatically based on rules defined alongside the service. Attach a `highlight` section to the widget configuration and map each block to one or more numeric or string rules using the field key (for example, `queued`, `lan_users`).
|
||||
|
||||
```yaml
|
||||
- Sonarr:
|
||||
icon: sonarr.png
|
||||
href: http://sonarr.host.or.ip
|
||||
widget:
|
||||
type: sonarr
|
||||
url: http://sonarr.host.or.ip
|
||||
key: ${SONARR_API_KEY}
|
||||
highlight:
|
||||
queued:
|
||||
numeric:
|
||||
- level: danger
|
||||
when: gte
|
||||
value: 20
|
||||
- level: warn
|
||||
when: gte
|
||||
value: 5
|
||||
- level: good
|
||||
when: eq
|
||||
value: 0
|
||||
status:
|
||||
string:
|
||||
- level: danger
|
||||
when: regex
|
||||
value: "(failed|import) pending"
|
||||
- level: good
|
||||
when: equals
|
||||
value: "All good"
|
||||
status_code:
|
||||
string:
|
||||
- level: warn
|
||||
when: regex
|
||||
value: "^5\\d{2}$"
|
||||
```
|
||||
|
||||
Supported numeric operators for the `when` property are `gt`, `gte`, `lt`, `lte`, `eq`, `ne`, `between`, and `outside`. String rules support `equals`, `includes`, `startsWith`, `endsWith`, and `regex`. Each rule can be inverted with `negate: true`, and string rules may pass `caseSensitive: true` or custom regex `flags`. The highlight engine does its best to coerce formatted values, but you will get the most reliable results when you pass plain numbers or strings into `<Block>`.
|
||||
|
||||
## Descriptions
|
||||
|
||||
Services may have descriptions,
|
||||
|
||||
@@ -109,6 +109,20 @@ color: slate
|
||||
|
||||
Supported colors are: `slate`, `gray`, `zinc`, `neutral`, `stone`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`, `red`, `white`
|
||||
|
||||
## Block Highlight Levels
|
||||
|
||||
You can override the default Tailwind classes applied when a widget highlight rule resolves to the `good`, `warn`, or `danger` level.
|
||||
|
||||
```yaml
|
||||
blockHighlights:
|
||||
levels:
|
||||
good: "bg-emerald-500/40 text-emerald-950 dark:bg-emerald-900/60 dark:text-emerald-400"
|
||||
warn: "bg-amber-300/30 text-amber-900 dark:bg-amber-900/30 dark:text-amber-200"
|
||||
danger: "bg-rose-700/45 text-rose-200 dark:bg-rose-950/70 dark:text-rose-400"
|
||||
```
|
||||
|
||||
Any unspecified level falls back to the built-in defaults.
|
||||
|
||||
## Layout
|
||||
|
||||
You can configure service and bookmarks sections to be either "column" or "row" based layouts, like so:
|
||||
@@ -486,9 +500,9 @@ logpath: /logfile/path
|
||||
|
||||
By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`.
|
||||
|
||||
## Show Docker Stats
|
||||
## Show Container Stats
|
||||
|
||||
You can show all docker stats expanded in `settings.yaml`:
|
||||
You can show all docker or proxmox stats expanded in `settings.yaml`:
|
||||
|
||||
```yaml
|
||||
showStats: true
|
||||
|
||||
@@ -62,3 +62,4 @@ To ensure cohesiveness of various widgets, the following should be used as a gui
|
||||
- Minimize the number of API calls
|
||||
- Avoid the use of custom proxy unless absolutely necessary
|
||||
- Widgets should be 'read-only', as in they should not make write changes using the relevant tool's API. Homepage widgets are designed to surface information, not to be a (usually worse) replacement for the tool itself.
|
||||
- Widgets should not allow manually overriding the "refresh interval" setting, as misconfigured refresh intervals can easily lead to performance issues for users.
|
||||
|
||||
@@ -32,7 +32,7 @@ More detail on configuring service widgets can be found in the [Service Widgets
|
||||
|
||||
## Info Widgets
|
||||
|
||||
Info widgets are used to display information in the header, often about your system or environment. Info widgets are defined your `widgets.yaml` file. Here's an example:
|
||||
Info widgets are used to display information in the header, often about your system or environment. Info widgets are defined in your `widgets.yaml` file. Here's an example:
|
||||
|
||||
```yaml
|
||||
- openmeteo:
|
||||
|
||||
@@ -17,6 +17,6 @@ widget:
|
||||
url: http://komodo.hostname.or.ip:port
|
||||
key: K-xxxxxx...
|
||||
secret: S-xxxxxx...
|
||||
showSummary: true # optional, default: false
|
||||
showSummary: true # optional, default: false. Takes precedence over showStacks
|
||||
showStacks: true # optional, default: false
|
||||
```
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Omada
|
||||
description: Omada Widget Configuration
|
||||
---
|
||||
|
||||
The widget supports controller versions 3, 4 and 5.
|
||||
The widget supports controller versions 3, 4, 5 and 6.
|
||||
|
||||
Allowed fields: `["connectedAp", "activeUser", "alerts", "connectedGateways", "connectedSwitches"]`.
|
||||
|
||||
|
||||
@@ -16,4 +16,5 @@ widget:
|
||||
username: username
|
||||
password: password
|
||||
enableLeechProgress: true # optional, defaults to false
|
||||
enableLeechSize: true # optional, defaults to false
|
||||
```
|
||||
|
||||
@@ -10,11 +10,11 @@ The Unraid widget allows you to monitor the resources of an Unraid server.
|
||||
**Minimum Requirements:**
|
||||
|
||||
- Unraid 7.2 -or- Unraid Connect plugin 2025.08.19.1850
|
||||
- API key with the **GUEST** (read only) role: [Managing API Keys](https://docs.unraid.net/go/managing-api-keys)
|
||||
- API key with the **ADMIN** role: [Managing API Keys](https://docs.unraid.net/go/managing-api-keys)
|
||||
|
||||
The widget can display metrics for selected Unraid pools. If using one of the "pool" fields, you must also add the pool name to the settings.
|
||||
|
||||
**Allowed fields:** `["cpu","memoryPercent","memoryAvailable","memoryUsed","notifications","arrayFreeSpace","arrayUsedSpace","arrayUsedPercent","status","pool1UsedSpace","pool1FreeSpace","pool1UsedPercent","pool2UsedSpace","pool2FreeSpace","pool2UsedPercent","pool3UsedSpace","pool3FreeSpace","pool3UsedPercent","pool4UsedSpace","pool4FreeSpace","pool4UsedPercent"]`
|
||||
**Allowed fields:** `["cpu","memoryPercent","memoryAvailable","memoryUsed","notifications","arrayFree","arrayUsedSpace","arrayUsedPercent","status","pool1UsedSpace","pool1FreeSpace","pool1UsedPercent","pool2UsedSpace","pool2FreeSpace","pool2UsedPercent","pool3UsedSpace","pool3FreeSpace","pool3UsedPercent","pool4UsedSpace","pool4FreeSpace","pool4UsedPercent"]`
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
|
||||
28
docs/widgets/services/yourspotify.md
Normal file
28
docs/widgets/services/yourspotify.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Your Spotify
|
||||
description: Your Spotify Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Your Spotify](https://github.com/Yooooomi/your_spotify).
|
||||
|
||||
Find your API key under `Settings > Account > Public token`, click `Generate` if not yet generated, copy key after
|
||||
`?token=`.
|
||||
|
||||
Allowed fields: `["songs", "time", "artists"]`.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: yourspotify
|
||||
url: http://your-spotify-server.host.or.ip # if using lsio image, add /api/
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
interval: month # optional, defaults to week
|
||||
```
|
||||
|
||||
#### Interval
|
||||
|
||||
Allowed values for `interval`: `day`, `week`, `month`, `year`, `all`.
|
||||
|
||||
!!! note
|
||||
|
||||
`interval` is different from predefined intervals you see in `Your Spotify`'s UI.
|
||||
For example, `This week` in UI means _from the start of this week_, here `week` means _past 7 days_.
|
||||
@@ -176,6 +176,7 @@ nav:
|
||||
- widgets/services/wgeasy.md
|
||||
- widgets/services/whatsupdocker.md
|
||||
- widgets/services/xteve.md
|
||||
- widgets/services/yourspotify.md
|
||||
- widgets/services/zabbix.md
|
||||
- "Information Widgets":
|
||||
- widgets/info/index.md
|
||||
|
||||
27
package.json
27
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homepage",
|
||||
"version": "1.4.6",
|
||||
"version": "1.7.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
@@ -11,14 +11,14 @@
|
||||
"telemetry": "next telemetry disable"
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^2.2.7",
|
||||
"@headlessui/react": "^2.2.9",
|
||||
"@kubernetes/client-node": "^1.0.0",
|
||||
"classnames": "^2.5.1",
|
||||
"compare-versions": "^6.1.1",
|
||||
"dockerode": "^4.0.7",
|
||||
"follow-redirects": "^1.15.11",
|
||||
"gamedig": "^5.3.1",
|
||||
"i18next": "^24.2.3",
|
||||
"gamedig": "^5.3.2",
|
||||
"i18next": "^25.5.3",
|
||||
"ical.js": "^2.1.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-rpc-2.0": "^1.7.0",
|
||||
@@ -28,8 +28,8 @@
|
||||
"next": "^15.5.2",
|
||||
"next-i18next": "^12.1.0",
|
||||
"ping": "^0.4.4",
|
||||
"pretty-bytes": "^6.1.1",
|
||||
"raw-body": "^3.0.0",
|
||||
"pretty-bytes": "^7.1.0",
|
||||
"raw-body": "^3.0.1",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-i18next": "^15.5.3",
|
||||
@@ -44,18 +44,18 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/forms": "^0.5.10",
|
||||
"@tailwindcss/postcss": "^4.0.9",
|
||||
"@tailwindcss/postcss": "^4.1.14",
|
||||
"eslint": "^9.25.1",
|
||||
"eslint-config-next": "^15.2.4",
|
||||
"eslint-config-prettier": "^10.1.1",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-prettier": "^5.5.1",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-react": "^7.37.4",
|
||||
"eslint-plugin-react-hooks": "^5.2.0",
|
||||
"postcss": "^8.5.6",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"prettier-plugin-organize-imports": "^4.3.0",
|
||||
"tailwind-scrollbar": "^4.0.2",
|
||||
"tailwindcss": "^4.0.9",
|
||||
"typescript": "^5.7.3"
|
||||
@@ -63,13 +63,6 @@
|
||||
"optionalDependencies": {
|
||||
"osx-temperature-sensor": "^1.0.8"
|
||||
},
|
||||
"packageManager": "pnpm@10.8.1",
|
||||
"devEngines": {
|
||||
"packageManager": {
|
||||
"name": "pnpm",
|
||||
"version": "10.8.1"
|
||||
}
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"osx-temperature-sensor",
|
||||
|
||||
663
pnpm-lock.yaml
generated
663
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Afwagtend",
|
||||
"approved": "Goedgekeur",
|
||||
"available": "Beskikbaar"
|
||||
"available": "Beskikbaar",
|
||||
"issues": "Oop Kwessies"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Afwagtend",
|
||||
@@ -1073,15 +1074,50 @@
|
||||
"containers": "Houers"
|
||||
},
|
||||
"filebrowser": {
|
||||
"available": "Available",
|
||||
"used": "Used",
|
||||
"total": "Total"
|
||||
"available": "Beskikbaar",
|
||||
"used": "Gebruik",
|
||||
"total": "Totaal"
|
||||
},
|
||||
"wallos": {
|
||||
"activeSubscriptions": "Subscriptions",
|
||||
"thisMonthlyCost": "This Month",
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
"activeSubscriptions": "Intekeninge",
|
||||
"thisMonthlyCost": "Hierdie Maand",
|
||||
"nextMonthlyCost": "Volgende Maand",
|
||||
"previousMonthlyCost": "Vorige Maand",
|
||||
"nextRenewingSubscription": "Volgende paaiement"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Begin",
|
||||
"STOPPED": "Gestop",
|
||||
"NEW_ARRAY": "Nuwe Skikking",
|
||||
"RECON_DISK": "Rekonstruksie van Skyf",
|
||||
"DISABLE_DISK": "Skyf Gedeaktiveer",
|
||||
"SWAP_DSBL": "Ruil Gedeaktiveer",
|
||||
"INVALID_EXPANSION": "Ongeldige Uitbreiding",
|
||||
"PARITY_NOT_BIGGEST": "Pariteit nie die Grootste nie",
|
||||
"TOO_MANY_MISSING_DISKS": "Te Veel Ontbrekende Skywe",
|
||||
"NEW_DISK_TOO_SMALL": "Nuwe Skyf te Klein",
|
||||
"NO_DATA_DISKS": "Geen Data Skywe",
|
||||
"notifications": "Kennisgewings",
|
||||
"status": "Status",
|
||||
"cpu": "SVE",
|
||||
"memoryUsed": "Geheue Gebruik",
|
||||
"memoryAvailable": "Geheue Beskikbaar",
|
||||
"arrayUsed": "Skikking Gebruik",
|
||||
"arrayFree": "Skikking Vry",
|
||||
"poolUsed": "{{pool}} Gebruik",
|
||||
"poolFree": "{{pool}} Vry"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Planne",
|
||||
"num_success_30": "Suksesse",
|
||||
"num_failure_30": "Mislukkings",
|
||||
"num_success_latest": "Slaag",
|
||||
"num_failure_latest": "Mislukking",
|
||||
"bytes_added_30": "Grepe bygevoeg"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Liedjies",
|
||||
"time": "Tyd",
|
||||
"artists": "Kunstenaars"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,8 +93,8 @@
|
||||
"http_status": "HTTP-Status",
|
||||
"error": "Fehler",
|
||||
"response": "Antwort",
|
||||
"down": "Online",
|
||||
"up": "Offline",
|
||||
"down": "Offline",
|
||||
"up": "Online",
|
||||
"not_available": "Nicht verfügbar"
|
||||
},
|
||||
"emby": {
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Wartend",
|
||||
"approved": "Genehmigt",
|
||||
"available": "Verfügbar"
|
||||
"available": "Verfügbar",
|
||||
"issues": "Offene Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Wartend",
|
||||
@@ -629,9 +630,9 @@
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU-Last",
|
||||
"memory": "Aktiver RAM",
|
||||
"wanUpload": "WAN-Upload",
|
||||
"wanDownload": "WAN-Download"
|
||||
"memory": "RAM aktiv",
|
||||
"wanUpload": "WAN Up",
|
||||
"wanDownload": "WAN Down"
|
||||
},
|
||||
"moonraker": {
|
||||
"printer_state": "Druckerstatus",
|
||||
@@ -785,7 +786,7 @@
|
||||
"downloadCount": "Warteschlange",
|
||||
"downloadBytesRemaining": "Verbleibend",
|
||||
"downloadTotalBytes": "Größe",
|
||||
"downloadSpeed": "Geschwindigkeit"
|
||||
"downloadSpeed": "Datenrate"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Serien",
|
||||
@@ -996,8 +997,8 @@
|
||||
"beszel": {
|
||||
"name": "Name",
|
||||
"systems": "Systeme",
|
||||
"up": "Offline",
|
||||
"down": "Offline",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"paused": "Pausiert",
|
||||
"pending": "Wartend",
|
||||
"status": "Status",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Nächster Monat",
|
||||
"previousMonthlyCost": "Vorh. Monat",
|
||||
"nextRenewingSubscription": "Nächste Zahlung"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Gestartet",
|
||||
"STOPPED": "Angehalten",
|
||||
"NEW_ARRAY": "Neues Array",
|
||||
"RECON_DISK": "Festplatte wird neu aufgebaut",
|
||||
"DISABLE_DISK": "Festplatte deaktiviert",
|
||||
"SWAP_DSBL": "Swap deaktivieren",
|
||||
"INVALID_EXPANSION": "Üngültige Erweiterung",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Zu viele fehlende Festplatten",
|
||||
"NEW_DISK_TOO_SMALL": "Neue Festplatte zu klein",
|
||||
"NO_DATA_DISKS": "Keine Datenträger",
|
||||
"notifications": "Mitteilungen",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Speichernutzung",
|
||||
"memoryAvailable": "Verfügbarer Speicher",
|
||||
"arrayUsed": "Array verwendet",
|
||||
"arrayFree": "Array frei",
|
||||
"poolUsed": "{{pool}} verwendet",
|
||||
"poolFree": "{{pool}} frei"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Pläne",
|
||||
"num_success_30": "Erfolgreich",
|
||||
"num_failure_30": "Fehlerhaft",
|
||||
"num_success_latest": "Erfolgreich",
|
||||
"num_failure_latest": "Fehlgeschlagen",
|
||||
"bytes_added_30": "Bytes hinzugefügt"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Titel",
|
||||
"time": "Zeit",
|
||||
"artists": "Künstler"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1114,5 +1114,10 @@
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pendiente",
|
||||
"approved": "Aprobado",
|
||||
"available": "Disponible"
|
||||
"available": "Disponible",
|
||||
"issues": "Issues Abiertos"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pendiente",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Próximo mes",
|
||||
"previousMonthlyCost": "Mes anterior",
|
||||
"nextRenewingSubscription": "Próximo pago"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Iniciado",
|
||||
"STOPPED": "Detenido",
|
||||
"NEW_ARRAY": "Nueva matriz",
|
||||
"RECON_DISK": "Reconstruyendo disco",
|
||||
"DISABLE_DISK": "Disco deshabilitado",
|
||||
"SWAP_DSBL": "Swap deshabilitado",
|
||||
"INVALID_EXPANSION": "Expansión inválida",
|
||||
"PARITY_NOT_BIGGEST": "Paridad no es el más grande",
|
||||
"TOO_MANY_MISSING_DISKS": "Demasiados discos faltantes",
|
||||
"NEW_DISK_TOO_SMALL": "Nuevo disco demasiado pequeño",
|
||||
"NO_DATA_DISKS": "Sin discos de datos",
|
||||
"notifications": "Notificaciones",
|
||||
"status": "Estado",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memoria usada",
|
||||
"memoryAvailable": "Memoria disponible",
|
||||
"arrayUsed": "Matriz usada",
|
||||
"arrayFree": "Matriz libre",
|
||||
"poolUsed": "{{pool}} Usado",
|
||||
"poolFree": "{{pool}} Libre"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Planes",
|
||||
"num_success_30": "Éxitos",
|
||||
"num_failure_30": "Fallos",
|
||||
"num_success_latest": "Exitosa",
|
||||
"num_failure_latest": "Fallida",
|
||||
"bytes_added_30": "Bytes Añadidos"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Canciones",
|
||||
"time": "Tiempo",
|
||||
"artists": "Artistas"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "En attente",
|
||||
"approved": "Approuvé",
|
||||
"available": "Disponible"
|
||||
"available": "Disponible",
|
||||
"issues": "Problèmes non résolus"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "En attente",
|
||||
@@ -439,8 +440,8 @@
|
||||
"cpu": "CPU",
|
||||
"load": "Charge",
|
||||
"wait": "Veuillez patienter",
|
||||
"temp": "Température",
|
||||
"_temp": "Température",
|
||||
"temp": "TEMP",
|
||||
"_temp": "Temp",
|
||||
"warn": "Alerte",
|
||||
"uptime": "Démarré depuis",
|
||||
"total": "Total",
|
||||
@@ -655,7 +656,7 @@
|
||||
"wanStatus": "Statut WAN",
|
||||
"up": "Haut",
|
||||
"down": "Bas",
|
||||
"temp": "Température",
|
||||
"temp": "Temp",
|
||||
"disk": "Util. Disque",
|
||||
"wanIP": "IP WAN"
|
||||
},
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Mois prochain",
|
||||
"previousMonthlyCost": "Mois précédent",
|
||||
"nextRenewingSubscription": "Prochain paiement"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Commencé",
|
||||
"STOPPED": "Arrêté",
|
||||
"NEW_ARRAY": "Nouveau tableau",
|
||||
"RECON_DISK": "Reconstruction du disque",
|
||||
"DISABLE_DISK": "Disque désactivé",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Extension invalide",
|
||||
"PARITY_NOT_BIGGEST": "La parité n'est pas la plus grande",
|
||||
"TOO_MANY_MISSING_DISKS": "Trop de disques manquants",
|
||||
"NEW_DISK_TOO_SMALL": "Nouveau disque trop petit",
|
||||
"NO_DATA_DISKS": "Aucun disque de données",
|
||||
"notifications": "Notifications",
|
||||
"status": "État",
|
||||
"cpu": "UCT",
|
||||
"memoryUsed": "Mémoire Utilisé",
|
||||
"memoryAvailable": "Mémoire Disponible",
|
||||
"arrayUsed": "RAID utilisé",
|
||||
"arrayFree": "RAID libre",
|
||||
"poolUsed": "{{pool}} Utilisé",
|
||||
"poolFree": "{{pool}} Libre"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Abonnements",
|
||||
"num_success_30": "Succès",
|
||||
"num_failure_30": "Échecs",
|
||||
"num_success_latest": "Réussi",
|
||||
"num_failure_latest": "Échoué",
|
||||
"bytes_added_30": "Octets ajoutés"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Musiques",
|
||||
"time": "Durée",
|
||||
"artists": "Artistes"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "ממתין לאישור",
|
||||
"approved": "מאושר",
|
||||
"available": "זמין"
|
||||
"available": "זמין",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "ממתין לאישור",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "חודש הבא",
|
||||
"previousMonthlyCost": "חודש קודם",
|
||||
"nextRenewingSubscription": "תשלום הבא"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -61,16 +61,16 @@
|
||||
"wlan_devices": "WLAN Eszközök",
|
||||
"lan_users": "LAN Felhasználók",
|
||||
"wlan_users": "WLAN Felhasználók",
|
||||
"up": "UP",
|
||||
"up": "FUT",
|
||||
"down": "ÁLL",
|
||||
"wait": "Please wait",
|
||||
"wait": "Kérjük várjon",
|
||||
"empty_data": "Az alrendszer állapota ismeretlen"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "RX",
|
||||
"tx": "TX",
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"cpu": "Processzor",
|
||||
"running": "Futó",
|
||||
"offline": "Nem elérhető",
|
||||
"error": "Hiba",
|
||||
@@ -93,8 +93,8 @@
|
||||
"http_status": "HTTP állapot",
|
||||
"error": "Hiba",
|
||||
"response": "Válasz",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"down": "Leállt",
|
||||
"up": "Fut",
|
||||
"not_available": "Nem elérhető"
|
||||
},
|
||||
"emby": {
|
||||
@@ -108,10 +108,10 @@
|
||||
"songs": "Zeneszám"
|
||||
},
|
||||
"esphome": {
|
||||
"offline": "Offline",
|
||||
"offline_alt": "Offline",
|
||||
"offline": "Nem elérhető",
|
||||
"offline_alt": "Nem elérhető",
|
||||
"online": "Csatlakozva",
|
||||
"total": "Total",
|
||||
"total": "Összes",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"evcc": {
|
||||
@@ -133,7 +133,7 @@
|
||||
"unread": "Olvasatlan"
|
||||
},
|
||||
"fritzbox": {
|
||||
"connectionStatus": "Status",
|
||||
"connectionStatus": "Státusz",
|
||||
"connectionStatusUnconfigured": "Nem beállított",
|
||||
"connectionStatusConnecting": "Kapcsolódás",
|
||||
"connectionStatusAuthenticating": "Hitelesítés",
|
||||
@@ -141,16 +141,16 @@
|
||||
"connectionStatusDisconnecting": "Kapcsolat bontása",
|
||||
"connectionStatusDisconnected": "Kapcsolat bontva",
|
||||
"connectionStatusConnected": "Csatlakozva",
|
||||
"uptime": "Uptime",
|
||||
"uptime": "Működési idő",
|
||||
"maxDown": "Max let.",
|
||||
"maxUp": "Max felt.",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"down": "Leállt",
|
||||
"up": "Fut",
|
||||
"received": "Fogadott",
|
||||
"sent": "Küldött",
|
||||
"externalIPAddress": "Külső IP cím",
|
||||
"externalIPv6Address": "Ext. IPv6",
|
||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||
"externalIPv6Address": "Küls. IPv6",
|
||||
"externalIPv6Prefix": "Küls. IPv6-Prefix"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreamek",
|
||||
@@ -168,17 +168,17 @@
|
||||
"passes": "Engedélyek"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "Playing",
|
||||
"transcoding": "Transcoding",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams",
|
||||
"playing": "Lejátszás",
|
||||
"transcoding": "Transzkódolás",
|
||||
"bitrate": "Bitráta",
|
||||
"no_active": "Nincs aktív lejátszás",
|
||||
"plex_connection_error": "Plex kapcsolat ellenőrzése"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Csatlakoztatott AP-k",
|
||||
"activeUser": "Aktív eszközök",
|
||||
"alerts": "Riasztások",
|
||||
"connectedGateways": "Connected gateways",
|
||||
"connectedGateways": "Csatlakoztatott gateway-ek",
|
||||
"connectedSwitches": "Csatlakoztatott switch-ek"
|
||||
},
|
||||
"nzbget": {
|
||||
@@ -189,11 +189,11 @@
|
||||
"plex": {
|
||||
"streams": "Aktív Stream-ek",
|
||||
"albums": "Albumok",
|
||||
"movies": "Movies",
|
||||
"movies": "Filmek",
|
||||
"tv": "TV műsorok"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Rate",
|
||||
"rate": "Ráta",
|
||||
"queue": "Sor",
|
||||
"timeleft": "Hátralévő idő"
|
||||
},
|
||||
@@ -233,34 +233,34 @@
|
||||
"cachemissbytes": "Gyorsítótárban Hibás Bitek"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"download": "Letöltés",
|
||||
"upload": "Feltöltés",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "Keresett",
|
||||
"queued": "Sorban áll",
|
||||
"series": "Series",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"series": "Sorozatok",
|
||||
"queue": "Várólista",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Wanted",
|
||||
"wanted": "Keresett",
|
||||
"missing": "Hiányzik",
|
||||
"queued": "Queued",
|
||||
"movies": "Movies",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queued": "Sorban áll",
|
||||
"movies": "Filmek",
|
||||
"queue": "Várólista",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"wanted": "Keresett",
|
||||
"queued": "Sorban áll",
|
||||
"artists": "Előadók"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"wanted": "Keresett",
|
||||
"queued": "Sorban áll",
|
||||
"books": "Könyvek"
|
||||
},
|
||||
"bazarr": {
|
||||
@@ -273,19 +273,20 @@
|
||||
"available": "Elérhető"
|
||||
},
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"pending": "Függőben lévő",
|
||||
"approved": "Jóváhagyott",
|
||||
"available": "Elérhető",
|
||||
"issues": "Nyitott problémák"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
"pending": "Függőben lévő",
|
||||
"processing": "Feldolgozás",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"approved": "Jóváhagyott",
|
||||
"available": "Elérhető"
|
||||
},
|
||||
"netalertx": {
|
||||
"total": "Total",
|
||||
"connected": "Connected",
|
||||
"total": "Összes",
|
||||
"connected": "Csatlakoztatott",
|
||||
"new_devices": "Új eszközök",
|
||||
"down_alerts": "Leállási riasztások"
|
||||
},
|
||||
@@ -296,26 +297,26 @@
|
||||
"gravity": "Gravitáció"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Queries",
|
||||
"blocked": "Blocked",
|
||||
"queries": "Lekérdezések",
|
||||
"blocked": "Blokkolt",
|
||||
"filtered": "Szűrt",
|
||||
"latency": "Késleltetés"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Upload",
|
||||
"download": "Download",
|
||||
"upload": "Feltöltés",
|
||||
"download": "Letöltés",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Running",
|
||||
"running": "Folyamatban",
|
||||
"stopped": "Megállított",
|
||||
"total": "Total"
|
||||
"total": "Összes"
|
||||
},
|
||||
"suwayomi": {
|
||||
"download": "Downloaded",
|
||||
"download": "Letöltött",
|
||||
"nondownload": "Nem Letöltött",
|
||||
"read": "Read",
|
||||
"unread": "Unread",
|
||||
"read": "Olvasott",
|
||||
"unread": "Olvasatlan",
|
||||
"downloadedread": "Letöltött & Olvasott",
|
||||
"downloadedunread": "Letöltött & Olvasatlan",
|
||||
"nondownloadedread": "Nem Letöltött & Olvasatlan",
|
||||
@@ -336,7 +337,7 @@
|
||||
"ago": "{{value}} Ezelőtt"
|
||||
},
|
||||
"technitium": {
|
||||
"totalQueries": "Queries",
|
||||
"totalQueries": "Lekérdezések",
|
||||
"totalNoError": "Sikerek",
|
||||
"totalServerFailure": "Hibák",
|
||||
"totalNxDomain": "NX Domainek",
|
||||
@@ -344,12 +345,12 @@
|
||||
"totalAuthoritative": "Irányadó",
|
||||
"totalRecursive": "Rekurzív",
|
||||
"totalCached": "Gyorsítótárazott",
|
||||
"totalBlocked": "Blocked",
|
||||
"totalBlocked": "Blokkolt",
|
||||
"totalDropped": "Eldobott",
|
||||
"totalClients": "Kliensek"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Queue",
|
||||
"queue": "Várólista",
|
||||
"processed": "Feldolgozott",
|
||||
"errored": "Hibás",
|
||||
"saved": "Mentett"
|
||||
@@ -360,19 +361,19 @@
|
||||
"middleware": "Közvetítő"
|
||||
},
|
||||
"trilium": {
|
||||
"version": "Version",
|
||||
"notesCount": "Notes",
|
||||
"dbSize": "Database Size",
|
||||
"unknown": "Unknown"
|
||||
"version": "Verzió",
|
||||
"notesCount": "Jegyzetek",
|
||||
"dbSize": "Adatbázis mérete",
|
||||
"unknown": "Ismeretlen"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "No Active Streams",
|
||||
"nothing_streaming": "Nincs aktív lejátszás",
|
||||
"please_wait": "Kérjük Várjon"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Bekapcsolva",
|
||||
"disabled": "Kikapcsolva",
|
||||
"total": "Total"
|
||||
"total": "Összes"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "Állíts be egy vagy több Cryptovalutát a követéshez",
|
||||
@@ -383,73 +384,73 @@
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "Applikációk",
|
||||
"clients": "Clients",
|
||||
"clients": "Kliensek",
|
||||
"messages": "Üzenetek"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indexerek",
|
||||
"numberOfGrabs": "Fogott",
|
||||
"numberOfQueries": "Queries",
|
||||
"numberOfQueries": "Lekérdezések",
|
||||
"numberOfFailGrabs": "Hibás fogások",
|
||||
"numberOfFailQueries": "Hibás lekérdezések"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Beállított",
|
||||
"errored": "Errored"
|
||||
"errored": "Hibák"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Munkamenetek",
|
||||
"numConnections": "Csatlakozások",
|
||||
"dataRelayed": "Átirányított",
|
||||
"transferRate": "Rate"
|
||||
"transferRate": "Ráta"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "Users",
|
||||
"user_count": "Felhasználók",
|
||||
"status_count": "Posztok",
|
||||
"domain_count": "Domainek"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"series": "Series"
|
||||
"wanted": "Keresett",
|
||||
"queued": "Sorban áll",
|
||||
"series": "Sorozatok"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Lejátszók",
|
||||
"version": "Verzió",
|
||||
"status": "Status",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
"status": "Státusz",
|
||||
"up": "Kapcsolódva",
|
||||
"down": "Nem elérhető"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Olvasott",
|
||||
"unread": "Unread"
|
||||
"unread": "Olvasatlan"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Users",
|
||||
"users": "Felhasználók",
|
||||
"loginsLast24H": "Bejelentkezések (24 óra)",
|
||||
"failedLoginsLast24H": "Sikertelen bejelentkezések (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"cpu": "Processzor",
|
||||
"lxc": "LXC-k",
|
||||
"vms": "VM-ek"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"load": "Load",
|
||||
"wait": "Please wait",
|
||||
"temp": "TEMP",
|
||||
"cpu": "Processzor",
|
||||
"load": "Terhelés",
|
||||
"wait": "Kérem várjon",
|
||||
"temp": "HŐM",
|
||||
"_temp": "Hőmérséklet",
|
||||
"warn": "Figyelmeztet",
|
||||
"uptime": "UP",
|
||||
"total": "Total",
|
||||
"free": "Free",
|
||||
"used": "Used",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"uptime": "FUT",
|
||||
"total": "Összes",
|
||||
"free": "Szabad",
|
||||
"used": "Felhasznált",
|
||||
"days": "n",
|
||||
"hours": "ó",
|
||||
"crit": "Kritikus",
|
||||
"read": "Read",
|
||||
"read": "Olvasott",
|
||||
"write": "Írás",
|
||||
"gpu": "GPU",
|
||||
"mem": "Memória",
|
||||
@@ -470,57 +471,57 @@
|
||||
"1-day": "Többnyire napos",
|
||||
"1-night": "Többnyire derült",
|
||||
"2-day": "Részben felhős",
|
||||
"2-night": "Partly Cloudy",
|
||||
"2-night": "Részben felhős",
|
||||
"3-day": "Felhős",
|
||||
"3-night": "Cloudy",
|
||||
"3-night": "Felhős",
|
||||
"45-day": "Ködös",
|
||||
"45-night": "Foggy",
|
||||
"48-day": "Foggy",
|
||||
"48-night": "Foggy",
|
||||
"45-night": "Ködös",
|
||||
"48-day": "Ködös",
|
||||
"48-night": "Ködös",
|
||||
"51-day": "Enyhe szitálás",
|
||||
"51-night": "Light Drizzle",
|
||||
"51-night": "Enyhe szitálás",
|
||||
"53-day": "Szitálás",
|
||||
"53-night": "Drizzle",
|
||||
"53-night": "Szitálás",
|
||||
"55-day": "Erős szitálás",
|
||||
"55-night": "Heavy Drizzle",
|
||||
"55-night": "Erős szitálás",
|
||||
"56-day": "Enyhe fagyos szitálás",
|
||||
"56-night": "Light Freezing Drizzle",
|
||||
"56-night": "Enyhe fagyos szitálás",
|
||||
"57-day": "Fagyos szitálás",
|
||||
"57-night": "Freezing Drizzle",
|
||||
"57-night": "Fagyos szitálás",
|
||||
"61-day": "Enyhe eső",
|
||||
"61-night": "Light Rain",
|
||||
"61-night": "Enyhe eső",
|
||||
"63-day": "Eső",
|
||||
"63-night": "Rain",
|
||||
"63-night": "Eső",
|
||||
"65-day": "Heves eső",
|
||||
"65-night": "Heavy Rain",
|
||||
"65-night": "Heves eső",
|
||||
"66-day": "Ónos eső",
|
||||
"66-night": "Freezing Rain",
|
||||
"67-day": "Freezing Rain",
|
||||
"67-night": "Freezing Rain",
|
||||
"66-night": "Ónos eső",
|
||||
"67-day": "Ónos eső",
|
||||
"67-night": "Ónos eső",
|
||||
"71-day": "Enyhe havazás",
|
||||
"71-night": "Light Snow",
|
||||
"71-night": "Enyhe havazás",
|
||||
"73-day": "Hó",
|
||||
"73-night": "Snow",
|
||||
"73-night": "Havazás",
|
||||
"75-day": "Erős havazás",
|
||||
"75-night": "Heavy Snow",
|
||||
"75-night": "Erős havazás",
|
||||
"77-day": "Hódara",
|
||||
"77-night": "Snow Grains",
|
||||
"77-night": "Hódara",
|
||||
"80-day": "Enyhe záporok",
|
||||
"80-night": "Light Showers",
|
||||
"80-night": "Enyhe záporok",
|
||||
"81-day": "Záporok",
|
||||
"81-night": "Showers",
|
||||
"81-night": "Záporok",
|
||||
"82-day": "Heves záporok",
|
||||
"82-night": "Heavy Showers",
|
||||
"82-night": "Heves záporok",
|
||||
"85-day": "Hózáporok",
|
||||
"85-night": "Snow Showers",
|
||||
"86-day": "Snow Showers",
|
||||
"86-night": "Snow Showers",
|
||||
"85-night": "Hózáporok",
|
||||
"86-day": "Hózáporok",
|
||||
"86-night": "Hózáporok",
|
||||
"95-day": "Zivatar",
|
||||
"95-night": "Thunderstorm",
|
||||
"95-night": "Vihar",
|
||||
"96-day": "Zivatar jégesővel",
|
||||
"96-night": "Thunderstorm With Hail",
|
||||
"99-day": "Thunderstorm With Hail",
|
||||
"99-night": "Thunderstorm With Hail"
|
||||
"96-night": "Zivatar jégesővel",
|
||||
"99-day": "Zivatar jégesővel",
|
||||
"99-night": "Zivatar jégesővel"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "Rendszer",
|
||||
@@ -529,17 +530,17 @@
|
||||
"up_to_date": "Naprakész",
|
||||
"child_bridges": "Gyerek Hidak",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"pending": "Pending",
|
||||
"down": "Down"
|
||||
"up": "Fut",
|
||||
"pending": "Függőben lévő",
|
||||
"down": "Leállt"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Új",
|
||||
"up": "Up",
|
||||
"up": "Fut",
|
||||
"grace": "Türelmi idő alatt",
|
||||
"down": "Down",
|
||||
"down": "Leállt",
|
||||
"paused": "Szünetel",
|
||||
"status": "Status",
|
||||
"status": "Státusz",
|
||||
"last_ping": "Legutóbbi Ping",
|
||||
"never": "Még nincsenek ping-ek"
|
||||
},
|
||||
@@ -549,21 +550,21 @@
|
||||
"containers_failed": "Sikertelen"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Approved",
|
||||
"approvedPushes": "Jóváhagyott",
|
||||
"rejectedPushes": "Elutasított",
|
||||
"filters": "Szűrők",
|
||||
"indexers": "Indexers"
|
||||
"indexers": "Indexerek"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Queue",
|
||||
"downloads": "Várólista",
|
||||
"videos": "Videók",
|
||||
"channels": "Csatornák",
|
||||
"playlists": "Lejátszási listák"
|
||||
},
|
||||
"truenas": {
|
||||
"load": "Rendszerterhelés",
|
||||
"uptime": "Uptime",
|
||||
"alerts": "Alerts"
|
||||
"uptime": "Működési idő",
|
||||
"alerts": "Figyelmeztetések"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Sebesség",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,16 +241,16 @@
|
||||
"sonarr": {
|
||||
"wanted": "Poszukiwane",
|
||||
"queued": "W kolejce",
|
||||
"series": "Series",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"series": "Seriale",
|
||||
"queue": "Kolejka",
|
||||
"unknown": "Nieznany"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Wanted",
|
||||
"wanted": "Poszukiwane",
|
||||
"missing": "Brakujące",
|
||||
"queued": "Queued",
|
||||
"movies": "Movies",
|
||||
"queue": "Queue",
|
||||
"queued": "W kolejce",
|
||||
"movies": "Filmy",
|
||||
"queue": "Kolejka",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"lidarr": {
|
||||
@@ -273,15 +273,16 @@
|
||||
"available": "Dostępne"
|
||||
},
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"pending": "Oczekujące",
|
||||
"approved": "Zaakceptowane",
|
||||
"available": "Dostępne",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
"pending": "Oczekujące",
|
||||
"processing": "Przetwarzane",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"approved": "Zaakceptowane",
|
||||
"available": "Dostępne"
|
||||
},
|
||||
"netalertx": {
|
||||
"total": "Total",
|
||||
@@ -296,8 +297,8 @@
|
||||
"gravity": "Grawitacja"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Queries",
|
||||
"blocked": "Blocked",
|
||||
"queries": "Zapytania",
|
||||
"blocked": "Zablokowane",
|
||||
"filtered": "Przefiltrowane",
|
||||
"latency": "Opóźnienia"
|
||||
},
|
||||
@@ -312,7 +313,7 @@
|
||||
"total": "Total"
|
||||
},
|
||||
"suwayomi": {
|
||||
"download": "Downloaded",
|
||||
"download": "Pobrano",
|
||||
"nondownload": "Niepobrane",
|
||||
"read": "Read",
|
||||
"unread": "Unread",
|
||||
@@ -366,7 +367,7 @@
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "No Active Streams",
|
||||
"nothing_streaming": "Brak aktywnych strumieni",
|
||||
"please_wait": "Proszę czekać"
|
||||
},
|
||||
"npm": {
|
||||
@@ -425,26 +426,26 @@
|
||||
"unread": "Unread"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Users",
|
||||
"users": "Użytkownicy",
|
||||
"loginsLast24H": "Logowania (24h)",
|
||||
"failedLoginsLast24H": "Nieudane logowania (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "MEM",
|
||||
"mem": "RAM",
|
||||
"cpu": "Procesor",
|
||||
"lxc": "Kontenery LXC",
|
||||
"vms": "Maszyn wirtualnych"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "Procesor",
|
||||
"load": "Load",
|
||||
"load": "Obciążenie",
|
||||
"wait": "Proszę czekać",
|
||||
"temp": "TEMP",
|
||||
"temp": "TEMP.",
|
||||
"_temp": "Temperatura",
|
||||
"warn": "Ostrzeżenie",
|
||||
"uptime": "UP",
|
||||
"total": "Total",
|
||||
"free": "Free",
|
||||
"free": "Wolne",
|
||||
"used": "Used",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
@@ -470,57 +471,57 @@
|
||||
"1-day": "Głównie słoneczny",
|
||||
"1-night": "Głównie bezchmurny",
|
||||
"2-day": "Częściowo pochmurnie",
|
||||
"2-night": "Partly Cloudy",
|
||||
"2-night": "Częściowo pochmurnie",
|
||||
"3-day": "Pochmurnie",
|
||||
"3-night": "Cloudy",
|
||||
"3-night": "Pochmurnie",
|
||||
"45-day": "Mgliście",
|
||||
"45-night": "Foggy",
|
||||
"48-day": "Foggy",
|
||||
"48-night": "Foggy",
|
||||
"45-night": "Mgliście",
|
||||
"48-day": "Mgliście",
|
||||
"48-night": "Mgliście",
|
||||
"51-day": "Lekka mżawka",
|
||||
"51-night": "Light Drizzle",
|
||||
"51-night": "Lekka mżawka",
|
||||
"53-day": "Mżawka",
|
||||
"53-night": "Drizzle",
|
||||
"53-night": "Mżawka",
|
||||
"55-day": "Gęsta mżawka",
|
||||
"55-night": "Heavy Drizzle",
|
||||
"55-night": "Gęsta mżawka",
|
||||
"56-day": "Lekko chłodna mżawka",
|
||||
"56-night": "Light Freezing Drizzle",
|
||||
"56-night": "Lekko chłodna mżawka",
|
||||
"57-day": "Chłodna mżawka",
|
||||
"57-night": "Freezing Drizzle",
|
||||
"57-night": "Chłodna mżawka",
|
||||
"61-day": "Lekki deszcz",
|
||||
"61-night": "Light Rain",
|
||||
"61-night": "Lekki deszcz",
|
||||
"63-day": "Deszcz",
|
||||
"63-night": "Rain",
|
||||
"63-night": "Deszcz",
|
||||
"65-day": "Ciężki deszcz",
|
||||
"65-night": "Heavy Rain",
|
||||
"65-night": "Ciężki deszcz",
|
||||
"66-day": "Mroźny deszcz",
|
||||
"66-night": "Freezing Rain",
|
||||
"67-day": "Freezing Rain",
|
||||
"67-night": "Freezing Rain",
|
||||
"66-night": "Mroźny deszcz",
|
||||
"67-day": "Mroźny deszcz",
|
||||
"67-night": "Mroźny deszcz",
|
||||
"71-day": "Lekki śnieg",
|
||||
"71-night": "Light Snow",
|
||||
"71-night": "Lekki śnieg",
|
||||
"73-day": "Śnieg",
|
||||
"73-night": "Snow",
|
||||
"73-night": "Śnieg",
|
||||
"75-day": "Ciężki śnieg",
|
||||
"75-night": "Heavy Snow",
|
||||
"75-night": "Ciężki śnieg",
|
||||
"77-day": "Ziarnisty śnieg",
|
||||
"77-night": "Snow Grains",
|
||||
"77-night": "Ziarnisty śnieg",
|
||||
"80-day": "Lekkie opady",
|
||||
"80-night": "Light Showers",
|
||||
"80-night": "Lekkie opady",
|
||||
"81-day": "Opady",
|
||||
"81-night": "Showers",
|
||||
"81-night": "Opady",
|
||||
"82-day": "Ciężkie opady",
|
||||
"82-night": "Heavy Showers",
|
||||
"82-night": "Ciężkie opady",
|
||||
"85-day": "Opady śniegu",
|
||||
"85-night": "Snow Showers",
|
||||
"86-day": "Snow Showers",
|
||||
"86-night": "Snow Showers",
|
||||
"85-night": "Opady śniegu",
|
||||
"86-day": "Opady śniegu",
|
||||
"86-night": "Opady śniegu",
|
||||
"95-day": "Burze z piorunami",
|
||||
"95-night": "Thunderstorm",
|
||||
"95-night": "Burze z piorunami",
|
||||
"96-day": "Burza z gradobiciem",
|
||||
"96-night": "Thunderstorm With Hail",
|
||||
"99-day": "Thunderstorm With Hail",
|
||||
"99-night": "Thunderstorm With Hail"
|
||||
"96-night": "Burza z gradobiciem",
|
||||
"99-day": "Burza z gradobiciem",
|
||||
"99-night": "Burza z gradobiciem"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "System",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Próximo mês",
|
||||
"previousMonthlyCost": "Mês anterior",
|
||||
"nextRenewingSubscription": "Próximo pagamento"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Ожидают",
|
||||
"approved": "Одобрено",
|
||||
"available": "Доступно"
|
||||
"available": "Доступно",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Ожидают",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Следующий месяц",
|
||||
"previousMonthlyCost": "Прошлый месяц",
|
||||
"nextRenewingSubscription": "Следующая оплата"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Čakajúce",
|
||||
"approved": "Schválené",
|
||||
"available": "Dostupné"
|
||||
"available": "Dostupné",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Čakajúce",
|
||||
@@ -470,15 +471,15 @@
|
||||
"1-day": "Prevažne slnečno",
|
||||
"1-night": "Prevažne jasno",
|
||||
"2-day": "Čiastočne zamračené",
|
||||
"2-night": "Partly Cloudy",
|
||||
"2-night": "Čiastočne zamračené",
|
||||
"3-day": "Oblačno",
|
||||
"3-night": "Cloudy",
|
||||
"3-night": "Oblačno",
|
||||
"45-day": "Hmlisto",
|
||||
"45-night": "Hmlisto",
|
||||
"48-day": "Hmlisto",
|
||||
"48-night": "Hmlisto",
|
||||
"51-day": "Mierne mrholenie",
|
||||
"51-night": "Light Drizzle",
|
||||
"51-night": "Slabé mrholenie",
|
||||
"53-day": "Mrholenie",
|
||||
"53-night": "Drizzle",
|
||||
"55-day": "Silné mrholenie",
|
||||
@@ -518,9 +519,9 @@
|
||||
"95-day": "Búrka",
|
||||
"95-night": "Búrka",
|
||||
"96-day": "Búrka s krupobitím",
|
||||
"96-night": "Thunderstorm With Hail",
|
||||
"99-day": "Thunderstorm With Hail",
|
||||
"99-night": "Thunderstorm With Hail"
|
||||
"96-night": "Búrka s krupobitím",
|
||||
"99-day": "Búrka s krupobitím",
|
||||
"99-night": "Búrka s krupobitím"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "Systém",
|
||||
@@ -954,7 +955,7 @@
|
||||
"invalidConfiguration": "Invalid Configuration"
|
||||
},
|
||||
"frigate": {
|
||||
"cameras": "Cameras",
|
||||
"cameras": "Kamery",
|
||||
"uptime": "Dostupnosť",
|
||||
"version": "Verzia"
|
||||
},
|
||||
@@ -965,7 +966,7 @@
|
||||
},
|
||||
"zabbix": {
|
||||
"unclassified": "Not classified",
|
||||
"information": "Information",
|
||||
"information": "Informácie",
|
||||
"warning": "Warning",
|
||||
"average": "Average",
|
||||
"high": "High",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Oznámenia",
|
||||
"status": "Stav",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "На чекању",
|
||||
"approved": "Одобрено",
|
||||
"available": "Доступно"
|
||||
"available": "Доступно",
|
||||
"issues": "Отворених питања"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "На чекању",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Следећи месец",
|
||||
"previousMonthlyCost": "Претходни месец",
|
||||
"nextRenewingSubscription": "Следећа уплата"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Покренуто",
|
||||
"STOPPED": "Заустављено",
|
||||
"NEW_ARRAY": "Нови Array",
|
||||
"RECON_DISK": "Реконструкција диска",
|
||||
"DISABLE_DISK": "Диск је онемогућен",
|
||||
"SWAP_DSBL": "Swap је онемогућен",
|
||||
"INVALID_EXPANSION": "Неважеће проширење",
|
||||
"PARITY_NOT_BIGGEST": "Паритет није највећи",
|
||||
"TOO_MANY_MISSING_DISKS": "Превише недостајућих дискова",
|
||||
"NEW_DISK_TOO_SMALL": "Нови диск је премали",
|
||||
"NO_DATA_DISKS": "Нема дискова са подацима",
|
||||
"notifications": "Обавештења",
|
||||
"status": "Статус",
|
||||
"cpu": "Процесор",
|
||||
"memoryUsed": "Искоришћена меморија",
|
||||
"memoryAvailable": "Доступна меморија",
|
||||
"arrayUsed": "Коришћени Array",
|
||||
"arrayFree": "Слободан Array",
|
||||
"poolUsed": "{{pool}} коришћено",
|
||||
"poolFree": "{{pool}} слободно"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Планови",
|
||||
"num_success_30": "Успешно",
|
||||
"num_failure_30": "Неуспешно",
|
||||
"num_success_latest": "Успевајући",
|
||||
"num_failure_latest": "Неуспешно",
|
||||
"bytes_added_30": "Додати бајтови"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Песме",
|
||||
"time": "Време",
|
||||
"artists": "Извођачи"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
"placeholder": "Ara…"
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"cpu": "İşlemci",
|
||||
"mem": "MEM",
|
||||
"total": "Toplam",
|
||||
"free": "Boş",
|
||||
@@ -61,7 +61,7 @@
|
||||
"wlan_devices": "WLAN Aygıtları",
|
||||
"lan_users": "LAN Kullanıcıları",
|
||||
"wlan_users": "WLAN Kullanıcıları",
|
||||
"up": "UP",
|
||||
"up": "ÇALIŞIYOR",
|
||||
"down": "Aşağı",
|
||||
"wait": "Lütfen bekleyin",
|
||||
"empty_data": "Alt sistem durumu bilinmiyor"
|
||||
@@ -69,8 +69,8 @@
|
||||
"docker": {
|
||||
"rx": "Gelen Veri",
|
||||
"tx": "Giden Veri",
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"mem": "Bellek",
|
||||
"cpu": "İşlemci",
|
||||
"running": "Çalışıyor",
|
||||
"offline": "Çevrimdışı",
|
||||
"error": "Hata",
|
||||
@@ -87,21 +87,21 @@
|
||||
"ping": "Gecikme",
|
||||
"down": "İndirme",
|
||||
"up": "Yükleme",
|
||||
"not_available": "Mevcut Değil"
|
||||
"not_available": "Uygun değil"
|
||||
},
|
||||
"siteMonitor": {
|
||||
"http_status": "HTTPS durumu",
|
||||
"error": "Hata",
|
||||
"response": "Yanıt",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Mevcut Değil"
|
||||
"down": "Çalışmayan",
|
||||
"up": "Çalışıyor",
|
||||
"not_available": "Uygun değil"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Oynatılıyor",
|
||||
"transcoding": "Dönüştürülüyor",
|
||||
"bitrate": "Bit Oranı",
|
||||
"no_active": "Aktif akış yok",
|
||||
"no_active": "Etkin akış yok",
|
||||
"movies": "Filmler",
|
||||
"series": "Diziler",
|
||||
"episodes": "Bölümler",
|
||||
@@ -139,18 +139,18 @@
|
||||
"connectionStatusAuthenticating": "Kimlik doğrulanıyor",
|
||||
"connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor",
|
||||
"connectionStatusDisconnecting": "Bağlantı kesiliyor...",
|
||||
"connectionStatusDisconnected": "Bağlantı kesildi",
|
||||
"connectionStatusConnected": "Bağlandı",
|
||||
"connectionStatusDisconnected": "Bağlı değil",
|
||||
"connectionStatusConnected": "Bağlı",
|
||||
"uptime": "Çalışma Süresi",
|
||||
"maxDown": "Max. Indirme",
|
||||
"maxUp": "Max. Gönderme",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"down": "Çalışmayan",
|
||||
"up": "Çalışıyor",
|
||||
"received": "Alınan",
|
||||
"sent": "Gönderilen",
|
||||
"externalIPAddress": "Harici IP",
|
||||
"externalIPv6Address": "Ext. IPv6",
|
||||
"externalIPv6Prefix": "Ext. IPv6-Prefix"
|
||||
"externalIPv6Address": "Dış IPv6",
|
||||
"externalIPv6Prefix": "Dış IPv6-Önek"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Akış",
|
||||
@@ -171,12 +171,12 @@
|
||||
"playing": "Oynatılıyor",
|
||||
"transcoding": "Dönüştürülüyor",
|
||||
"bitrate": "Bit Oranı",
|
||||
"no_active": "Aktif akış yok",
|
||||
"no_active": "Etkin akış yok",
|
||||
"plex_connection_error": "Plex Bağlantısı Kontrol Ediliyor"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Bağlı AP'ler",
|
||||
"activeUser": "Aktif cihazlar",
|
||||
"activeUser": "Etkin aygıtlar",
|
||||
"alerts": "Alarmlar",
|
||||
"connectedGateways": "Bağlı ağ geçitleri",
|
||||
"connectedSwitches": "Bağlı anahtarlar"
|
||||
@@ -187,7 +187,7 @@
|
||||
"downloaded": "İndirilen"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Aktif Akış",
|
||||
"streams": "Etkin akış",
|
||||
"albums": "Albümler",
|
||||
"movies": "Filmler",
|
||||
"tv": "TV Showları"
|
||||
@@ -198,7 +198,7 @@
|
||||
"timeleft": "Kalan Zaman"
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "Aktif",
|
||||
"active": "Etkin",
|
||||
"upload": "Yükleme",
|
||||
"download": "İndirme"
|
||||
},
|
||||
@@ -224,7 +224,7 @@
|
||||
},
|
||||
"deluge": {
|
||||
"download": "İndirme",
|
||||
"upload": "Upload",
|
||||
"upload": "Yükleme",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
@@ -240,7 +240,7 @@
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "İstendi",
|
||||
"queued": "Sırada",
|
||||
"queued": "Kuyrukta",
|
||||
"series": "Seriler",
|
||||
"queue": "Kuyruk",
|
||||
"unknown": "Bilinmeyen"
|
||||
@@ -254,13 +254,13 @@
|
||||
"unknown": "Bilinmeyen"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"wanted": "İstendi",
|
||||
"queued": "Kuyrukta",
|
||||
"artists": "Sanatçılar"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"wanted": "İstendi",
|
||||
"queued": "Kuyrukta",
|
||||
"books": "Kitaplar"
|
||||
},
|
||||
"bazarr": {
|
||||
@@ -275,17 +275,18 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Bekleyen",
|
||||
"approved": "Onaylı",
|
||||
"available": "Kullanılabilir"
|
||||
"available": "Uygun",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
"processing": "İşleniyor",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"approved": "Onaylı",
|
||||
"available": "Uygun"
|
||||
},
|
||||
"netalertx": {
|
||||
"total": "Toplam",
|
||||
"connected": "Connected",
|
||||
"connected": "Bağlı",
|
||||
"new_devices": "Yeni Cihazlar",
|
||||
"down_alerts": "Hata Uyarıları"
|
||||
},
|
||||
@@ -297,7 +298,7 @@
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Queries",
|
||||
"blocked": "Blocked",
|
||||
"blocked": "Engellenen",
|
||||
"filtered": "Filtrelendi",
|
||||
"latency": "Gecikme"
|
||||
},
|
||||
@@ -308,7 +309,7 @@
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Çalışıyor",
|
||||
"stopped": "Durduruldu",
|
||||
"stopped": "Durdu",
|
||||
"total": "Toplam"
|
||||
},
|
||||
"suwayomi": {
|
||||
@@ -316,10 +317,10 @@
|
||||
"nondownload": "İndirilmemiş",
|
||||
"read": "Okunan",
|
||||
"unread": "Okunmamış",
|
||||
"downloadedread": "İndirildi & Okundu",
|
||||
"downloadedunread": "İndirildi & Okunmadı",
|
||||
"nondownloadedread": "İndirilmedi & Okundu",
|
||||
"nondownloadedunread": "İndirilmedi & Okunmadı"
|
||||
"downloadedread": "İndirildi ve okundu",
|
||||
"downloadedunread": "İndirildi ve okunmadı",
|
||||
"nondownloadedread": "İndirilmedi ve okundu",
|
||||
"nondownloadedunread": "İndirilmedi ve okunmadı"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Adres",
|
||||
@@ -366,12 +367,12 @@
|
||||
"unknown": "Bilinmeyen"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Aktif akış yok",
|
||||
"nothing_streaming": "Etkin akış yok",
|
||||
"please_wait": "Lütfen Bekleyin"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Etkin",
|
||||
"disabled": "Devre Dışı",
|
||||
"disabled": "Devre dışı",
|
||||
"total": "Toplam"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
@@ -398,7 +399,7 @@
|
||||
"errored": "Hatalı"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Aktif Sezonlar",
|
||||
"numActiveSessions": "Oturumlar",
|
||||
"numConnections": "Bağlantı Sayısı",
|
||||
"dataRelayed": "Aktarılan",
|
||||
"transferRate": "Oran"
|
||||
@@ -410,53 +411,53 @@
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "İstendi",
|
||||
"queued": "Sırada",
|
||||
"series": "Series"
|
||||
"queued": "Kuyrukta",
|
||||
"series": "Diziler"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Oyuncular",
|
||||
"version": "Versiyon",
|
||||
"version": "Sürüm",
|
||||
"status": "Durum",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
"up": "Çevrimiçi",
|
||||
"down": "Çevrimdışı"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Okunmuş",
|
||||
"unread": "Okunmamış"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Users",
|
||||
"users": "Kullanıcılar",
|
||||
"loginsLast24H": "Girişler (24 Saat)",
|
||||
"failedLoginsLast24H": "Başarısız Girişler (24 Saat)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"mem": "Bellek",
|
||||
"cpu": "İşlemci",
|
||||
"lxc": "LXC",
|
||||
"vms": "Sanal Makineler"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"cpu": "İşlemci",
|
||||
"load": "Load",
|
||||
"wait": "Please wait",
|
||||
"wait": "Lütfen bekleyin",
|
||||
"temp": "TEMP",
|
||||
"_temp": "Sıcaklık",
|
||||
"warn": "Uyarı",
|
||||
"uptime": "UP",
|
||||
"uptime": "ÇALIŞIYOR",
|
||||
"total": "Toplam",
|
||||
"free": "Free",
|
||||
"used": "Used",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"free": "Boş",
|
||||
"used": "Kullanılıyor",
|
||||
"days": "g.",
|
||||
"hours": "s.",
|
||||
"crit": "Kritik",
|
||||
"read": "Read",
|
||||
"read": "Okundu",
|
||||
"write": "Yazma",
|
||||
"gpu": "GPU",
|
||||
"mem": "Hafıza",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "Yer İmi",
|
||||
"bookmark": "Yer imi",
|
||||
"service": "Hizmet",
|
||||
"search": "Ara",
|
||||
"custom": "Özel",
|
||||
@@ -529,19 +530,19 @@
|
||||
"up_to_date": "Güncel",
|
||||
"child_bridges": "Alt Köprüler",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"up": "Çalışıyor",
|
||||
"pending": "Bekleyen",
|
||||
"down": "Down"
|
||||
"down": "Çalışmayan"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Yeni",
|
||||
"up": "Up",
|
||||
"up": "Çalışıyor",
|
||||
"grace": "Tolerans Döneminde",
|
||||
"down": "Down",
|
||||
"paused": "Duraklatıldı",
|
||||
"down": "Çalışmayan",
|
||||
"paused": "Durduruldu",
|
||||
"status": "Durum",
|
||||
"last_ping": "Son Ping",
|
||||
"never": "Henüz ping yok"
|
||||
"last_ping": "Son gecikme",
|
||||
"never": "Henüz gecikme yok"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Tarandı",
|
||||
@@ -556,7 +557,7 @@
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Kuyruk",
|
||||
"videos": "Videolar",
|
||||
"videos": "Video",
|
||||
"channels": "Kanallar",
|
||||
"playlists": "Oynatma Listeleri"
|
||||
},
|
||||
@@ -567,7 +568,7 @@
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Hız",
|
||||
"active": "Aktif",
|
||||
"active": "Etkin",
|
||||
"queue": "Kuyruk",
|
||||
"total": "Toplam"
|
||||
},
|
||||
@@ -611,14 +612,14 @@
|
||||
"no_devices": "Cihaz Verisi Alınamadı"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Yükü",
|
||||
"cpuLoad": "İşlemci yükü",
|
||||
"memoryUsed": "Bellek Kullanımı",
|
||||
"uptime": "Uptime",
|
||||
"uptime": "Çalışma süresi",
|
||||
"numberOfLeases": "Kiralama"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "Tüm Akışlar",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_active": "Etkin akışlar",
|
||||
"streams_xepg": "XEPG Kanalları"
|
||||
},
|
||||
"opendtu": {
|
||||
@@ -628,7 +629,7 @@
|
||||
"limit": "Limit"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"cpu": "İşlemci yükü",
|
||||
"memory": "Aktif Bellek",
|
||||
"wanUpload": "WAN Yükleme",
|
||||
"wanDownload": "WAN İndirme"
|
||||
@@ -653,8 +654,8 @@
|
||||
"load": "Ort. Yükleme",
|
||||
"memory": "Bellek Kullanımı",
|
||||
"wanStatus": "WAN Durumu",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"temp": "Temp",
|
||||
"disk": "Disk Kullanımı",
|
||||
"wanIP": "WAN IP"
|
||||
@@ -662,47 +663,47 @@
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Veri deposu",
|
||||
"failed_tasks_24h": "Başarısız Görevler 24h",
|
||||
"cpu_usage": "CPU",
|
||||
"cpu_usage": "İşlemci",
|
||||
"memory_usage": "Bellek"
|
||||
},
|
||||
"immich": {
|
||||
"users": "Users",
|
||||
"photos": "Fotoğraflar",
|
||||
"videos": "Videos",
|
||||
"storage": "Depo"
|
||||
"users": "Kullanıcılar",
|
||||
"photos": "Fotoğraf",
|
||||
"videos": "Video",
|
||||
"storage": "Depolama"
|
||||
},
|
||||
"uptimekuma": {
|
||||
"up": "Siteler Çalışıyor",
|
||||
"down": "Siteler Çalışmıyor",
|
||||
"uptime": "Uptime",
|
||||
"up": "Site çalışıyor",
|
||||
"down": "Çalışmayan site",
|
||||
"uptime": "Çalışma süresi",
|
||||
"incident": "Olay",
|
||||
"m": "m"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"series": "Diziler",
|
||||
"archives": "Arşivler",
|
||||
"chapters": "Bölümler",
|
||||
"categories": "Kategoriler"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Kütüphane",
|
||||
"series": "Series",
|
||||
"books": "Books"
|
||||
"series": "Seriler",
|
||||
"books": "Kitap"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Days",
|
||||
"uptime": "Uptime",
|
||||
"volumeAvailable": "Available"
|
||||
"days": "Gün",
|
||||
"uptime": "Çalışma süresi",
|
||||
"volumeAvailable": "Uygun"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Series",
|
||||
"series": "Diziler",
|
||||
"issues": "Sorunlar",
|
||||
"wanted": "Wanted"
|
||||
"wanted": "İstendi"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "Albums",
|
||||
"photos": "Photos",
|
||||
"videos": "Videos",
|
||||
"albums": "Albümler",
|
||||
"photos": "Fotoğraf",
|
||||
"videos": "Video",
|
||||
"people": "İnsan"
|
||||
},
|
||||
"fileflows": {
|
||||
@@ -712,8 +713,8 @@
|
||||
"time": "Zaman"
|
||||
},
|
||||
"firefly": {
|
||||
"networth": "Net Worth",
|
||||
"budget": "Budget"
|
||||
"networth": "Net değer",
|
||||
"budget": "Bütçe"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "Kontrol Paneli",
|
||||
@@ -722,10 +723,10 @@
|
||||
"alertstriggered": "Uyarılar Tetiklendi"
|
||||
},
|
||||
"nextcloud": {
|
||||
"cpuload": "Cpu Yükü",
|
||||
"cpuload": "İşlemci yükü",
|
||||
"memoryusage": "Bellek Kullanımı",
|
||||
"freespace": "Boş Alan",
|
||||
"activeusers": "Aktif Kullanıcılar",
|
||||
"activeusers": "Etkin kullanıcılar",
|
||||
"numfiles": "Dosyalar",
|
||||
"numshares": "Paylaşılan Öğeler"
|
||||
},
|
||||
@@ -734,10 +735,10 @@
|
||||
"size": "Boyut",
|
||||
"lastrun": "Son Çalışma",
|
||||
"nextrun": "Sonraki Çalışma",
|
||||
"failed": "Failed"
|
||||
"failed": "Başarısız"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "Aktif Kullanıcılar",
|
||||
"active_workers": "Etkin kullanıcılar",
|
||||
"total_workers": "Toplam Kullanıcılar",
|
||||
"records_total": "Sıra Uzunluğu"
|
||||
},
|
||||
@@ -747,24 +748,24 @@
|
||||
},
|
||||
"prometheus": {
|
||||
"targets_up": "Hedef Çalışıyor",
|
||||
"targets_down": "Hedef Çalışmıyor",
|
||||
"targets_down": "Çalışmayan hedef",
|
||||
"targets_total": "Toplam Hedef"
|
||||
},
|
||||
"gatus": {
|
||||
"up": "Sites Up",
|
||||
"down": "Sites Down",
|
||||
"uptime": "Uptime"
|
||||
"down": "Çalışmayan site",
|
||||
"uptime": "Çalışma süresi"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Today",
|
||||
"gross_percent_today": "Bugün",
|
||||
"gross_percent_1y": "Bir yıl",
|
||||
"gross_percent_max": "Tüm zaman"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"podcasts": "Podcast",
|
||||
"books": "Books",
|
||||
"books": "Kitap",
|
||||
"podcastsDuration": "Süre",
|
||||
"booksDuration": "Duration"
|
||||
"booksDuration": "Süre"
|
||||
},
|
||||
"homeassistant": {
|
||||
"people_home": "Evdeki İnsanlar",
|
||||
@@ -788,7 +789,7 @@
|
||||
"downloadSpeed": "Hız"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"seriesCount": "Seriler",
|
||||
"totalFiles": "Dosyalar"
|
||||
},
|
||||
"azuredevops": {
|
||||
@@ -797,24 +798,24 @@
|
||||
"buildId": "Yapı Kimliği",
|
||||
"succeeded": "Başarılı",
|
||||
"notStarted": "Henüz Başlamadı",
|
||||
"failed": "Failed",
|
||||
"failed": "Başarısız",
|
||||
"canceled": "İptal edildi",
|
||||
"inProgress": "Sürüyor",
|
||||
"totalPrs": "Toplam Çekme İstekleri",
|
||||
"myPrs": "Benim Çekme İsteklerim",
|
||||
"approved": "Approved"
|
||||
"approved": "Onaylı"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "Durum",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"name": "İsim",
|
||||
"online": "Çevrimiçi",
|
||||
"offline": "Çevrimdışı",
|
||||
"name": "Ad",
|
||||
"map": "Harita",
|
||||
"currentPlayers": "Mevcut oyuncular",
|
||||
"players": "Players",
|
||||
"players": "Oyuncular",
|
||||
"maxPlayers": "Maks. oyuncu",
|
||||
"bots": "Botlar",
|
||||
"ping": "Ping"
|
||||
"ping": "Gecikme"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Tamam",
|
||||
@@ -824,39 +825,39 @@
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Tarifler",
|
||||
"users": "Users",
|
||||
"categories": "Categories",
|
||||
"users": "Kullanıcılar",
|
||||
"categories": "Kategoriler",
|
||||
"tags": "Etiketler"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "İndiriliyor",
|
||||
"total": "Toplam",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"running": "Çalışıyor",
|
||||
"stopped": "Durdu",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
"failed": "Başarısız"
|
||||
},
|
||||
"openwrt": {
|
||||
"uptime": "Uptime",
|
||||
"cpuLoad": "CPU Yükü Ortalaması (5dk)",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"uptime": "Çalışma süresi",
|
||||
"cpuLoad": "İşlemci yükü ortalaması (5dk)",
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"bytesTx": "İletilen",
|
||||
"bytesRx": "Received"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Durum",
|
||||
"uptime": "Uptime",
|
||||
"uptime": "Çalışma süresi",
|
||||
"lastDown": "Son Kesinti",
|
||||
"downDuration": "Kesinti Süresi",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"sitesUp": "Site çalışıyor",
|
||||
"sitesDown": "Çalışmayan site",
|
||||
"paused": "Durduruldu",
|
||||
"notyetchecked": "Henüz Kontrol Edilmedi",
|
||||
"up": "Up",
|
||||
"up": "Çalışıyor",
|
||||
"seemsdown": "Kapalı görünüyor",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
"down": "Çalışmayan",
|
||||
"unknown": "Bilinmeyen"
|
||||
},
|
||||
"calendar": {
|
||||
"inCinemas": "Sinemalarda",
|
||||
@@ -864,7 +865,7 @@
|
||||
"digitalRelease": "Dijitalde Yayınlandı",
|
||||
"noEventsToday": "Bugün için etkinlik yok!",
|
||||
"noEventsFound": "Etkinlik bulunamadı",
|
||||
"errorWhenLoadingData": "Error when loading calendar data"
|
||||
"errorWhenLoadingData": "Takvim verileri yüklenirken hata"
|
||||
},
|
||||
"romm": {
|
||||
"platforms": "Platformlar",
|
||||
@@ -875,10 +876,10 @@
|
||||
"totalfilesize": "Toplam Kapasite"
|
||||
},
|
||||
"mailcow": {
|
||||
"domains": "Domains",
|
||||
"mailboxes": "Mailboxes",
|
||||
"domains": "Alan Adları",
|
||||
"mailboxes": "Posta kutuları",
|
||||
"mails": "Postalar",
|
||||
"storage": "Storage"
|
||||
"storage": "Depolama"
|
||||
},
|
||||
"netdata": {
|
||||
"warnings": "Uyarılar",
|
||||
@@ -887,14 +888,14 @@
|
||||
"plantit": {
|
||||
"events": "Etkinlikler",
|
||||
"plants": "Bitkiler",
|
||||
"photos": "Photos",
|
||||
"photos": "Fotoğraf",
|
||||
"species": "Türler"
|
||||
},
|
||||
"gitea": {
|
||||
"notifications": "Bildirimler",
|
||||
"issues": "Issues",
|
||||
"pulls": "Değişiklik İstekleri",
|
||||
"repositories": "Repositories"
|
||||
"repositories": "Depolar"
|
||||
},
|
||||
"stash": {
|
||||
"scenes": "Sahneler",
|
||||
@@ -908,13 +909,13 @@
|
||||
"galleries": "Galeriler",
|
||||
"performers": "Oyuncu",
|
||||
"studios": "Stüdyolar",
|
||||
"movies": "Movies",
|
||||
"tags": "Tags",
|
||||
"movies": "Filmler",
|
||||
"tags": "Etiketler",
|
||||
"oCount": "O Sayısı"
|
||||
},
|
||||
"tandoor": {
|
||||
"users": "Users",
|
||||
"recipes": "Recipes",
|
||||
"users": "Kullanıcılar",
|
||||
"recipes": "Tarifler",
|
||||
"keywords": "Anahtar Sözcükler"
|
||||
},
|
||||
"homebox": {
|
||||
@@ -922,17 +923,17 @@
|
||||
"totalWithWarranty": "Garantili",
|
||||
"locations": "Konum",
|
||||
"labels": "Etiketler",
|
||||
"users": "Users",
|
||||
"users": "Kullanıcılar",
|
||||
"totalValue": "Toplam Değer"
|
||||
},
|
||||
"crowdsec": {
|
||||
"alerts": "Alerts",
|
||||
"alerts": "Uyarılar",
|
||||
"bans": "Yasaklar"
|
||||
},
|
||||
"wgeasy": {
|
||||
"connected": "Connected",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"connected": "Bağlı",
|
||||
"enabled": "Etkin",
|
||||
"disabled": "Devre dışı",
|
||||
"total": "Toplam"
|
||||
},
|
||||
"swagdashboard": {
|
||||
@@ -942,9 +943,9 @@
|
||||
"banned": "Yasaklı"
|
||||
},
|
||||
"myspeed": {
|
||||
"ping": "Ping",
|
||||
"ping": "Gecikme",
|
||||
"download": "İndirme",
|
||||
"upload": "Upload"
|
||||
"upload": "Yükleme"
|
||||
},
|
||||
"stocks": {
|
||||
"stocks": "Hisse Senetleri",
|
||||
@@ -955,70 +956,70 @@
|
||||
},
|
||||
"frigate": {
|
||||
"cameras": "Kameralar",
|
||||
"uptime": "Uptime",
|
||||
"version": "Version"
|
||||
"uptime": "Çalışma süresi",
|
||||
"version": "Sürüm"
|
||||
},
|
||||
"linkwarden": {
|
||||
"links": "Bağlantılar",
|
||||
"collections": "Koleksiyonlar",
|
||||
"tags": "Tags"
|
||||
"tags": "Etiketler"
|
||||
},
|
||||
"zabbix": {
|
||||
"unclassified": "Not classified",
|
||||
"information": "Information",
|
||||
"unclassified": "Sınıflandırılmamış",
|
||||
"information": "Bilgi",
|
||||
"warning": "Uyarı",
|
||||
"average": "Ortalama",
|
||||
"high": "Yüksek",
|
||||
"disaster": "Felaket"
|
||||
},
|
||||
"lubelogger": {
|
||||
"vehicle": "Vehicle",
|
||||
"vehicles": "Vehicles",
|
||||
"vehicle": "Taşıt",
|
||||
"vehicles": "Taşıtlar",
|
||||
"serviceRecords": "Service Records",
|
||||
"reminders": "Reminders",
|
||||
"nextReminder": "Next Reminder",
|
||||
"reminders": "Hatırlatıcılar",
|
||||
"nextReminder": "Sonraki hatırlatıcı",
|
||||
"none": "None"
|
||||
},
|
||||
"vikunja": {
|
||||
"projects": "Active Projects",
|
||||
"projects": "Etkin projeler",
|
||||
"tasks7d": "Bitişi Bu Hafta Olan Görevler",
|
||||
"tasksOverdue": "Overdue Tasks",
|
||||
"tasksInProgress": "Tasks In Progress"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Name",
|
||||
"address": "Address",
|
||||
"name": "Ad",
|
||||
"address": "Adres",
|
||||
"last_seen": "Last Seen",
|
||||
"status": "Durum",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
"online": "Çevrimiçi",
|
||||
"offline": "Çevrimdışı"
|
||||
},
|
||||
"beszel": {
|
||||
"name": "Name",
|
||||
"systems": "Systems",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"paused": "Paused",
|
||||
"name": "Ad",
|
||||
"systems": "Sistemler",
|
||||
"up": "Çalışıyor",
|
||||
"down": "Çalışmayan",
|
||||
"paused": "Durduruldu",
|
||||
"pending": "Pending",
|
||||
"status": "Durum",
|
||||
"updated": "Updated",
|
||||
"cpu": "CPU",
|
||||
"memory": "MEM",
|
||||
"updated": "Güncellendi",
|
||||
"cpu": "İşlemci",
|
||||
"memory": "Bellek",
|
||||
"disk": "Disk",
|
||||
"network": "NET"
|
||||
},
|
||||
"argocd": {
|
||||
"apps": "Apps",
|
||||
"apps": "Uygulamalar",
|
||||
"synced": "Synced",
|
||||
"outOfSync": "Out Of Sync",
|
||||
"healthy": "Healthy",
|
||||
"healthy": "Sağlıklı",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"missing": "Missing",
|
||||
"suspended": "Suspended"
|
||||
"missing": "Eksik",
|
||||
"suspended": "Askıya Alındı"
|
||||
},
|
||||
"spoolman": {
|
||||
"loading": "Loading"
|
||||
"loading": "Yükleniyor"
|
||||
},
|
||||
"gitlab": {
|
||||
"groups": "Groups",
|
||||
@@ -1030,32 +1031,32 @@
|
||||
"status": "Durum",
|
||||
"load": "Load",
|
||||
"bcharge": "Battery Charge",
|
||||
"timeleft": "Time Left"
|
||||
"timeleft": "Kalan zaman"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"bookmarks": "Yer imleri",
|
||||
"favorites": "Gözdeler",
|
||||
"archived": "Archived",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"tags": "Tags"
|
||||
"lists": "Listeler",
|
||||
"tags": "Etiketler"
|
||||
},
|
||||
"slskd": {
|
||||
"slskStatus": "Ağ",
|
||||
"connected": "Connected",
|
||||
"disconnected": "Disconnected",
|
||||
"connected": "Bağlı",
|
||||
"disconnected": "Bağlı değil",
|
||||
"updateStatus": "Güncelleme",
|
||||
"update_yes": "Available",
|
||||
"update_no": "Up to Date",
|
||||
"update_yes": "Uygun",
|
||||
"update_no": "Güncel",
|
||||
"downloads": "İndirmeler",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
"uploads": "Yüklemeler",
|
||||
"sharedFiles": "Dosyalar"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
"songs": "Şarkılar",
|
||||
"movies": "Filmler",
|
||||
"episodes": "Bölümler",
|
||||
"other": "Diğer"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
@@ -1064,17 +1065,17 @@
|
||||
"komodo": {
|
||||
"total": "Toplam",
|
||||
"running": "Çalışıyor",
|
||||
"stopped": "Stopped",
|
||||
"down": "Down",
|
||||
"unhealthy": "Unhealthy",
|
||||
"unknown": "Unknown",
|
||||
"servers": "Servers",
|
||||
"stopped": "Durdu",
|
||||
"down": "Çalışmayan",
|
||||
"unhealthy": "Sağlıksız",
|
||||
"unknown": "Bilinmeyen",
|
||||
"servers": "Sunucular",
|
||||
"stacks": "Stacks",
|
||||
"containers": "Containers"
|
||||
},
|
||||
"filebrowser": {
|
||||
"available": "Available",
|
||||
"used": "Used",
|
||||
"available": "Uygun",
|
||||
"used": "Kullanılıyor",
|
||||
"total": "Toplam"
|
||||
},
|
||||
"wallos": {
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Sonraki Ay",
|
||||
"previousMonthlyCost": "Önceki Ay",
|
||||
"nextRenewingSubscription": "Sonraki Ödeme"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Başladı",
|
||||
"STOPPED": "Durdu",
|
||||
"NEW_ARRAY": "Yeni dizi",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk devre dışı",
|
||||
"SWAP_DSBL": "Swap devre dışı",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Çok fazla disk eksik",
|
||||
"NEW_DISK_TOO_SMALL": "Yeni disk çok küçük",
|
||||
"NO_DATA_DISKS": "Veri diski yok",
|
||||
"notifications": "Bildirimler",
|
||||
"status": "Durum",
|
||||
"cpu": "İşlemci",
|
||||
"memoryUsed": "Bellek kullanılıyor",
|
||||
"memoryAvailable": "Bellek uygun",
|
||||
"arrayUsed": "Kullanılan dizi",
|
||||
"arrayFree": "Uygun dizi",
|
||||
"poolUsed": "{{pool}} kullanılıyor",
|
||||
"poolFree": "{{pool}} boş"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,20 +14,20 @@
|
||||
"date": "{{value, date}}",
|
||||
"relativeDate": "{{value, relativeDate}}",
|
||||
"duration": "{{value, duration}}",
|
||||
"months": "mo",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"minutes": "m",
|
||||
"seconds": "s"
|
||||
"months": "tháng",
|
||||
"days": "ngày",
|
||||
"hours": "giờ",
|
||||
"minutes": "phút",
|
||||
"seconds": "giây"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Thiếu loại Widget: {{type}}",
|
||||
"api_error": "Lỗi API",
|
||||
"information": "Information",
|
||||
"information": "Thông tin",
|
||||
"status": "Trạng thái",
|
||||
"url": "URL",
|
||||
"raw_error": "Raw Error",
|
||||
"response_data": "Response Data"
|
||||
"raw_error": "Lỗi thô",
|
||||
"response_data": "Dữ liệu phản hồi"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Vị trí hiện tại",
|
||||
@@ -44,106 +44,106 @@
|
||||
"total": "Tổng",
|
||||
"free": "Dư",
|
||||
"used": "Đã dùng",
|
||||
"load": "Load",
|
||||
"load": "\n",
|
||||
"temp": "TEMP",
|
||||
"max": "Max",
|
||||
"max": "Tối đa",
|
||||
"uptime": "UP"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Users",
|
||||
"uptime": "Uptime",
|
||||
"days": "Days",
|
||||
"users": "Người dùng",
|
||||
"uptime": "Thời gian hoạt động",
|
||||
"days": "Ngày",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Devices",
|
||||
"lan_devices": "LAN Devices",
|
||||
"wlan_devices": "WLAN Devices",
|
||||
"lan_users": "LAN Users",
|
||||
"wlan_users": "WLAN Users",
|
||||
"devices": "Thiết bị",
|
||||
"lan_devices": "Thiết bị trong mạng LAN",
|
||||
"wlan_devices": "Thiết bị trong mạng WLAN",
|
||||
"lan_users": "Người dùng mạng LAN",
|
||||
"wlan_users": "Người dùng mạng WLAN",
|
||||
"up": "UP",
|
||||
"down": "DOWN",
|
||||
"wait": "Please wait",
|
||||
"empty_data": "Subsystem status unknown"
|
||||
"wait": "Vui lòng chờ",
|
||||
"empty_data": "Trạng thái hệ thống phụ không xác định"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "RX",
|
||||
"tx": "TX",
|
||||
"mem": "MEM",
|
||||
"mem": "Bộ nhớ",
|
||||
"cpu": "CPU",
|
||||
"running": "Running",
|
||||
"running": "Đang hoạt động",
|
||||
"offline": "Ngoại tuyến",
|
||||
"error": "Error",
|
||||
"unknown": "Unknown",
|
||||
"healthy": "Healthy",
|
||||
"starting": "Starting",
|
||||
"unhealthy": "Unhealthy",
|
||||
"not_found": "Not Found",
|
||||
"error": "Lỗi",
|
||||
"unknown": "Không xác định",
|
||||
"healthy": "Ổn định",
|
||||
"starting": "Đang bắt đầu",
|
||||
"unhealthy": "Bất thường",
|
||||
"not_found": "Không tìm thấy",
|
||||
"exited": "Exited",
|
||||
"partial": "Partial"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"error": "Lỗi",
|
||||
"ping": "Ping",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Không khả dụng"
|
||||
},
|
||||
"siteMonitor": {
|
||||
"http_status": "HTTP status",
|
||||
"error": "Error",
|
||||
"response": "Response",
|
||||
"http_status": "Trạng thái HTTP",
|
||||
"error": "Lỗi",
|
||||
"response": "Phản hồi",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Not Available"
|
||||
"not_available": "Không có sẵn"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Đang chơi",
|
||||
"transcoding": "Chuyển định dạng",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams",
|
||||
"movies": "Movies",
|
||||
"movies": "Phim ảnh",
|
||||
"series": "Series",
|
||||
"episodes": "Episodes",
|
||||
"songs": "Songs"
|
||||
"songs": "Bài hát"
|
||||
},
|
||||
"esphome": {
|
||||
"offline": "Offline",
|
||||
"offline_alt": "Offline",
|
||||
"online": "Online",
|
||||
"total": "Total",
|
||||
"unknown": "Unknown"
|
||||
"unknown": "Không xác định"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Battery",
|
||||
"grid_power": "Grid",
|
||||
"battery_soc": "Pin",
|
||||
"grid_power": "Lưới",
|
||||
"home_power": "Consumption",
|
||||
"charge_power": "Charger",
|
||||
"charge_power": "Bộ sạc",
|
||||
"kilowatt": "kW"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"download": "Tải xuống",
|
||||
"upload": "Tải lên",
|
||||
"leech": "",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Subscriptions",
|
||||
"unread": "Unread"
|
||||
"subscriptions": "Đăng ký",
|
||||
"unread": "Chưa đọc"
|
||||
},
|
||||
"fritzbox": {
|
||||
"connectionStatus": "Status",
|
||||
"connectionStatusUnconfigured": "Unconfigured",
|
||||
"connectionStatusConnecting": "Connecting",
|
||||
"connectionStatusAuthenticating": "Authenticating",
|
||||
"connectionStatusPendingDisconnect": "Pending Disconnect",
|
||||
"connectionStatusDisconnecting": "Disconnecting",
|
||||
"connectionStatusDisconnected": "Disconnected",
|
||||
"connectionStatusConnected": "Connected",
|
||||
"uptime": "Uptime",
|
||||
"maxDown": "Max. Down",
|
||||
"maxUp": "Max. Up",
|
||||
"connectionStatus": "Trạng thái",
|
||||
"connectionStatusUnconfigured": "Chưa được cấu hình",
|
||||
"connectionStatusConnecting": "Đang kết nối",
|
||||
"connectionStatusAuthenticating": "Đang uỷ quyền",
|
||||
"connectionStatusPendingDisconnect": "Đang chờ ngắt kết nối",
|
||||
"connectionStatusDisconnecting": "Đang ngắt kết nối",
|
||||
"connectionStatusDisconnected": "Đã ngắt kết nối",
|
||||
"connectionStatusConnected": "Đã kết nối",
|
||||
"uptime": "Thời gian hoạt động",
|
||||
"maxDown": "Tải xuống tối đa",
|
||||
"maxUp": "Tải lên tối đa",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"received": "Received",
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -998,64 +999,64 @@
|
||||
"systems": "Systems",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"paused": "Paused",
|
||||
"pending": "Pending",
|
||||
"status": "Status",
|
||||
"updated": "Updated",
|
||||
"paused": "Đã tạm dừng",
|
||||
"pending": "Đang xử lý",
|
||||
"status": "Trạng thái",
|
||||
"updated": "Đã cập nhật",
|
||||
"cpu": "CPU",
|
||||
"memory": "MEM",
|
||||
"disk": "Disk",
|
||||
"disk": "Ổ đĩa",
|
||||
"network": "NET"
|
||||
},
|
||||
"argocd": {
|
||||
"apps": "Apps",
|
||||
"apps": "Ứng dụng",
|
||||
"synced": "Synced",
|
||||
"outOfSync": "Out Of Sync",
|
||||
"healthy": "Healthy",
|
||||
"healthy": "Ổn định",
|
||||
"degraded": "Degraded",
|
||||
"progressing": "Progressing",
|
||||
"missing": "Missing",
|
||||
"missing": "Bị thiếu",
|
||||
"suspended": "Suspended"
|
||||
},
|
||||
"spoolman": {
|
||||
"loading": "Loading"
|
||||
"loading": "Đang tải"
|
||||
},
|
||||
"gitlab": {
|
||||
"groups": "Groups",
|
||||
"issues": "Issues",
|
||||
"merges": "Merge Requests",
|
||||
"projects": "Projects"
|
||||
"groups": "Nhóm",
|
||||
"issues": "Vấn đề",
|
||||
"merges": "Yêu cầu Hợp nhất",
|
||||
"projects": "Dự án"
|
||||
},
|
||||
"apcups": {
|
||||
"status": "Status",
|
||||
"load": "Load",
|
||||
"bcharge": "Battery Charge",
|
||||
"timeleft": "Time Left"
|
||||
"status": "Trạng thái",
|
||||
"load": "Đang tải\n",
|
||||
"bcharge": "Sạc pin",
|
||||
"timeleft": "Thời gian còn lại"
|
||||
},
|
||||
"karakeep": {
|
||||
"bookmarks": "Bookmarks",
|
||||
"favorites": "Favorites",
|
||||
"archived": "Archived",
|
||||
"highlights": "Highlights",
|
||||
"lists": "Lists",
|
||||
"tags": "Tags"
|
||||
"bookmarks": "Dấu trang",
|
||||
"favorites": "Mục yêu thích",
|
||||
"archived": "Đã lưu trữ",
|
||||
"highlights": "Tâm điểm",
|
||||
"lists": "Danh sách",
|
||||
"tags": "Thẻ"
|
||||
},
|
||||
"slskd": {
|
||||
"slskStatus": "Network",
|
||||
"connected": "Connected",
|
||||
"disconnected": "Disconnected",
|
||||
"updateStatus": "Update",
|
||||
"update_yes": "Available",
|
||||
"update_no": "Up to Date",
|
||||
"downloads": "Downloads",
|
||||
"uploads": "Uploads",
|
||||
"sharedFiles": "Files"
|
||||
"slskStatus": "Mạng",
|
||||
"connected": "Đã kết nối",
|
||||
"disconnected": "Mất kết nối",
|
||||
"updateStatus": "Cập nhật",
|
||||
"update_yes": "Khả dụng",
|
||||
"update_no": "Đã cập nhật",
|
||||
"downloads": "Tải xuống",
|
||||
"uploads": "Tải lên",
|
||||
"sharedFiles": "Tập tin"
|
||||
},
|
||||
"jellystat": {
|
||||
"songs": "Songs",
|
||||
"movies": "Movies",
|
||||
"episodes": "Episodes",
|
||||
"other": "Other"
|
||||
"songs": "Bài hát",
|
||||
"movies": "Phim ảnh",
|
||||
"episodes": "Tập",
|
||||
"other": "Khác"
|
||||
},
|
||||
"checkmk": {
|
||||
"serviceErrors": "Service issues",
|
||||
@@ -1066,8 +1067,8 @@
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"down": "Down",
|
||||
"unhealthy": "Unhealthy",
|
||||
"unknown": "Unknown",
|
||||
"unhealthy": "Không ổn định",
|
||||
"unknown": "Không xác định",
|
||||
"servers": "Servers",
|
||||
"stacks": "Stacks",
|
||||
"containers": "Containers"
|
||||
@@ -1075,13 +1076,48 @@
|
||||
"filebrowser": {
|
||||
"available": "Available",
|
||||
"used": "Used",
|
||||
"total": "Total"
|
||||
"total": "Tổng"
|
||||
},
|
||||
"wallos": {
|
||||
"activeSubscriptions": "Subscriptions",
|
||||
"thisMonthlyCost": "This Month",
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
"activeSubscriptions": "Đăng ký",
|
||||
"thisMonthlyCost": "Tháng này",
|
||||
"nextMonthlyCost": "Tháng sau",
|
||||
"previousMonthlyCost": "Tháng trước",
|
||||
"nextRenewingSubscription": "Lần thanh toán kế tiếp"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Đã bắt đầu",
|
||||
"STOPPED": "Đã dừng",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "Không có dữ liệu ổ đĩa",
|
||||
"notifications": "Thông báo",
|
||||
"status": "Trạng thái",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Các kế hoạch",
|
||||
"num_success_30": "Thành công",
|
||||
"num_failure_30": "Thất bại",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Bài hát",
|
||||
"time": "Thời gian",
|
||||
"artists": "Nghệ sĩ"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,10 +200,10 @@
|
||||
"rutorrent": {
|
||||
"active": "活动中",
|
||||
"upload": "Upload",
|
||||
"download": "Download"
|
||||
"download": "下载"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Download",
|
||||
"download": "下载",
|
||||
"upload": "",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
@@ -223,8 +223,8 @@
|
||||
"invalid": "Invalid"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"download": "下载",
|
||||
"upload": "上传",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "待办的",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -360,13 +361,13 @@
|
||||
"middleware": "中间件"
|
||||
},
|
||||
"trilium": {
|
||||
"version": "Version",
|
||||
"notesCount": "Notes",
|
||||
"dbSize": "Database Size",
|
||||
"version": "版本",
|
||||
"notesCount": "笔记",
|
||||
"dbSize": "数据库大小",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "No Active Streams",
|
||||
"nothing_streaming": "",
|
||||
"please_wait": "请等待"
|
||||
},
|
||||
"npm": {
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,7 +275,8 @@
|
||||
"jellyseerr": {
|
||||
"pending": "Pending",
|
||||
"approved": "Approved",
|
||||
"available": "Available"
|
||||
"available": "Available",
|
||||
"issues": "Open Issues"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pending",
|
||||
@@ -1083,5 +1084,40 @@
|
||||
"nextMonthlyCost": "Next Month",
|
||||
"previousMonthlyCost": "Prev. Month",
|
||||
"nextRenewingSubscription": "Next Payment"
|
||||
},
|
||||
"unraid": {
|
||||
"STARTED": "Started",
|
||||
"STOPPED": "Stopped",
|
||||
"NEW_ARRAY": "New Array",
|
||||
"RECON_DISK": "Reconstructing Disk",
|
||||
"DISABLE_DISK": "Disk Disabled",
|
||||
"SWAP_DSBL": "Swap Disable",
|
||||
"INVALID_EXPANSION": "Invalid Expansion",
|
||||
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
|
||||
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
|
||||
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
|
||||
"NO_DATA_DISKS": "No Data Disks",
|
||||
"notifications": "Notifications",
|
||||
"status": "Status",
|
||||
"cpu": "CPU",
|
||||
"memoryUsed": "Memory Used",
|
||||
"memoryAvailable": "Memory Available",
|
||||
"arrayUsed": "Array Used",
|
||||
"arrayFree": "Array Free",
|
||||
"poolUsed": "{{pool}} Used",
|
||||
"poolFree": "{{pool}} Free"
|
||||
},
|
||||
"backrest": {
|
||||
"num_plans": "Plans",
|
||||
"num_success_30": "Successes",
|
||||
"num_failure_30": "Failures",
|
||||
"num_success_latest": "Succeeding",
|
||||
"num_failure_latest": "Failing",
|
||||
"bytes_added_30": "Bytes Added"
|
||||
},
|
||||
"yourspotify": {
|
||||
"songs": "Songs",
|
||||
"time": "Time",
|
||||
"artists": "Artists"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,37 @@
|
||||
Babel==2.12.1
|
||||
backrefs==5.9
|
||||
cairocffi==1.7.1
|
||||
CairoSVG==2.7.1
|
||||
certifi==2023.7.22
|
||||
cffi==1.17.1
|
||||
cfgv==3.4.0
|
||||
charset-normalizer==3.2.0
|
||||
click==8.1.7
|
||||
colorama==0.4.6
|
||||
cssselect2==0.7.0
|
||||
defusedxml==0.7.1
|
||||
distlib==0.3.9
|
||||
filelock==3.17.0
|
||||
ghp-import==2.1.0
|
||||
identify==2.6.7
|
||||
idna==3.4
|
||||
Jinja2==3.1.2
|
||||
Markdown==3.4.4
|
||||
MarkupSafe==2.1.3
|
||||
mergedeep==1.3.4
|
||||
mkdocs==1.6
|
||||
mkdocs-material==9.5.26
|
||||
mkdocs==1.6.0
|
||||
mkdocs-get-deps==0.2.0
|
||||
mkdocs-material==9.6.18
|
||||
mkdocs-material-extensions==1.3.1
|
||||
mkdocs-redirects==1.2.1
|
||||
nodeenv==1.9.1
|
||||
packaging==23.1
|
||||
paginate==0.5.6
|
||||
pathspec==0.11.2
|
||||
pillow==10.4.0
|
||||
platformdirs==3.10.0
|
||||
pre-commit==3.5.0
|
||||
pycparser==2.22
|
||||
Pygments==2.16.1
|
||||
pymdown-extensions==10.3
|
||||
python-dateutil==2.8.2
|
||||
@@ -24,8 +40,8 @@ pyyaml_env_tag==0.1
|
||||
regex==2023.8.8
|
||||
requests==2.31.0
|
||||
six==1.16.0
|
||||
tinycss2==1.4.0
|
||||
urllib3==2.0.5
|
||||
virtualenv==20.29.2
|
||||
watchdog==3.0.0
|
||||
pre-commit==3.5.0
|
||||
mkdocs-material[imaging]==9.5.26
|
||||
mkdocs-redirects==1.2.1
|
||||
webencodings==0.5.1
|
||||
|
||||
@@ -1,16 +1,47 @@
|
||||
import classNames from "classnames";
|
||||
import { useTranslation } from "next-i18next";
|
||||
import { useContext, useMemo } from "react";
|
||||
|
||||
export default function Block({ value, label }) {
|
||||
import { BlockHighlightContext } from "./highlight-context";
|
||||
|
||||
import { evaluateHighlight, getHighlightClass } from "utils/highlights";
|
||||
|
||||
export default function Block({ value, label, field }) {
|
||||
const { t } = useTranslation();
|
||||
const highlightConfig = useContext(BlockHighlightContext);
|
||||
|
||||
const highlight = useMemo(() => {
|
||||
if (!highlightConfig) return null;
|
||||
const labels = Array.isArray(label) ? label : [label];
|
||||
const candidates = [];
|
||||
if (typeof field === "string") candidates.push(field);
|
||||
for (const candidateLabel of labels) {
|
||||
if (typeof candidateLabel === "string") candidates.push(candidateLabel);
|
||||
}
|
||||
|
||||
for (const candidate of candidates) {
|
||||
const result = evaluateHighlight(candidate, value, highlightConfig);
|
||||
if (result) return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
}, [field, label, value, highlightConfig]);
|
||||
|
||||
const highlightClass = useMemo(() => {
|
||||
if (!highlight?.level) return undefined;
|
||||
return getHighlightClass(highlight.level, highlightConfig);
|
||||
}, [highlight, highlightConfig]);
|
||||
|
||||
return (
|
||||
<div
|
||||
className={classNames(
|
||||
"bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-col items-center justify-center text-center p-1",
|
||||
value === undefined ? "animate-pulse" : "",
|
||||
highlightClass,
|
||||
"service-block",
|
||||
)}
|
||||
data-highlight-level={highlight?.level}
|
||||
data-highlight-source={highlight?.source}
|
||||
>
|
||||
<div className="font-thin text-sm">{value === undefined || value === null ? "-" : value}</div>
|
||||
<div className="font-bold text-xs uppercase">{t(label)}</div>
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import { useContext } from "react";
|
||||
import { useContext, useMemo } from "react";
|
||||
import { SettingsContext } from "utils/contexts/settings";
|
||||
|
||||
import Error from "./error";
|
||||
import { BlockHighlightContext } from "./highlight-context";
|
||||
|
||||
import { buildHighlightConfig } from "utils/highlights";
|
||||
|
||||
const ALIASED_WIDGETS = {
|
||||
pialert: "netalertx",
|
||||
@@ -11,6 +14,11 @@ const ALIASED_WIDGETS = {
|
||||
export default function Container({ error = false, children, service }) {
|
||||
const { settings } = useContext(SettingsContext);
|
||||
|
||||
const highlightConfig = useMemo(
|
||||
() => buildHighlightConfig(settings?.blockHighlights, service?.widget?.highlight, service?.widget?.type),
|
||||
[settings?.blockHighlights, service?.widget?.highlight, service?.widget?.type],
|
||||
);
|
||||
|
||||
if (error) {
|
||||
if (settings.hideErrors || service.widget.hide_errors) {
|
||||
return null;
|
||||
@@ -51,6 +59,11 @@ export default function Container({ error = false, children, service }) {
|
||||
}),
|
||||
);
|
||||
}
|
||||
const content = <div className="relative flex flex-row w-full service-container">{visibleChildren}</div>;
|
||||
|
||||
return <div className="relative flex flex-row w-full service-container">{visibleChildren}</div>;
|
||||
if (!highlightConfig) {
|
||||
return content;
|
||||
}
|
||||
|
||||
return <BlockHighlightContext.Provider value={highlightConfig}>{content}</BlockHighlightContext.Provider>;
|
||||
}
|
||||
|
||||
3
src/components/services/widget/highlight-context.jsx
Normal file
3
src/components/services/widget/highlight-context.jsx
Normal file
@@ -0,0 +1,3 @@
|
||||
import { createContext } from "react";
|
||||
|
||||
export const BlockHighlightContext = createContext(null);
|
||||
@@ -55,8 +55,7 @@ export default function Version({ disableUpdateCheck = false }) {
|
||||
</span>
|
||||
{!validate(version)
|
||||
? null
|
||||
: releaseData &&
|
||||
latestRelease &&
|
||||
: latestRelease &&
|
||||
compareVersions(latestRelease.tag_name, version) > 0 && (
|
||||
<a
|
||||
href={latestRelease.html_url}
|
||||
|
||||
@@ -113,7 +113,7 @@ export default function Widget({ options }) {
|
||||
<Resource
|
||||
icon={FaMemory}
|
||||
value={t("common.bytes", {
|
||||
value: data.mem.free,
|
||||
value: data.mem.available,
|
||||
maximumFractionDigits: 1,
|
||||
binary: true,
|
||||
})}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default function QueueEntry({ title, activity, timeLeft, progress }) {
|
||||
export default function QueueEntry({ title, activity, timeLeft, progress, size }) {
|
||||
return (
|
||||
<div className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex">
|
||||
<div
|
||||
@@ -11,6 +11,7 @@ export default function QueueEntry({ title, activity, timeLeft, progress }) {
|
||||
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden text-left">{title}</div>
|
||||
</div>
|
||||
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
|
||||
{size && `${size} - `}
|
||||
{timeLeft ? `${activity} - ${timeLeft}` : activity}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -417,6 +417,7 @@ function Home({ initialSettings }) {
|
||||
)}
|
||||
<meta name="msapplication-TileColor" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||
<meta name="theme-color" content={themes[settings.color || "slate"][settings.theme || "dark"]} />
|
||||
<meta name="color-scheme" content="dark light"></meta>
|
||||
</Head>
|
||||
|
||||
<Script src="/api/config/custom.js" />
|
||||
@@ -424,7 +425,7 @@ function Home({ initialSettings }) {
|
||||
<div
|
||||
className={classNames(
|
||||
settings.fullWidth ? "" : "container",
|
||||
"relative m-auto flex flex-col justify-start z-10 h-full",
|
||||
"relative m-auto flex flex-col justify-start z-10 h-full min-h-screen",
|
||||
)}
|
||||
>
|
||||
<QuickLaunch
|
||||
@@ -499,6 +500,7 @@ function Home({ initialSettings }) {
|
||||
|
||||
export default function Wrapper({ initialSettings, fallback }) {
|
||||
const { theme } = useContext(ThemeContext);
|
||||
const { color } = useContext(ColorContext);
|
||||
let backgroundImage = "";
|
||||
let opacity = initialSettings?.backgroundOpacity ?? 0;
|
||||
let backgroundBlur = false;
|
||||
@@ -527,41 +529,59 @@ export default function Wrapper({ initialSettings, fallback }) {
|
||||
html.classList.toggle("dark", theme === "dark");
|
||||
html.classList.add(theme === "dark" ? "scheme-dark" : "scheme-light");
|
||||
|
||||
html.classList.remove(...Array.from(html.classList).filter((cls) => cls.startsWith("theme-")));
|
||||
html.classList.add(`theme-${initialSettings.color || "slate"}`);
|
||||
const desiredThemeClass = `theme-${color || initialSettings.color || "slate"}`;
|
||||
const themeClassesToRemove = Array.from(html.classList).filter(
|
||||
(cls) => cls.startsWith("theme-") && cls !== desiredThemeClass,
|
||||
);
|
||||
if (themeClassesToRemove.length) {
|
||||
html.classList.remove(...themeClassesToRemove);
|
||||
}
|
||||
if (!html.classList.contains(desiredThemeClass)) {
|
||||
html.classList.add(desiredThemeClass);
|
||||
}
|
||||
|
||||
// Remove any previously applied inline styles
|
||||
body.style.backgroundImage = "";
|
||||
body.style.backgroundColor = "";
|
||||
body.style.backgroundAttachment = "";
|
||||
}, [backgroundImage, opacity, theme, initialSettings.color]);
|
||||
if (backgroundImage) {
|
||||
const safeBackgroundImage = backgroundImage.replace(/'/g, "\\'");
|
||||
body.style.backgroundImage = `linear-gradient(rgb(var(--bg-color) / ${opacity}), rgb(var(--bg-color) / ${opacity})), url('${safeBackgroundImage}')`;
|
||||
body.style.backgroundSize = "cover";
|
||||
body.style.backgroundPosition = "center";
|
||||
body.style.backgroundAttachment = "fixed";
|
||||
body.style.backgroundRepeat = "no-repeat";
|
||||
body.style.backgroundColor = "";
|
||||
} else {
|
||||
body.style.backgroundImage = "none";
|
||||
body.style.backgroundColor = "rgb(var(--bg-color))";
|
||||
body.style.backgroundSize = "";
|
||||
body.style.backgroundPosition = "";
|
||||
body.style.backgroundAttachment = "";
|
||||
body.style.backgroundRepeat = "";
|
||||
}
|
||||
|
||||
return () => {
|
||||
body.style.backgroundImage = "";
|
||||
body.style.backgroundColor = "";
|
||||
body.style.backgroundSize = "";
|
||||
body.style.backgroundPosition = "";
|
||||
body.style.backgroundAttachment = "";
|
||||
body.style.backgroundRepeat = "";
|
||||
};
|
||||
}, [backgroundImage, opacity, theme, color, initialSettings.color]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{backgroundImage && (
|
||||
<div
|
||||
id="background"
|
||||
aria-hidden="true"
|
||||
style={{
|
||||
backgroundImage: `linear-gradient(rgb(var(--bg-color) / ${opacity}), rgb(var(--bg-color) / ${opacity})), url('${backgroundImage}')`,
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<div id="page_wrapper" className="relative h-full">
|
||||
<div
|
||||
id="inner_wrapper"
|
||||
tabIndex="-1"
|
||||
className={classNames(
|
||||
"w-full h-full overflow-auto",
|
||||
backgroundBlur &&
|
||||
`backdrop-blur${initialSettings.background.blur?.length ? `-${initialSettings.background.blur}` : ""}`,
|
||||
backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`,
|
||||
backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`,
|
||||
)}
|
||||
>
|
||||
<Index initialSettings={initialSettings} fallback={fallback} />
|
||||
</div>
|
||||
<div id="page_wrapper" className="relative min-h-screen">
|
||||
<div
|
||||
id="inner_wrapper"
|
||||
tabIndex="-1"
|
||||
className={classNames(
|
||||
"w-full min-h-screen overflow-auto",
|
||||
backgroundBlur &&
|
||||
`backdrop-blur${initialSettings.background.blur?.length ? `-${initialSettings.background.blur}` : ""}`,
|
||||
backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`,
|
||||
backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`,
|
||||
)}
|
||||
>
|
||||
<Index initialSettings={initialSettings} fallback={fallback} />
|
||||
</div>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -30,18 +30,6 @@ body,
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: rgb(var(--bg-color));
|
||||
}
|
||||
|
||||
#background {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 0;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-attachment: scroll;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
html,
|
||||
|
||||
@@ -254,6 +254,7 @@ export function cleanServiceGroups(groups) {
|
||||
// all widgets
|
||||
fields,
|
||||
hideErrors,
|
||||
highlight,
|
||||
type,
|
||||
|
||||
// azuredevops
|
||||
@@ -284,6 +285,7 @@ export function cleanServiceGroups(groups) {
|
||||
|
||||
// deluge, qbittorrent
|
||||
enableLeechProgress,
|
||||
enableLeechSize,
|
||||
|
||||
// diskstation
|
||||
volume,
|
||||
@@ -408,6 +410,9 @@ export function cleanServiceGroups(groups) {
|
||||
// wgeasy
|
||||
threshold,
|
||||
|
||||
// yourspotify
|
||||
interval,
|
||||
|
||||
// technitium
|
||||
range,
|
||||
|
||||
@@ -437,6 +442,21 @@ export function cleanServiceGroups(groups) {
|
||||
index,
|
||||
};
|
||||
|
||||
if (highlight) {
|
||||
let parsedHighlight = highlight;
|
||||
if (typeof highlight === "string") {
|
||||
try {
|
||||
parsedHighlight = JSON.parse(highlight);
|
||||
} catch (e) {
|
||||
logger.error("Invalid highlight configuration detected in config for service '%s'", service.name);
|
||||
parsedHighlight = null;
|
||||
}
|
||||
}
|
||||
if (parsedHighlight && typeof parsedHighlight === "object") {
|
||||
widget.highlight = parsedHighlight;
|
||||
}
|
||||
}
|
||||
|
||||
if (type === "azuredevops") {
|
||||
if (userEmail) widget.userEmail = userEmail;
|
||||
if (repositoryId) widget.repositoryId = repositoryId;
|
||||
@@ -490,6 +510,7 @@ export function cleanServiceGroups(groups) {
|
||||
}
|
||||
if (["deluge", "qbittorrent"].includes(type)) {
|
||||
if (enableLeechProgress !== undefined) widget.enableLeechProgress = JSON.parse(enableLeechProgress);
|
||||
if (enableLeechSize !== undefined) widget.enableLeechSize = JSON.parse(enableLeechSize);
|
||||
}
|
||||
if (["opnsense", "pfsense"].includes(type)) {
|
||||
if (wan) widget.wan = wan;
|
||||
@@ -623,6 +644,11 @@ export function cleanServiceGroups(groups) {
|
||||
if (pool3) widget.pool3 = pool3;
|
||||
if (pool4) widget.pool4 = pool4;
|
||||
}
|
||||
if (type === "yourspotify") {
|
||||
if (interval !== undefined) {
|
||||
widget.interval = interval;
|
||||
}
|
||||
}
|
||||
return widget;
|
||||
});
|
||||
return cleanedService;
|
||||
|
||||
257
src/utils/highlights.js
Normal file
257
src/utils/highlights.js
Normal file
@@ -0,0 +1,257 @@
|
||||
const DEFAULT_LEVEL_CLASSES = {
|
||||
good: "bg-emerald-500/40 text-emerald-950 dark:bg-emerald-900/60 dark:text-emerald-400",
|
||||
warn: "bg-amber-300/30 text-amber-900 dark:bg-amber-900/30 dark:text-amber-200",
|
||||
danger: "bg-rose-700/45 text-rose-200 dark:bg-rose-950/70 dark:text-rose-400",
|
||||
};
|
||||
|
||||
const normalizeFieldKeys = (fields, widgetType) => {
|
||||
if (!fields || typeof fields !== "object") return {};
|
||||
|
||||
return Object.entries(fields).reduce((acc, [key, value]) => {
|
||||
if (value === null || value === undefined) return acc;
|
||||
if (typeof key !== "string") return acc;
|
||||
const trimmedKey = key.trim();
|
||||
if (trimmedKey === "") return acc;
|
||||
|
||||
acc[trimmedKey] = value;
|
||||
|
||||
if (widgetType && !trimmedKey.includes(".")) {
|
||||
const namespacedKey = `${widgetType}.${trimmedKey}`;
|
||||
if (!(namespacedKey in acc)) {
|
||||
acc[namespacedKey] = value;
|
||||
}
|
||||
}
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
export const buildHighlightConfig = (globalConfig, widgetConfig, widgetType) => {
|
||||
const levels = {
|
||||
...DEFAULT_LEVEL_CLASSES,
|
||||
...(globalConfig?.levels || {}),
|
||||
...(widgetConfig?.levels || {}),
|
||||
};
|
||||
|
||||
const { levels: _levels, ...fields } = widgetConfig || {};
|
||||
const normalizedFields = normalizeFieldKeys(fields, widgetType);
|
||||
|
||||
const hasLevels = Object.values(levels).some(Boolean);
|
||||
const hasFields = Object.keys(normalizedFields).length > 0;
|
||||
|
||||
if (!hasLevels && !hasFields) return null;
|
||||
|
||||
return { levels, fields: normalizedFields };
|
||||
};
|
||||
|
||||
const NUMERIC_OPERATORS = {
|
||||
gt: (value, target) => value > target,
|
||||
gte: (value, target) => value >= target,
|
||||
lt: (value, target) => value < target,
|
||||
lte: (value, target) => value <= target,
|
||||
eq: (value, target) => value === target,
|
||||
ne: (value, target) => value !== target,
|
||||
};
|
||||
|
||||
const STRING_OPERATORS = {
|
||||
equals: (value, target, caseSensitive) =>
|
||||
caseSensitive ? value === target : value.toLowerCase() === target.toLowerCase(),
|
||||
includes: (value, target, caseSensitive) =>
|
||||
caseSensitive ? value.includes(target) : value.toLowerCase().includes(target.toLowerCase()),
|
||||
startsWith: (value, target, caseSensitive) =>
|
||||
caseSensitive ? value.startsWith(target) : value.toLowerCase().startsWith(target.toLowerCase()),
|
||||
endsWith: (value, target, caseSensitive) =>
|
||||
caseSensitive ? value.endsWith(target) : value.toLowerCase().endsWith(target.toLowerCase()),
|
||||
};
|
||||
|
||||
const toNumber = (value) => {
|
||||
if (typeof value === "number" && Number.isFinite(value)) return value;
|
||||
if (typeof value === "string" && value.trim()) {
|
||||
const trimmed = value.trim();
|
||||
const candidate = Number(trimmed);
|
||||
if (!Number.isNaN(candidate)) return candidate;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const parseNumericValue = (value) => {
|
||||
if (value === null || value === undefined) return undefined;
|
||||
if (typeof value === "number" && Number.isFinite(value)) return value;
|
||||
|
||||
if (typeof value === "string") {
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed) return undefined;
|
||||
|
||||
const direct = Number(trimmed);
|
||||
if (!Number.isNaN(direct)) return direct;
|
||||
|
||||
const compact = trimmed.replace(/\s+/g, "");
|
||||
if (!compact || !/^[-+]?[0-9.,]+$/.test(compact)) return undefined;
|
||||
|
||||
const commaCount = (compact.match(/,/g) || []).length;
|
||||
const dotCount = (compact.match(/\./g) || []).length;
|
||||
|
||||
if (commaCount && dotCount) {
|
||||
const lastComma = compact.lastIndexOf(",");
|
||||
const lastDot = compact.lastIndexOf(".");
|
||||
if (lastComma > lastDot) {
|
||||
const asDecimal = compact.replace(/\./g, "").replace(/,/g, ".");
|
||||
const parsed = Number(asDecimal);
|
||||
return Number.isNaN(parsed) ? undefined : parsed;
|
||||
}
|
||||
const asThousands = compact.replace(/,/g, "");
|
||||
const parsed = Number(asThousands);
|
||||
return Number.isNaN(parsed) ? undefined : parsed;
|
||||
}
|
||||
|
||||
if (commaCount) {
|
||||
const parts = compact.split(",");
|
||||
if (commaCount === 1 && parts[1]?.length <= 2) {
|
||||
const parsed = Number(compact.replace(",", "."));
|
||||
if (!Number.isNaN(parsed)) return parsed;
|
||||
}
|
||||
const isGrouped = parts.length > 1 && parts.slice(1).every((part) => part.length === 3);
|
||||
if (isGrouped) {
|
||||
const parsed = Number(compact.replace(/,/g, ""));
|
||||
if (!Number.isNaN(parsed)) return parsed;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (dotCount) {
|
||||
const parts = compact.split(".");
|
||||
if (dotCount === 1 && parts[1]?.length <= 2) {
|
||||
const parsed = Number(compact);
|
||||
if (!Number.isNaN(parsed)) return parsed;
|
||||
}
|
||||
const isGrouped = parts.length > 1 && parts.slice(1).every((part) => part.length === 3);
|
||||
if (isGrouped) {
|
||||
const parsed = Number(compact.replace(/\./g, ""));
|
||||
if (!Number.isNaN(parsed)) return parsed;
|
||||
}
|
||||
const parsed = Number(compact);
|
||||
return Number.isNaN(parsed) ? undefined : parsed;
|
||||
}
|
||||
|
||||
const parsed = Number(compact);
|
||||
return Number.isNaN(parsed) ? undefined : parsed;
|
||||
}
|
||||
|
||||
if (typeof value === "object" && value !== null && "props" in value) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const evaluateNumericRule = (value, rule) => {
|
||||
if (!rule || typeof rule !== "object") return false;
|
||||
const operator = rule.when && NUMERIC_OPERATORS[rule.when];
|
||||
const numericValue = toNumber(rule.value);
|
||||
if (operator && numericValue !== undefined) {
|
||||
const passes = operator(value, numericValue);
|
||||
return rule.negate ? !passes : passes;
|
||||
}
|
||||
|
||||
if (rule.when === "between") {
|
||||
const min = toNumber(rule.min ?? rule.value?.min);
|
||||
const max = toNumber(rule.max ?? rule.value?.max);
|
||||
if (min === undefined && max === undefined) return false;
|
||||
const lowerBound = min ?? Number.NEGATIVE_INFINITY;
|
||||
const upperBound = max ?? Number.POSITIVE_INFINITY;
|
||||
const passes = value >= lowerBound && value <= upperBound;
|
||||
return rule.negate ? !passes : passes;
|
||||
}
|
||||
|
||||
if (rule.when === "outside") {
|
||||
const min = toNumber(rule.min ?? rule.value?.min);
|
||||
const max = toNumber(rule.max ?? rule.value?.max);
|
||||
if (min === undefined && max === undefined) return false;
|
||||
const passes = value < (min ?? Number.NEGATIVE_INFINITY) || value > (max ?? Number.POSITIVE_INFINITY);
|
||||
return rule.negate ? !passes : passes;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
const evaluateStringRule = (value, rule) => {
|
||||
if (!rule || typeof rule !== "object") return false;
|
||||
if (rule.when === "regex" && typeof rule.value === "string") {
|
||||
try {
|
||||
const flags = rule.flags || (rule.caseSensitive ? "" : "i");
|
||||
const regex = new RegExp(rule.value, flags);
|
||||
const passes = regex.test(value);
|
||||
return rule.negate ? !passes : passes;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const operator = rule.when && STRING_OPERATORS[rule.when];
|
||||
if (!operator || typeof rule.value !== "string") return false;
|
||||
const passes = operator(value, rule.value, Boolean(rule.caseSensitive));
|
||||
return rule.negate ? !passes : passes;
|
||||
};
|
||||
|
||||
const ensureArray = (value) => {
|
||||
if (Array.isArray(value)) return value;
|
||||
if (value === undefined || value === null) return [];
|
||||
return [value];
|
||||
};
|
||||
|
||||
const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
||||
const { numeric, string } = ruleSet;
|
||||
|
||||
if (numeric && numericValue !== undefined) {
|
||||
const numericRules = ensureArray(numeric);
|
||||
const numericCandidates = Array.isArray(numericValue) ? numericValue : [numericValue];
|
||||
for (const candidate of numericCandidates) {
|
||||
for (const rule of numericRules) {
|
||||
if (rule?.level && evaluateNumericRule(candidate, rule)) {
|
||||
return { level: rule.level, source: "numeric", rule };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (string && stringValue !== undefined) {
|
||||
const stringRules = ensureArray(string);
|
||||
for (const rule of stringRules) {
|
||||
if (rule?.level && evaluateStringRule(stringValue, rule)) {
|
||||
return { level: rule.level, source: "string", rule };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
export const evaluateHighlight = (fieldKey, value, highlightConfig) => {
|
||||
if (!highlightConfig || !fieldKey) return null;
|
||||
const { fields } = highlightConfig;
|
||||
if (!fields || typeof fields !== "object") return null;
|
||||
|
||||
const ruleSet = fields[fieldKey];
|
||||
if (!ruleSet) return null;
|
||||
|
||||
const numericValue = parseNumericValue(value);
|
||||
let stringValue;
|
||||
if (typeof value === "string") {
|
||||
stringValue = value;
|
||||
} else if (typeof value === "number" || typeof value === "bigint") {
|
||||
stringValue = String(value);
|
||||
} else if (typeof value === "boolean") {
|
||||
stringValue = value ? "true" : "false";
|
||||
}
|
||||
|
||||
const normalizedString = typeof stringValue === "string" ? stringValue.trim() : stringValue;
|
||||
|
||||
return findHighlightLevel(ruleSet, numericValue, normalizedString);
|
||||
};
|
||||
|
||||
export const getHighlightClass = (level, highlightConfig) => {
|
||||
if (!level || !highlightConfig) return undefined;
|
||||
return highlightConfig.levels?.[level];
|
||||
};
|
||||
|
||||
export const getDefaultHighlightLevels = () => DEFAULT_LEVEL_CLASSES;
|
||||
@@ -24,10 +24,11 @@ function buildResponse(plans) {
|
||||
|
||||
plans.forEach((plan) => {
|
||||
const statuses = plan?.recentBackups?.status;
|
||||
// See https://github.com/garethgeorge/backrest/blob/4357295a17cb2e71639473c9929a060c4dd1b624/proto/v1/operations.proto#L78-L87
|
||||
if (Array.isArray(statuses) && statuses.length > 0) {
|
||||
if (statuses[0] === "STATUS_SUCCESS") {
|
||||
numSuccessLatest++;
|
||||
} else {
|
||||
} else if (statuses[0] === "STATUS_ERROR") {
|
||||
numFailureLatest++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,13 +106,19 @@ export default function Integration({ config, params, setEvents, hideErrors, tim
|
||||
};
|
||||
|
||||
const eventsToAdd = [];
|
||||
events.forEach((event, index) => {
|
||||
events.forEach((event) => {
|
||||
const occurrences = getOcurrencesFromRange(event);
|
||||
|
||||
occurrences.forEach((icalDate) => {
|
||||
const date = icalDate.toJSDate();
|
||||
|
||||
const hash = simpleHash(`${event.id}-${event.title}-${index}-${date.toString()}`);
|
||||
const occurrenceTimestamp = date.getTime();
|
||||
const eventIdentifier =
|
||||
event.id ??
|
||||
simpleHash(
|
||||
`${event.title ?? ""}-${event.type ?? ""}-${event.status ?? ""}-${event.url ?? ""}-${event.location ?? ""}`,
|
||||
);
|
||||
const hash = simpleHash(`${eventIdentifier}-${occurrenceTimestamp}`);
|
||||
|
||||
let title = event.title;
|
||||
if (showName) {
|
||||
|
||||
@@ -150,6 +150,7 @@ const components = {
|
||||
wgeasy: dynamic(() => import("./wgeasy/component")),
|
||||
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),
|
||||
xteve: dynamic(() => import("./xteve/component")),
|
||||
yourspotify: dynamic(() => import("./yourspotify/component")),
|
||||
zabbix: dynamic(() => import("./zabbix/component")),
|
||||
};
|
||||
|
||||
|
||||
@@ -205,13 +205,14 @@ export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
||||
|
||||
const {
|
||||
data: sessionsData,
|
||||
error: sessionsError,
|
||||
mutate: sessionMutate,
|
||||
} = useWidgetAPI(widget, "Sessions", {
|
||||
refreshInterval: 5000,
|
||||
} = useWidgetAPI(widget, enableNowPlaying ? "Sessions" : "", {
|
||||
refreshInterval: enableNowPlaying ? 5000 : undefined,
|
||||
});
|
||||
|
||||
const { data: countData, error: countError } = useWidgetAPI(widget, "Count", {
|
||||
@@ -239,13 +240,12 @@ export default function Component({ service }) {
|
||||
}
|
||||
|
||||
const enableBlocks = service.widget?.enableBlocks;
|
||||
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
|
||||
const enableMediaControl = service.widget?.enableMediaControl !== false; // default is true
|
||||
const enableUser = !!service.widget?.enableUser; // default is false
|
||||
const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true
|
||||
const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false
|
||||
|
||||
if (!sessionsData || !countData) {
|
||||
if ((enableNowPlaying && !sessionsData) || !countData) {
|
||||
return (
|
||||
<>
|
||||
{enableBlocks && <CountBlocks service={service} countData={null} />}
|
||||
|
||||
@@ -14,6 +14,12 @@ export default function Component({ service }) {
|
||||
return <Container service={service} error={resultError} />;
|
||||
}
|
||||
|
||||
if (!widget.fields || widget.fields.length === 0) {
|
||||
widget.fields = ["online", "offline", "offline_alt", "total"];
|
||||
} else if (widget.fields.length > 4) {
|
||||
widget.fields = widget.fields.slice(0, 4);
|
||||
}
|
||||
|
||||
if (!resultData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
|
||||
@@ -27,7 +27,7 @@ export default function Component({ service }) {
|
||||
useEffect(() => {
|
||||
if (data) {
|
||||
setDataPoints((prevDataPoints) => {
|
||||
const newDataPoints = [...prevDataPoints, { a: data.used, b: data.free }];
|
||||
const newDataPoints = [...prevDataPoints, { a: data.used, b: data.available }];
|
||||
if (newDataPoints.length > pointsLimit) {
|
||||
newDataPoints.shift();
|
||||
}
|
||||
@@ -67,10 +67,10 @@ export default function Component({ service }) {
|
||||
|
||||
{data && !error && (
|
||||
<Block position="bottom-3 left-3">
|
||||
{data.free && chart && (
|
||||
{data.available && chart && (
|
||||
<div className="text-xs opacity-50">
|
||||
{t("common.bytes", {
|
||||
value: data.free,
|
||||
value: data.available,
|
||||
maximumFractionDigits: 1,
|
||||
binary: true,
|
||||
})}{" "}
|
||||
@@ -93,10 +93,10 @@ export default function Component({ service }) {
|
||||
|
||||
{!chart && (
|
||||
<Block position="top-3 right-3">
|
||||
{data.free && (
|
||||
{data.available && (
|
||||
<div className="text-xs opacity-50">
|
||||
{t("common.bytes", {
|
||||
value: data.free,
|
||||
value: data.available,
|
||||
maximumFractionDigits: 1,
|
||||
binary: true,
|
||||
})}{" "}
|
||||
|
||||
@@ -32,7 +32,7 @@ export default function Component({ service }) {
|
||||
|
||||
if (
|
||||
(!widget.showStacks && !containersData) ||
|
||||
(widget.showSummary && (!stacksData || !serversData)) ||
|
||||
(widget.showSummary && (!containersData || !stacksData || !serversData)) ||
|
||||
(widget.showStacks && !stacksData)
|
||||
) {
|
||||
return widget.showSummary ? (
|
||||
|
||||
@@ -33,14 +33,6 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block
|
||||
label="myspeed.ping"
|
||||
value={t("common.ms", {
|
||||
value: data[0].ping,
|
||||
style: "unit",
|
||||
unit: "millisecond",
|
||||
})}
|
||||
/>
|
||||
<Block
|
||||
label="myspeed.download"
|
||||
value={t("common.bitrate", {
|
||||
@@ -55,6 +47,14 @@ export default function Component({ service }) {
|
||||
decimals: 2,
|
||||
})}
|
||||
/>
|
||||
<Block
|
||||
label="myspeed.ping"
|
||||
value={t("common.ms", {
|
||||
value: data[0].ping,
|
||||
style: "unit",
|
||||
unit: "millisecond",
|
||||
})}
|
||||
/>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ export default async function omadaProxyHandler(req, res) {
|
||||
|
||||
const controllerVersionMajor = parseInt(controllerVersion.split(".")[0], 10);
|
||||
|
||||
if (![3, 4, 5].includes(controllerVersionMajor)) {
|
||||
if (![3, 4, 5, 6].includes(controllerVersionMajor)) {
|
||||
return res.status(500).json({ error: { message: "Error determining controller version", data } });
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ export default async function omadaProxyHandler(req, res) {
|
||||
loginUrl = `${url}/api/v2/login`;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
loginUrl = `${url}/${cId}/api/v2/login`;
|
||||
break;
|
||||
default:
|
||||
@@ -122,6 +123,7 @@ export default async function omadaProxyHandler(req, res) {
|
||||
sitesUrl = `${url}/api/v2/sites?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
sitesUrl = `${url}/${cId}/api/v2/sites?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
break;
|
||||
default:
|
||||
@@ -207,8 +209,8 @@ export default async function omadaProxyHandler(req, res) {
|
||||
connectedAp = siteResponseData.result.connectedAp;
|
||||
activeUser = siteResponseData.result.activeUser;
|
||||
alerts = siteResponseData.result.alerts;
|
||||
} else if (controllerVersionMajor === 4 || controllerVersionMajor === 5) {
|
||||
const siteName = controllerVersionMajor === 5 ? site.id : site.key;
|
||||
} else if ([4, 5, 6].includes(controllerVersionMajor)) {
|
||||
const siteName = controllerVersionMajor > 4 ? site.id : site.key;
|
||||
const siteStatsUrl =
|
||||
controllerVersionMajor === 4
|
||||
? `${url}/api/v2/sites/${siteName}/dashboard/overviewDiagram?token=${token}¤tPage=1¤tPageSize=1000`
|
||||
|
||||
@@ -80,6 +80,11 @@ export default function Component({ service }) {
|
||||
timeLeft={t("common.duration", { value: queueEntry.eta })}
|
||||
title={queueEntry.name}
|
||||
activity={queueEntry.state}
|
||||
size={
|
||||
widget?.enableLeechSize
|
||||
? t("common.bbytes", { value: queueEntry.size, maximumFractionDigits: 1 })
|
||||
: undefined
|
||||
}
|
||||
key={`${queueEntry.name}-${queueEntry.amount_left}`}
|
||||
/>
|
||||
))}
|
||||
|
||||
@@ -52,6 +52,7 @@ export default function Component({ service }) {
|
||||
let status;
|
||||
let uptime = 0;
|
||||
let logIndex = 0;
|
||||
const hasLogs = Array.isArray(monitor.logs) && monitor.logs.length > 0;
|
||||
|
||||
switch (monitor.status) {
|
||||
case 0:
|
||||
@@ -62,7 +63,7 @@ export default function Component({ service }) {
|
||||
break;
|
||||
case 2:
|
||||
status = t("uptimerobot.up");
|
||||
uptime = t("common.duration", { value: monitor.logs[0].duration });
|
||||
uptime = t("common.duration", { value: hasLogs ? monitor.logs[0].duration : 0 });
|
||||
logIndex = 1;
|
||||
break;
|
||||
case 8:
|
||||
@@ -76,14 +77,14 @@ export default function Component({ service }) {
|
||||
break;
|
||||
}
|
||||
|
||||
const lastDown = new Date(monitor.logs[logIndex].datetime * 1000).toLocaleString();
|
||||
const downDuration = t("common.duration", { value: monitor.logs[logIndex].duration });
|
||||
const hideDown = logIndex === 1 && monitor.logs[logIndex].type !== 1;
|
||||
const lastDown = hasLogs ? new Date(monitor.logs[logIndex].datetime * 1000).toLocaleString() : "";
|
||||
const downDuration = t("common.duration", { value: hasLogs ? monitor.logs[logIndex].duration : 0 });
|
||||
const hideDown = !hasLogs || (logIndex === 1 && monitor.logs[logIndex].type !== 1);
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="uptimerobot.status" value={status} />
|
||||
<Block label="uptimerobot.uptime" value={uptime} />
|
||||
{hasLogs && <Block label="uptimerobot.uptime" value={uptime} />}
|
||||
{!hideDown && <Block label="uptimerobot.lastDown" value={lastDown} />}
|
||||
{!hideDown && <Block label="uptimerobot.downDuration" value={downDuration} />}
|
||||
</Container>
|
||||
|
||||
@@ -141,6 +141,7 @@ import watchtower from "./watchtower/widget";
|
||||
import wgeasy from "./wgeasy/widget";
|
||||
import whatsupdocker from "./whatsupdocker/widget";
|
||||
import xteve from "./xteve/widget";
|
||||
import yourspotify from "./yourspotify/widget";
|
||||
import zabbix from "./zabbix/widget";
|
||||
|
||||
const widgets = {
|
||||
@@ -291,6 +292,7 @@ const widgets = {
|
||||
wgeasy,
|
||||
whatsupdocker,
|
||||
xteve,
|
||||
yourspotify,
|
||||
zabbix,
|
||||
};
|
||||
|
||||
|
||||
76
src/widgets/yourspotify/component.jsx
Normal file
76
src/widgets/yourspotify/component.jsx
Normal file
@@ -0,0 +1,76 @@
|
||||
import Block from "components/services/widget/block";
|
||||
import Container from "components/services/widget/container";
|
||||
import { useTranslation } from "next-i18next";
|
||||
import { useMemo } from "react";
|
||||
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
function getStartDate(interval) {
|
||||
const d = new Date();
|
||||
switch (interval) {
|
||||
case "day":
|
||||
d.setDate(d.getDate() - 1);
|
||||
break;
|
||||
case "week":
|
||||
d.setDate(d.getDate() - 7);
|
||||
break;
|
||||
case "month":
|
||||
d.setMonth(d.getMonth() - 1);
|
||||
break;
|
||||
case "year":
|
||||
d.setFullYear(d.getFullYear() - 1);
|
||||
break;
|
||||
}
|
||||
return d.toISOString();
|
||||
}
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const interval = widget?.interval || "week";
|
||||
|
||||
const date = useMemo(() => {
|
||||
return interval === "all" ? "2006-04-23T00:00:00.000Z" : getStartDate(interval);
|
||||
}, [interval]);
|
||||
|
||||
const params = {
|
||||
timeSplit: "all",
|
||||
start: date,
|
||||
};
|
||||
|
||||
const { data: songsListened, error: songsError } = useWidgetAPI(widget, "songs", params);
|
||||
const { data: timeListened, error: timeError } = useWidgetAPI(widget, "time", params);
|
||||
const { data: artistsListened, error: artistsError } = useWidgetAPI(widget, "artists", params);
|
||||
|
||||
if (songsError || timeError || artistsError) {
|
||||
return <Container service={service} error={songsError ?? timeError ?? artistsError} />;
|
||||
}
|
||||
|
||||
if (isNaN(songsListened) || isNaN(timeListened) || isNaN(artistsListened)) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="yourspotify.songs" />
|
||||
<Block label="yourspotify.time" />
|
||||
<Block label="yourspotify.artists" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="yourspotify.songs" value={t("common.number", { value: songsListened })} />
|
||||
|
||||
<Block
|
||||
label="yourspotify.time"
|
||||
value={t(
|
||||
timeListened > 0 ? "common.duration" : "common.number", // Display 0 if duration is 0
|
||||
{
|
||||
value: timeListened / 1000,
|
||||
},
|
||||
)}
|
||||
/>
|
||||
<Block label="yourspotify.artists" value={t("common.number", { value: artistsListened })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
27
src/widgets/yourspotify/widget.js
Normal file
27
src/widgets/yourspotify/widget.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import { asJson } from "utils/proxy/api-helpers";
|
||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/spotify/{endpoint}?token={key}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
songs: {
|
||||
endpoint: "songs_per",
|
||||
params: ["start", "timeSplit"],
|
||||
map: (data) => asJson(data)[0]?.count || 0,
|
||||
},
|
||||
time: {
|
||||
endpoint: "time_per",
|
||||
params: ["start", "timeSplit"],
|
||||
map: (data) => asJson(data)[0]?.count || 0,
|
||||
},
|
||||
artists: {
|
||||
endpoint: "different_artists_per",
|
||||
params: ["start", "timeSplit"],
|
||||
map: (data) => asJson(data)[0]?.artists?.length || 0,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
||||
Reference in New Issue
Block a user