diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 89bf857ce..501825d41 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -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' diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml index c58b09834..931660460 100644 --- a/.github/workflows/docs-publish.yml +++ b/.github/workflows/docs-publish.yml @@ -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 diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml index 2e2ea4740..08d482cf5 100644 --- a/.github/workflows/repo-maintenance.yml +++ b/.github/workflows/repo-maintenance.yml @@ -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) { diff --git a/docs/configs/proxmox.md b/docs/configs/proxmox.md index 6a210b272..79625e471 100644 --- a/docs/configs/proxmox.md +++ b/docs/configs/proxmox.md @@ -4,11 +4,13 @@ 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 -url: https://proxmox.host.or.ip:8006 -token: username@pam!Token ID -secret: secret +pve: + url: https://proxmox.host.or.ip:8006 + token: username@pam!Token ID + secret: secret ``` ## Services @@ -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 diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 9fa5bbec2..c24793df3 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -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: diff --git a/docs/more/sponsors.md b/docs/more/sponsors.md index bb877a6ce..335371005 100644 --- a/docs/more/sponsors.md +++ b/docs/more/sponsors.md @@ -28,7 +28,7 @@ These companies help the Homepage project by providing services, tools, and reso
- Crowdin + Crowdin

Crowdin provides the translation platform for the project. Making it easy to translate the project into multiple languages.

