Merge branch 'dev'

This commit is contained in:
shamoon
2025-09-22 08:17:08 -07:00
74 changed files with 3325 additions and 1349 deletions

View File

@@ -25,7 +25,7 @@ jobs:
uses: actions/checkout@v5
- name: Install python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.x
@@ -38,7 +38,7 @@ jobs:
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 20
cache: 'pnpm'
@@ -96,7 +96,7 @@ jobs:
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 20
cache: 'pnpm'

View File

@@ -19,7 +19,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v5
- name: Install python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Check files
@@ -33,7 +33,7 @@ jobs:
- pre-commit
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
@@ -59,7 +59,7 @@ jobs:
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: 3.x
- run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV

View File

@@ -18,7 +18,7 @@ jobs:
name: 'Stale'
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
- uses: actions/stale@v10
with:
days-before-stale: 7
days-before-close: 14
@@ -57,7 +57,7 @@ jobs:
name: 'Close Answered Discussions'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {
@@ -113,7 +113,7 @@ jobs:
name: 'Close Outdated Discussions'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {
@@ -204,7 +204,7 @@ jobs:
name: 'Close Unsupported Feature Requests'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {

View File

@@ -4,8 +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!
```yaml
pve:
url: https://proxmox.host.or.ip:8006
token: username@pam!Token ID
secret: secret
@@ -17,7 +19,7 @@ Once the Proxmox connection is configured, individual services can be configured
### Configuration Options
- `proxmoxNode`: The name of the Proxmox node where your VM/LXC is running
- `proxmoxNode`: The name of the Proxmox node where your VM/LXC is running, must match with a node configured in the `proxmox.yaml`
- `proxmoxVMID`: The ID of the Proxmox VM or LXC container
- `proxmoxType`: (Optional) The type of Proxmox virtual machine. Defaults to `qemu` for VMs, but can be set to `lxc` for LXC containers

View File

@@ -441,6 +441,7 @@ There are a few optional settings for the Quick Launch feature:
- `showSearchSuggestions`: show search suggestions for the internet search. If this is not specified then the setting will be inherited from the search widget. If it is not specified there either, it will default to false. For custom providers the `suggestionUrl` needs to be set in order for this to work.
- `provider`: search engine provider. If none is specified it will try to use the provider set for the Search Widget, if neither are present then internet search will be disabled.
- `hideVisitURL`: disable detecting and offering an option to open URLs. This is false by default, enabling the feature.
- `mobileButtonPosition`: enables and sets the position of the mobile quicklaunch button. Options are `top-left`, `top-right`, `bottom-left`, `bottom-right`. This is empty by default, disabling the feature.
```yaml
quicklaunch:

View File

@@ -28,7 +28,7 @@ These companies help the Homepage project by providing services, tools, and reso
</div>
<div style="margin-bottom: 16px;">
<a href="https://crowdin.com/project/homepage"><img src="https://support.crowdin.com/assets/logos/core-logo/png/crowdin-core-logo-cWhite.png" alt="Crowdin" style="max-width: 100%; height: 64px; display: block;" /></a>
<a href="https://crowdin.com/project/gethomepage"><img src="https://support.crowdin.com/assets/logos/core-logo/png/crowdin-core-logo-cWhite.png" alt="Crowdin" style="max-width: 100%; height: 64px; display: block;" /></a>
<p>
Crowdin provides the translation platform for the project. Making it easy to translate the project into multiple languages.
</p>

View File

@@ -0,0 +1,17 @@
---
title: Backrest
description: Backrest Widget Configuration
---
[Backrest](https://garethgeorge.github.io/backrest/) is a web-based frontend for
the [Restic](https://restic.net/) backup tool.
**Allowed fields:** `["num_success_latest","num_failure_latest","num_success_30","num_plans","num_failure_30","bytes_added_30"]`
```yaml
widget:
type: backrest
url: http://backrest.host.or.ip
username: admin # optional if auth is enabled in Backrest
password: admin # optional if auth is enabled in Backrest
```

View File

@@ -10,7 +10,8 @@ Learn more about [Immich](https://github.com/immich-app/immich).
| < v1.118 | 1 (default) |
| >= v1.118 | 2 |
Find your API key under `Account Settings > API Keys`.
Find your API key under `Account Settings > API Keys`. The key should have the
`server.statistics` permission.
Allowed fields: `["users" ,"photos", "videos", "storage"]`.

View File

@@ -15,6 +15,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Authentik](authentik.md)
- [Autobrr](autobrr.md)
- [Azure DevOps](azuredevops.md)
- [Backrest](backrest.md)
- [Bazarr](bazarr.md)
- [Beszel](beszel.md)
- [Caddy](caddy.md)
@@ -139,6 +140,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [TubeArchivist](tubearchivist.md)
- [UniFi Controller](unifi-controller.md)
- [Unmanic](unmanic.md)
- [Unraid](unraid.md)
- [Uptime Kuma](uptime-kuma.md)
- [UptimeRobot](uptimerobot.md)
- [UrBackup](urbackup.md)

View File

@@ -7,7 +7,8 @@ Learn more about [Jellyseerr](https://github.com/Fallenbagel/jellyseerr).
Find your API key under `Settings > General > API Key`.
Allowed fields: `["pending", "approved", "available"]`.
Allowed fields: `["pending", "approved", "available", "issues"]`.
Default fields: `["pending", "approved", "available"]`.
```yaml
widget:

View File

@@ -0,0 +1,28 @@
---
title: Unraid
description: Unraid Widget Configuration
---
Learn more about [Unraid](https://unraid.net/).
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)
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"]`
```yaml
widget:
type: unraid
url: https://unraid.host.or.ip
key: api-key
pool1: pool1name # required only if using pool1 fields
pool2: pool2name # required only if using pool2 fields
pool3: pool3name # required only if using pool3 fields
pool4: pool4name # required only if using pool4 fields
```

View File

@@ -39,6 +39,7 @@ nav:
- widgets/services/authentik.md
- widgets/services/autobrr.md
- widgets/services/azuredevops.md
- widgets/services/backrest.md
- widgets/services/bazarr.md
- widgets/services/beszel.md
- widgets/services/caddy.md
@@ -165,6 +166,7 @@ nav:
- widgets/services/tubearchivist.md
- widgets/services/unifi-controller.md
- widgets/services/unmanic.md
- widgets/services/unraid.md
- widgets/services/uptime-kuma.md
- widgets/services/uptimerobot.md
- widgets/services/urbackup.md

View File

@@ -11,13 +11,13 @@
"telemetry": "next telemetry disable"
},
"dependencies": {
"@headlessui/react": "^1.7.19",
"@headlessui/react": "^2.2.7",
"@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.2.0",
"gamedig": "^5.3.1",
"i18next": "^24.2.3",
"ical.js": "^2.1.0",
"js-yaml": "^4.1.0",
@@ -25,7 +25,7 @@
"luxon": "^3.6.1",
"memory-cache": "^0.2.0",
"minecraftstatuspinger": "^1.2.2",
"next": "^15.4.5",
"next": "^15.5.2",
"next-i18next": "^12.1.0",
"ping": "^0.4.4",
"pretty-bytes": "^6.1.1",
@@ -34,10 +34,10 @@
"react-dom": "^18.3.1",
"react-i18next": "^15.5.3",
"react-icons": "^5.4.0",
"recharts": "^2.15.3",
"recharts": "^3.1.2",
"swr": "^2.3.3",
"systeminformation": "^5.27.7",
"tough-cookie": "^5.1.2",
"tough-cookie": "^6.0.0",
"urbackup-server-api": "^0.8.9",
"winston": "^3.17.0",
"xml-js": "^1.6.11"

679
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Afwagtend",
"approved": "Goedgekeur",
"available": "Beskikbaar"
"available": "Beskikbaar",
"issues": "Oop Kwessies"
},
"overseerr": {
"pending": "Afwagtend",
@@ -1073,15 +1074,45 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Wartend",
"approved": "Genehmigt",
"available": "Verfügbar"
"available": "Verfügbar",
"issues": "Open 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,35 @@
"nextMonthlyCost": "Nächster Monat",
"previousMonthlyCost": "Vorh. Monat",
"nextRenewingSubscription": "Nächste Zahlung"
},
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pendiente",
"approved": "Aprobado",
"available": "Disponible"
"available": "Disponible",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pendiente",
@@ -1083,5 +1084,35 @@
"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": "Plans",
"num_success_30": "Successes",
"num_failure_30": "Failures",
"num_success_latest": "Succeeding",
"num_failure_latest": "Failing",
"bytes_added_30": "Bytes Added"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "En attente",
"approved": "Approuvé",
"available": "Disponible"
"available": "Disponible",
"issues": "Open Issues"
},
"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,35 @@
"nextMonthlyCost": "Mois prochain",
"previousMonthlyCost": "Mois précédent",
"nextRenewingSubscription": "Prochain paiement"
},
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "ממתין לאישור",
"approved": "מאושר",
"available": "זמין"
"available": "זמין",
"issues": "Open Issues"
},
"overseerr": {
"pending": "ממתין לאישור",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

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

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -63,7 +63,7 @@
"wlan_users": "Usuários de WLAN",
"up": "UP",
"down": "Desligado",
"wait": "Please wait",
"wait": "Por favor, aguarde",
"empty_data": "Status do Subsistema desconhecido"
},
"docker": {
@@ -83,7 +83,7 @@
"partial": "Parcial"
},
"ping": {
"error": "Error",
"error": "Erro",
"ping": "Tempo de resposta",
"down": "Inativo",
"up": "Ativo",
@@ -91,11 +91,11 @@
},
"siteMonitor": {
"http_status": "Estado HTTP",
"error": "Error",
"error": "Erro",
"response": "Resposta",
"down": "Down",
"up": "Up",
"not_available": "Not Available"
"down": "Inativo",
"up": "Ativo",
"not_available": "Não Disponível"
},
"emby": {
"playing": "A reproduzir",
@@ -112,7 +112,7 @@
"offline_alt": "Offline",
"online": "Disponível",
"total": "Total",
"unknown": "Unknown"
"unknown": "Desconhecido"
},
"evcc": {
"pv_power": "Produção",
@@ -141,11 +141,11 @@
"connectionStatusDisconnecting": "Desconectando",
"connectionStatusDisconnected": "Desconectado",
"connectionStatusConnected": "Conectado",
"uptime": "Uptime",
"uptime": "Tempo ativo",
"maxDown": "Tempo de inatividade máximo",
"maxUp": "Máx. Acima",
"down": "Down",
"up": "Up",
"down": "Inativo",
"up": "Ativo",
"received": "Recebido",
"sent": "Enviado",
"externalIPAddress": "IP Externo",
@@ -168,10 +168,10 @@
"passes": "Passes"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"playing": "Tocando",
"transcoding": "Transcodificando",
"bitrate": "Taxa de bits",
"no_active": "Sem Streams Ativos",
"plex_connection_error": "Verifique a conexão do Plex"
},
"omada": {
@@ -189,28 +189,28 @@
"plex": {
"streams": "Streams Ativas",
"albums": "Álbuns",
"movies": "Movies",
"movies": "Filmes",
"tv": "Series de TV"
},
"sabnzbd": {
"rate": "Rate",
"rate": "Taxa",
"queue": "Fila",
"timeleft": "Tempo restante"
},
"rutorrent": {
"active": "Ativo",
"upload": "Upload",
"download": "Download"
"upload": "Carregar",
"download": "Descarregar"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"download": "Descarregar",
"upload": "Carregar",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"download": "Descarregar",
"upload": "Carregar",
"leech": "Leech",
"seed": "Seed"
},
@@ -223,8 +223,8 @@
"invalid": "Inválido"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"download": "Descarregar",
"upload": "Carregar",
"leech": "Leech",
"seed": "Seed"
},
@@ -233,25 +233,25 @@
"cachemissbytes": "Bytes de Falha de Cache"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"download": "Descarregar",
"upload": "Carregar",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Desejada",
"queued": "Em fila",
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
"series": "Séries",
"queue": "Fila",
"unknown": "Desconhecido"
},
"radarr": {
"wanted": "Wanted",
"missing": "Faltando",
"queued": "Queued",
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
"queued": "Em fila",
"movies": "Filmes",
"queue": "Fila",
"unknown": "Desconhecido"
},
"lidarr": {
"wanted": "Wanted",
@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Ожидают",
"approved": "Одобрено",
"available": "Доступно"
"available": "Доступно",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Ожидают",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -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",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "На чекању",
"approved": "Одобрено",
"available": "Доступно"
"available": "Доступно",
"issues": "Отворених питања"
},
"overseerr": {
"pending": "На чекању",
@@ -1083,5 +1084,35 @@
"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": "Додати бајтови"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -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"
},
@@ -737,7 +738,7 @@
"failed": "Failed"
},
"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": {
@@ -802,19 +803,19 @@
"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"
},
"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",
@@ -876,9 +877,9 @@
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"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,55 +956,55 @@
},
"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",
"name": "Ad",
"address": "Address",
"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",
"cpu": "İşlemci",
"memory": "Bellek",
"disk": "Disk",
"network": "NET"
},
@@ -1011,14 +1012,14 @@
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Healthy",
"healthy": "Sağlıklı",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
"missing": "Eksik",
"suspended": "Suspended"
},
"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,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

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