diff --git a/docs/widgets/services/backrest.md b/docs/widgets/services/backrest.md new file mode 100644 index 000000000..d70ba9e19 --- /dev/null +++ b/docs/widgets/services/backrest.md @@ -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 +``` diff --git a/docs/widgets/services/immich.md b/docs/widgets/services/immich.md index 674423e33..f9fc27253 100644 --- a/docs/widgets/services/immich.md +++ b/docs/widgets/services/immich.md @@ -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"]`. diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index efac65070..8ae84ee9e 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -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) diff --git a/docs/widgets/services/jellyseerr.md b/docs/widgets/services/jellyseerr.md index ad33ca521..8ffe5fbdf 100644 --- a/docs/widgets/services/jellyseerr.md +++ b/docs/widgets/services/jellyseerr.md @@ -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: diff --git a/docs/widgets/services/unraid.md b/docs/widgets/services/unraid.md new file mode 100644 index 000000000..2a061cf25 --- /dev/null +++ b/docs/widgets/services/unraid.md @@ -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 +``` diff --git a/mkdocs.yml b/mkdocs.yml index a0c01a40a..d46382923 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -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 diff --git a/package.json b/package.json index 32f5007f9..cefb0f926 100644 --- a/package.json +++ b/package.json @@ -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" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7887131e..113bacff7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@headlessui/react': - specifier: ^1.7.19 - version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^2.2.7 + version: 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@kubernetes/client-node': specifier: ^1.0.0 version: 1.0.0 @@ -27,8 +27,8 @@ importers: specifier: ^1.15.11 version: 1.15.11 gamedig: - specifier: ^5.2.0 - version: 5.2.0 + specifier: ^5.3.1 + version: 5.3.1 i18next: specifier: ^24.2.3 version: 24.2.3(typescript@5.7.3) @@ -51,11 +51,11 @@ importers: specifier: ^1.2.2 version: 1.2.2 next: - specifier: ^15.4.5 - version: 15.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.5.2 + version: 15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-i18next: specifier: ^12.1.0 - version: 12.1.0(next@15.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.1.0(next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ping: specifier: ^0.4.4 version: 0.4.4 @@ -78,8 +78,8 @@ importers: specifier: ^5.4.0 version: 5.4.0(react@18.3.1) recharts: - specifier: ^2.15.3 - version: 2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.1.2 + version: 3.1.2(@types/react@19.0.10)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1) swr: specifier: ^2.3.3 version: 2.3.3(react@18.3.1) @@ -87,8 +87,8 @@ importers: specifier: ^5.27.7 version: 5.27.7 tough-cookie: - specifier: ^5.1.2 - version: 5.1.2 + specifier: ^6.0.0 + version: 6.0.0 urbackup-server-api: specifier: ^0.8.9 version: 0.8.9 @@ -183,8 +183,8 @@ packages: '@emnapi/core@1.4.0': resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} @@ -227,6 +227,27 @@ packages: resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@grpc/grpc-js@1.13.4': resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} engines: {node: '>=12.10.0'} @@ -236,12 +257,12 @@ packages: engines: {node: '>=6'} hasBin: true - '@headlessui/react@1.7.19': - resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==} + '@headlessui/react@2.2.7': + resolution: {integrity: sha512-WKdTymY8Y49H8/gUc/lIyYK1M+/6dq0Iywh4zTZVAaiTDprRfioxSgD0wnXTQTBpjpGJuTL1NO/mqEvc//5SSg==} engines: {node: '>=10'} peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 + react: ^18 || ^19 || ^19.0.0-rc + react-dom: ^18 || ^19 || ^19.0.0-rc '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -414,56 +435,56 @@ packages: '@napi-rs/wasm-runtime@0.2.8': resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} - '@next/env@15.4.5': - resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==} + '@next/env@15.5.2': + resolution: {integrity: sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==} '@next/eslint-plugin-next@15.2.4': resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} - '@next/swc-darwin-arm64@15.4.5': - resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==} + '@next/swc-darwin-arm64@15.5.2': + resolution: {integrity: sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.4.5': - resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==} + '@next/swc-darwin-x64@15.5.2': + resolution: {integrity: sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.4.5': - resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==} + '@next/swc-linux-arm64-gnu@15.5.2': + resolution: {integrity: sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.4.5': - resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==} + '@next/swc-linux-arm64-musl@15.5.2': + resolution: {integrity: sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.4.5': - resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==} + '@next/swc-linux-x64-gnu@15.5.2': + resolution: {integrity: sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.4.5': - resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==} + '@next/swc-linux-x64-musl@15.5.2': + resolution: {integrity: sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.4.5': - resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==} + '@next/swc-win32-arm64-msvc@15.5.2': + resolution: {integrity: sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.4.5': - resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==} + '@next/swc-win32-x64-msvc@15.5.2': + resolution: {integrity: sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -522,6 +543,54 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@react-aria/focus@3.21.1': + resolution: {integrity: sha512-hmH1IhHlcQ2lSIxmki1biWzMbGgnhdxJUM0MFfzc71Rv6YAzhlx4kX3GYn4VNcjCeb6cdPv4RZ5vunV4kgMZYQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/interactions@3.25.5': + resolution: {integrity: sha512-EweYHOEvMwef/wsiEqV73KurX/OqnmbzKQa2fLxdULbec5+yDj6wVGaRHIzM4NiijIDe+bldEl5DG05CAKOAHA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/ssr@3.9.10': + resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} + engines: {node: '>= 12'} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-aria/utils@3.30.1': + resolution: {integrity: sha512-zETcbDd6Vf9GbLndO6RiWJadIZsBU2MMm23rBACXLmpRztkrIqPEb2RVdlLaq1+GklDx0Ii6PfveVjx+8S5U6A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-stately/flags@3.1.2': + resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} + + '@react-stately/utils@3.10.8': + resolution: {integrity: sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@react-types/shared@3.32.0': + resolution: {integrity: sha512-t+cligIJsZYFMSPFMvsJMjzlzde06tZMOIOFa1OV5Z0BcMowrb2g4mB57j/9nP28iJIRYn10xCniQts+qadrqQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + + '@reduxjs/toolkit@2.9.0': + resolution: {integrity: sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -532,9 +601,18 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} @@ -620,14 +698,14 @@ packages: '@tailwindcss/postcss@4.0.9': resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==} - '@tanstack/react-virtual@3.13.0': - resolution: {integrity: sha512-CchF0NlLIowiM2GxtsoKBkXA4uqSnY2KvnXo+kyUFD4a4ll6+J0qzoRsUPMwXV/H26lRsxgJIr/YmjYum2oEjg==} + '@tanstack/react-virtual@3.13.12': + resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.0': - resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} + '@tanstack/virtual-core@3.13.12': + resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -701,6 +779,9 @@ packages: '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} @@ -947,9 +1028,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -999,20 +1077,13 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001739: + resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} - chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -1088,13 +1159,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1238,22 +1302,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -1261,6 +1309,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + emitter-component@1.1.2: + resolution: {integrity: sha512-QdXO3nXOzZB4pAjM0n6ZE+R9/+kPpECA/XSELIcc54NeYVnBqIk+4DFiBgK+8QbV3mdvTG6nedl7dTYgO+5wDw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1277,10 +1328,6 @@ packages: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - es-abstract@1.23.9: resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} engines: {node: '>= 0.4'} @@ -1317,6 +1364,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es-toolkit@1.39.10: + resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1465,8 +1515,8 @@ packages: resolution: {integrity: sha512-VOBBfyaADfe378ZzG0tgkzmsvzUyeU5arehrFzNRt5yaASUDshgctTwSrPI17ocAwR3+YftsxRClHF+GBKFByQ==} deprecated: Use promise-toolbox/fromEvent instead - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1474,10 +1524,6 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-equals@5.2.2: - resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==} - engines: {node: '>=6.0.0'} - fast-glob@3.3.1: resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} @@ -1492,6 +1538,10 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-xml-parser@5.2.3: + resolution: {integrity: sha512-OdCYfRqfpuLUFonTNjvd30rCBZUneHpSQkCqfaeWQ9qrKcl6XlWeDBNVwGb+INAIxRshuN2jF+BE0L6gbBO2mw==} + hasBin: true + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -1566,8 +1616,8 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gamedig@5.2.0: - resolution: {integrity: sha512-YAk9KmQnbiThASSXYiL2LPeppgfthMjG8PIQK4UK8DveF/X/zhwYaUKqi+op05d0iLLoCzvx5J2Q2vUr+OVzQg==} + gamedig@5.3.1: + resolution: {integrity: sha512-RM/eCR8bAKEX+5dA9sxg4D6oQjS5t0MPsIxGquerBLSIu0f1hAVaDGC58Lp1srYwF6A1C2wYY2p9PzOrPTKf4Q==} engines: {node: '>=16.20.0'} hasBin: true @@ -1669,11 +1719,8 @@ packages: html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -1711,6 +1758,9 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immer@10.1.3: + resolution: {integrity: sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2002,16 +2052,10 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - logform@2.7.0: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -2113,6 +2157,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + net@1.0.2: + resolution: {integrity: sha512-kbhcj2SVVR4caaVnGLJKmlk2+f+oLkjqdKeQlmUtz6nGzOpbcobwVIeSURNgraV/v3tlmGIX82OcPCl0K6RbHQ==} + next-i18next@12.1.0: resolution: {integrity: sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==} engines: {node: '>=12'} @@ -2120,8 +2167,8 @@ packages: next: '>= 10.0.0' react: '>= 16.8.0' - next@15.4.5: - resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==} + next@15.5.2: + resolution: {integrity: sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2150,13 +2197,10 @@ packages: encoding: optional: true - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + normalize-url@8.0.2: + resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} engines: {node: '>=14.16'} - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - oauth4webapi@3.3.0: resolution: {integrity: sha512-ZlozhPlFfobzh3hB72gnBFLjXpugl/dljz1fJSRdqaV2r3D5dmi5lg2QWI0LmUYuazmE+b5exsloEv6toUtw9g==} @@ -2233,12 +2277,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2386,17 +2424,17 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-smooth@4.0.4: - resolution: {integrity: sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==} + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react-transition-group@4.4.5: - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} @@ -2412,15 +2450,21 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - recharts-scale@0.4.5: - resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} - - recharts@2.15.3: - resolution: {integrity: sha512-EdOPzTwcFSuqtvkDoaM5ws/Km1+WTAO2eizL7rqiG0V2UVhTnz0m7J2i0CjVPUCdEkZImaWvXLbZDS2H5t6GFQ==} - engines: {node: '>=14'} + recharts@3.1.2: + resolution: {integrity: sha512-vhNbYwaxNbk/IATK0Ki29k3qvTkGqwvCgyQAQ9MavvvBwjvKnMTswdbklJpcOAoMPN/qxF3Lyqob0zO+ZXkZ4g==} + engines: {node: '>=18'} peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} @@ -2437,6 +2481,9 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -2600,6 +2647,9 @@ packages: resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} engines: {node: '>= 0.10.0'} + stream@0.0.2: + resolution: {integrity: sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g==} + string-to-stream@1.1.1: resolution: {integrity: sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==} @@ -2659,6 +2709,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -2695,6 +2748,9 @@ packages: os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true + tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + tailwind-scrollbar@4.0.2: resolution: {integrity: sha512-wAQiIxAPqk0MNTPptVe/xoyWi27y+NRGnTwvn4PQnbvB9kp8QUBiGl/wsfoVBHnQxTmhXJSNt9NHTmcz9EivFA==} engines: {node: '>=12.13.0'} @@ -2719,6 +2775,9 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + telnet-client@2.2.5: + resolution: {integrity: sha512-X5xEkmKHgpCpngnH7QnkFX87UyBErauHsjzlCGVp87MbhnmHoaAeacuALGfqovHh3MXAfrpPs+g30PgyBpy8Jw==} + text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} @@ -2729,11 +2788,11 @@ packages: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} - tldts-core@6.1.82: - resolution: {integrity: sha512-Jabl32m21tt/d/PbDO88R43F8aY98Piiz6BVH9ShUlOAiiAELhEqwrAmBocjAqnCfoUeIsRU+h3IEzZd318F3w==} + tldts-core@7.0.12: + resolution: {integrity: sha512-3K76aXywJFduGRsOYoY5JzINLs/WMlOkeDwPL+8OCPq2Rh39gkSDtWAxdJQlWjpun/xF/LHf29yqCi6VC/rHDA==} - tldts@6.1.82: - resolution: {integrity: sha512-KCTjNL9F7j8MzxgfTgjT+v21oYH38OidFty7dH00maWANAI2IsLw2AnThtTJi9HKALHZKQQWnNebYheadacD+g==} + tldts@7.0.12: + resolution: {integrity: sha512-M9ZQBPp6FyqhMcl233vHYyYRkxXOA1SKGlnq13S0mJdUhRSwr2w6I8rlchPL73wBwRlyIZpFvpu2VcdSMWLYXw==} hasBin: true tmp-promise@3.0.3: @@ -2751,8 +2810,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} tr46@0.0.3: @@ -2840,8 +2899,8 @@ packages: varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - victory-vendor@36.9.2: - resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} + victory-vendor@37.3.6: + resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} @@ -2975,7 +3034,7 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true @@ -3029,6 +3088,31 @@ snapshots: '@eslint/core': 0.13.0 levn: 0.4.1 + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.10 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tabbable: 6.2.0 + + '@floating-ui/utils@0.2.10': {} + '@grpc/grpc-js@1.13.4': dependencies: '@grpc/proto-loader': 0.7.15 @@ -3041,12 +3125,15 @@ snapshots: protobufjs: 7.5.3 yargs: 17.7.2 - '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/react-virtual': 3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - client-only: 0.0.1 + '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/focus': 3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/interactions': 3.25.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) '@humanfs/core@0.19.1': {} @@ -3135,7 +3222,7 @@ snapshots: '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.4.5 + '@emnapi/runtime': 1.5.0 optional: true '@img/sharp-win32-arm64@0.34.3': @@ -3198,38 +3285,38 @@ snapshots: '@napi-rs/wasm-runtime@0.2.8': dependencies: '@emnapi/core': 1.4.0 - '@emnapi/runtime': 1.4.5 + '@emnapi/runtime': 1.5.0 '@tybys/wasm-util': 0.9.0 optional: true - '@next/env@15.4.5': {} + '@next/env@15.5.2': {} '@next/eslint-plugin-next@15.2.4': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.4.5': + '@next/swc-darwin-arm64@15.5.2': optional: true - '@next/swc-darwin-x64@15.4.5': + '@next/swc-darwin-x64@15.5.2': optional: true - '@next/swc-linux-arm64-gnu@15.4.5': + '@next/swc-linux-arm64-gnu@15.5.2': optional: true - '@next/swc-linux-arm64-musl@15.4.5': + '@next/swc-linux-arm64-musl@15.5.2': optional: true - '@next/swc-linux-x64-gnu@15.4.5': + '@next/swc-linux-x64-gnu@15.5.2': optional: true - '@next/swc-linux-x64-musl@15.4.5': + '@next/swc-linux-x64-musl@15.5.2': optional: true - '@next/swc-win32-arm64-msvc@15.4.5': + '@next/swc-win32-arm64-msvc@15.5.2': optional: true - '@next/swc-win32-x64-msvc@15.4.5': + '@next/swc-win32-x64-msvc@15.5.2': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3274,16 +3361,85 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@react-aria/focus@3.21.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/interactions': 3.25.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-aria/utils': 3.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-types/shared': 3.32.0(react@18.3.1) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/interactions@3.25.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.10(react@18.3.1) + '@react-aria/utils': 3.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@react-stately/flags': 3.1.2 + '@react-types/shared': 3.32.0(react@18.3.1) + '@swc/helpers': 0.5.17 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-aria/ssr@3.9.10(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.17 + react: 18.3.1 + + '@react-aria/utils@3.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@react-aria/ssr': 3.9.10(react@18.3.1) + '@react-stately/flags': 3.1.2 + '@react-stately/utils': 3.10.8(react@18.3.1) + '@react-types/shared': 3.32.0(react@18.3.1) + '@swc/helpers': 0.5.17 + clsx: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@react-stately/flags@3.1.2': + dependencies: + '@swc/helpers': 0.5.17 + + '@react-stately/utils@3.10.8(react@18.3.1)': + dependencies: + '@swc/helpers': 0.5.17 + react: 18.3.1 + + '@react-types/shared@3.32.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@reduxjs/toolkit@2.9.0(react-redux@9.2.0(@types/react@19.0.10)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': + dependencies: + '@standard-schema/spec': 1.0.0 + '@standard-schema/utils': 0.3.0 + immer: 10.1.3 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 + optionalDependencies: + react: 18.3.1 + react-redux: 9.2.0(@types/react@19.0.10)(react@18.3.1)(redux@5.0.1) + '@rtsao/scc@1.1.0': {} '@rushstack/eslint-patch@1.11.0': {} '@sindresorhus/is@5.6.0': {} + '@standard-schema/spec@1.0.0': {} + + '@standard-schema/utils@0.3.0': {} + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -3355,13 +3511,13 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.0.9 - '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/virtual-core': 3.13.0 + '@tanstack/virtual-core': 3.13.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.0': {} + '@tanstack/virtual-core@3.13.12': {} '@tybys/wasm-util@0.9.0': dependencies: @@ -3437,6 +3593,8 @@ snapshots: '@types/triple-beam@1.3.5': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/ws@8.5.14': dependencies: '@types/node': 22.13.4 @@ -3712,8 +3870,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - boolbase@1.0.0: {} - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -3743,10 +3899,10 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.1 + normalize-url: 8.0.2 responselike: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -3773,32 +3929,13 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001739: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.0.0-rc.12: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - htmlparser2: 8.0.2 - parse5: 7.2.1 - parse5-htmlparser2-tree-adapter: 7.1.0 - chownr@1.1.4: {} chownr@3.0.0: {} @@ -3874,16 +4011,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.1.0: - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-what@6.1.0: {} - csstype@3.1.3: {} d3-array@3.2.4: @@ -4014,29 +4141,6 @@ snapshots: dependencies: esutils: 2.0.3 - dom-helpers@5.2.1: - dependencies: - '@babel/runtime': 7.27.6 - csstype: 3.1.3 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -4045,6 +4149,8 @@ snapshots: eastasianwidth@0.2.0: {} + emitter-component@1.1.2: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -4060,8 +4166,6 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 - entities@4.5.0: {} - es-abstract@1.23.9: dependencies: array-buffer-byte-length: 1.0.2 @@ -4217,6 +4321,8 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es-toolkit@1.39.10: {} + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -4433,14 +4539,12 @@ snapshots: event-to-promise@0.7.0: {} - eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} - fast-equals@5.2.2: {} - fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4461,6 +4565,10 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-xml-parser@5.2.3: + dependencies: + strnum: 2.1.1 + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -4528,15 +4636,16 @@ snapshots: functions-have-names@1.2.3: {} - gamedig@5.2.0: + gamedig@5.3.1: dependencies: - cheerio: 1.0.0-rc.12 + fast-xml-parser: 5.2.3 gbxremote: 0.2.1 got: 13.0.0 iconv-lite: 0.6.3 - long: 5.2.3 + long: 5.3.2 minimist: 1.2.8 seek-bzip: 2.0.0 + telnet-client: 2.2.5 varint: 6.0.0 gbxremote@0.2.1: @@ -4666,14 +4775,7 @@ snapshots: dependencies: void-elements: 3.1.0 - htmlparser2@8.0.2: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 4.5.0 - - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.0: dependencies: @@ -4710,6 +4812,8 @@ snapshots: ignore@5.3.2: {} + immer@10.1.3: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -4978,8 +5082,6 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.21: {} - logform@2.7.0: dependencies: '@colors/colors': 1.6.0 @@ -4989,8 +5091,6 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - long@5.2.3: {} - long@5.3.2: {} loose-envify@1.4.0: @@ -5060,7 +5160,9 @@ snapshots: natural-compare@1.4.0: {} - next-i18next@12.1.0(next@15.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + net@1.0.2: {} + + next-i18next@12.1.0(next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.9 '@types/hoist-non-react-statics': 3.3.6 @@ -5068,31 +5170,31 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 15.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - react-dom - react-native - next@15.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.4.5 + '@next/env': 15.5.2 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001731 + caniuse-lite: 1.0.30001739 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.4.5 - '@next/swc-darwin-x64': 15.4.5 - '@next/swc-linux-arm64-gnu': 15.4.5 - '@next/swc-linux-arm64-musl': 15.4.5 - '@next/swc-linux-x64-gnu': 15.4.5 - '@next/swc-linux-x64-musl': 15.4.5 - '@next/swc-win32-arm64-msvc': 15.4.5 - '@next/swc-win32-x64-msvc': 15.4.5 + '@next/swc-darwin-arm64': 15.5.2 + '@next/swc-darwin-x64': 15.5.2 + '@next/swc-linux-arm64-gnu': 15.5.2 + '@next/swc-linux-arm64-musl': 15.5.2 + '@next/swc-linux-x64-gnu': 15.5.2 + '@next/swc-linux-x64-musl': 15.5.2 + '@next/swc-win32-arm64-msvc': 15.5.2 + '@next/swc-win32-x64-msvc': 15.5.2 sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' @@ -5102,11 +5204,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - normalize-url@8.0.1: {} - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 + normalize-url@8.0.2: {} oauth4webapi@3.3.0: {} @@ -5198,15 +5296,6 @@ snapshots: dependencies: callsites: 3.1.0 - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.2.1 - - parse5@7.2.1: - dependencies: - entities: 4.5.0 - path-exists@4.0.0: {} path-key@3.1.1: {} @@ -5335,22 +5424,14 @@ snapshots: react-is@18.3.1: {} - react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-redux@9.2.0(@types/react@19.0.10)(react@18.3.1)(redux@5.0.1): dependencies: - fast-equals: 5.2.2 - prop-types: 15.8.1 + '@types/use-sync-external-store': 0.0.6 react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - - react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.27.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.5.0(react@18.3.1) + optionalDependencies: + '@types/react': 19.0.10 + redux: 5.0.1 react@18.3.1: dependencies: @@ -5379,22 +5460,31 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - recharts-scale@0.4.5: - dependencies: - decimal.js-light: 2.5.1 - - recharts@2.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + recharts@3.1.2(@types/react@19.0.10)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1): dependencies: + '@reduxjs/toolkit': 2.9.0(react-redux@9.2.0(@types/react@19.0.10)(react@18.3.1)(redux@5.0.1))(react@18.3.1) clsx: 2.1.1 - eventemitter3: 4.0.7 - lodash: 4.17.21 + decimal.js-light: 2.5.1 + es-toolkit: 1.39.10 + eventemitter3: 5.0.1 + immer: 10.1.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-is: 18.3.1 - react-smooth: 4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - recharts-scale: 0.4.5 + react-redux: 9.2.0(@types/react@19.0.10)(react@18.3.1)(redux@5.0.1) + reselect: 5.1.1 tiny-invariant: 1.3.3 - victory-vendor: 36.9.2 + use-sync-external-store: 1.5.0(react@18.3.1) + victory-vendor: 37.3.6 + transitivePeerDependencies: + - '@types/react' + - redux + + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} reflect.getprototypeof@1.0.10: dependencies: @@ -5420,6 +5510,8 @@ snapshots: require-directory@2.1.1: {} + reselect@5.1.1: {} + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} @@ -5616,6 +5708,10 @@ snapshots: stream-buffers@3.0.3: {} + stream@0.0.2: + dependencies: + emitter-component: 1.1.2 + string-to-stream@1.1.1: dependencies: inherits: 2.0.4 @@ -5705,6 +5801,8 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.1.1: {} + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 @@ -5728,6 +5826,8 @@ snapshots: systeminformation@5.27.7: {} + tabbable@6.2.0: {} + tailwind-scrollbar@4.0.2(react@18.3.1)(tailwindcss@4.0.9): dependencies: prism-react-renderer: 2.4.1(react@18.3.1) @@ -5763,6 +5863,11 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + telnet-client@2.2.5: + dependencies: + net: 1.0.2 + stream: 0.0.2 + text-hex@1.0.0: {} tiny-invariant@1.3.3: {} @@ -5772,11 +5877,11 @@ snapshots: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 - tldts-core@6.1.82: {} + tldts-core@7.0.12: {} - tldts@6.1.82: + tldts@7.0.12: dependencies: - tldts-core: 6.1.82 + tldts-core: 7.0.12 tmp-promise@3.0.3: dependencies: @@ -5790,9 +5895,9 @@ snapshots: toidentifier@1.0.1: {} - tough-cookie@5.1.2: + tough-cookie@6.0.0: dependencies: - tldts: 6.1.82 + tldts: 7.0.12 tr46@0.0.3: {} @@ -5904,7 +6009,7 @@ snapshots: varint@6.0.0: {} - victory-vendor@36.9.2: + victory-vendor@37.3.6: dependencies: '@types/d3-array': 3.2.1 '@types/d3-ease': 3.0.2 diff --git a/public/locales/af/common.json b/public/locales/af/common.json index da28881eb..2fe54d334 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -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" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 51b7a3568..ab5683bf2 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -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" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index f5c98ebf6..b891c0e91 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -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" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 107624ac0..dab8f891b 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -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" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 8a392aed4..73dee2cd7 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -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" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 15eed56a3..9931e6df0 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -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" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 1971c9bf9..3c972fb08 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -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" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 78d826032..328b37657 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -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" } } diff --git a/public/locales/en/common.json b/public/locales/en/common.json index f37329e46..49d1325d5 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -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" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 91b3cf6d3..a7b438e53 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -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" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 56e1ea8a9..38bed3fc9 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -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" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index 3220ee349..3c7eec9f4 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -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" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index f6fd3c39c..0f7b3cedc 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -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" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 729d372ff..879429f7a 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -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" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index f713049af..aa3ca7b32 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -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" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index f425beeb8..674493d7c 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -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" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index b84b8c69b..12fe08122 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -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" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 80a45f7a4..ca3e437a1 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -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" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 17199d3c5..b338e39bb 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -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" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 55675e921..6b3f7380c 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -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" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index b2027c1cf..9ae544371 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -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" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 613ef5354..f98b0c25b 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -14,9 +14,9 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "duration": "{{value, duration}}", - "months": "달", + "months": "개월", "days": "일", - "hours": "시", + "hours": "시간", "minutes": "분", "seconds": "초" }, @@ -26,7 +26,7 @@ "information": "정보", "status": "상태", "url": "URL", - "raw_error": "Raw 오류", + "raw_error": "raw 오류", "response_data": "응답 데이터" }, "weather": { @@ -40,7 +40,7 @@ }, "resources": { "cpu": "CPU", - "mem": "MEM", + "mem": "메모리", "total": "총합", "free": "남음", "used": "사용", @@ -61,45 +61,45 @@ "wlan_devices": "WLAN 장치", "lan_users": "LAN 사용자", "wlan_users": "WLAN 사용자", - "up": "UP", - "down": "DOWN", - "wait": "Please wait", + "up": "업", + "down": "다운", + "wait": "잠시만 기다려주세요", "empty_data": "서브시스템 상태 알 수 없음" }, "docker": { - "rx": "RX", - "tx": "TX", - "mem": "MEM", + "rx": "수신", + "tx": "송신", + "mem": "메모리", "cpu": "CPU", - "running": "가동 중", + "running": "실행 중", "offline": "중지", "error": "오류", "unknown": "알 수 없음", - "healthy": "좋음", + "healthy": "정상", "starting": "시작 중", - "unhealthy": "이상", + "unhealthy": "비정상", "not_found": "찾을 수 없음", "exited": "종료됨", "partial": "부분적" }, "ping": { - "error": "Error", - "ping": "Ping", - "down": "Down", - "up": "Up", - "not_available": "사용할 수 없음" + "error": "오류", + "ping": "핑", + "down": "다운", + "up": "업", + "not_available": "사용 불가" }, "siteMonitor": { "http_status": "HTTP 상태", - "error": "Error", + "error": "오류", "response": "응답", - "down": "Down", - "up": "Up", - "not_available": "Not Available" + "down": "다운", + "up": "업", + "not_available": "사용 불가" }, "emby": { "playing": "재생 중", - "transcoding": "트랜스코딩", + "transcoding": "트랜스코딩 중", "bitrate": "비트레이트", "no_active": "활성 스트림 없음", "movies": "영화", @@ -108,18 +108,18 @@ "songs": "음악" }, "esphome": { - "offline": "Offline", - "offline_alt": "Offline", + "offline": "오프라인", + "offline_alt": "오프라인", "online": "온라인", - "total": "Total", - "unknown": "Unknown" + "total": "전체", + "unknown": "알 수 없음" }, "evcc": { - "pv_power": "Production", + "pv_power": "생산량", "battery_soc": "배터리", - "grid_power": "눈금", - "home_power": "Consumption", - "charge_power": "Charger", + "grid_power": "그리드", + "home_power": "소비량", + "charge_power": "충전전력", "kilowatt": "kW" }, "flood": { @@ -133,139 +133,139 @@ "unread": "미열람" }, "fritzbox": { - "connectionStatus": "Status", + "connectionStatus": "상태", "connectionStatusUnconfigured": "구성되지 않음", - "connectionStatusConnecting": "연결중", - "connectionStatusAuthenticating": "인증", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "연결을 끊는 중...", + "connectionStatusConnecting": "연결 중", + "connectionStatusAuthenticating": "인증 중", + "connectionStatusPendingDisconnect": "연결 끊기 보류 중", + "connectionStatusDisconnecting": "연결 끊는 중", "connectionStatusDisconnected": "연결 끊김", "connectionStatusConnected": "연결됨", - "uptime": "Uptime", - "maxDown": "Max. Down", - "maxUp": "Max. Up", - "down": "Down", - "up": "Up", - "received": "수신됨", - "sent": "전송됨", - "externalIPAddress": "Ext. IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "uptime": "가동 시간", + "maxDown": "최대 다운로드", + "maxUp": "최대 업로드", + "down": "다운로드", + "up": "업로드", + "received": "수신", + "sent": "송신", + "externalIPAddress": "외부 IP", + "externalIPv6Address": "외부 IPv6", + "externalIPv6Prefix": "외부 IPv6 접두사" }, "caddy": { - "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "upstreams": "업스트림", + "requests": "현재 요청", + "requests_failed": "실패한 요청" }, "changedetectionio": { - "totalObserved": "Total Observed", + "totalObserved": "총 관찰 수", "diffsDetected": "변경 감지됨" }, "channelsdvrserver": { "shows": "보기", "recordings": "녹화", - "scheduled": "예정됨", - "passes": "Passes" + "scheduled": "예약됨", + "passes": "패스" }, "tautulli": { - "playing": "Playing", - "transcoding": "Transcoding", - "bitrate": "Bitrate", - "no_active": "No Active Streams", - "plex_connection_error": "Check Plex Connection" + "playing": "재생 중", + "transcoding": "트랜스코딩 중", + "bitrate": "비트레이트", + "no_active": "활성 스트림 없음", + "plex_connection_error": "Plex 연결 확인" }, "omada": { "connectedAp": "연결된 AP", "activeUser": "활성 장치", "alerts": "경고", - "connectedGateways": "Connected gateways", + "connectedGateways": "연결된 게이트웨이", "connectedSwitches": "연결된 스위치" }, "nzbget": { - "rate": "비율", + "rate": "속도", "remaining": "남음", "downloaded": "다운로드됨" }, "plex": { "streams": "활성 스트림", "albums": "앨범", - "movies": "Movies", + "movies": "영화", "tv": "TV 쇼" }, "sabnzbd": { - "rate": "Rate", + "rate": "속도", "queue": "대기열", "timeleft": "남은 시간" }, "rutorrent": { "active": "활성", - "upload": "Upload", - "download": "Download" + "upload": "업로드", + "download": "다운로드" }, "transmission": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "다운로드", + "upload": "업로드", + "leech": "리치", + "seed": "시드" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "다운로드", + "upload": "업로드", + "leech": "리치", + "seed": "시드" }, "qnap": { - "cpuUsage": "CPU 사용", - "memUsage": "메모리 사용", + "cpuUsage": "CPU 사용량", + "memUsage": "메모리 사용량", "systemTempC": "시스템 온도", - "poolUsage": "Pool Usage", - "volumeUsage": "Volume Usage", - "invalid": "잘못됨" + "poolUsage": "풀 사용량", + "volumeUsage": "볼륨 사용량", + "invalid": "유효하지 않음" }, "deluge": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "다운로드", + "upload": "업로드", + "leech": "리치", + "seed": "시드" }, "develancacheui": { - "cachehitbytes": "Cache Hit Bytes", - "cachemissbytes": "Cache Miss Bytes" + "cachehitbytes": "캐시 히트 용량", + "cachemissbytes": "캐시 미스 용량" }, "downloadstation": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "다운로드", + "upload": "업로드", + "leech": "리치", + "seed": "시드" }, "sonarr": { - "wanted": "요청", - "queued": "대기 중", - "series": "Series", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "요청됨", + "queued": "대기열", + "series": "시리즈", + "queue": "대기열", + "unknown": "알 수 없음" }, "radarr": { - "wanted": "Wanted", - "missing": "빠짐", - "queued": "Queued", - "movies": "Movies", - "queue": "Queue", - "unknown": "Unknown" + "wanted": "요청됨", + "missing": "누락됨", + "queued": "대기열", + "movies": "영화", + "queue": "대기열", + "unknown": "알 수 없음" }, "lidarr": { - "wanted": "Wanted", - "queued": "Queued", - "artists": "Artists" + "wanted": "요청됨", + "queued": "대기열", + "artists": "아티스트" }, "readarr": { - "wanted": "Wanted", - "queued": "Queued", + "wanted": "요청됨", + "queued": "대기열", "books": "책" }, "bazarr": { - "missingEpisodes": "빠진 에피소드", - "missingMovies": "빠진 영화" + "missingEpisodes": "누락된 에피소드", + "missingMovies": "누락된 영화" }, "ombi": { "pending": "대기 중", @@ -273,83 +273,84 @@ "available": "이용 가능" }, "jellyseerr": { - "pending": "Pending", - "approved": "Approved", - "available": "Available" + "pending": "대기 중", + "approved": "승인됨", + "available": "이용 가능", + "issues": "열린 이슈" }, "overseerr": { - "pending": "Pending", + "pending": "대기 중", "processing": "처리 중", - "approved": "Approved", - "available": "Available" + "approved": "승인됨", + "available": "이용 가능" }, "netalertx": { - "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "total": "전체", + "connected": "연결됨", + "new_devices": "새 장치", + "down_alerts": "다운 알림" }, "pihole": { "queries": "쿼리", "blocked": "차단됨", - "blocked_percent": "Blocked %", - "gravity": "Gravity" + "blocked_percent": "차단율 %", + "gravity": "그래비티" }, "adguard": { - "queries": "Queries", - "blocked": "Blocked", + "queries": "쿼리", + "blocked": "차단됨", "filtered": "필터링됨", "latency": "지연" }, "speedtest": { - "upload": "Upload", - "download": "Download", - "ping": "Ping" + "upload": "업로드", + "download": "다운로드", + "ping": "핑" }, "portainer": { - "running": "Running", - "stopped": "중지", - "total": "Total" + "running": "실행 중", + "stopped": "중지됨", + "total": "전체" }, "suwayomi": { - "download": "Downloaded", - "nondownload": "Non-Downloaded", - "read": "Read", - "unread": "Unread", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "download": "다운로드됨", + "nondownload": "다운로드 안됨", + "read": "읽음", + "unread": "안 읽음", + "downloadedread": "다운로드 & 읽음", + "downloadedunread": "다운로드 & 안 읽음", + "nondownloadedread": "미다운로드 & 읽음", + "nondownloadedunread": "미다운로드 & 안 읽음" }, "tailscale": { "address": "주소", "expires": "만료", - "never": "Never", + "never": "없음", "last_seen": "마지막 접속", "now": "지금", "years": "{{number}}년", - "weeks": "{{number}}월", + "weeks": "{{number}}주", "days": "{{number}}일", - "hours": "{{number}}시", + "hours": "{{number}}시간", "minutes": "{{number}}분", "seconds": "{{number}}초", "ago": "{{value}} 전" }, "technitium": { - "totalQueries": "Queries", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", - "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", - "totalBlocked": "Blocked", - "totalDropped": "Dropped", + "totalQueries": "총 쿼리", + "totalNoError": "성공", + "totalServerFailure": "실패", + "totalNxDomain": "NX 도메인", + "totalRefused": "거부됨", + "totalAuthoritative": "권한 있음", + "totalRecursive": "재귀", + "totalCached": "캐시됨", + "totalBlocked": "차단됨", + "totalDropped": "삭제됨", "totalClients": "클라이언트" }, "tdarr": { - "queue": "Queue", + "queue": "대기열", "processed": "처리됨", "errored": "오류", "saved": "저장됨" @@ -360,356 +361,356 @@ "middleware": "미들웨어" }, "trilium": { - "version": "Version", - "notesCount": "Notes", - "dbSize": "Database Size", - "unknown": "Unknown" + "version": "버전", + "notesCount": "노트 수", + "dbSize": "DB 크기", + "unknown": "알 수 없음" }, "navidrome": { - "nothing_streaming": "No Active Streams", + "nothing_streaming": "활성 스트림 없음", "please_wait": "잠시만 기다리세요" }, "npm": { "enabled": "활성", "disabled": "비활성", - "total": "Total" + "total": "전체" }, "coinmarketcap": { - "configure": "한 개 이상의 가상화폐를 설정하여 추적", - "1hour": "1시간", - "1day": "1일", - "7days": "7일", - "30days": "30일" + "configure": "하나 이상의 암호화폐를 설정하여 추적하세요", + "1hour": "1 시간", + "1day": "1 일", + "7days": "7 일", + "30days": "30 일" }, "gotify": { - "apps": "어플리케이션", - "clients": "Clients", + "apps": "애플리케이션", + "clients": "클라이언트", "messages": "메시지" }, "prowlarr": { "enableIndexers": "인덱서", - "numberOfGrabs": "Grabs", - "numberOfQueries": "Queries", - "numberOfFailGrabs": "Fail Grabs", - "numberOfFailQueries": "Fail Queries" + "numberOfGrabs": "가져오기", + "numberOfQueries": "쿼리", + "numberOfFailGrabs": "가져오기 실패", + "numberOfFailQueries": "쿼리 실패" }, "jackett": { "configured": "구성됨", - "errored": "Errored" + "errored": "오류" }, "strelaysrv": { - "numActiveSessions": "Sessions", - "numConnections": "Connections", - "dataRelayed": "Relayed", - "transferRate": "Rate" + "numActiveSessions": "세션", + "numConnections": "연결", + "dataRelayed": "중계됨", + "transferRate": "전송 속도" }, "mastodon": { - "user_count": "Users", + "user_count": "사용자 수", "status_count": "게시글", - "domain_count": "Domains" + "domain_count": "도메인 수" }, "medusa": { - "wanted": "Wanted", - "queued": "Queued", - "series": "Series" + "wanted": "요청됨", + "queued": "대기열", + "series": "시리즈" }, "minecraft": { - "players": "Players", + "players": "플레이어", "version": "버전", - "status": "Status", - "up": "Online", - "down": "Offline" + "status": "상태", + "up": "온라인", + "down": "오프라인" }, "miniflux": { "read": "읽음", - "unread": "Unread" + "unread": "안 읽음" }, "authentik": { - "users": "Users", - "loginsLast24H": "로그인 (24h)", - "failedLoginsLast24H": "실패한 로그인 (24h)" + "users": "사용자", + "loginsLast24H": "로그인 (24시간)", + "failedLoginsLast24H": "실패한 로그인 (24시간)" }, "proxmox": { - "mem": "MEM", + "mem": "메모리", "cpu": "CPU", "lxc": "LXC", "vms": "가상머신" }, "glances": { "cpu": "CPU", - "load": "Load", - "wait": "Please wait", - "temp": "TEMP", + "load": "부하", + "wait": "잠시만 기다려주세요", + "temp": "온도", "_temp": "온도", "warn": "경고", - "uptime": "UP", - "total": "Total", - "free": "Free", - "used": "Used", - "days": "d", - "hours": "h", - "crit": "Crit", - "read": "Read", + "uptime": "가동중", + "total": "전체", + "free": "남은 용량", + "used": "사용량", + "days": "일", + "hours": "시간", + "crit": "심각", + "read": "읽기", "write": "쓰기", "gpu": "GPU", - "mem": "Men", - "swap": "Swap" + "mem": "메모리", + "swap": "스왑" }, "quicklaunch": { - "bookmark": "즐겨찾기", + "bookmark": "북마크", "service": "서비스", "search": "검색", "custom": "사용자 정의", - "visit": "Visit", + "visit": "방문", "url": "URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "추천" }, "wmo": { - "0-day": "화창함", - "0-night": "Clear", - "1-day": "Mainly Sunny", - "1-night": "Mainly Clear", - "2-day": "Partly Cloudy", - "2-night": "Partly Cloudy", - "3-day": "구름 낀", - "3-night": "Cloudy", - "45-day": "Foggy", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", - "51-day": "Light Drizzle", - "51-night": "Light Drizzle", - "53-day": "Drizzle", - "53-night": "Drizzle", - "55-day": "Heavy Drizzle", - "55-night": "Heavy Drizzle", - "56-day": "Light Freezing Drizzle", - "56-night": "Light Freezing Drizzle", - "57-day": "Freezing Drizzle", - "57-night": "Freezing Drizzle", - "61-day": "Light Rain", - "61-night": "Light Rain", - "63-day": "Rain", - "63-night": "Rain", - "65-day": "Heavy Rain", - "65-night": "Heavy Rain", - "66-day": "Freezing Rain", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", - "71-day": "약한 눈", - "71-night": "Light Snow", - "73-day": "Snow", - "73-night": "Snow", + "0-day": "맑음", + "0-night": "맑음", + "1-day": "대체로 맑음", + "1-night": "대체로 맑음", + "2-day": "구름 조금", + "2-night": "구름 조금", + "3-day": "흐림", + "3-night": "흐림", + "45-day": "안개", + "45-night": "안개", + "48-day": "안개", + "48-night": "안개", + "51-day": "가벼운 이슬비", + "51-night": "가벼운 이슬비", + "53-day": "이슬비", + "53-night": "이슬비", + "55-day": "강한 이슬비", + "55-night": "강한 이슬비", + "56-day": "가벼운 어는 이슬비", + "56-night": "가벼운 어는 이슬비", + "57-day": "어는 이슬비", + "57-night": "어는 이슬비", + "61-day": "가벼운 비", + "61-night": "가벼운 비", + "63-day": "비", + "63-night": "비", + "65-day": "폭우", + "65-night": "폭우", + "66-day": "어는 비", + "66-night": "어는 비", + "67-day": "어는 비", + "67-night": "어는 비", + "71-day": "가벼운 눈", + "71-night": "가벼운 눈", + "73-day": "눈", + "73-night": "눈", "75-day": "폭설", - "75-night": "Heavy Snow", + "75-night": "폭설", "77-day": "싸락눈", - "77-night": "Snow Grains", - "80-day": "Light Showers", - "80-night": "Light Showers", - "81-day": "Showers", - "81-night": "Showers", - "82-day": "Heavy Showers", - "82-night": "Heavy Showers", - "85-day": "Snow Showers", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", - "95-day": "Thunderstorm", - "95-night": "Thunderstorm", - "96-day": "Thunderstorm With Hail", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "77-night": "싸락눈", + "80-day": "가벼운 소나기", + "80-night": "가벼운 소나기", + "81-day": "소나기", + "81-night": "소나기", + "82-day": "강한 소나기", + "82-night": "강한 소나기", + "85-day": "눈 소나기", + "85-night": "눈 소나기", + "86-day": "눈 소나기", + "86-night": "눈 소나기", + "95-day": "뇌우", + "95-night": "뇌우", + "96-day": "우박 동반 뇌우", + "96-night": "우박 동반 뇌우", + "99-day": "우박 동반 뇌우", + "99-night": "우박 동반 뇌우" }, "homebridge": { - "available_update": "System", + "available_update": "시스템", "updates": "업데이트", - "update_available": "새 업데이트 사용 가능", + "update_available": "새 업데이트 있음", "up_to_date": "최신 상태", - "child_bridges": "Child Bridges", + "child_bridges": "하위 브릿지", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", - "pending": "Pending", - "down": "Down" + "up": "업", + "pending": "대기 중", + "down": "다운" }, "healthchecks": { "new": "신규", - "up": "Up", - "grace": "In Grace Period", - "down": "Down", - "paused": "Paused", - "status": "Status", - "last_ping": "Last Ping", - "never": "No pings yet" + "up": "업", + "grace": "유예 기간", + "down": "다운", + "paused": "일시 중지", + "status": "상태", + "last_ping": "마지막 핑", + "never": "아직 핑 없음" }, "watchtower": { - "containers_scanned": "Scanned", - "containers_updated": "Updated", - "containers_failed": "Failed" + "containers_scanned": "스캔됨", + "containers_updated": "업데이트됨", + "containers_failed": "실패" }, "autobrr": { - "approvedPushes": "Approved", - "rejectedPushes": "Rejected", - "filters": "Filters", - "indexers": "Indexers" + "approvedPushes": "승인됨", + "rejectedPushes": "거부됨", + "filters": "필터", + "indexers": "인덱서" }, "tubearchivist": { - "downloads": "Queue", - "videos": "동영상", + "downloads": "대기열", + "videos": "비디오", "channels": "채널", "playlists": "재생 목록" }, "truenas": { - "load": "System Load", - "uptime": "Uptime", - "alerts": "Alerts" + "load": "시스템 부하", + "uptime": "가동중", + "alerts": "경고" }, "pyload": { - "speed": "Speed", - "active": "Active", - "queue": "Queue", - "total": "Total" + "speed": "속도", + "active": "활성", + "queue": "대기열", + "total": "전체" }, "gluetun": { - "public_ip": "Public IP", - "region": "Region", - "country": "Country", - "port_forwarded": "Port Forwarded" + "public_ip": "공용 IP", + "region": "지역", + "country": "국가", + "port_forwarded": "포트 포워딩됨" }, "hdhomerun": { - "channels": "Channels", + "channels": "채널", "hd": "HD", - "tunerCount": "Tuners", + "tunerCount": "튜너", "channelNumber": "채널", "channelNetwork": "네트워크", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", - "networkRate": "Bitrate", + "signalStrength": "신호 강도", + "signalQuality": "신호 품질", + "symbolQuality": "심볼 품질", + "networkRate": "비트레이트", "clientIP": "클라이언트" }, "scrutiny": { - "passed": "Passed", - "failed": "Failed", - "unknown": "Unknown" + "passed": "통과", + "failed": "실패", + "unknown": "알 수 없음" }, "paperlessngx": { - "inbox": "받은메일함", - "total": "Total" + "inbox": "받은 편지함", + "total": "전체" }, "peanut": { - "battery_charge": "배터리 충전 중", - "ups_load": "UPS Load", - "ups_status": "UPS Status", - "online": "Online", - "on_battery": "배터리 사용", + "battery_charge": "배터리 충전", + "ups_load": "UPS 부하", + "ups_status": "UPS 상태", + "online": "온라인", + "on_battery": "배터리 사용 중", "low_battery": "배터리 부족" }, "nextdns": { - "wait": "Please Wait", - "no_devices": "No Device Data Received" + "wait": "잠시만 기다려주세요", + "no_devices": "수신된 장치 데이터 없음" }, "mikrotik": { - "cpuLoad": "CPU Load", + "cpuLoad": "CPU 부하", "memoryUsed": "메모리 사용량", - "uptime": "Uptime", - "numberOfLeases": "Leases" + "uptime": "가동 시간", + "numberOfLeases": "할당" }, "xteve": { "streams_all": "모든 스트림", - "streams_active": "Active Streams", - "streams_xepg": "XEPG Channels" + "streams_active": "활성 스트림", + "streams_xepg": "XEPG 채널" }, "opendtu": { "yieldDay": "오늘", - "absolutePower": "전원", - "relativePower": "전원 %", + "absolutePower": "전력", + "relativePower": "전력 %", "limit": "제한" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Active Memory", - "wanUpload": "WAN Upload", - "wanDownload": "WAN Download" + "cpu": "CPU 부하", + "memory": "활성 메모리", + "wanUpload": "WAN 업로드", + "wanDownload": "WAN 다운로드" }, "moonraker": { - "printer_state": "Printer State", - "print_status": "Print Status", + "printer_state": "프린터 상태", + "print_status": "인쇄 상태", "print_progress": "진행", - "layers": "Layers" + "layers": "레이어" }, "octoprint": { - "printer_state": "Status", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", - "job_completion": "Completion" + "printer_state": "상태", + "temp_tool": "도구 온도", + "temp_bed": "베드 온도", + "job_completion": "완료" }, "cloudflared": { - "origin_ip": "Origin IP", - "status": "Status" + "origin_ip": "서버 IP", + "status": "상태" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", - "temp": "Temp", - "disk": "Disk Usage", + "load": "평균 부하", + "memory": "메모리 사용량", + "wanStatus": "WAN 상태", + "up": "업", + "down": "다운", + "temp": "온도", + "disk": "디스크 사용량", "wanIP": "WAN IP" }, "proxmoxbackupserver": { - "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "datastore_usage": "데이터스토어", + "failed_tasks_24h": "실패한 작업 (24시간)", "cpu_usage": "CPU", - "memory_usage": "Memory" + "memory_usage": "메모리" }, "immich": { - "users": "Users", + "users": "사용자", "photos": "사진", - "videos": "Videos", - "storage": "저장됨" + "videos": "비디오", + "storage": "저장 공간" }, "uptimekuma": { - "up": "Sites Up", - "down": "Sites Down", - "uptime": "Uptime", - "incident": "Incident", - "m": "m" + "up": "사이트 업", + "down": "사이트 다운", + "uptime": "가동 시간", + "incident": "사건", + "m": "분" }, "atsumeru": { - "series": "Series", - "archives": "Archives", - "chapters": "Chapters", - "categories": "분류" + "series": "시리즈", + "archives": "아카이브", + "chapters": "챕터", + "categories": "카테고리" }, "komga": { - "libraries": "서재", - "series": "Series", - "books": "Books" + "libraries": "라이브러리", + "series": "시리즈", + "books": "책" }, "diskstation": { - "days": "Days", - "uptime": "Uptime", - "volumeAvailable": "Available" + "days": "일", + "uptime": "가동 시간", + "volumeAvailable": "사용 가능" }, "mylar": { - "series": "Series", - "issues": "Issues", - "wanted": "Wanted" + "series": "시리즈", + "issues": "이슈", + "wanted": "요청됨" }, "photoprism": { - "albums": "Albums", - "photos": "Photos", - "videos": "Videos", - "people": "People" + "albums": "앨범", + "photos": "사진", + "videos": "비디오", + "people": "인물" }, "fileflows": { - "queue": "Queue", - "processing": "Processing", - "processed": "Processed", - "time": "Time" + "queue": "대기열", + "processing": "처리 중", + "processed": "처리됨", + "time": "시간" }, "firefly": { "networth": "순자산", @@ -717,371 +718,401 @@ }, "grafana": { "dashboards": "대시보드", - "datasources": "Data Sources", - "totalalerts": "Total Alerts", - "alertstriggered": "Alerts Triggered" + "datasources": "데이터 소스", + "totalalerts": "총 경고", + "alertstriggered": "트리거된 경고" }, "nextcloud": { - "cpuload": "CPU 부하량", + "cpuload": "CPU 부하", "memoryusage": "메모리 사용량", "freespace": "여유 공간", - "activeusers": "활성 유저", - "numfiles": "파일", - "numshares": "공유된 항목" + "activeusers": "활성 사용자", + "numfiles": "파일 수", + "numshares": "공유 수" }, "kopia": { - "status": "Status", - "size": "Size", - "lastrun": "Last Run", - "nextrun": "Next Run", - "failed": "Failed" + "status": "상태", + "size": "크기", + "lastrun": "마지막 실행", + "nextrun": "다음 실행", + "failed": "실패" }, "unmanic": { - "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "active_workers": "활성 워커", + "total_workers": "전체 워커", + "records_total": "대기열 길이" }, "pterodactyl": { - "servers": "Servers", + "servers": "서버", "nodes": "노드" }, "prometheus": { - "targets_up": "Targets Up", - "targets_down": "Targets Down", - "targets_total": "Total Targets" + "targets_up": "대상 업", + "targets_down": "대상 다운", + "targets_total": "총 대상" }, "gatus": { - "up": "Sites Up", - "down": "Sites Down", - "uptime": "Uptime" + "up": "사이트 업", + "down": "사이트 다운", + "uptime": "가동 시간" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", - "gross_percent_max": "All time" + "gross_percent_today": "오늘", + "gross_percent_1y": "1년", + "gross_percent_max": "전체 기간" }, "audiobookshelf": { - "podcasts": "Podcasts", - "books": "Books", - "podcastsDuration": "지속시간", - "booksDuration": "Duration" + "podcasts": "팟캐스트", + "books": "책", + "podcastsDuration": "지속 시간", + "booksDuration": "지속 시간" }, "homeassistant": { - "people_home": "People Home", - "lights_on": "Lights On", - "switches_on": "Switches On" + "people_home": "집에 있는 사람", + "lights_on": "켜진 조명", + "switches_on": "켜진 스위치" }, "whatsupdocker": { - "monitoring": "Monitoring", - "updates": "Updates" + "monitoring": "모니터링", + "updates": "업데이트" }, "calibreweb": { - "books": "Books", + "books": "책", "authors": "저자", - "categories": "Categories", - "series": "Series" + "categories": "카테고리", + "series": "시리즈" }, "jdownloader": { - "downloadCount": "Queue", - "downloadBytesRemaining": "Remaining", - "downloadTotalBytes": "Size", - "downloadSpeed": "Speed" + "downloadCount": "대기열", + "downloadBytesRemaining": "남음", + "downloadTotalBytes": "크기", + "downloadSpeed": "속도" }, "kavita": { - "seriesCount": "Series", - "totalFiles": "Files" + "seriesCount": "시리즈", + "totalFiles": "파일" }, "azuredevops": { - "result": "Result", - "status": "Status", - "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", - "totalPrs": "Total PRs", - "myPrs": "My PRs", - "approved": "Approved" + "result": "결과", + "status": "상태", + "buildId": "빌드 ID", + "succeeded": "성공", + "notStarted": "시작 안 함", + "failed": "실패", + "canceled": "취소됨", + "inProgress": "진행 중", + "totalPrs": "총 PR", + "myPrs": "내 PR", + "approved": "승인됨" }, "gamedig": { - "status": "Status", - "online": "Online", - "offline": "Offline", + "status": "상태", + "online": "온라인", + "offline": "오프라인", "name": "이름", - "map": "지도", - "currentPlayers": "Current players", - "players": "Players", - "maxPlayers": "Max players", + "map": "맵", + "currentPlayers": "현재 플레이어", + "players": "플레이어", + "maxPlayers": "최대 플레이어", "bots": "봇", - "ping": "Ping" + "ping": "핑" }, "urbackup": { - "ok": "확인", - "errored": "오류 :", - "noRecent": "Out of Date", - "totalUsed": "Used Storage" + "ok": "정상", + "errored": "오류", + "noRecent": "오래됨", + "totalUsed": "사용된 저장 공간" }, "mealie": { "recipes": "레시피", - "users": "Users", - "categories": "Categories", + "users": "사용자", + "categories": "카테고리", "tags": "태그" }, "openmediavault": { "downloading": "다운로드 중", - "total": "Total", - "running": "Running", - "stopped": "Stopped", - "passed": "Passed", - "failed": "Failed" + "total": "전체", + "running": "실행 중", + "stopped": "중지됨", + "passed": "통과", + "failed": "실패" }, "openwrt": { - "uptime": "Uptime", - "cpuLoad": "CPU Load Avg (5m)", - "up": "Up", - "down": "Down", - "bytesTx": "Transmitted", - "bytesRx": "Received" + "uptime": "가동 시간", + "cpuLoad": "CPU 부하 평균 (5분)", + "up": "업로드", + "down": "다운로드", + "bytesTx": "송신", + "bytesRx": "수신" }, "uptimerobot": { - "status": "Status", - "uptime": "Uptime", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", - "sitesUp": "Sites Up", - "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", - "up": "Up", - "seemsdown": "Seems Down", - "down": "Down", - "unknown": "Unknown" + "status": "상태", + "uptime": "가동 시간", + "lastDown": "마지막 다운타임", + "downDuration": "다운타임 기간", + "sitesUp": "사이트 업", + "sitesDown": "사이트 다운", + "paused": "일시 중지", + "notyetchecked": "아직 확인 안 됨", + "up": "업", + "seemsdown": "다운된 것 같음", + "down": "다운", + "unknown": "알 수 없음" }, "calendar": { - "inCinemas": "In cinemas", - "physicalRelease": "Physical release", - "digitalRelease": "Digital release", - "noEventsToday": "No events for today!", - "noEventsFound": "No events found", - "errorWhenLoadingData": "Error when loading calendar data" + "inCinemas": "상영 중", + "physicalRelease": "실물 출시", + "digitalRelease": "디지털 출시", + "noEventsToday": "오늘 예정된 이벤트 없음!", + "noEventsFound": "이벤트 없음", + "errorWhenLoadingData": "캘린더 데이터 로딩 중 오류" }, "romm": { - "platforms": "기종", + "platforms": "플랫폼", "totalRoms": "게임", "saves": "세이브", - "states": "스테이트", + "states": "상태", "screenshots": "스크린샷", - "totalfilesize": "전체 용량" + "totalfilesize": "전체 파일 크기" }, "mailcow": { - "domains": "Domains", - "mailboxes": "Mailboxes", - "mails": "Mails", - "storage": "Storage" + "domains": "도메인", + "mailboxes": "메일박스", + "mails": "메일", + "storage": "저장 공간" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "경고", + "criticals": "심각" }, "plantit": { - "events": "Events", - "plants": "Plants", - "photos": "Photos", - "species": "Species" + "events": "이벤트", + "plants": "식물", + "photos": "사진", + "species": "종" }, "gitea": { "notifications": "알림", - "issues": "Issues", - "pulls": "Pull Requests", - "repositories": "Repositories" + "issues": "이슈", + "pulls": "풀 리퀘스트", + "repositories": "저장소" }, "stash": { "scenes": "장면", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", + "scenesPlayed": "재생된 장면", + "playCount": "총 재생 수", + "playDuration": "시청 시간", + "sceneSize": "장면 크기", + "sceneDuration": "장면 길이", + "images": "이미지", + "imageSize": "이미지 크기", + "galleries": "갤러리", + "performers": "출연자", "studios": "스튜디오", - "movies": "Movies", - "tags": "Tags", - "oCount": "O Count" + "movies": "영화", + "tags": "태그", + "oCount": "O 카운트" }, "tandoor": { - "users": "Users", - "recipes": "Recipes", + "users": "사용자", + "recipes": "레시피", "keywords": "키워드" }, "homebox": { - "items": "아이템", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", - "users": "Users", - "totalValue": "Total Value" + "items": "항목", + "totalWithWarranty": "보증 있음", + "locations": "위치", + "labels": "라벨", + "users": "사용자", + "totalValue": "총 가치" }, "crowdsec": { - "alerts": "Alerts", - "bans": "Bans" + "alerts": "경고", + "bans": "차단" }, "wgeasy": { - "connected": "Connected", - "enabled": "Enabled", - "disabled": "Disabled", - "total": "Total" + "connected": "연결됨", + "enabled": "활성", + "disabled": "비활성", + "total": "전체" }, "swagdashboard": { - "proxied": "Proxied", - "auth": "With Auth", - "outdated": "Outdated", - "banned": "Banned" + "proxied": "프록시됨", + "auth": "인증 사용", + "outdated": "오래됨", + "banned": "차단됨" }, "myspeed": { - "ping": "Ping", - "download": "Download", - "upload": "Upload" + "ping": "핑", + "download": "다운로드", + "upload": "업로드" }, "stocks": { - "stocks": "Stocks", - "loading": "로드 중", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "주식", + "loading": "로딩 중", + "open": "개장 - 미국 시장", + "closed": "폐장 - 미국 시장", + "invalidConfiguration": "잘못된 구성" }, "frigate": { "cameras": "카메라", - "uptime": "Uptime", - "version": "Version" + "uptime": "가동 중", + "version": "버전" }, "linkwarden": { - "links": "Links", - "collections": "Collections", - "tags": "Tags" + "links": "링크", + "collections": "컬렉션", + "tags": "태그" }, "zabbix": { - "unclassified": "Not classified", - "information": "Information", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "unclassified": "미분류", + "information": "정보", + "warning": "경고", + "average": "평균", + "high": "높음", + "disaster": "재해" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", - "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "vehicle": "차량", + "vehicles": "차량 목록", + "serviceRecords": "정비 기록", + "reminders": "알림", + "nextReminder": "다음 알림", + "none": "없음" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "활성 프로젝트", + "tasks7d": "이번 주 마감 작업", + "tasksOverdue": "기한 지난 작업", + "tasksInProgress": "진행 중 작업" }, "headscale": { - "name": "Name", - "address": "Address", - "last_seen": "Last Seen", - "status": "Status", - "online": "Online", - "offline": "Offline" + "name": "이름", + "address": "주소", + "last_seen": "마지막 접속", + "status": "상태", + "online": "온라인", + "offline": "오프라인" }, "beszel": { - "name": "Name", - "systems": "Systems", - "up": "Up", - "down": "Down", - "paused": "Paused", - "pending": "Pending", - "status": "Status", - "updated": "Updated", + "name": "이름", + "systems": "시스템", + "up": "업", + "down": "다운", + "paused": "일시 중지", + "pending": "대기 중", + "status": "상태", + "updated": "업데이트됨", "cpu": "CPU", - "memory": "MEM", - "disk": "Disk", - "network": "NET" + "memory": "메모리", + "disk": "디스크", + "network": "네트워크" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", - "healthy": "Healthy", - "degraded": "Degraded", - "progressing": "Progressing", - "missing": "Missing", - "suspended": "Suspended" + "apps": "앱", + "synced": "동기화됨", + "outOfSync": "동기화 안됨", + "healthy": "정상", + "degraded": "저하됨", + "progressing": "진행 중", + "missing": "누락됨", + "suspended": "일시 중단됨" }, "spoolman": { - "loading": "Loading" + "loading": "로딩 중" }, "gitlab": { - "groups": "Groups", - "issues": "Issues", - "merges": "Merge Requests", - "projects": "Projects" + "groups": "그룹", + "issues": "이슈", + "merges": "병합 요청", + "projects": "프로젝트" }, "apcups": { - "status": "Status", - "load": "Load", - "bcharge": "Battery Charge", - "timeleft": "Time Left" + "status": "상태", + "load": "부하", + "bcharge": "배터리 충전량", + "timeleft": "남은 시간" }, "karakeep": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", - "tags": "Tags" + "bookmarks": "북마크", + "favorites": "즐겨찾기", + "archived": "보관됨", + "highlights": "하이라이트", + "lists": "목록", + "tags": "태그" }, "slskd": { - "slskStatus": "Network", - "connected": "Connected", - "disconnected": "Disconnected", - "updateStatus": "Update", - "update_yes": "Available", - "update_no": "Up to Date", - "downloads": "Downloads", - "uploads": "Uploads", - "sharedFiles": "Files" + "slskStatus": "네트워크", + "connected": "연결됨", + "disconnected": "연결 끊김", + "updateStatus": "업데이트", + "update_yes": "가능", + "update_no": "최신 상태", + "downloads": "다운로드", + "uploads": "업로드", + "sharedFiles": "파일" }, "jellystat": { - "songs": "Songs", - "movies": "Movies", - "episodes": "Episodes", - "other": "Other" + "songs": "음악", + "movies": "영화", + "episodes": "에피소드", + "other": "기타" }, "checkmk": { - "serviceErrors": "Service issues", - "hostErrors": "Host issues" + "serviceErrors": "서비스 문제", + "hostErrors": "호스트 문제" }, "komodo": { - "total": "Total", - "running": "Running", - "stopped": "Stopped", - "down": "Down", - "unhealthy": "Unhealthy", - "unknown": "Unknown", - "servers": "Servers", - "stacks": "Stacks", - "containers": "Containers" + "total": "전체", + "running": "실행 중", + "stopped": "중지됨", + "down": "다운", + "unhealthy": "비정상", + "unknown": "알 수 없음", + "servers": "서버", + "stacks": "스택", + "containers": "컨테이너" }, "filebrowser": { - "available": "Available", - "used": "Used", - "total": "Total" + "available": "사용 가능", + "used": "사용됨", + "total": "전체" }, "wallos": { - "activeSubscriptions": "Subscriptions", - "thisMonthlyCost": "This Month", - "nextMonthlyCost": "Next Month", - "previousMonthlyCost": "Prev. Month", - "nextRenewingSubscription": "Next Payment" + "activeSubscriptions": "구독 중", + "thisMonthlyCost": "이번 달 비용", + "nextMonthlyCost": "다음 달 비용", + "previousMonthlyCost": "지난달 비용", + "nextRenewingSubscription": "다음 결제" + }, + "unraid": { + "STARTED": "시작됨", + "STOPPED": "중지됨", + "NEW_ARRAY": "새 어레이", + "RECON_DISK": "디스크 재구성 중", + "DISABLE_DISK": "디스크 비활성화됨", + "SWAP_DSBL": "스왑 비활성화", + "INVALID_EXPANSION": "잘못된 확장", + "PARITY_NOT_BIGGEST": "패리티가 가장 크지 않음", + "TOO_MANY_MISSING_DISKS": "누락된 디스크가 너무 많음", + "NEW_DISK_TOO_SMALL": "새 디스크가 너무 작음", + "NO_DATA_DISKS": "데이터 디스크 없음", + "notifications": "알림", + "status": "상태", + "cpu": "CPU", + "memoryUsed": "사용된 메모리", + "memoryAvailable": "사용 가능한 메모리", + "arrayUsed": "사용된 어레이", + "arrayFree": "남은 어레이", + "poolUsed": "{{pool}} 사용됨", + "poolFree": "{{pool}} 남음" + }, + "backrest": { + "num_plans": "플랜", + "num_success_30": "성공", + "num_failure_30": "실패", + "num_success_latest": "성공 중", + "num_failure_latest": "실패 중", + "bytes_added_30": "추가된 용량" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 98bcaba5d..3485a50d0 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -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" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index a0085eac2..80298ce5f 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -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" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index e564a3f80..2093a296c 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -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" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index d0178aa29..e7a9f1028 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -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" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 615c9dd9d..da3d2d3b5 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -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" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 1ef2eb908..99e1d05fa 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -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" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index d76863925..140206522 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -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" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 6fe3ae445..d0a13e376 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -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" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index c338c5a9f..5f197fab5 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -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" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 7dfeefaa4..67b569f63 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -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" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 0da1a32cf..bc7a476c0 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -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" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index e2115cd67..5a4398f94 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -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": "Додати бајтови" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index f029d1474..fd8d104fc 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -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" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index c49afa636..f3d9c835f 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -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" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index cfa48bb22..2d7d295eb 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -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" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 91a79e205..f7ea42de8 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -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" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 5b996cdab..009e21ae8 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -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" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 0565518d8..25fc5bd1d 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -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" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index f61e244a9..96ccd9194 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -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" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 0ded722c3..8e14a1ac2 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -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" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 7f68be7fb..c55ca253c 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -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" } } diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index a98276596..ce5aba81b 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -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,86 +257,98 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea } return ( - + {mobileButtonPosition && ( + + )} + ); } diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index f59573829..6458e5601 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -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; } diff --git a/src/pages/api/proxmox/stats/[...service].js b/src/pages/api/proxmox/stats/[...service].js index 96cdb5019..a053b5856 100644 --- a/src/pages/api/proxmox/stats/[...service].js +++ b/src/pages/api/proxmox/stats/[...service].js @@ -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`; diff --git a/src/pages/index.jsx b/src/pages/index.jsx index b0a31df98..599a1c63c 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -432,7 +432,7 @@ function Home({ initialSettings }) { searchString={searchString} setSearchString={setSearchString} isOpen={searching} - close={setSearching} + setSearching={setSearching} />
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 ( <> diff --git a/src/skeleton/proxmox.yaml b/src/skeleton/proxmox.yaml index 9fd1836ac..90aacd756 100644 --- a/src/skeleton/proxmox.yaml +++ b/src/skeleton/proxmox.yaml @@ -1,4 +1,5 @@ --- -# url: https://proxmox.host.or.ip:8006 -# token: username@pam!Token ID -# secret: secret +# pve: +# url: https://proxmox.host.or.ip:8006 +# token: username@pam!Token ID +# secret: secret diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 18cbe23b6..9cdff1da0 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -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; diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 712273bd6..e92dddaed 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -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; } diff --git a/src/widgets/backrest/component.jsx b/src/widgets/backrest/component.jsx new file mode 100644 index 000000000..af344590f --- /dev/null +++ b/src/widgets/backrest/component.jsx @@ -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 ; + } + + 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 ( + + + + + + + + + ); + } + + return ( + + + + + + + + + ); +} diff --git a/src/widgets/backrest/proxy.js b/src/widgets/backrest/proxy.js new file mode 100644 index 000000000..610f76fcb --- /dev/null +++ b/src/widgets/backrest/proxy.js @@ -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 }); + } +} diff --git a/src/widgets/backrest/widget.js b/src/widgets/backrest/widget.js new file mode 100644 index 000000000..869d620d4 --- /dev/null +++ b/src/widgets/backrest/widget.js @@ -0,0 +1,14 @@ +import backrestProxyHandler from "./proxy"; + +const widget = { + api: "{url}/v1.Backrest/{endpoint}", + proxyHandler: backrestProxyHandler, + + mappings: { + summary: { + endpoint: "GetSummaryDashboard", + }, + }, +}; + +export default widget; diff --git a/src/widgets/components.js b/src/widgets/components.js index 9cb02c2af..4b8d4e715 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -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")), diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx index d99fffdbc..d405cbf62 100644 --- a/src/widgets/jellyseerr/component.jsx +++ b/src/widgets/jellyseerr/component.jsx @@ -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 ; + const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count"); + const { data: issueData, error: issueError } = useWidgetAPI(widget, isIssueEnabled ? "issue/count" : ""); + if (statsError || (isIssueEnabled && issueError)) { + return ; } - if (!statsData) { + if (!statsData || (isIssueEnabled && !issueData)) { return ( + ); } @@ -27,6 +33,7 @@ export default function Component({ service }) { + ); } diff --git a/src/widgets/jellyseerr/widget.js b/src/widgets/jellyseerr/widget.js index 31a6f80fb..491e2fdbc 100644 --- a/src/widgets/jellyseerr/widget.js +++ b/src/widgets/jellyseerr/widget.js @@ -9,6 +9,10 @@ const widget = { endpoint: "request/count", validate: ["pending", "approved", "available"], }, + "issue/count": { + endpoint: "issue/count", + validate: ["open", "total"], + }, }, }; diff --git a/src/widgets/unraid/component.jsx b/src/widgets/unraid/component.jsx new file mode 100644 index 000000000..f7b8dc5ca --- /dev/null +++ b/src/widgets/unraid/component.jsx @@ -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 ; + } + + 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 ( + + + + + + + + + + + {...POOLS.flatMap((pool) => + POOL_FIELDS.map(({ param, label }) => ( + + )), + )} + + ); + } + + return ( + + + + + + + + + + + {...POOLS.flatMap((pool) => + POOL_FIELDS.map(({ param, label, valueKey, valueType }) => ( + + )), + )} + + ); +} diff --git a/src/widgets/unraid/proxy.js b/src/widgets/unraid/proxy.js new file mode 100644 index 000000000..489bc8d63 --- /dev/null +++ b/src/widgets/unraid/proxy.js @@ -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); +} diff --git a/src/widgets/unraid/widget.js b/src/widgets/unraid/widget.js new file mode 100644 index 000000000..cebcbd60b --- /dev/null +++ b/src/widgets/unraid/widget.js @@ -0,0 +1,7 @@ +import unraidProxyHandler from "./proxy"; + +const widget = { + proxyHandler: unraidProxyHandler, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index cfd28c590..bc9f137d3 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -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,