View File

@@ -275,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -1083,5 +1084,35 @@
"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"
}
}

View File

@@ -1,13 +1,21 @@
import classNames from "classnames";
import { useTranslation } from "next-i18next";
import { useCallback, useContext, useEffect, useRef, useState } from "react";
import { FiSearch } from "react-icons/fi";
import useSWR from "swr";
import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "./resolvedicon";
import { getStoredProvider, searchProviders } from "./widgets/search/search";
export default function QuickLaunch({ servicesAndBookmarks, searchString, setSearchString, isOpen, close }) {
const MOBILE_BUTTON_POSITIONS = {
"top-left": "top-4 left-4",
"top-right": "top-4 right-4",
"bottom-left": "bottom-4 left-4",
"bottom-right": "bottom-4 right-4",
};
export default function QuickLaunch({ servicesAndBookmarks, searchString, setSearchString, isOpen, setSearching }) {
const { t } = useTranslation();
const { settings } = useContext(SettingsContext);
@@ -49,6 +57,10 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
);
}
let mobileButtonPosition = settings.quicklaunch?.mobileButtonPosition
? MOBILE_BUTTON_POSITIONS[settings.quicklaunch.mobileButtonPosition]
: null;
function openCurrentItem(newWindow) {
const result = results[currentItemIndex];
window.open(
@@ -59,13 +71,13 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
}
const closeAndReset = useCallback(() => {
close(false);
setSearching(false);
setTimeout(() => {
setSearchString("");
setCurrentItemIndex(null);
setSearchSuggestions([]);
}, 200); // delay a little for animations
}, [close, setSearchString, setCurrentItemIndex, setSearchSuggestions]);
}, [setSearching, setSearchString, setCurrentItemIndex, setSearchSuggestions]);
function handleSearchChange(event) {
const rawSearchString = event.target.value;
@@ -245,6 +257,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
}
return (
<>
<div
className={classNames(
"relative z-40 ease-in-out duration-300 transition-opacity",
@@ -326,5 +339,16 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
</div>
</div>
</div>
{mobileButtonPosition && (
<button
type="button"
onClick={setSearching.bind(this, !isOpen)}
className={`fixed ${mobileButtonPosition} z-40 p-2 rounded-full sm:hidden text-theme-700 dark:text-theme-200 bg-theme-50 dark:bg-theme-800 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 transition-opacity duration-100`}
style={{ opacity: isOpen ? 0 : 1 }}
>
<FiSearch className="w-4 h-4" />
</button>
)}
</>
);
}

View File

@@ -37,12 +37,12 @@ export default function Container({ error = false, children, service }) {
if (!field.includes(".")) {
fullField = `${type}.${field}`;
}
let matches = fullField === child?.props?.label;
let matches = fullField === (child?.props?.field || child?.props?.label);
// check if the field is an 'alias'
if (matches) {
return true;
} else if (ALIASED_WIDGETS[type]) {
matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label;
matches = fullField.replace(type, ALIASED_WIDGETS[type]) === (child?.props?.field || child?.props?.label);
return matches;
}

View File

@@ -24,9 +24,28 @@ export default async function handler(req, res) {
});
}
const baseUrl = `${proxmoxConfig.url}/api2/json`;
// Prefer per-node config (new format), fall back to legacy flat creds.
const nodeConfig =
(node && proxmoxConfig && proxmoxConfig[node]) ||
(proxmoxConfig && proxmoxConfig.url && proxmoxConfig.token && proxmoxConfig.secret
? {
url: proxmoxConfig.url,
token: proxmoxConfig.token,
secret: proxmoxConfig.secret,
}
: null);
if (!nodeConfig) {
return res.status(400).json({
error:
"Proxmox config not found for the specified node and no legacy credentials detected. " +
"Add a node block in proxmox.yaml (e.g., 'pve: { url, token, secret }') or restore legacy top-level url/token/secret.",
});
}
const baseUrl = `${nodeConfig.url}/api2/json`;
const headers = {
Authorization: `PVEAPIToken=${proxmoxConfig.token}=${proxmoxConfig.secret}`,
Authorization: `PVEAPIToken=${nodeConfig.token}=${nodeConfig.secret}`,
};
const statusUrl = `${baseUrl}/nodes/${node}/${vmType}/${vmid}/status/current`;

View File

@@ -432,7 +432,7 @@ function Home({ initialSettings }) {
searchString={searchString}
setSearchString={setSearchString}
isOpen={searching}
close={setSearching}
setSearching={setSearching}
/>
<div
id="information-widgets"
@@ -499,6 +499,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,14 +528,22 @@ 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]);
}, [backgroundImage, opacity, theme, color, initialSettings.color]);
return (
<>

View File

@@ -1,4 +1,5 @@
---
# pve:
# url: https://proxmox.host.or.ip:8006
# token: username@pam!Token ID
# secret: secret

View File

@@ -396,6 +396,12 @@ export function cleanServiceGroups(groups) {
// unifi
site,
// unraid
pool1,
pool2,
pool3,
pool4,
// vikunja
enableTaskList,
@@ -611,6 +617,12 @@ export function cleanServiceGroups(groups) {
if (type === "grafana") {
if (alerts) widget.alerts = alerts;
}
if (type === "unraid") {
if (pool1) widget.pool1 = pool1;
if (pool2) widget.pool2 = pool2;
if (pool3) widget.pool3 = pool3;
if (pool4) widget.pool4 = pool4;
}
return widget;
});
return cleanedService;

View File

@@ -8,6 +8,10 @@ import widgets from "widgets/widgets";
const logger = createLogger("credentialedProxyHandler");
function basicAuthHeader(widget) {
return `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
export default async function credentialedProxyHandler(req, res, map) {
const { group, service, endpoint, index } = req.query;
@@ -61,7 +65,7 @@ export default async function credentialedProxyHandler(req, res, map) {
if (widget.key) {
headers.Authorization = `Bearer ${widget.key}`;
} else {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
}
} else if (widget.type === "proxmox") {
headers.Authorization = `PVEAPIToken=${widget.username}=${widget.password}`;
@@ -78,31 +82,31 @@ export default async function credentialedProxyHandler(req, res, map) {
if (widget.key) {
headers["NC-Token"] = `${widget.key}`;
} else {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
}
} else if (widget.type === "paperlessngx") {
if (widget.key) {
headers.Authorization = `Token ${widget.key}`;
} else {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
}
} else if (widget.type === "azuredevops") {
headers.Authorization = `Basic ${Buffer.from(`$:${widget.key}`).toString("base64")}`;
} else if (widget.type === "glances") {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
} else if (widget.type === "plantit") {
headers.Key = `${widget.key}`;
} else if (widget.type === "myspeed") {
headers.Password = `${widget.password}`;
} else if (widget.type === "esphome") {
if (widget.username && widget.password) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
} else if (widget.key) {
headers.Cookie = `authenticated=${widget.key}`;
}
} else if (widget.type === "wgeasy") {
if (widget.username && widget.password) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
headers.Authorization = basicAuthHeader(widget);
} else {
headers.Authorization = widget.password;
}

View File

@@ -0,0 +1,50 @@
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
const BACKREST_DEFAULT_FIELDS = ["num_success_latest", "num_failure_latest", "num_failure_30", "bytes_added_30"];
const MAX_ALLOWED_FIELDS = 4;
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data, error } = useWidgetAPI(widget, "summary");
if (error) {
return <Container service={service} error={error} />;
}
if (!widget.fields?.length) {
widget.fields = BACKREST_DEFAULT_FIELDS;
} else if (widget.fields.length > MAX_ALLOWED_FIELDS) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
}
if (!data) {
return (
<Container service={service}>
<Block label="backrest.num_plans" />
<Block label="backrest.num_success_latest" />
<Block label="backrest.num_failure_latest" />
<Block label="backrest.num_success_30" />
<Block label="backrest.num_failure_30" />
<Block label="backrest.bytes_added_30" />
</Container>
);
}
return (
<Container service={service}>
<Block label="backrest.num_plans" value={t("common.number", { value: data.numPlans })} />
<Block label="backrest.num_success_latest" value={t("common.number", { value: data.numSuccessLatest })} />
<Block label="backrest.num_failure_latest" value={t("common.number", { value: data.numFailureLatest })} />
<Block label="backrest.num_success_30" value={t("common.number", { value: data.numSuccess30Days })} />
<Block label="backrest.num_failure_30" value={t("common.number", { value: data.numFailure30Days })} />
<Block label="backrest.bytes_added_30" value={t("common.bytes", { value: data.bytesAdded30Days })} />
</Container>
);
}

View File

@@ -0,0 +1,96 @@
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
import { asJson, formatApiCall } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
import widgets from "widgets/widgets";
const proxyName = "backrestProxyHandler";
const logger = createLogger(proxyName);
function sumField(plans, field) {
return plans.reduce((sum, plan) => {
const num = Number(plan[field]);
return sum + (Number.isNaN(num) ? 0 : num);
}, 0);
}
function buildResponse(plans) {
const numSuccess30Days = sumField(plans, "backupsSuccessLast30days");
const numFailure30Days = sumField(plans, "backupsFailed30days");
const bytesAdded30Days = sumField(plans, "bytesAddedLast30days");
var numSuccessLatest = 0;
var numFailureLatest = 0;
plans.forEach((plan) => {
const statuses = plan?.recentBackups?.status;
if (Array.isArray(statuses) && statuses.length > 0) {
if (statuses[0] === "STATUS_SUCCESS") {
numSuccessLatest++;
} else {
numFailureLatest++;
}
}
});
return {
numPlans: plans.length,
numSuccess30Days,
numFailure30Days,
numSuccessLatest,
numFailureLatest,
bytesAdded30Days,
};
}
export default async function backrestProxyHandler(req, res) {
const { group, service, endpoint, index } = req.query;
if (!group || !service) {
logger.debug("Invalid or missing service '%s' or group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" });
}
const widget = await getServiceWidget(group, service, index);
if (!widget) {
logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" });
}
const headers = {
"content-type": "application/json",
};
if (widget.username && widget.password) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
const { api } = widgets[widget.type];
const url = new URL(formatApiCall(api, { endpoint, ...widget }));
try {
const [status, contentType, data] = await httpProxy(url, {
method: "POST",
body: JSON.stringify({}),
headers,
});
if (status !== 200) {
logger.error("Error getting data from Backrest: %d. Data: %s", status, data);
return res.status(500).send({ error: { message: "Error getting data from Backrest", url, data } });
}
if (contentType) res.setHeader("Content-Type", "application/json");
const plans = asJson(data).planSummaries;
if (!Array.isArray(plans)) {
logger.error("Invalid plans data: %s", JSON.stringify(plans));
return res.status(500).send({ error: { message: "Invalid plans data", url, data } });
}
const response = buildResponse(plans);
return res.status(status).send(response);
} catch (error) {
logger.error("Exception calling Backrest API: %s", error.message);
return res.status(500).json({ error: "Backrest API Error", message: error.message });
}
}

View File

@@ -0,0 +1,14 @@
import backrestProxyHandler from "./proxy";
const widget = {
api: "{url}/v1.Backrest/{endpoint}",
proxyHandler: backrestProxyHandler,
mappings: {
summary: {
endpoint: "GetSummaryDashboard",
},
},
};
export default widget;

View File

@@ -9,6 +9,7 @@ const components = {
authentik: dynamic(() => import("./authentik/component")),
autobrr: dynamic(() => import("./autobrr/component")),
azuredevops: dynamic(() => import("./azuredevops/component")),
backrest: dynamic(() => import("./backrest/component")),
bazarr: dynamic(() => import("./bazarr/component")),
beszel: dynamic(() => import("./beszel/component")),
caddy: dynamic(() => import("./caddy/component")),
@@ -139,6 +140,7 @@ const components = {
truenas: dynamic(() => import("./truenas/component")),
unifi: dynamic(() => import("./unifi/component")),
unmanic: dynamic(() => import("./unmanic/component")),
unraid: dynamic(() => import("./unraid/component")),
uptimekuma: dynamic(() => import("./uptimekuma/component")),
uptimerobot: dynamic(() => import("./uptimerobot/component")),
urbackup: dynamic(() => import("./urbackup/component")),

View File

@@ -3,21 +3,27 @@ import Container from "components/services/widget/container";
import useWidgetAPI from "utils/proxy/use-widget-api";
export const jellyseerrDefaultFields = ["pending", "approved", "available"];
export default function Component({ service }) {
const { widget } = service;
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
widget.fields = widget?.fields?.length ? widget.fields : jellyseerrDefaultFields;
const isIssueEnabled = widget.fields.includes("issues");
if (statsError) {
return <Container service={service} error={statsError} />;
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
const { data: issueData, error: issueError } = useWidgetAPI(widget, isIssueEnabled ? "issue/count" : "");
if (statsError || (isIssueEnabled && issueError)) {
return <Container service={service} error={statsError ? statsError : issueError} />;
}
if (!statsData) {
if (!statsData || (isIssueEnabled && !issueData)) {
return (
<Container service={service}>
<Block label="jellyseerr.pending" />
<Block label="jellyseerr.approved" />
<Block label="jellyseerr.available" />
<Block label="jellyseerr.issues" />
</Container>
);
}
@@ -27,6 +33,7 @@ export default function Component({ service }) {
<Block label="jellyseerr.pending" value={statsData.pending} />
<Block label="jellyseerr.approved" value={statsData.approved} />
<Block label="jellyseerr.available" value={statsData.available} />
<Block label="jellyseerr.issues" value={`${issueData?.open} / ${issueData?.total}`} />
</Container>
);
}

View File

@@ -9,6 +9,10 @@ const widget = {
endpoint: "request/count",
validate: ["pending", "approved", "available"],
},
"issue/count": {
endpoint: "issue/count",
validate: ["open", "total"],
},
},
};

View File

@@ -0,0 +1,93 @@
import Block from "components/services/widget/block";
import Container from "components/services/widget/container";
import { useTranslation } from "next-i18next";
import useWidgetAPI from "utils/proxy/use-widget-api";
const UNRAID_DEFAULT_FIELDS = ["status", "cpu", "memoryPercent", "notifications"];
const MAX_ALLOWED_FIELDS = 4;
const POOLS = ["pool1", "pool2", "pool3", "pool4"];
const POOL_FIELDS = [
{ param: "UsedSpace", label: "poolUsed", valueKey: "fsUsed", valueType: "common.bytes" },
{ param: "FreeSpace", label: "poolFree", valueKey: "fsFree", valueType: "common.bytes" },
{ param: "UsedPercent", label: "poolUsed", valueKey: "fsUsedPercent", valueType: "common.percent" },
];
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data, error } = useWidgetAPI(widget);
if (error) {
return <Container service={service} error={error} />;
}
if (!widget.fields?.length) {
widget.fields = UNRAID_DEFAULT_FIELDS;
} else if (widget.fields.length > MAX_ALLOWED_FIELDS) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
}
if (!data) {
return (
<Container service={service}>
<Block label="unraid.status" />
<Block label="unraid.memoryAvailable" />
<Block label="unraid.memoryUsed" />
<Block field="unraid.memoryPercent" label="unraid.memoryUsed" />
<Block label="unraid.cpu" />
<Block label="unraid.notifications" />
<Block field="unraid.arrayUsedSpace" label="unraid.arrayUsed" />
<Block field="unraid.arrayFree" label="unraid.arrayFree" />
<Block field="unraid.arrayUsedPercent" label="unraid.arrayUsed" />
{...POOLS.flatMap((pool) =>
POOL_FIELDS.map(({ param, label }) => (
<Block
key={`${pool}-${param}`}
field={`unraid.${pool}${param}`}
label={t(`unraid.${label}`, { pool: widget?.[pool] || pool })}
/>
)),
)}
</Container>
);
}
return (
<Container service={service}>
<Block label="unraid.status" value={t(`unraid.${data.arrayState}`)} />
<Block label="unraid.memoryAvailable" value={t("common.bbytes", { value: data.memoryAvailable })} />
<Block label="unraid.memoryUsed" value={t("common.bbytes", { value: data.memoryUsed })} />
<Block
field="unraid.memoryPercent"
label="unraid.memoryUsed"
value={t("common.percent", { value: data.memoryUsedPercent })}
/>
<Block label="unraid.cpu" value={t("common.percent", { value: data.cpuPercent })} />
<Block label="unraid.notifications" value={t("common.number", { value: data.unreadNotifications })} />
<Block
field="unraid.arrayUsedSpace"
label="unraid.arrayUsed"
value={t("common.bytes", { value: data.arrayUsed })}
/>
<Block label="unraid.arrayFree" value={t("common.bytes", { value: data.arrayFree })} />
<Block
field="unraid.arrayUsedPercent"
label="unraid.arrayUsed"
value={t("common.percent", { value: data.arrayUsedPercent })}
/>
{...POOLS.flatMap((pool) =>
POOL_FIELDS.map(({ param, label, valueKey, valueType }) => (
<Block
key={`${pool}-${param}`}
field={`unraid.${pool}${param}`}
label={t(`unraid.${label}`, { pool: widget?.[pool] || pool })}
value={t(valueType, { value: data.caches?.[widget?.[pool]]?.[valueKey] || "-" })}
/>
)),
)}
</Container>
);
}

138
src/widgets/unraid/proxy.js Normal file
View File

@@ -0,0 +1,138 @@
import getServiceWidget from "utils/config/service-helpers";
import createLogger from "utils/logger";
import { asJson } from "utils/proxy/api-helpers";
import { httpProxy } from "utils/proxy/http";
const logger = createLogger("unraidProxyHandler");
const graphqlQuery = `
{
array {
state
capacity {
kilobytes {
free
total
used
}
}
caches {
name
fsType
fsSize
fsFree
fsUsed
}
}
metrics {
memory {
active
available
percentTotal
}
cpu {
percentTotal
}
}
notifications {
overview {
unread {
total
}
}
}
}
`;
function processUnraidResponse(data) {
const response = {};
try {
data = asJson(data)?.data;
response["memoryUsedPercent"] = data?.metrics?.memory?.percentTotal ?? null;
response["memoryUsed"] = data?.metrics?.memory?.active ?? null;
response["memoryAvailable"] = data?.metrics?.memory?.available ?? null;
response["cpuPercent"] = data?.metrics?.cpu?.percentTotal ?? null;
response["unreadNotifications"] = data?.notifications?.overview?.unread?.total ?? null;
response["arrayState"] = data?.array?.state ?? null;
response["arrayFree"] = data?.array?.capacity?.kilobytes?.free * 1000 ?? null;
response["arrayUsed"] = data?.array?.capacity?.kilobytes?.used * 1000 ?? null;
response["arrayUsedPercent"] =
(data?.array?.capacity?.kilobytes?.used / data?.array?.capacity?.kilobytes?.total) * 100 ?? null;
response["caches"] = {};
if (data?.array?.caches) {
data.array.caches.forEach((cache) => {
if (cache.fsType) {
response.caches[cache.name] = {
fsFree: cache.fsFree * 1000,
fsUsed: cache.fsUsed * 1000,
fsUsedPercent: (cache.fsUsed / cache.fsSize) * 100 ?? null,
};
}
});
}
} catch (error) {
return { error: error.message };
}
return response;
}
export default async function unraidProxyHandler(req, res) {
const { group, service, index } = req.query;
if (!group || !service) {
logger.debug("Invalid or missing service '%s' or group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" });
}
const widget = await getServiceWidget(group, service, index);
if (!widget) {
logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" });
}
const url = new URL(widget.url + "/graphql");
const headers = {
"Content-Type": "application/json",
Accept: `application/json`,
"X-API-Key": `${widget.key}`,
};
const params = {
method: "POST",
headers,
};
params.body = JSON.stringify({
query: graphqlQuery,
});
const [status, , data] = await httpProxy(url, params);
if (status === 204 || status === 304) {
return res.status(status).end();
}
if (status !== 200) {
logger.error(
"Error getting data from Unraid for service '%s' in group '%s': %d. Data: %s",
service,
group,
status,
data,
);
return res.status(status).send({ error: { message: "Error calling Unraid API.", data } });
}
const result = processUnraidResponse(data);
if (result.error) {
logger.error("Error processing Unraid data: %s", result.error);
return res.status(500).json({ error: result.error });
}
res.setHeader("Content-Type", "application/json");
return res.status(status).send(result);
}

View File

@@ -0,0 +1,7 @@
import unraidProxyHandler from "./proxy";
const widget = {
proxyHandler: unraidProxyHandler,
};
export default widget;

View File

@@ -6,6 +6,7 @@ import audiobookshelf from "./audiobookshelf/widget";
import authentik from "./authentik/widget";
import autobrr from "./autobrr/widget";
import azuredevops from "./azuredevops/widget";
import backrest from "./backrest/widget";
import bazarr from "./bazarr/widget";
import beszel from "./beszel/widget";
import caddy from "./caddy/widget";
@@ -130,6 +131,7 @@ import truenas from "./truenas/widget";
import tubearchivist from "./tubearchivist/widget";
import unifi from "./unifi/widget";
import unmanic from "./unmanic/widget";
import unraid from "./unraid/widget";
import uptimekuma from "./uptimekuma/widget";
import uptimerobot from "./uptimerobot/widget";
import urbackup from "./urbackup/widget";
@@ -150,6 +152,7 @@ const widgets = {
authentik,
autobrr,
azuredevops,
backrest,
bazarr,
beszel,
caddy,
@@ -278,6 +281,7 @@ const widgets = {
unifi,
unifi_console: unifi,
unmanic,
unraid,
uptimekuma,
uptimerobot,
urbackup,