mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-06 21:57:48 +01:00
Compare commits
111 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b019295a06 | ||
|
|
5fa790e9fe | ||
|
|
7719ea17be | ||
|
|
885a4051f3 | ||
|
|
67f5ee8df5 | ||
|
|
ebd384c62d | ||
|
|
5512d05f00 | ||
|
|
654f16dbb5 | ||
|
|
bec1e5fff2 | ||
|
|
1da9255578 | ||
|
|
cc887214cf | ||
|
|
98c3ca6dac | ||
|
|
3c4818a2b4 | ||
|
|
f773e026d5 | ||
|
|
3f1229555e | ||
|
|
6898faa3de | ||
|
|
792f768a7f | ||
|
|
0c8c759f8a | ||
|
|
241c981444 | ||
|
|
56349e57e5 | ||
|
|
6763da57a6 | ||
|
|
8ec488efbd | ||
|
|
9e3bc8e64f | ||
|
|
29827b1c70 | ||
|
|
f48cf0dc9f | ||
|
|
19c25713c4 | ||
|
|
fa50bbad9c | ||
|
|
8e6a169b50 | ||
|
|
4248db7f21 | ||
|
|
b8eda91005 | ||
|
|
5f7891d8db | ||
|
|
b14abc2642 | ||
|
|
8ea2ccf110 | ||
|
|
cbad95bf9c | ||
|
|
47db8be7bb | ||
|
|
2f4985b977 | ||
|
|
8d34dc5725 | ||
|
|
31c33f4f32 | ||
|
|
ef3e98285e | ||
|
|
e012ea6050 | ||
|
|
dcc2f3e8f3 | ||
|
|
94718db22b | ||
|
|
c591049a1a | ||
|
|
fd04e93d68 | ||
|
|
29b7d5756c | ||
|
|
596e5c9b84 | ||
|
|
7ea1d0dd47 | ||
|
|
4a04347518 | ||
|
|
7bbb35db13 | ||
|
|
d1d81e5753 | ||
|
|
4c2ecb9b0e | ||
|
|
1066d17f70 | ||
|
|
462a8e001f | ||
|
|
0eab49a449 | ||
|
|
24121cd5f0 | ||
|
|
8aeded4774 | ||
|
|
40522fbb96 | ||
|
|
76cbb6e2ed | ||
|
|
b29c0f809c | ||
|
|
4f41be512c | ||
|
|
b765330b4a | ||
|
|
ed3055ae1b | ||
|
|
5460f89cc9 | ||
|
|
29018873f5 | ||
|
|
11cacfb823 | ||
|
|
eddec4adc2 | ||
|
|
2faf51b4c0 | ||
|
|
891c387062 | ||
|
|
3b2b6cc064 | ||
|
|
83a5d1b17a | ||
|
|
29b0240abd | ||
|
|
8ad1f9f422 | ||
|
|
ea15a1b9e5 | ||
|
|
691ed78e75 | ||
|
|
5f58cb285d | ||
|
|
a6696700b7 | ||
|
|
985ca4ae84 | ||
|
|
ebda0f7b70 | ||
|
|
8e7723b51d | ||
|
|
24635268a0 | ||
|
|
729c161271 | ||
|
|
69af86eebe | ||
|
|
369a996f1f | ||
|
|
b7b63abee0 | ||
|
|
4ba47c426a | ||
|
|
29d54b032c | ||
|
|
8791aa8d0d | ||
|
|
337ada148c | ||
|
|
2c8348f5b5 | ||
|
|
0eeaa99fe3 | ||
|
|
38d2cc7bd7 | ||
|
|
759dc9f3d2 | ||
|
|
72d9a614fd | ||
|
|
3d209bf572 | ||
|
|
3268db1298 | ||
|
|
ab4a28d04a | ||
|
|
3c1644e18f | ||
|
|
e1f6ddaeab | ||
|
|
826bad8ff4 | ||
|
|
8aa2bbcdd3 | ||
|
|
aece2954df | ||
|
|
5fbdbce79c | ||
|
|
ce2bfd9d21 | ||
|
|
df4cc6086c | ||
|
|
2c632e2b3e | ||
|
|
6de20f0ab6 | ||
|
|
7434d597c9 | ||
|
|
59dbc79656 | ||
|
|
b475f89d85 | ||
|
|
7f9ae3d01b | ||
|
|
b12d27551a |
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -11,13 +11,13 @@ body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Have a question? 👉 [Start a new discussion](https://github.com/benphelps/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
|
||||
Have a question? 👉 [Start a new discussion](https://github.com/gethomepage/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
|
||||
|
||||
Before opening an issue, please double check:
|
||||
|
||||
- [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
|
||||
- [The homepage documentation](https://gethomepage.dev/)
|
||||
- [Existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
|
||||
- [Existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
@@ -95,5 +95,5 @@ body:
|
||||
required: true
|
||||
- label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
|
||||
required: true
|
||||
- label: Search [existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
|
||||
- label: Search [existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
|
||||
required: true
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +1,11 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 🤔 Questions and Help
|
||||
url: https://github.com/benphelps/homepage/discussions
|
||||
url: https://github.com/gethomepage/homepage/discussions
|
||||
about: This issue tracker is for bugs only, not general support questions. Please refer to our Discussions.
|
||||
- name: 💬 Chat
|
||||
url: https://discord.gg/k4ruYNrudu
|
||||
about: Want to discuss homepage with others? Check out our chat.
|
||||
- name: 🚀 Feature Request
|
||||
url: https://github.com/benphelps/homepage/discussions/new?category=feature-requests
|
||||
url: https://github.com/gethomepage/homepage/discussions/new?category=feature-requests
|
||||
about: Remember to search for existing feature requests and "up-vote" any you like
|
||||
|
||||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -27,5 +27,5 @@ What type of change does your PR introduce to Homepage?
|
||||
|
||||
- [ ] If adding a service widget or a change that requires it, I have added corresponding documentation changes.
|
||||
- [ ] If adding a new widget I have reviewed the [guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines).
|
||||
- [ ] If applicable, I have checked that all tests pass with e.g. `pnpm lint`.
|
||||
- [ ] I have checked that all code style checks pass using pre-commit hooks and linting checks with `pnpm lint` (see development guidelines).
|
||||
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
|
||||
|
||||
22
.github/workflows/docker-publish.yml
vendored
22
.github/workflows/docker-publish.yml
vendored
@@ -20,6 +20,7 @@ on:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- 'mkdocs.yml'
|
||||
merge_group:
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
@@ -29,10 +30,28 @@ env:
|
||||
|
||||
|
||||
jobs:
|
||||
pre-commit:
|
||||
name: Linting Checks
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
-
|
||||
name: Install python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.x
|
||||
-
|
||||
name: Check files
|
||||
uses: pre-commit/action@v3.0.0
|
||||
|
||||
build:
|
||||
name: Docker Build & Push
|
||||
if: github.repository == 'benphelps/homepage'
|
||||
if: github.repository == 'gethomepage/homepage'
|
||||
runs-on: self-hosted
|
||||
needs:
|
||||
- pre-commit
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
@@ -105,7 +124,6 @@ jobs:
|
||||
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
|
||||
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
||||
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||
DEPRECATED_REPO=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.source'] == 'https://github.com/benphelps/homepage' }}
|
||||
# https://github.com/docker/setup-qemu-action#about
|
||||
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||
|
||||
27
.github/workflows/docs-publish.yml
vendored
27
.github/workflows/docs-publish.yml
vendored
@@ -11,16 +11,35 @@ on:
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'mkdocs.yml'
|
||||
merge_group:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
pre-commit:
|
||||
name: Linting Checks
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
-
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
-
|
||||
name: Install python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.x
|
||||
-
|
||||
name: Check files
|
||||
uses: pre-commit/action@v3.0.0
|
||||
|
||||
test:
|
||||
name: Test Build
|
||||
if: github.repository == 'benphelps/homepage' && github.event_name == 'pull_request'
|
||||
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v4
|
||||
@@ -40,8 +59,10 @@ jobs:
|
||||
run: MKINSIDERS=false mkdocs build
|
||||
deploy:
|
||||
name: Build & Deploy
|
||||
if: github.repository == 'benphelps/homepage' && github.event_name != 'pull_request'
|
||||
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- pre-commit
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -57,7 +78,7 @@ jobs:
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
- run: sudo apt-get install pngquant
|
||||
- run: pip install mike
|
||||
- run: pip install mike==1.1.2
|
||||
- run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git
|
||||
- name: Set Git config
|
||||
run: |
|
||||
|
||||
19
.pre-commit-config.yaml
Normal file
19
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
# See https://pre-commit.com for more information
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.2.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- id: check-yaml
|
||||
exclude: "(^mkdocs\\.yml$)"
|
||||
- id: check-added-large-files
|
||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||
rev: 'v3.0.3'
|
||||
hooks:
|
||||
- id: prettier
|
||||
types_or:
|
||||
- javascript
|
||||
- markdown
|
||||
- jsx
|
||||
1
.prettierrc
Normal file
1
.prettierrc
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
- Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
- The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# Contributing to Homepage
|
||||
|
||||
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
|
||||
|
||||
- Reporting a bug
|
||||
@@ -8,15 +9,19 @@ We love your input! We want to make contributing to this project as easy and tra
|
||||
- Becoming a maintainer
|
||||
|
||||
## We Develop with Github
|
||||
|
||||
We use github to host code, to track issues and feature requests, as well as accept pull requests.
|
||||
|
||||
## Any contributions you make will be under the GNU General Public License v3.0
|
||||
|
||||
In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
|
||||
|
||||
## Report bugs using Github's [issues](https://github.com/benphelps/homepage/issues)
|
||||
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/benphelps/homepage/issues/new); it's that easy!
|
||||
## Report bugs using Github's [issues](https://github.com/gethomepage/homepage/issues)
|
||||
|
||||
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/gethomepage/homepage/issues/new); it's that easy!
|
||||
|
||||
## Write bug reports with detail, background, and sample configurations
|
||||
|
||||
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
|
||||
|
||||
**Great Bug Reports** tend to have:
|
||||
@@ -29,16 +34,20 @@ Homepage includes a lot of configuration options and is often deploying in large
|
||||
- What actually happens
|
||||
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
|
||||
|
||||
People *love* thorough bug reports. I'm not even kidding.
|
||||
People _love_ thorough bug reports. I'm not even kidding.
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
Please see the [documentation regarding development](https://gethomepage.dev/latest/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/latest/more/development/#service-widget-guidelines) if you are considering making one.
|
||||
|
||||
## Use a Consistent Coding Style
|
||||
This project follows the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript), please follow it when submitting pull requests.
|
||||
|
||||
Please see information in the docs regarding [code formatting with pre-commit hooks](https://gethomepage.dev/latest/more/development/#code-formatting-with-pre-commit-hooks).
|
||||
|
||||
## License
|
||||
|
||||
By contributing, you agree that your contributions will be licensed under its GNU General Public License.
|
||||
|
||||
## References
|
||||
|
||||
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md)
|
||||
|
||||
@@ -23,7 +23,6 @@ WORKDIR /app
|
||||
ARG BUILDTIME
|
||||
ARG VERSION
|
||||
ARG REVISION
|
||||
ARG DEPRECATED_REPO
|
||||
|
||||
COPY --link --from=deps /app/node_modules ./node_modules/
|
||||
COPY . .
|
||||
@@ -31,15 +30,15 @@ COPY . .
|
||||
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
|
||||
RUN npm run telemetry \
|
||||
&& mkdir config \
|
||||
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION NEXT_PUBLIC_DEPRECATED_REPO=$DEPRECATED_REPO npm run build
|
||||
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
|
||||
|
||||
# Production image, copy all the files and run next
|
||||
FROM docker.io/node:18-alpine AS runner
|
||||
LABEL org.opencontainers.image.title "Homepage"
|
||||
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
|
||||
LABEL org.opencontainers.image.url="https://github.com/benphelps/homepage"
|
||||
LABEL org.opencontainers.image.documentation='https://github.com/benphelps/homepage/wiki'
|
||||
LABEL org.opencontainers.image.source='https://github.com/benphelps/homepage'
|
||||
LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage"
|
||||
LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
|
||||
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
|
||||
LABEL org.opencontainers.image.licenses='Apache-2.0'
|
||||
|
||||
ENV NODE_ENV production
|
||||
|
||||
26
README.md
26
README.md
@@ -14,12 +14,14 @@
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/benphelps/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/benphelps/homepage/docker-publish.yml"></a>
|
||||
<a href="https://github.com/gethomepage/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/gethomepage/homepage/docker-publish.yml"></a>
|
||||
|
||||
<a href="https://hosted.weblate.org/engage/homepage/"><img src="https://hosted.weblate.org/widgets/homepage/-/homepage/svg-badge.svg" alt="Weblate"></a>
|
||||
<a href="https://crowdin.com/project/gethomepage" target="_blank"><img src="https://badges.crowdin.net/gethomepage/localized.svg"></a>
|
||||
|
||||
<a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a>
|
||||
|
||||
<a href="http://gethomepage.dev/latest/" title="Docs"><img title="Docs" src="https://github.com/gethomepage/homepage/actions/workflows/docs-publish.yml/badge.svg"/></a>
|
||||
|
||||
<a href="https://paypal.me/phelpsben" title="Donate"><img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/benphelps"></a>
|
||||
</p>
|
||||
|
||||
@@ -43,11 +45,11 @@ Homepage has built-in support for Docker, and can automatically discover and add
|
||||
|
||||
## Service Widgets
|
||||
|
||||
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/configs/service-widgets/) page for more information.
|
||||
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/widgets/) page for more information.
|
||||
|
||||
## Information Widgets
|
||||
|
||||
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/configs/widgets/) page for more information.
|
||||
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/widgets/) page for more information.
|
||||
|
||||
## Customization
|
||||
|
||||
@@ -65,7 +67,7 @@ Using docker compose:
|
||||
version: "3.3"
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/benphelps/homepage:latest
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
environment:
|
||||
PUID: 1000 -- optional, your user id
|
||||
@@ -88,7 +90,7 @@ docker run --name homepage \
|
||||
-v /path/to/config:/app/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||
--restart unless-stopped \
|
||||
ghcr.io/benphelps/homepage:latest
|
||||
ghcr.io/gethomepage/homepage:latest
|
||||
```
|
||||
|
||||
## With Node
|
||||
@@ -96,7 +98,7 @@ docker run --name homepage \
|
||||
First, clone the repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/benphelps/homepage.git
|
||||
git clone https://github.com/gethomepage/homepage.git
|
||||
```
|
||||
|
||||
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
||||
@@ -122,7 +124,7 @@ pnpm dev
|
||||
|
||||
# Configuration
|
||||
|
||||
Please refere to the [homepage documentation](https://gethomepage.dev/) website for more information. Everything you need to know about configuring Homepage is there. Please read everything carefully before asking for help, as most questions are answered there or are simple YAML configuration issues.
|
||||
Please refer to the [homepage documentation](https://gethomepage.dev/) website for more information. Everything you need to know about configuring Homepage is there. Please read everything carefully before asking for help, as most questions are answered there or are simple YAML configuration issues.
|
||||
|
||||
# Development
|
||||
|
||||
@@ -144,6 +146,8 @@ This is a [Next.js](https://nextjs.org/) application, see their documentation fo
|
||||
|
||||
# Documentation
|
||||
|
||||
The homepage documentation is available at [https://gethomepage.dev/](https://gethomepage.dev/).
|
||||
|
||||
Homepage uses Material for MkDocs for documentation. To run the documentation locally, first install the dependencies:
|
||||
|
||||
```bash
|
||||
@@ -158,11 +162,11 @@ mkdocs serve # or build, to build the static site
|
||||
|
||||
# Support & Suggestions
|
||||
|
||||
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/benphelps/homepage/discussions) page.
|
||||
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/gethomepage/homepage/discussions) page.
|
||||
|
||||
For bug reports, please open an issue on the [Issues](https://github.com/benphelps/homepage/issues) page.
|
||||
For bug reports, please open an issue on the [Issues](https://github.com/gethomepage/homepage/issues) page.
|
||||
|
||||
## Contributing & Contributers
|
||||
## Contributing & Contributors
|
||||
|
||||
Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information.
|
||||
|
||||
|
||||
3
crowdin.yml
Normal file
3
crowdin.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
files:
|
||||
- source: /public/locales/en/*.json
|
||||
translation: /public/locales/%osx_locale%/%original_file_name%
|
||||
@@ -49,7 +49,7 @@ dockerproxy:
|
||||
restart: unless-stopped
|
||||
|
||||
homepage:
|
||||
image: ghcr.io/benphelps/homepage:latest
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
volumes:
|
||||
- /path/to/config:/app/config
|
||||
@@ -76,7 +76,7 @@ If you'd rather use the socket directly, first make sure that you're passing the
|
||||
|
||||
```yaml
|
||||
homepage:
|
||||
image: ghcr.io/benphelps/homepage:latest
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
volumes:
|
||||
- /path/to/config:/app/config
|
||||
@@ -153,6 +153,23 @@ labels:
|
||||
- homepage.widget.fields=["field1","field2"] # optional
|
||||
```
|
||||
|
||||
You can add specify fields for e.g. the [CustomAPI](/widgets/services/customapi) widget by using array-style dot notation:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- homepage.group=Media
|
||||
- homepage.name=Emby
|
||||
- homepage.icon=emby.png
|
||||
- homepage.href=http://emby.home/
|
||||
- homepage.description=Media server
|
||||
- homepage.widget.type=customapi
|
||||
- homepage.widget.url=http://argus.service/api/v1/service/summary/emby
|
||||
- homepage.widget.field[0].label=Deployed Version
|
||||
- homepage.widget.field[0].field.status=deployed_version
|
||||
- homepage.widget.field[1].label=Latest Version
|
||||
- homepage.widget.field[1].field.status=latest_version
|
||||
```
|
||||
|
||||
## Docker Swarm
|
||||
|
||||
Docker swarm is supported and Docker services are specified with the same `server` and `container` notation. To enable swarm support you will need to include a `swarm` setting in your docker.yaml, e.g.
|
||||
|
||||
@@ -36,7 +36,7 @@ Inside of the service you'd like to connect to a pod:
|
||||
|
||||
The `app` field is used to create a label selector, in this example case it would match pods with the label: `app.kubernetes.io/name=emby`.
|
||||
|
||||
Sometimes this is insufficient for complex or atypical application deployments. In these cases, the `podSelector` field can be used. Any field selector can be used with it, so it allows for some very powerful selection capabilities.
|
||||
Sometimes this is insufficient for complex or atypical application deployments. In these cases, the `pod-selector` field can be used. Any field selector can be used with it, so it allows for some very powerful selection capabilities.
|
||||
|
||||
For instance, it can be utilized to roll multiple underlying deployments under one application to see a high-level aggregate:
|
||||
|
||||
@@ -47,7 +47,7 @@ For instance, it can be utilized to roll multiple underlying deployments under o
|
||||
description: Matrix Synapse Powered Chat
|
||||
app: matrix-element
|
||||
namespace: comms
|
||||
podSelector: >-
|
||||
pod-selector: >-
|
||||
app.kubernetes.io/instance in (
|
||||
matrix-element,
|
||||
matrix-media-repo,
|
||||
@@ -58,7 +58,7 @@ For instance, it can be utilized to roll multiple underlying deployments under o
|
||||
|
||||
!!! note
|
||||
|
||||
A blank string as a podSelector does not deactivate it, but will actually select all pods in the namespace. This is a useful way to capture the resource usage of a complex application siloed to a single namespace, like Longhorn.
|
||||
A blank string as a pod-selector does not deactivate it, but will actually select all pods in the namespace. This is a useful way to capture the resource usage of a complex application siloed to a single namespace, like Longhorn.
|
||||
|
||||
## Automatic Service Discovery
|
||||
|
||||
@@ -77,7 +77,7 @@ metadata:
|
||||
gethomepage.dev/name: Emby
|
||||
gethomepage.dev/widget.type: "emby"
|
||||
gethomepage.dev/widget.url: "https://emby.example.com"
|
||||
gethomepage.dev/podSelector: ""
|
||||
gethomepage.dev/pod-selector: ""
|
||||
gethomepage.dev/weight: 10 # optional
|
||||
spec:
|
||||
rules:
|
||||
@@ -110,10 +110,11 @@ metadata:
|
||||
gethomepage.dev/description: Media Server
|
||||
gethomepage.dev/group: Media
|
||||
gethomepage.dev/icon: emby.png
|
||||
gethomepage.dev/app: emby-app # optional, may be needed if app.kubernetes.io/name != ingress metadata.name
|
||||
gethomepage.dev/name: Emby
|
||||
gethomepage.dev/widget.type: "emby"
|
||||
gethomepage.dev/widget.url: "https://emby.example.com"
|
||||
gethomepage.dev/podSelector: ""
|
||||
gethomepage.dev/pod-selector: ""
|
||||
gethomepage.dev/weight: 10 # optional
|
||||
spec:
|
||||
entryPoints:
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Service Widget Configuration
|
||||
|
||||
Unless otherwise noted, URLs should not end with a `/` or other API path. Each widget will handle the path on its own.
|
||||
|
||||
Each service can have one widget attached to it (often matching the service type, but thats not forced).
|
||||
Each service can have one widget attached to it (often matching the service type, but that's not forced).
|
||||
|
||||
In addition to the href of the service, you can also specify the target location in which to open that link. See [Link Target](settings.md#link-target) for more details.
|
||||
|
||||
|
||||
@@ -101,30 +101,50 @@ To use a local icon, first create a Docker mount to `/app/public/icons` and then
|
||||
|
||||
## Ping
|
||||
|
||||
Services may have an optional `ping` property that allows you to monitor the availability of an endpoint you chose and have the response time displayed. You do not need to set your ping URL equal to your href URL.
|
||||
|
||||
!!! note
|
||||
|
||||
The ping feature works by making an http `HEAD` request to the URL, and falls back to `GET` in case that fails. It will not, for example, login if the URL requires auth or is behind e.g. Authelia. In the case of a reverse proxy and/or auth this usually requires the use of an 'internal' URL to make the ping feature correctly display status.
|
||||
Services may have an optional `ping` property that allows you to monitor the availability of an external host. As of v0.8.0, the ping feature attempts to use a true (ICMP) ping command on the underlying host.
|
||||
|
||||
```yaml
|
||||
- Group A:
|
||||
- Sonarr:
|
||||
icon: sonarr.png
|
||||
href: http://sonarr.host/
|
||||
ping: http://sonarr.host/
|
||||
ping: sonarr.host
|
||||
|
||||
- Group B:
|
||||
- Radarr:
|
||||
icon: radarr.png
|
||||
href: http://radarr.host/
|
||||
ping: http://some.other.host/
|
||||
ping: some.other.host
|
||||
```
|
||||
|
||||
<img width="1038" alt="Ping" src="https://github.com/benphelps/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
|
||||
<img width="1038" alt="Ping" src="https://github.com/gethomepage/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
|
||||
|
||||
You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
|
||||
|
||||
## Site Monitor
|
||||
|
||||
Services may have an optional `siteMonitor` property (formerly `ping`) that allows you to monitor the availability of a URL you chose and have the response time displayed. You do not need to set your monitor URL equal to your href or ping URL.
|
||||
|
||||
!!! note
|
||||
|
||||
The site monitor feature works by making an http `HEAD` request to the URL, and falls back to `GET` in case that fails. It will not, for example, login if the URL requires auth or is behind e.g. Authelia. In the case of a reverse proxy and/or auth this usually requires the use of an 'internal' URL to make the site monitor feature correctly display status.
|
||||
|
||||
```yaml
|
||||
- Group A:
|
||||
- Sonarr:
|
||||
icon: sonarr.png
|
||||
href: http://sonarr.host/
|
||||
siteMonitor: http://sonarr.host/
|
||||
|
||||
- Group B:
|
||||
- Radarr:
|
||||
icon: radarr.png
|
||||
href: http://radarr.host/
|
||||
siteMonitor: http://some.other.host/
|
||||
```
|
||||
|
||||
You can also apply different styles to the site monitor indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
|
||||
|
||||
## Docker Integration
|
||||
|
||||
Services may be connected to a Docker container, either running on the local machine, or a remote machine.
|
||||
@@ -145,7 +165,7 @@ Services may be connected to a Docker container, either running on the local mac
|
||||
container: other-container
|
||||
```
|
||||
|
||||
<img width="1038" alt="Service Containers" src="https://github.com/benphelps/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
|
||||
<img width="1038" alt="Service Containers" src="https://github.com/gethomepage/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
|
||||
|
||||
**Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.**
|
||||
|
||||
@@ -153,7 +173,7 @@ Services may be connected to a Docker container, either running on the local mac
|
||||
|
||||
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
|
||||
|
||||
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/benphelps/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
|
||||
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/gethomepage/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
|
||||
|
||||
## Service Integrations
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ background:
|
||||
|
||||
### Card Background Blur
|
||||
|
||||
You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the backround blur, saturate and brightness filters.
|
||||
You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters.
|
||||
|
||||
```yaml
|
||||
cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur
|
||||
@@ -329,7 +329,7 @@ You can then pass `provider` instead of `apiKey` in your widget configuration.
|
||||
|
||||
## Quick Launch
|
||||
|
||||
You can use the 'Quick Launch' feature to search services, perform a web search or open a URL. To use Quick Launch, just start typing while on your homepage (as long as the search widget doesnt have focus).
|
||||
You can use the 'Quick Launch' feature to search services, perform a web search or open a URL. To use Quick Launch, just start typing while on your homepage (as long as the search widget doesn't have focus).
|
||||
|
||||
<img width="1000" alt="quicklaunch" src="https://user-images.githubusercontent.com/4887959/216880811-90ff72cb-2990-4475-889b-7c3a31e6beef.png">
|
||||
|
||||
@@ -382,16 +382,16 @@ If you have both set the per-service settings take precedence.
|
||||
|
||||
## Status Style
|
||||
|
||||
You can choose from the following styles for docker or k8s status and ping: `dot` or `basic`
|
||||
You can choose from the following styles for docker or k8s status, site monitor and ping: `dot` or `basic`
|
||||
|
||||
- The default is no value, and displays the ping response time in ms and the docker / k8s container status
|
||||
- `dot` shows a green dot for a successful ping or healthy status.
|
||||
- `basic` shows either UP or DOWN for ping
|
||||
- The default is no value, and displays the montior and ping response time in ms and the docker / k8s container status
|
||||
- `dot` shows a green dot for a successful monitor ping or healthy status.
|
||||
- `basic` shows either UP or DOWN for monitor & ping
|
||||
|
||||
For example:
|
||||
|
||||
```yaml
|
||||
statusStyle: 'dot'
|
||||
statusStyle: "dot"
|
||||
```
|
||||
|
||||
or per-service (`services.yaml`) with:
|
||||
@@ -422,4 +422,4 @@ or per service widget (`services.yaml`) with:
|
||||
hideErrors: true
|
||||
```
|
||||
|
||||
If either value is set to true, the errror message will be hidden.
|
||||
If either value is set to true, the error message will be hidden.
|
||||
|
||||
@@ -9,7 +9,7 @@ Using docker compose:
|
||||
version: "3.3"
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/benphelps/homepage:latest
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
ports:
|
||||
- 3000:3000
|
||||
@@ -30,7 +30,7 @@ In the docker compose example below, the environment variables `$PUID` and `$PGI
|
||||
version: "3.3"
|
||||
services:
|
||||
homepage:
|
||||
image: ghcr.io/benphelps/homepage:latest
|
||||
image: ghcr.io/gethomepage/homepage:latest
|
||||
container_name: homepage
|
||||
ports:
|
||||
- 3000:3000
|
||||
@@ -45,7 +45,7 @@ services:
|
||||
### With Docker Run
|
||||
|
||||
```bash
|
||||
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/benphelps/homepage:latest
|
||||
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
|
||||
```
|
||||
|
||||
### Using Environment Secrets
|
||||
|
||||
@@ -291,17 +291,39 @@ spec:
|
||||
enableServiceLinks: true
|
||||
containers:
|
||||
- name: homepage
|
||||
image: "ghcr.io/benphelps/homepage:latest"
|
||||
image: "ghcr.io/gethomepage/homepage:latest"
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 3000
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: homepage-config
|
||||
mountPath: /app/config
|
||||
- name: logs
|
||||
mountPath: /app/config/logs
|
||||
- mountPath: /app/config/custom.js
|
||||
name: homepage-config
|
||||
subPath: custom.js
|
||||
- mountPath: /app/config/custom.css
|
||||
name: homepage-config
|
||||
subPath: custom.css
|
||||
- mountPath: /app/config/bookmarks.yaml
|
||||
name: homepage-config
|
||||
subPath: bookmarks.yaml
|
||||
- mountPath: /app/config/docker.yaml
|
||||
name: homepage-config
|
||||
subPath: docker.yaml
|
||||
- mountPath: /app/config/kubernetes.yaml
|
||||
name: homepage-config
|
||||
subPath: kubernetes.yaml
|
||||
- mountPath: /app/config/services.yaml
|
||||
name: homepage-config
|
||||
subPath: services.yaml
|
||||
- mountPath: /app/config/settings.yaml
|
||||
name: homepage-config
|
||||
subPath: settings.yaml
|
||||
- mountPath: /app/config/widgets.yaml
|
||||
name: homepage-config
|
||||
subPath: widgets.yaml
|
||||
- mountPath: /app/config/logs
|
||||
name: logs
|
||||
volumes:
|
||||
- name: homepage-config
|
||||
configMap:
|
||||
|
||||
@@ -6,7 +6,7 @@ description: Install and run homepage from source
|
||||
First, clone the repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/benphelps/homepage.git
|
||||
git clone https://github.com/gethomepage/homepage.git
|
||||
```
|
||||
|
||||
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
||||
|
||||
@@ -31,6 +31,14 @@ Once dependencies have been installed you can lint your code with
|
||||
pnpm lint
|
||||
```
|
||||
|
||||
## Code formatting with pre-commit hooks
|
||||
|
||||
To ensure a consistent style and formatting across the project source, the project utilizes Git [`pre-commit`](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) hooks to perform some formatting and linting before a commit is allowed.
|
||||
|
||||
Once installed, hooks will run when you commit. If the formatting isn't quite right, the commit will be rejected and you'll need to look at the output and fix the issue. Most hooks will automatically format failing files, so all you need to do is `git add` those files again and retry your commit.
|
||||
|
||||
See the [pre-commit documentation](https://pre-commit.com/#install) to get started.
|
||||
|
||||
## Service Widget Guidelines
|
||||
|
||||
To ensure cohesiveness of various widgets, the following should be used as a guide for developing new widgets:
|
||||
|
||||
@@ -3,6 +3,6 @@ title: Homepage Move
|
||||
description: Homepage Container Deprecation
|
||||
---
|
||||
|
||||
As of v0.7.1 homepage migrated from benphelps/homepage to an "orgnization" located at gethomepage/homepage. The reason for this is to setup the project for longevity and allow for community maintenance.
|
||||
As of v0.7.2 homepage migrated from benphelps/homepage to an "organization" repository located at [gethomepage/homepage](https://github.com/gethomepage/homepage/). The reason for this was to setup the project for longevity and allow for community maintenance.
|
||||
|
||||
Migrating your installation should be as simple as changing `image: ghcr.io/benphelps/homepage:latest` to `image: ghcr.io/gethomepage/homepage:latest`.
|
||||
@@ -3,12 +3,17 @@ title: Translations
|
||||
description: Contributing Translations
|
||||
---
|
||||
|
||||
Homepage is developed in English, most other supported languages are provided via Google Translate. When a i18n key is not found, the fallback language is English.
|
||||
Homepage is developed in English, component contributions must be in English. All translations are community provided, so a huge thanks go out to all those who have helped out so far!
|
||||
|
||||
## Support Translations
|
||||
|
||||
If you'd like to lend a hand in translating Homepage into more languages, or to improve existing translations, the process is very simple.
|
||||
If you'd like to lend a hand in translating Homepage into more languages, or to improve existing translations, the process is very simple:
|
||||
|
||||
Everything can be done from a simple to use web interface here: https://hosted.weblate.org/projects/homepage/homepage/
|
||||
1. Create a free account at [Crowdin](https://crowdin.com/join)
|
||||
2. Visit the [Homepage project](https://crowdin.com/project/gethomepage)
|
||||
3. Select the language you'd like to translate
|
||||
4. Start translating!
|
||||
|
||||
When creating a new language, it can take 5 to 10 minutes before you'll see translatable strings added, but the process _is_ automatic. Once the strings are added, you can then start translating them.
|
||||
## Adding a new language
|
||||
|
||||
If you'd like to add a new language, please [create a new Discussion on Crowdin](https://crowdin.com/project/gethomepage/discussions), and we'll add it to the project.
|
||||
|
||||
@@ -29,7 +29,9 @@ All service widgets work essentially the same, that is, homepage makes a proxied
|
||||
|
||||
3. If you have verified that homepage can in fact reach the service then you can also check the API output using e.g. `curl`, which is often helpful if you do need to file a bug report. Again, depending on your networking setup this may need to be run from _inside the container_ as IP / hostname resolution can differ inside vs outside.
|
||||
|
||||
_Note: `curl` is not installed in the base image by default but can be added inside the container with `apk add curl`._
|
||||
!!! note
|
||||
|
||||
`curl` is not installed in the base image by default but can be added inside the container with `apk add curl`.
|
||||
|
||||
The exact API endpoints and authentication vary of course, but in many cases instructions can be found by searching the web or if you feel comfortable looking at the homepage source code (e.g. `src/widgets/{widget}/widget.js`).
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ title: OpenWeatherMap
|
||||
description: OpenWeatherMap Information Widget Configuration
|
||||
---
|
||||
|
||||
The free tier "One Call API" is all thats required, you will need to [subscribe](https://home.openweathermap.org/subscriptions/unauth_subscribe/onecall_30/base) and grab your API key.
|
||||
The free tier "One Call API" is all that's required, you will need to [subscribe](https://home.openweathermap.org/subscriptions/unauth_subscribe/onecall_30/base) and grab your API key.
|
||||
|
||||
```yaml
|
||||
- openweathermap:
|
||||
|
||||
@@ -9,7 +9,7 @@ The disk path is the path reported by `df` (Mounted On), or the mount point of t
|
||||
|
||||
The cpu and memory resource information are the container's usage while [glances](glances.md) displays statistics for the host machine on which it is installed.
|
||||
|
||||
_Note: unfortunately, the package used for getting CPU temp ([systeminformation](https://systeminformation.io)) is not compatibile with some setups and will not report any value(s) for CPU temp._
|
||||
_Note: unfortunately, the package used for getting CPU temp ([systeminformation](https://systeminformation.io)) is not compatible with some setups and will not report any value(s) for CPU temp._
|
||||
|
||||
**Any disk you wish to access must be mounted to your container as a volume.**
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ description: Weather API Information Widget Configuration
|
||||
|
||||
**Note: this widget is considered 'deprecated' since there is no longer a free Weather API tier for new members. See the openmeteo or openweathermap widgets for alternatives.**
|
||||
|
||||
The free tier is all thats required, you will need to [register](https://www.weatherapi.com/signup.aspx) and grab your API key.
|
||||
The free tier is all that's required, you will need to [register](https://www.weatherapi.com/signup.aspx) and grab your API key.
|
||||
|
||||
```yaml
|
||||
- weatherapi:
|
||||
|
||||
@@ -3,6 +3,8 @@ title: Calendar
|
||||
description: Calendar widget
|
||||
---
|
||||
|
||||
## Monthly view
|
||||
|
||||
<img alt="calendar" src="https://user-images.githubusercontent.com/5442891/271131282-6767a3ea-573e-4005-aeb9-6e14ee01e845.png">
|
||||
|
||||
This widget shows monthly calendar, with optional integrations to show events from supported widgets.
|
||||
@@ -11,6 +13,8 @@ This widget shows monthly calendar, with optional integrations to show events fr
|
||||
widget:
|
||||
type: calendar
|
||||
firstDayInWeek: sunday # optional - defaults to monday
|
||||
view: monthly # optional - possible values monthly, agenda
|
||||
maxEvents: 10 # optional - defaults to 10
|
||||
integrations: # optional
|
||||
- type: sonarr # active widget type that is currently enabled on homepage - possible values: radarr, sonarr, lidarr, readarr
|
||||
service_group: Media # group name where widget exists
|
||||
@@ -20,6 +24,20 @@ widget:
|
||||
unmonitored: true # optional - defaults to false, used with *arr stack
|
||||
```
|
||||
|
||||
## Agenda
|
||||
|
||||
This view shows only list of events from configured integrations
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: calendar
|
||||
view: agenda
|
||||
maxEvents: 10 # optional - defaults to 10
|
||||
integrations: # same as in Monthly view example
|
||||
```
|
||||
|
||||
## Integrations
|
||||
|
||||
Currently integrated widgets are [sonarr](sonarr.md), [radarr](radarr.md), [lidarr](lidarr.md) and [readarr](readarr.md).
|
||||
|
||||
Supported colors can be found on [color palette](../../configs/settings.md#color-palette).
|
||||
|
||||
@@ -13,6 +13,7 @@ widget:
|
||||
currency: GBP # Optional
|
||||
symbols: [BTC, LTC, ETH]
|
||||
key: apikeyapikeyapikeyapikeyapikey
|
||||
defaultinterval: 7d # Optional
|
||||
```
|
||||
|
||||
You can also specify slugs instead of symbols (since symbols aren't garaunteed to be unique). If you supply both, slugs will be used. For example:
|
||||
|
||||
@@ -31,9 +31,13 @@ widget:
|
||||
another: key3
|
||||
label: Field 3
|
||||
format: percent # optional - defaults to text
|
||||
- field: key # needs to be YAML string or object
|
||||
label: Field 4
|
||||
format: date # optional - defaults to text
|
||||
dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`.
|
||||
```
|
||||
|
||||
Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes` and `bitrate`.
|
||||
Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes`, `bitrate` and `date`.
|
||||
|
||||
## Example
|
||||
|
||||
@@ -60,7 +64,7 @@ For the following JSON object from the API:
|
||||
}
|
||||
```
|
||||
|
||||
Define the `mappings` section as an aray, for example:
|
||||
Define the `mappings` section as an array, for example:
|
||||
|
||||
```yaml
|
||||
mappings:
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Glances
|
||||
description: Glances Widget Configuration
|
||||
---
|
||||
|
||||
<img width="1614" alt="glances" src="https://github.com/benphelps/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c">
|
||||
<img width="1614" alt="glances" src="https://github-production-user-asset-6210df.s3.amazonaws.com/82196/257382012-25648c97-2c1b-4db0-b5a5-f1509806079c.png">
|
||||
|
||||
_(Find the Glances information widget [here](../info/glances.md))_
|
||||
|
||||
@@ -18,7 +18,7 @@ widget:
|
||||
metric: cpu
|
||||
```
|
||||
|
||||
_Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achive the same effect as the examples above, see as an example:_
|
||||
_Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_
|
||||
|
||||
```yaml
|
||||
- CPU Usage:
|
||||
@@ -45,23 +45,23 @@ The metric field in the configuration determines the type of system monitoring d
|
||||
|
||||
`process`: Top 5 processes based on CPU usage. Gives an overview of which processes are consuming the most resources.
|
||||
|
||||
`network:<interface_name>`: Network data usage for the specified interface. Replace `<interface_name>` with the name of your network interface, e.g., `network:enp0s25`, as specificed in glances.
|
||||
`network:<interface_name>`: Network data usage for the specified interface. Replace `<interface_name>` with the name of your network interface, e.g., `network:enp0s25`, as specified in glances.
|
||||
|
||||
`sensor:<sensor_id>`: Temperature of the specified sensor, typically used to monitor CPU temperature. Replace `<sensor_id>` with the name of your sensor, e.g., `sensor:Package id 0` as specificed in glances.
|
||||
`sensor:<sensor_id>`: Temperature of the specified sensor, typically used to monitor CPU temperature. Replace `<sensor_id>` with the name of your sensor, e.g., `sensor:Package id 0` as specified in glances.
|
||||
|
||||
`disk:<disk_id>`: Disk I/O data for the specified disk. Replace `<disk_id>` with the id of your disk, e.g., `disk:sdb`, as specificed in glances.
|
||||
`disk:<disk_id>`: Disk I/O data for the specified disk. Replace `<disk_id>` with the id of your disk, e.g., `disk:sdb`, as specified in glances.
|
||||
|
||||
`gpu:<gpu_id>`: GPU usage for the specified GPU. Replace `<gpu_id>` with the id of your GPU, e.g., `gpu:0`, as specificed in glances.
|
||||
`gpu:<gpu_id>`: GPU usage for the specified GPU. Replace `<gpu_id>` with the id of your GPU, e.g., `gpu:0`, as specified in glances.
|
||||
|
||||
`fs:<mnt_point>`: Disk usage for the specified mount point. Replace `<mnt_point>` with the path of your disk, e.g., `/mnt/storage`, as specificed in glances.
|
||||
`fs:<mnt_point>`: Disk usage for the specified mount point. Replace `<mnt_point>` with the path of your disk, e.g., `/mnt/storage`, as specified in glances.
|
||||
|
||||
## Views
|
||||
|
||||
All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view.
|
||||
|
||||
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48 PM" src="https://github.com/benphelps/homepage-docs/assets/82196/cc6b9adc-4218-4274-96ca-36c3e64de5d0">
|
||||
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48 PM" src="https://github-production-user-asset-6210df.s3.amazonaws.com/82196/265985295-cc6b9adc-4218-4274-96ca-36c3e64de5d0.png">
|
||||
|
||||
To switch to the alternative "graphless" view, simply passs `chart: false` as an option to the widget, like so:
|
||||
To switch to the alternative "graphless" view, simply pass `chart: false` as an option to the widget, like so:
|
||||
|
||||
```yaml
|
||||
- Network Usage:
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Gluetun
|
||||
description: Gluetun Widget Configuration
|
||||
---
|
||||
|
||||
Requires [HTTP control server options](https://github.com/qdm12/gluetun/wiki/HTTP-control-server-options) to be enabled.
|
||||
Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled.
|
||||
|
||||
Allowed fields: `["public_ip", "region", "country"]`.
|
||||
|
||||
|
||||
12
docs/widgets/services/hdhomerun.md
Normal file
12
docs/widgets/services/hdhomerun.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: HDHomerun
|
||||
description: HDHomerun Widget Configuration
|
||||
---
|
||||
|
||||
Allowed fields: `["channels", "hd"]`.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: hdhomerun
|
||||
url: http://hdhomerun.host.or.ip
|
||||
```
|
||||
35
docs/widgets/services/iframe.md
Normal file
35
docs/widgets/services/iframe.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: iFrame
|
||||
Description: Add a custom iFrame Widget
|
||||
---
|
||||
|
||||
A basic iFrame widget to show external content, see the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) for more details about some of the options.
|
||||
|
||||
!!! warning
|
||||
|
||||
Requests made via the iFrame widget are inherently **not proxied** as they are made from the browser itself.
|
||||
|
||||
## Basic Example
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: iframe
|
||||
name: myIframe
|
||||
src: http://example.com
|
||||
```
|
||||
|
||||
## Full Example
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: iframe
|
||||
name: myIframe
|
||||
src: http://example.com
|
||||
classes: h-60 sm:h-60 md:h-60 lg:h-60 xl:h-60 2xl:h-72 # optional, use tailwind height classes, see https://tailwindcss.com/docs/height
|
||||
referrerPolicy: same-origin # optional, no default
|
||||
allowPolicy: autoplay fullscreen gamepad # optional, no default
|
||||
allowFullscreen: false # optional, default: true
|
||||
loadingStrategy: eager # optional, default: eager
|
||||
allowScrolling: no # optional, default: yes
|
||||
refreshInterval: 2000 # optional, no default
|
||||
```
|
||||
@@ -3,7 +3,7 @@ title: MJPEG
|
||||
description: MJPEG Stream Widget Configuration
|
||||
---
|
||||
|
||||

|
||||

|
||||
|
||||
Pass the stream URL from a service like [µStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer).
|
||||
|
||||
|
||||
@@ -14,4 +14,4 @@ widget:
|
||||
key: yourpiholeapikey # optional
|
||||
```
|
||||
|
||||
_Added in v0.1.0, udpated in v0.6.18_
|
||||
_Added in v0.1.0, updated in v0.6.18_
|
||||
|
||||
@@ -3,7 +3,7 @@ title: Syncthing Relay Server
|
||||
description: Syncthing Relay Server Widget Configuration
|
||||
---
|
||||
|
||||
Pulls stats from the [relay server](https://docs.syncthing.net/users/strelaysrv.html). [See here](https://github.com/benphelps/homepage/pull/230#issuecomment-1253053472) for more information on configuration.
|
||||
Pulls stats from the [relay server](https://docs.syncthing.net/users/strelaysrv.html). [See here](https://github.com/gethomepage/homepage/pull/230#issuecomment-1253053472) for more information on configuration.
|
||||
|
||||
Allowed fields: `["numActiveSessions", "numConnections", "bytesProxied"]`.
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./src/",
|
||||
}
|
||||
},
|
||||
"include": ["src/**/*"]
|
||||
}
|
||||
1
k3d/.gitignore
vendored
1
k3d/.gitignore
vendored
@@ -1,2 +1 @@
|
||||
kubeconfig
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ All the commands in the document should be run from the `k3d` directory.
|
||||
## Requisite Tools
|
||||
|
||||
| Tool | Description |
|
||||
|-------------------------------------------------------------|----------------------------------------------------------|
|
||||
| ----------------------------------------------------------- | -------------------------------------------------------- |
|
||||
| [docker](https://docker.io) | Docker container runtime |
|
||||
| [kubectl](https://kubernetes.io/releases/download/#kubectl) | Kubernetes CLI |
|
||||
| [helm](https://helm.sh) | Kubernetes package manager |
|
||||
@@ -20,7 +20,6 @@ All the commands in the document should be run from the `k3d` directory.
|
||||
| [tilt](https://tilt.dev) | (Optional) Local CI loop for kubernetes deployment |
|
||||
| [direnv](https://direnv.net/) | (Optional) Automatically loads `kubeconfig` via `.envrc` |
|
||||
|
||||
|
||||
## One-off Test Deployments
|
||||
|
||||
Create a cluster:
|
||||
@@ -57,7 +56,7 @@ tilt up
|
||||
|
||||
Press space bar to open the tilt web UI, which is quite informative.
|
||||
|
||||
Open the Homepage deployment:
|
||||
Finally, open the Homepage deployment:
|
||||
|
||||
```sh
|
||||
xdg-open http://homepage.k3d.localhost:8080/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
## Requirements
|
||||
|
||||
* Kubernetes 1.19+
|
||||
* Metrics service
|
||||
* An Ingress controller
|
||||
- Kubernetes 1.19+
|
||||
- Metrics service
|
||||
- An Ingress controller
|
||||
|
||||
## Deployment
|
||||
|
||||
@@ -98,7 +98,7 @@ be configured on the service entry.
|
||||
This works by creating a label selector `app.kubernetes.io/name=home-assistant`,
|
||||
which typically will be the same both for the ingress and the deployment. However,
|
||||
some deployments can be complex and will not conform to this rule. In such
|
||||
cases the `podSelector` variable can bridge the gap. Any field selector can
|
||||
cases the `pod-selector` variable can bridge the gap. Any field selector can
|
||||
be used in it which allows for some powerful selection capabilities.
|
||||
|
||||
For instance, it can be utilized to roll multiple underlying deployments under
|
||||
@@ -112,7 +112,7 @@ one application to see a high-level aggregate:
|
||||
description: Matrix Synapse Powered Chat
|
||||
app: matrix-element
|
||||
namespace: comms
|
||||
podSelector: >-
|
||||
pod-selector: >-
|
||||
app.kubernetes.io/instance in (
|
||||
matrix-element,
|
||||
matrix-media-repo,
|
||||
|
||||
13
mkdocs.yml
13
mkdocs.yml
@@ -4,9 +4,9 @@ site_name: homepage
|
||||
site_url: https://gethomepage.dev/
|
||||
|
||||
# Repository
|
||||
repo_name: benphelps/homepage
|
||||
repo_url: https://github.com/benphelps/homepage
|
||||
edit_uri: https://github.com/benphelps/homepage/tree/main/docs/
|
||||
repo_name: gethomepage/homepage
|
||||
repo_url: https://github.com/gethomepage/homepage
|
||||
edit_uri: https://github.com/gethomepage/homepage/tree/main/docs/
|
||||
|
||||
nav:
|
||||
- "Home":
|
||||
@@ -59,9 +59,11 @@ nav:
|
||||
- widgets/services/gluetun.md
|
||||
- widgets/services/gotify.md
|
||||
- widgets/services/grafana.md
|
||||
- widgets/services/hdhomerun.md
|
||||
- widgets/services/healthchecks.md
|
||||
- widgets/services/homeassistant.md
|
||||
- widgets/services/homebridge.md
|
||||
- widgets/services/iframe.md
|
||||
- widgets/services/immich.md
|
||||
- widgets/services/jackett.md
|
||||
- widgets/services/jdownloader.md
|
||||
@@ -149,6 +151,7 @@ nav:
|
||||
- more/index.md
|
||||
- more/development.md
|
||||
- more/translations.md
|
||||
- more/homepage-move.md
|
||||
|
||||
theme:
|
||||
name: material
|
||||
@@ -196,9 +199,9 @@ extra:
|
||||
- icon: fontawesome/brands/discord
|
||||
link: https://discord.gg/k4ruYNrudu
|
||||
- icon: fontawesome/regular/message
|
||||
link: https://github.com/benphelps/homepage/discussions
|
||||
link: https://github.com/gethomepage/homepage/discussions
|
||||
- icon: fontawesome/brands/github
|
||||
link: https://github.com/benphelps/homepage
|
||||
link: https://github.com/gethomepage/homepage
|
||||
|
||||
markdown_extensions:
|
||||
- pymdownx.highlight:
|
||||
|
||||
@@ -69,7 +69,7 @@ function prettyBytes(number, options) {
|
||||
|
||||
const exponent = Math.min(
|
||||
Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3),
|
||||
UNITS.length - 1
|
||||
UNITS.length - 1,
|
||||
);
|
||||
number /= (options.binary ? 1024 : 1000) ** exponent;
|
||||
|
||||
@@ -94,13 +94,18 @@ module.exports = {
|
||||
{
|
||||
init: (i18next) => {
|
||||
i18next.services.formatter.add("bytes", (value, lng, options) =>
|
||||
prettyBytes(parseFloat(value), { locale: lng, ...options })
|
||||
prettyBytes(parseFloat(value), { locale: lng, ...options }),
|
||||
);
|
||||
|
||||
i18next.services.formatter.add("rate", (value, lng, options) => {
|
||||
|
||||
const k = options.binary ? 1024 : 1000;
|
||||
const sizes = options.bits ? (options.binary ? BIBIT_UNITS : BIT_UNITS) : (options.binary ? BIBYTE_UNITS : BYTE_UNITS);
|
||||
const sizes = options.bits
|
||||
? options.binary
|
||||
? BIBIT_UNITS
|
||||
: BIT_UNITS
|
||||
: options.binary
|
||||
? BIBYTE_UNITS
|
||||
: BYTE_UNITS;
|
||||
|
||||
if (value === 0) return `0 ${sizes[0]}/s`;
|
||||
|
||||
@@ -109,14 +114,17 @@ module.exports = {
|
||||
const i = options.binary ? 2 : Math.floor(Math.log(value) / Math.log(k));
|
||||
|
||||
const formatted = new Intl.NumberFormat(lng, { maximumFractionDigits: dm, minimumFractionDigits: dm }).format(
|
||||
parseFloat(value / k ** i)
|
||||
parseFloat(value / k ** i),
|
||||
);
|
||||
|
||||
return `${formatted} ${sizes[i]}/s`;
|
||||
});
|
||||
|
||||
i18next.services.formatter.add("percent", (value, lng, options) =>
|
||||
new Intl.NumberFormat(lng, { style: "percent", ...options }).format(parseFloat(value) / 100.0)
|
||||
new Intl.NumberFormat(lng, { style: "percent", ...options }).format(parseFloat(value) / 100.0),
|
||||
);
|
||||
i18next.services.formatter.add("date", (value, lng, options) =>
|
||||
new Intl.DateTimeFormat(lng, { ...options }).format(new Date(value)),
|
||||
);
|
||||
},
|
||||
type: "3rdParty",
|
||||
|
||||
35
package-lock.json
generated
35
package-lock.json
generated
@@ -23,6 +23,7 @@
|
||||
"minecraft-ping-js": "^1.0.2",
|
||||
"next": "^12.3.1",
|
||||
"next-i18next": "^12.0.1",
|
||||
"ping": "^0.4.4",
|
||||
"pretty-bytes": "^6.0.0",
|
||||
"raw-body": "^2.5.1",
|
||||
"react": "^18.2.0",
|
||||
@@ -30,7 +31,6 @@
|
||||
"react-i18next": "^11.18.6",
|
||||
"react-icons": "^4.4.0",
|
||||
"recharts": "^2.7.2",
|
||||
"shvl": "^3.0.0",
|
||||
"swr": "^1.3.0",
|
||||
"systeminformation": "^5.17.12",
|
||||
"tough-cookie": "^4.1.2",
|
||||
@@ -44,14 +44,14 @@
|
||||
"eslint": "^8.24.0",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-next": "^12.3.1",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.6.1",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-react": "^7.31.8",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"postcss": "^8.4.16",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier": "^3.0.3",
|
||||
"tailwind-scrollbar": "^2.0.1",
|
||||
"tailwindcss": "^3.1.8",
|
||||
"typescript": "^4.8.3"
|
||||
@@ -2264,9 +2264,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-config-prettier": {
|
||||
"version": "8.8.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
|
||||
"integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
|
||||
"integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"eslint-config-prettier": "bin/cli.js"
|
||||
@@ -4862,6 +4862,14 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ping": {
|
||||
"version": "0.4.4",
|
||||
"resolved": "https://registry.npmjs.org/ping/-/ping-0.4.4.tgz",
|
||||
"integrity": "sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==",
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pirates": {
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
|
||||
@@ -5008,15 +5016,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "2.8.7",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
|
||||
"integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
|
||||
"integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin-prettier.js"
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||
@@ -5628,11 +5636,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/shvl": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shvl/-/shvl-3.0.0.tgz",
|
||||
"integrity": "sha512-5IomAM3ykE/g9K9L6lhODc+TpCuN03rrhlboegeKyyfh66DDdpRD5JN37DYhNHH+RaYjiIDx64K/Ms/xQYOR5w=="
|
||||
},
|
||||
"node_modules/side-channel": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
"minecraft-ping-js": "^1.0.2",
|
||||
"next": "^12.3.1",
|
||||
"next-i18next": "^12.0.1",
|
||||
"ping": "^0.4.4",
|
||||
"pretty-bytes": "^6.0.0",
|
||||
"raw-body": "^2.5.1",
|
||||
"react": "^18.2.0",
|
||||
@@ -32,7 +33,6 @@
|
||||
"react-i18next": "^11.18.6",
|
||||
"react-icons": "^4.4.0",
|
||||
"recharts": "^2.7.2",
|
||||
"shvl": "^3.0.0",
|
||||
"swr": "^1.3.0",
|
||||
"systeminformation": "^5.17.12",
|
||||
"tough-cookie": "^4.1.2",
|
||||
@@ -46,14 +46,14 @@
|
||||
"eslint": "^8.24.0",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-next": "^12.3.1",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.6.1",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-react": "^7.31.8",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"postcss": "^8.4.16",
|
||||
"prettier": "^2.7.1",
|
||||
"prettier": "^3.0.3",
|
||||
"tailwind-scrollbar": "^2.0.1",
|
||||
"tailwindcss": "^3.1.8",
|
||||
"typescript": "^4.8.3"
|
||||
|
||||
42
pnpm-lock.yaml
generated
42
pnpm-lock.yaml
generated
@@ -50,6 +50,9 @@ dependencies:
|
||||
next-i18next:
|
||||
specifier: ^12.0.1
|
||||
version: 12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.2.0)
|
||||
ping:
|
||||
specifier: ^0.4.4
|
||||
version: 0.4.4
|
||||
pretty-bytes:
|
||||
specifier: ^6.0.0
|
||||
version: 6.1.0
|
||||
@@ -71,9 +74,6 @@ dependencies:
|
||||
recharts:
|
||||
specifier: ^2.7.2
|
||||
version: 2.7.2(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0)
|
||||
shvl:
|
||||
specifier: ^3.0.0
|
||||
version: 3.0.0
|
||||
swr:
|
||||
specifier: ^1.3.0
|
||||
version: 1.3.0(react@18.2.0)
|
||||
@@ -115,8 +115,8 @@ devDependencies:
|
||||
specifier: ^12.3.1
|
||||
version: 12.3.4(eslint@8.37.0)(typescript@4.9.5)
|
||||
eslint-config-prettier:
|
||||
specifier: ^8.5.0
|
||||
version: 8.8.0(eslint@8.37.0)
|
||||
specifier: ^9.0.0
|
||||
version: 9.0.0(eslint@8.37.0)
|
||||
eslint-plugin-import:
|
||||
specifier: ^2.26.0
|
||||
version: 2.27.5(@typescript-eslint/parser@5.57.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.37.0)
|
||||
@@ -125,7 +125,7 @@ devDependencies:
|
||||
version: 6.7.1(eslint@8.37.0)
|
||||
eslint-plugin-prettier:
|
||||
specifier: ^4.2.1
|
||||
version: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7)
|
||||
version: 4.2.1(eslint-config-prettier@9.0.0)(eslint@8.37.0)(prettier@3.0.3)
|
||||
eslint-plugin-react:
|
||||
specifier: ^7.31.8
|
||||
version: 7.32.2(eslint@8.37.0)
|
||||
@@ -136,8 +136,8 @@ devDependencies:
|
||||
specifier: ^8.4.16
|
||||
version: 8.4.21
|
||||
prettier:
|
||||
specifier: ^2.7.1
|
||||
version: 2.8.7
|
||||
specifier: ^3.0.3
|
||||
version: 3.0.3
|
||||
tailwind-scrollbar:
|
||||
specifier: ^2.0.1
|
||||
version: 2.1.0(tailwindcss@3.3.0)
|
||||
@@ -1503,8 +1503,8 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/eslint-config-prettier@8.8.0(eslint@8.37.0):
|
||||
resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==}
|
||||
/eslint-config-prettier@9.0.0(eslint@8.37.0):
|
||||
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
eslint: '>=7.0.0'
|
||||
@@ -1628,7 +1628,7 @@ packages:
|
||||
semver: 6.3.0
|
||||
dev: true
|
||||
|
||||
/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7):
|
||||
/eslint-plugin-prettier@4.2.1(eslint-config-prettier@9.0.0)(eslint@8.37.0)(prettier@3.0.3):
|
||||
resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
peerDependencies:
|
||||
@@ -1640,8 +1640,8 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
eslint: 8.37.0
|
||||
eslint-config-prettier: 8.8.0(eslint@8.37.0)
|
||||
prettier: 2.8.7
|
||||
eslint-config-prettier: 9.0.0(eslint@8.37.0)
|
||||
prettier: 3.0.3
|
||||
prettier-linter-helpers: 1.0.0
|
||||
dev: true
|
||||
|
||||
@@ -3106,6 +3106,11 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/ping@0.4.4:
|
||||
resolution: {integrity: sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==}
|
||||
engines: {node: '>=4.0.0'}
|
||||
dev: false
|
||||
|
||||
/pirates@4.0.5:
|
||||
resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
|
||||
engines: {node: '>= 6'}
|
||||
@@ -3206,9 +3211,10 @@ packages:
|
||||
fast-diff: 1.2.0
|
||||
dev: true
|
||||
|
||||
/prettier@2.8.7:
|
||||
resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
/prettier@3.0.3:
|
||||
resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
|
||||
engines: {node: '>=14'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/pretty-bytes@6.1.0:
|
||||
@@ -3614,10 +3620,6 @@ packages:
|
||||
rechoir: 0.6.2
|
||||
dev: false
|
||||
|
||||
/shvl@3.0.0:
|
||||
resolution: {integrity: sha512-5IomAM3ykE/g9K9L6lhODc+TpCuN03rrhlboegeKyyfh66DDdpRD5JN37DYhNHH+RaYjiIDx64K/Ms/xQYOR5w==}
|
||||
dev: false
|
||||
|
||||
/side-channel@1.0.4:
|
||||
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
|
||||
dependencies:
|
||||
|
||||
@@ -3,4 +3,4 @@ module.exports = {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "خطأ",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "إجتاز",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"ping": "Ping",
|
||||
"error": "Грешка"
|
||||
"error": "Грешка",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Aprobat",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Chyba",
|
||||
"ping": "Odezva"
|
||||
"ping": "Odezva",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Úspěšné",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -136,7 +136,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Σφάλμα",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Παίζει",
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
"ms": "{{value, number}}",
|
||||
"date": "{{value, date}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Missing Widget Type: {{type}}",
|
||||
@@ -82,7 +83,16 @@
|
||||
"error": "Error",
|
||||
"ping": "Ping",
|
||||
"down": "Down",
|
||||
"up": "Up"
|
||||
"up": "Up",
|
||||
"not_available": "Not Available"
|
||||
},
|
||||
"siteMonitor": {
|
||||
"http_status": "HTTP status",
|
||||
"error": "Error",
|
||||
"response": "Response",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Not Available"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Playing",
|
||||
@@ -754,6 +764,7 @@
|
||||
"calendar": {
|
||||
"inCinemas": "In cinemas",
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release"
|
||||
"digitalRelease": "Digital release",
|
||||
"noEventsToday": "No events for today!"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Eraro",
|
||||
"ping": "Sondaĵo"
|
||||
"ping": "Sondaĵo",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Ludante",
|
||||
|
||||
@@ -1,23 +1,42 @@
|
||||
{
|
||||
"common": {
|
||||
"bytes": "{{value, bytes}}",
|
||||
"bits": "{{value, bytes(bits: true)}}",
|
||||
"bbytes": "{{value, bytes(binary: true)}}",
|
||||
"bbits": "{{value, bytes(bits: true; binary: true)}}",
|
||||
"byterate": "{{value, rate(bits: false)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bitrate": "{{value, rate(bits: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Falta el tipo de widget: {{type}}",
|
||||
"api_error": "Error de API",
|
||||
"status": "Estado",
|
||||
"missing_type": "Tipo de Widget que falta: {{type}}",
|
||||
"api_error": "Error en API",
|
||||
"information": "Información",
|
||||
"url": "URL",
|
||||
"status": "Estado",
|
||||
"url": "Enlace",
|
||||
"raw_error": "Error sin procesar",
|
||||
"response_data": "Datos de respuesta"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Ubicación actual",
|
||||
"allow": "Clic para permitir",
|
||||
"updating": "Actualizando",
|
||||
"wait": "Espera, por favor"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Buscar…"
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"mem": "MEM",
|
||||
"total": "Total",
|
||||
"free": "Libre",
|
||||
"used": "Usado",
|
||||
"load": "Carga",
|
||||
"cpu": "CPU",
|
||||
"mem": "MEM",
|
||||
"temp": "TEMP",
|
||||
"max": "Máx.",
|
||||
"uptime": "ARRIBA",
|
||||
@@ -26,21 +45,46 @@
|
||||
"hours": "Horas",
|
||||
"minutes": "Minutos"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Usuarios",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"days": "Días",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Dispositivos",
|
||||
"lan_devices": "Dispositivos LAN",
|
||||
"wlan_devices": "Dispositivos WLAN",
|
||||
"lan_users": "Usuarios LAN",
|
||||
"wlan_users": "Usuarios WLAN",
|
||||
"up": "ARRIBA",
|
||||
"down": "CAÍDO",
|
||||
"wait": "Espera, por favor",
|
||||
"empty_data": "Se desconoce el estado del subsistema"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "Recibido",
|
||||
"tx": "Transmitido",
|
||||
"mem": "Memoria",
|
||||
"cpu": "Procesador",
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"running": "Ejecutando",
|
||||
"offline": "Desconectado",
|
||||
"error": "Fallo",
|
||||
"unknown": "Desconocido",
|
||||
"running": "Ejecutando",
|
||||
"healthy": "Saludable",
|
||||
"starting": "Comenzando",
|
||||
"unhealthy": "Insalubre",
|
||||
"not_found": "No encontrado",
|
||||
"exited": "Salida",
|
||||
"partial": "Parcial",
|
||||
"healthy": "Saludable"
|
||||
"partial": "Parcial"
|
||||
},
|
||||
"ping": {
|
||||
"http_status": "Estado HTTP",
|
||||
"error": "Fallo",
|
||||
"ping": "Ping",
|
||||
"down": "Abajo",
|
||||
"up": "Arriba",
|
||||
"not_available": "No Disponible"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Reproduciendo",
|
||||
@@ -48,10 +92,43 @@
|
||||
"bitrate": "Tasa de bits",
|
||||
"no_active": "Sin transmisiones activas",
|
||||
"movies": "Películas",
|
||||
"series": "Series",
|
||||
"series": "Serie",
|
||||
"episodes": "Episodios",
|
||||
"songs": "Canciones"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Producción",
|
||||
"battery_soc": "Batería",
|
||||
"grid_power": "Red",
|
||||
"home_power": "Consumo",
|
||||
"charge_power": "Cargador",
|
||||
"watt_hour": "vatio-hora (Wh)"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Suscripciones",
|
||||
"unread": "Sin leer"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstream (desarrollo de software)",
|
||||
"requests": "Peticiones actuales",
|
||||
"requests_failed": "Peticiones fallidas"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Total Observados",
|
||||
"diffsDetected": "Diferencias detectadas"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Espectáculos",
|
||||
"recordings": "Grabaciones",
|
||||
"scheduled": "Programado",
|
||||
"passes": "Pases"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "Reproduciendo",
|
||||
"transcoding": "Transcodificando",
|
||||
@@ -59,31 +136,95 @@
|
||||
"no_active": "Sin transmisiones activas",
|
||||
"plex_connection_error": "Comprueba la conexión a Plex"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "AP conectados",
|
||||
"activeUser": "Dispositivos activos",
|
||||
"alerts": "Alertas",
|
||||
"connectedGateway": "Pasarelas conectadas",
|
||||
"connectedSwitches": "Interruptores conectados"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Tasa",
|
||||
"remaining": "Restante",
|
||||
"downloaded": "Descargado"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Transmisiones activas",
|
||||
"albums": "Álbumes",
|
||||
"movies": "Películas",
|
||||
"tv": "Series"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Tasa",
|
||||
"queue": "En cola",
|
||||
"timeleft": "Tiempo restante"
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "Activo",
|
||||
"upload": "Subida",
|
||||
"download": "Bajada"
|
||||
"download": "Descarga"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "Uso de la Cpu",
|
||||
"memUsage": "Uso de la memoria",
|
||||
"systemTempC": "Temperatura del sistema",
|
||||
"poolUsage": "Comprobación del uso del grupo de memoria",
|
||||
"volumeUsage": "Volumen utilizado",
|
||||
"invalid": "No válido"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "Buscando",
|
||||
"queued": "En cola",
|
||||
"series": "Series",
|
||||
"queue": "Poner a la cola",
|
||||
"series": "Serie",
|
||||
"queue": "En cola",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Buscando",
|
||||
"missing": "Faltan",
|
||||
"queued": "En cola",
|
||||
"movies": "Películas",
|
||||
"missing": "Faltan",
|
||||
"queue": "Poner a la cola",
|
||||
"queue": "En cola",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Buscando",
|
||||
"queued": "En cola",
|
||||
"artists": "Artistas"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Buscando",
|
||||
"queued": "En cola",
|
||||
"books": "Libros"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Episodios perdidos",
|
||||
"missingMovies": "Películas perdidas"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "Pendiente",
|
||||
"approved": "Aprobado",
|
||||
@@ -94,54 +235,74 @@
|
||||
"approved": "Aprobado",
|
||||
"available": "Disponible"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pendiente",
|
||||
"processing": "Procesando",
|
||||
"approved": "Aprobado",
|
||||
"available": "Disponible"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Conectado",
|
||||
"new_devices": "Nuevos dispositivos",
|
||||
"down_alerts": "Alertas"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "Consultas",
|
||||
"blocked": "Bloqueado",
|
||||
"gravity": "Gravedad",
|
||||
"blocked_percent": "% bloqueado"
|
||||
"blocked_percent": "% bloqueado",
|
||||
"gravity": "Gravedad"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Consultas",
|
||||
"blocked": "Bloqueado",
|
||||
"filtered": "Filtrado",
|
||||
"latency": "Latencia"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Subida",
|
||||
"download": "Bajada",
|
||||
"download": "Descarga",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "En ejecución",
|
||||
"running": "Ejecutando",
|
||||
"stopped": "Detenido",
|
||||
"total": "Total"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Dirección",
|
||||
"expires": "Caduca en",
|
||||
"never": "Nunca",
|
||||
"last_seen": "Visto por última vez",
|
||||
"now": "Ahora",
|
||||
"years": "{{number}}años",
|
||||
"weeks": "{{number}}semanas",
|
||||
"days": "{{number}}días",
|
||||
"hours": "{{number}}horas",
|
||||
"minutes": "{{number}}minutos",
|
||||
"seconds": "{{number}}segundos",
|
||||
"ago": "Hace {{value}}"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "En cola",
|
||||
"processed": "Procesado",
|
||||
"errored": "Error",
|
||||
"saved": "Guardado"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Enrutadores",
|
||||
"services": "Servicios",
|
||||
"middleware": "Software intermedio"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Sin transmisiones activas",
|
||||
"please_wait": "Espere por favor"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Activado",
|
||||
"disabled": "Desactivado",
|
||||
"total": "Total"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Ubicación actual",
|
||||
"allow": "Clic para permitir",
|
||||
"updating": "Actualizando",
|
||||
"wait": "Espera, por favor"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Pendiente",
|
||||
"approved": "Aprobado",
|
||||
"available": "Disponible",
|
||||
"processing": "Procesando"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Tasa",
|
||||
"queue": "En cola",
|
||||
"timeleft": "Tiempo restante"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Tasa",
|
||||
"remaining": "Restante",
|
||||
"downloaded": "Descargado"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "Configurar una o más criptomonedas para rastrear",
|
||||
"1hour": "1 Hora",
|
||||
@@ -161,47 +322,36 @@
|
||||
"numberOfFailGrabs": "Capturas fallidas",
|
||||
"numberOfFailQueries": "Consultas fallidas"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Bajada",
|
||||
"upload": "Subida",
|
||||
"leech": "Compañeros",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Configurado",
|
||||
"errored": "Con errores"
|
||||
"errored": "Error"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Episodios perdidos",
|
||||
"missingMovies": "Películas perdidas"
|
||||
},
|
||||
"lidarr": {
|
||||
"queued": "En cola",
|
||||
"wanted": "Buscando",
|
||||
"artists": "Artistas"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Consultas",
|
||||
"blocked": "Bloqueado",
|
||||
"filtered": "Filtrado",
|
||||
"latency": "Latencia"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Bajada",
|
||||
"upload": "Subida",
|
||||
"leech": "Pares",
|
||||
"seed": "Semillas"
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sesiones",
|
||||
"numConnections": "Conexiones",
|
||||
"dataRelayed": "Retransmitido",
|
||||
"transferRate": "Tasa"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "Usuarios",
|
||||
"status_count": "Publicaciones",
|
||||
"domain_count": "Dominios"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sesiones",
|
||||
"numConnections": "Conexiones",
|
||||
"dataRelayed": "Retransmitido",
|
||||
"transferRate": "Velocidad"
|
||||
"medusa": {
|
||||
"wanted": "Buscando",
|
||||
"queued": "En cola",
|
||||
"series": "Serie"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Jugadores",
|
||||
"version": "Versión",
|
||||
"status": "Estado",
|
||||
"up": "En línea",
|
||||
"down": "Desconectado"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Leer",
|
||||
"unread": "Sin leer"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Usuarios",
|
||||
@@ -209,73 +359,54 @@
|
||||
"failedLoginsLast24H": "Inicios de sesión fallidos (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "Memoria",
|
||||
"cpu": "Procesador",
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"lxc": "Contenedores Linux",
|
||||
"vms": "Máquinas Virtuales"
|
||||
},
|
||||
"unifi": {
|
||||
"up": "LEVANTADO",
|
||||
"users": "Usuarios",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"days": "Días",
|
||||
"wan": "WAN",
|
||||
"lan_users": "Usuarios LAN",
|
||||
"wlan_users": "Usuarios WLAN",
|
||||
"down": "CAÍDO",
|
||||
"wait": "Espera por favor",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Dispositivos",
|
||||
"lan_devices": "Dispositivos LAN",
|
||||
"wlan_devices": "Dispositivos WLAN",
|
||||
"empty_data": "Se desconoce el estado del subsistema"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Transmisiones activas",
|
||||
"movies": "Películas",
|
||||
"tv": "Series",
|
||||
"albums": "Álbumes"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "Procesador",
|
||||
"wait": "Espera por favor",
|
||||
"temp": "TEMPORAL",
|
||||
"uptime": "ARRIBA",
|
||||
"days": "Días",
|
||||
"hours": "Horas",
|
||||
"load": "Cargar",
|
||||
"cpu": "CPU",
|
||||
"load": "Carga",
|
||||
"wait": "Espera, por favor",
|
||||
"temp": "TEMP",
|
||||
"_temp": "Temperatura",
|
||||
"warn": "Advertir",
|
||||
"uptime": "ARRIBA",
|
||||
"total": "Total",
|
||||
"free": "Libre",
|
||||
"used": "Utilizado",
|
||||
"used": "Usado",
|
||||
"days": "Días",
|
||||
"hours": "Horas",
|
||||
"crit": "Crít.",
|
||||
"read": "Leer",
|
||||
"write": "Escribir",
|
||||
"gpu": "GPU",
|
||||
"mem": "Memoria",
|
||||
"swap": "Intercambiar",
|
||||
"_temp": "Temperatura"
|
||||
"swap": "Intercambiar"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Total Observados",
|
||||
"diffsDetected": "Diferencias detectadas"
|
||||
"quicklaunch": {
|
||||
"bookmark": "Marcadores",
|
||||
"service": "Servicio",
|
||||
"search": "Buscar",
|
||||
"custom": "Personalizado",
|
||||
"visit": "Visita",
|
||||
"url": "Enlace"
|
||||
},
|
||||
"wmo": {
|
||||
"48-night": "Niebla",
|
||||
"51-day": "Llovizna ligera",
|
||||
"51-night": "Llovizna ligera",
|
||||
"2-day": "Parcialmente nuboso",
|
||||
"0-day": "Soleado",
|
||||
"0-night": "Despejado",
|
||||
"1-day": "Mayormente soleado",
|
||||
"1-night": "Mayormente despejado",
|
||||
"2-day": "Parcialmente nuboso",
|
||||
"2-night": "Parcialmente nuboso",
|
||||
"3-day": "Nublado",
|
||||
"3-night": "Nublado",
|
||||
"45-day": "Niebla",
|
||||
"45-night": "Niebla",
|
||||
"48-day": "Niebla",
|
||||
"48-night": "Niebla",
|
||||
"51-day": "Llovizna ligera",
|
||||
"51-night": "Llovizna ligera",
|
||||
"53-day": "Llovizna",
|
||||
"53-night": "Llovizna",
|
||||
"55-day": "Llovizna pesada",
|
||||
@@ -286,13 +417,13 @@
|
||||
"57-night": "Llovizna helada",
|
||||
"61-day": "Lluvia ligera",
|
||||
"61-night": "Lluvia ligera",
|
||||
"67-day": "Granizo",
|
||||
"63-day": "Lluvia",
|
||||
"63-night": "Lluvia",
|
||||
"65-day": "Chubascos",
|
||||
"65-night": "Chubascos",
|
||||
"66-day": "Granizo",
|
||||
"66-night": "Granizo",
|
||||
"67-day": "Granizo",
|
||||
"67-night": "Granizo",
|
||||
"71-day": "Nevada Leve",
|
||||
"71-night": "Nevada Leve",
|
||||
@@ -319,38 +450,40 @@
|
||||
"99-day": "Tormenta con granizo",
|
||||
"99-night": "Tormenta con granizo"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "Marcadores",
|
||||
"service": "Servicio",
|
||||
"search": "Buscar",
|
||||
"custom": "Personalizado",
|
||||
"visit": "Visita",
|
||||
"url": "URL"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "Sistema",
|
||||
"updates": "Actualizaciones",
|
||||
"update_available": "Actualización disponible",
|
||||
"up_to_date": "Actualizado",
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges": "Bridges secundarios",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Arriba",
|
||||
"pending": "Pendiente",
|
||||
"down": "Abajo"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nuevo",
|
||||
"up": "En línea",
|
||||
"grace": "En Periodo de Gracia",
|
||||
"down": "Desconectado",
|
||||
"paused": "Pausado",
|
||||
"status": "Estado",
|
||||
"last_ping": "Último ping",
|
||||
"never": "Aún no hay pings"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Escaneado",
|
||||
"containers_updated": "Actualizado",
|
||||
"containers_failed": "Fallido"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Aprobado",
|
||||
"rejectedPushes": "Rechazado",
|
||||
"filters": "Filtros",
|
||||
"indexers": "Indexadores"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Escaneado",
|
||||
"containers_updated": "Actualizado",
|
||||
"containers_failed": "Fallido"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Cola",
|
||||
"downloads": "En cola",
|
||||
"videos": "Vídeos",
|
||||
"channels": "Canales",
|
||||
"playlists": "Listas de reproducción"
|
||||
@@ -361,14 +494,10 @@
|
||||
"alerts": "Alertas",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Sin transmisiones activas",
|
||||
"please_wait": "Espere por favor"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Velocidad",
|
||||
"active": "Activo",
|
||||
"queue": "Cola",
|
||||
"queue": "En cola",
|
||||
"total": "Total"
|
||||
},
|
||||
"gluetun": {
|
||||
@@ -380,10 +509,6 @@
|
||||
"channels": "Canales",
|
||||
"hd": "Alta definición"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Aprobado",
|
||||
"failed": "Fallido",
|
||||
@@ -393,53 +518,14 @@
|
||||
"inbox": "Bandeja de entrada",
|
||||
"total": "Total"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Compañeros",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Descarga",
|
||||
"upload": "Subida",
|
||||
"leech": "Depender",
|
||||
"seed": "Semillas"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Cola",
|
||||
"processed": "Procesado",
|
||||
"saved": "Guardado",
|
||||
"errored": "Error"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Leer",
|
||||
"unread": "Sin leer"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Espera, por favor",
|
||||
"wait": "Espere por favor",
|
||||
"no_devices": "No se reciben datos del dispositivo"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "AP conectados",
|
||||
"activeUser": "Dispositivos activos",
|
||||
"alerts": "Alertas",
|
||||
"connectedGateway": "Pasarelas conectadas",
|
||||
"connectedSwitches": "Interruptores conectados"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Descargar",
|
||||
"upload": "Subir",
|
||||
"leech": "Compañeros",
|
||||
"seed": "Semilla"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Carga de la CPU",
|
||||
"memoryUsed": "Memoria utilizada",
|
||||
"uptime": "Tiempo en funcionamiento",
|
||||
"uptime": "Tiempo de la actividad",
|
||||
"numberOfLeases": "Alquileres"
|
||||
},
|
||||
"xteve": {
|
||||
@@ -447,6 +533,12 @@
|
||||
"streams_active": "Transmisiones activas",
|
||||
"streams_xepg": "Canales XEPG"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "Hoy",
|
||||
"absolutePower": "Encender",
|
||||
"relativePower": "Encender %",
|
||||
"limit": "Límite"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "Carga de la CPU",
|
||||
"memory": "Memoria activa",
|
||||
@@ -459,25 +551,30 @@
|
||||
"print_progress": "Progreso",
|
||||
"layers": "Capas"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Querido",
|
||||
"queued": "A la espera",
|
||||
"series": "Series"
|
||||
},
|
||||
"octoprint": {
|
||||
"temp_bed": "Temperatura de la plataforma",
|
||||
"printer_state": "Estado",
|
||||
"temp_tool": "Temperatura de la herramienta",
|
||||
"temp_bed": "Temperatura de la plataforma",
|
||||
"job_completion": "Finalización"
|
||||
},
|
||||
"cloudflared": {
|
||||
"origin_ip": "IP de origen",
|
||||
"status": "Estado"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Promedio de carga",
|
||||
"memory": "Memoria utilizada",
|
||||
"wanStatus": "Estado de la WAN",
|
||||
"up": "Arriba",
|
||||
"down": "Abajo",
|
||||
"temp": "Temperatura",
|
||||
"disk": "Uso del disco",
|
||||
"wanIP": "IP de la WAN"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"cpu_usage": "CPU",
|
||||
"datastore_usage": "Almacén de datos",
|
||||
"failed_tasks_24h": "Tareas fallidas en 24h",
|
||||
"cpu_usage": "CPU",
|
||||
"memory_usage": "Memoria"
|
||||
},
|
||||
"immich": {
|
||||
@@ -489,19 +586,30 @@
|
||||
"uptimekuma": {
|
||||
"up": "Páginas web activas",
|
||||
"down": "Páginas web inactivas",
|
||||
"uptime": "Disponibilidad",
|
||||
"uptime": "Tiempo de la actividad",
|
||||
"incident": "Incidencia",
|
||||
"m": "m"
|
||||
"m": "Minutos"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Serie",
|
||||
"archives": "Archivos",
|
||||
"chapters": "Capítulos",
|
||||
"categories": "Categorías"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Librerías",
|
||||
"series": "Series",
|
||||
"series": "Serie",
|
||||
"books": "Libros"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Días",
|
||||
"uptime": "Tiempo de la actividad",
|
||||
"volumeAvailable": "Disponible"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Serie",
|
||||
"issues": "Cuestiones",
|
||||
"series": "Series",
|
||||
"wanted": "Buscado"
|
||||
"wanted": "Buscando"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "Álbumes",
|
||||
@@ -509,19 +617,14 @@
|
||||
"videos": "Vídeos",
|
||||
"people": "Personas"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Días",
|
||||
"uptime": "Funcionando",
|
||||
"volumeAvailable": "Disponible"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "Cola",
|
||||
"queue": "En cola",
|
||||
"processing": "Procesando",
|
||||
"processed": "Procesado",
|
||||
"time": "Tiempo"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "Dashboards",
|
||||
"dashboards": "Tableros",
|
||||
"datasources": "Fuentes de datos",
|
||||
"totalalerts": "Alertas totales",
|
||||
"alertstriggered": "Alertas activadas"
|
||||
@@ -546,16 +649,6 @@
|
||||
"total_workers": "Total de trabajadores",
|
||||
"records_total": "Duración de la cola"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nuevo",
|
||||
"up": "Conectado",
|
||||
"down": "Desconectado",
|
||||
"grace": "En Periodo de Gracia",
|
||||
"paused": "Pausado",
|
||||
"status": "Estado",
|
||||
"last_ping": "Último ping",
|
||||
"never": "Aún no hay pings"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "Servidores",
|
||||
"nodes": "Nodos"
|
||||
@@ -565,13 +658,6 @@
|
||||
"targets_down": "Objetivos abajo",
|
||||
"targets_total": "Objetivos totales"
|
||||
},
|
||||
"minecraft": {
|
||||
"status": "Estado",
|
||||
"up": "En línea",
|
||||
"players": "Jugadores",
|
||||
"version": "Versión",
|
||||
"down": "Sin conexión"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Hoy",
|
||||
"gross_percent_1y": "Un año",
|
||||
@@ -588,93 +674,26 @@
|
||||
"lights_on": "Luces encendidas",
|
||||
"switches_on": "Encendido"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Suscripciones",
|
||||
"unread": "Sin leer"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Espectáculos",
|
||||
"recordings": "Grabaciones",
|
||||
"scheduled": "Programado",
|
||||
"passes": "Pases"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Supervisión",
|
||||
"updates": "Actualizaciones"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Dirección",
|
||||
"expires": "Caduca en",
|
||||
"never": "Nunca",
|
||||
"last_seen": "Visto por última vez",
|
||||
"now": "Ahora",
|
||||
"years": "{{number}}años",
|
||||
"hours": "{{number}}horas",
|
||||
"minutes": "{{number}}minutos",
|
||||
"seconds": "{{number}}segundos",
|
||||
"ago": "Hace {{value}}",
|
||||
"weeks": "{{number}}semanas",
|
||||
"days": "{{number}}días"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "Uso de la Cpu",
|
||||
"memUsage": "Uso de la memoria",
|
||||
"systemTempC": "Temperatura del sistema",
|
||||
"poolUsage": "Comprobación del uso del grupo de memoria",
|
||||
"volumeUsage": "Volumen utilizado",
|
||||
"invalid": "No válido"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Promedio de carga",
|
||||
"memory": "Memoria utilizada",
|
||||
"wanStatus": "Estado de la WAN",
|
||||
"up": "Arriba",
|
||||
"down": "Abajo",
|
||||
"temp": "Temperatura",
|
||||
"disk": "Uso del disco",
|
||||
"wanIP": "IP de la WAN"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstream (desarrollo de software)",
|
||||
"requests": "Peticiones actuales",
|
||||
"requests_failed": "Peticiones fallidas"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Producción",
|
||||
"battery_soc": "Batería",
|
||||
"grid_power": "Red",
|
||||
"home_power": "Consumo",
|
||||
"charge_power": "Cargador",
|
||||
"watt_hour": "vatio-hora (Wh)"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Conectado",
|
||||
"new_devices": "Nuevos dispositivos",
|
||||
"down_alerts": "Alertas"
|
||||
"calibreweb": {
|
||||
"books": "Libros",
|
||||
"authors": "Autores",
|
||||
"categories": "Categorías",
|
||||
"series": "Serie"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Cola",
|
||||
"downloadSpeed": "Velocidad",
|
||||
"downloadCount": "En cola",
|
||||
"downloadBytesRemaining": "Restante",
|
||||
"downloadTotalBytes": "Tamaño"
|
||||
"downloadTotalBytes": "Tamaño",
|
||||
"downloadSpeed": "Velocidad"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"seriesCount": "Serie",
|
||||
"totalFiles": "Archivos"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Nombre",
|
||||
"map": "Mapa",
|
||||
"currentPlayers": "Jugadores actuales",
|
||||
"players": "Jugadores",
|
||||
"maxPlayers": "Jugadores máximos",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping",
|
||||
"status": "Estado",
|
||||
"online": "En línea",
|
||||
"offline": "Sin conexión"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Resultado",
|
||||
"status": "Estado",
|
||||
@@ -686,7 +705,19 @@
|
||||
"inProgress": "En curso",
|
||||
"totalPrs": "RP totales",
|
||||
"myPrs": "Mis logros",
|
||||
"approved": "Aprobados"
|
||||
"approved": "Aprobado"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "Estado",
|
||||
"online": "En línea",
|
||||
"offline": "Desconectado",
|
||||
"name": "Nombre",
|
||||
"map": "Mapa",
|
||||
"currentPlayers": "Jugadores actuales",
|
||||
"players": "Jugadores",
|
||||
"maxPlayers": "Jugadores máximos",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "De acuerdo",
|
||||
@@ -694,39 +725,27 @@
|
||||
"noRecent": "Caducado",
|
||||
"totalUsed": "Almacenamiento usado"
|
||||
},
|
||||
"openmediavault": {
|
||||
"running": "Ejecutando",
|
||||
"downloading": "Descargando",
|
||||
"total": "Total",
|
||||
"stopped": "Detenido",
|
||||
"passed": "Aprobado",
|
||||
"failed": "Fallido"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recetas",
|
||||
"users": "Usuarios",
|
||||
"categories": "Categorías",
|
||||
"tags": "Etiquetas"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archivos",
|
||||
"chapters": "Capítulos",
|
||||
"categories": "Categorías"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Libros",
|
||||
"authors": "Autores",
|
||||
"categories": "Categorías",
|
||||
"series": "Series"
|
||||
"openmediavault": {
|
||||
"downloading": "Descargando",
|
||||
"total": "Total",
|
||||
"running": "Ejecutando",
|
||||
"stopped": "Detenido",
|
||||
"passed": "Aprobado",
|
||||
"failed": "Fallido"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Estado",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"uptime": "Tiempo de la actividad",
|
||||
"lastDown": "Último periodo de inactividad",
|
||||
"downDuration": "Tiempo de inactividad",
|
||||
"sitesUp": "Páginas web con conexión",
|
||||
"sitesDown": "Páginas web caídas",
|
||||
"sitesUp": "Páginas web activas",
|
||||
"sitesDown": "Páginas web inactivas",
|
||||
"paused": "Pausado",
|
||||
"notyetchecked": "Aún no verificado",
|
||||
"up": "Arriba",
|
||||
@@ -734,15 +753,9 @@
|
||||
"down": "Abajo",
|
||||
"unknown": "Desconocido"
|
||||
},
|
||||
"opendtu": {
|
||||
"relativePower": "Encender %",
|
||||
"yieldDay": "Hoy",
|
||||
"limit": "Límite",
|
||||
"absolutePower": "Encender"
|
||||
},
|
||||
"calendar": {
|
||||
"physicalRelease": "Lanzamiento en físico",
|
||||
"inCinemas": "En cine",
|
||||
"physicalRelease": "Lanzamiento en físico",
|
||||
"digitalRelease": "Lanzamiento en digital"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +140,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Errorea",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Playing",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -1,46 +1,90 @@
|
||||
{
|
||||
"common": {
|
||||
"bytes": "{{value, bytes}}",
|
||||
"bits": "{{value, bytes(bits: true)}}",
|
||||
"bbytes": "{{value, bytes(binary: true)}}",
|
||||
"bbits": "{{value, bytes(bits: true; binary: true)}}",
|
||||
"byterate": "{{value, rate(bits: false)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bitrate": "{{value, rate(bits: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Type de widget manquant: {{type}}",
|
||||
"api_error": "Erreur de l'API",
|
||||
"status": "Statut",
|
||||
"information": "Information",
|
||||
"status": "Statut",
|
||||
"url": "URL",
|
||||
"raw_error": "Erreur brute",
|
||||
"response_data": "Données de réponse"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Localisation actuelle",
|
||||
"allow": "Cliquez pour autoriser",
|
||||
"updating": "Mise à jour",
|
||||
"wait": "Veuillez patienter"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Recherche…"
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"mem": "MÉM",
|
||||
"total": "Total",
|
||||
"free": "Libre",
|
||||
"used": "Utilisé",
|
||||
"load": "Charge",
|
||||
"cpu": "CPU",
|
||||
"mem": "MÉM",
|
||||
"max": "Max",
|
||||
"temp": "TEMP",
|
||||
"max": "Max",
|
||||
"uptime": "UP",
|
||||
"months": "mo",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"minutes": "mn"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Utilisateurs",
|
||||
"uptime": "Disponibilité du système",
|
||||
"days": "Jours",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Équipt.",
|
||||
"lan_devices": "Équipt. LAN",
|
||||
"wlan_devices": "Équipt. WLAN",
|
||||
"lan_users": "Utilisateurs LAN",
|
||||
"wlan_users": "Utilisateurs WLAN",
|
||||
"up": "UP",
|
||||
"down": "DOWN",
|
||||
"wait": "Veuillez patienter",
|
||||
"empty_data": "Statut sous-système inconnu"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "Rx",
|
||||
"tx": "Tx",
|
||||
"mem": "Mém",
|
||||
"cpu": "Cpu",
|
||||
"mem": "MÉM",
|
||||
"cpu": "CPU",
|
||||
"running": "Démarré",
|
||||
"offline": "Hors ligne",
|
||||
"error": "Erreur",
|
||||
"unknown": "Inconnu",
|
||||
"running": "Démarré",
|
||||
"healthy": "Fonctionnel",
|
||||
"starting": "Démarrage",
|
||||
"unhealthy": "Dysfonctionnement",
|
||||
"not_found": "Inconnu",
|
||||
"exited": "Arrêté",
|
||||
"partial": "Partiel",
|
||||
"healthy": "Fonctionnel"
|
||||
"partial": "Partiel"
|
||||
},
|
||||
"ping": {
|
||||
"http_status": "État HTTP",
|
||||
"error": "Erreur",
|
||||
"ping": "Ping",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Non disponible"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "En lecture",
|
||||
@@ -52,6 +96,39 @@
|
||||
"episodes": "Épisodes",
|
||||
"songs": "Musique"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Batterie",
|
||||
"grid_power": "Grille",
|
||||
"home_power": "Consommation",
|
||||
"charge_power": "Chargeur",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Abonnements",
|
||||
"unread": "Non lu"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Demandes en cours",
|
||||
"requests_failed": "Demandes échouées"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Total Observé",
|
||||
"diffsDetected": "Diffs Detectées"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Affichages",
|
||||
"recordings": "Enregistrements",
|
||||
"scheduled": "Planifié",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "En lecture",
|
||||
"transcoding": "Transcodage",
|
||||
@@ -59,31 +136,95 @@
|
||||
"no_active": "Aucun flux actif",
|
||||
"plex_connection_error": "Vérifier la connexion à Plex"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "APs connectées",
|
||||
"activeUser": "Équipts actifs",
|
||||
"alerts": "Alertes",
|
||||
"connectedGateway": "Passerelles connectées",
|
||||
"connectedSwitches": "Switches connectés"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Débit",
|
||||
"remaining": "Restant",
|
||||
"downloaded": "Téléchargé"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Flux actif",
|
||||
"albums": "Albums",
|
||||
"movies": "Films",
|
||||
"tv": "Séries TV"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Débit",
|
||||
"queue": "En attente",
|
||||
"timeleft": "Temps restant"
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "Actif",
|
||||
"upload": "Envoi",
|
||||
"download": "Réception"
|
||||
"download": "Récep."
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "Cpu",
|
||||
"memUsage": "Mém",
|
||||
"systemTempC": "Temp",
|
||||
"poolUsage": "Pool",
|
||||
"volumeUsage": "Volume",
|
||||
"invalid": "Invalide"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "Demande",
|
||||
"queued": "Attente",
|
||||
"series": "Séries",
|
||||
"queue": "Attente",
|
||||
"series": "Séries TV",
|
||||
"queue": "En attente",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Demande",
|
||||
"missing": "Manquant",
|
||||
"queued": "Attente",
|
||||
"movies": "Films",
|
||||
"missing": "Manquant",
|
||||
"queue": "Attente",
|
||||
"queue": "En attente",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Demande",
|
||||
"queued": "Attente",
|
||||
"artists": "Artistes"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Demande",
|
||||
"queued": "Attente",
|
||||
"books": "Livres"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Épisodes manquants",
|
||||
"missingMovies": "Films manquants"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "En attente",
|
||||
"approved": "Validé",
|
||||
@@ -94,11 +235,29 @@
|
||||
"approved": "Validé",
|
||||
"available": "Disponible"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "En attente",
|
||||
"processing": "Traitement",
|
||||
"approved": "Validé",
|
||||
"available": "Disponible"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Connecté",
|
||||
"new_devices": "Nouvel Appareil",
|
||||
"down_alerts": "Alertes"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "Requêtes",
|
||||
"blocked": "Bloqué",
|
||||
"gravity": "Listes dom. bloqués",
|
||||
"blocked_percent": "Bloqué %"
|
||||
"blocked_percent": "Bloqué %",
|
||||
"gravity": "Listes dom. bloqués"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Requêtes",
|
||||
"blocked": "Bloqué",
|
||||
"filtered": "Filtrées",
|
||||
"latency": "Latence"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Envoi",
|
||||
@@ -110,38 +269,40 @@
|
||||
"stopped": "Arrêté",
|
||||
"total": "Total"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Adresse",
|
||||
"expires": "Expire",
|
||||
"never": "Jamais",
|
||||
"last_seen": "Vu pour la dernière fois",
|
||||
"now": "Maintenant",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
"hours": "{{number}}h",
|
||||
"minutes": "{{number}}m",
|
||||
"seconds": "{{number}}s",
|
||||
"ago": "Il y a {{value}}"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "En attente",
|
||||
"processed": "Traité",
|
||||
"errored": "En erreur",
|
||||
"saved": "Libéré"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Routeurs",
|
||||
"services": "Services",
|
||||
"middleware": "Middleware"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Aucun flux actif",
|
||||
"please_wait": "Merci de patienter"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Activé",
|
||||
"disabled": "Désactivé",
|
||||
"total": "Total"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Localisation actuelle",
|
||||
"allow": "Cliquez pour autoriser",
|
||||
"updating": "Mise à jour",
|
||||
"wait": "Veuillez patienter"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Attente",
|
||||
"approved": "Demande",
|
||||
"available": "Disponible",
|
||||
"processing": "Traitement"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Débit",
|
||||
"queue": "En attente",
|
||||
"timeleft": "Temps restant"
|
||||
},
|
||||
"nzbget": {
|
||||
"remaining": "Restant",
|
||||
"downloaded": "Téléchargé",
|
||||
"rate": "Débit"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "Configurer une ou plusieurs crypto-monnaies à suivre",
|
||||
"1hour": "1 Heure",
|
||||
@@ -157,123 +318,89 @@
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indexeur",
|
||||
"numberOfGrabs": "Capture",
|
||||
"numberOfQueries": "Demande",
|
||||
"numberOfQueries": "Requêtes",
|
||||
"numberOfFailGrabs": "Capt. échouée",
|
||||
"numberOfFailQueries": "Dem. échouée"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Réception",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Configuré",
|
||||
"errored": "En erreur"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Épisodes manquants",
|
||||
"missingMovies": "Films manquants"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Demandé",
|
||||
"queued": "En queue",
|
||||
"artists": "Artistes"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Requêtes",
|
||||
"blocked": "Bloquées",
|
||||
"filtered": "Filtrées",
|
||||
"latency": "Latence"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "Utilisateurs",
|
||||
"status_count": "Messages",
|
||||
"domain_count": "Domaines"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sessions",
|
||||
"numConnections": "Cnx",
|
||||
"dataRelayed": "Relayé",
|
||||
"transferRate": "Débit"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "Utilisateurs",
|
||||
"status_count": "Messages",
|
||||
"domain_count": "Domaines"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Demande",
|
||||
"queued": "Attente",
|
||||
"series": "Séries TV"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Joueurs",
|
||||
"version": "Version",
|
||||
"status": "Statut",
|
||||
"up": "En ligne",
|
||||
"down": "Hors ligne"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Lu",
|
||||
"unread": "Non lu"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Utilisateurs",
|
||||
"loginsLast24H": "Cnx. (24h)",
|
||||
"failedLoginsLast24H": "Cnx. échouées (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "Mém",
|
||||
"cpu": "Cpu",
|
||||
"mem": "MÉM",
|
||||
"cpu": "CPU",
|
||||
"lxc": "LxC",
|
||||
"vms": "VMs"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Utilisateurs",
|
||||
"uptime": "Disponibilité du système",
|
||||
"days": "Jours",
|
||||
"wan": "WAN",
|
||||
"lan_users": "Utilisateurs LAN",
|
||||
"wlan_users": "Utilisateurs WLAN",
|
||||
"up": "UP",
|
||||
"down": "DOWN",
|
||||
"wait": "Merci de patienter",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Équipt.",
|
||||
"lan_devices": "Équipt. LAN",
|
||||
"wlan_devices": "Équipt. WLAN",
|
||||
"empty_data": "Statut sous-système inconnu"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Flux actif",
|
||||
"movies": "Films",
|
||||
"tv": "Séries TV",
|
||||
"albums": "Albums"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "Cpu",
|
||||
"wait": "Merci de patienter",
|
||||
"temp": "Temp",
|
||||
"uptime": "Up",
|
||||
"days": "j",
|
||||
"hours": "h",
|
||||
"cpu": "CPU",
|
||||
"load": "Charge",
|
||||
"wait": "Veuillez patienter",
|
||||
"temp": "TEMP",
|
||||
"_temp": "Temp",
|
||||
"warn": "Alerte",
|
||||
"uptime": "UP",
|
||||
"total": "Total",
|
||||
"free": "Libre",
|
||||
"used": "Utilisé",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
"crit": "Crit.",
|
||||
"read": "Lect.",
|
||||
"read": "Lu",
|
||||
"write": "Écrit.",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mém.",
|
||||
"swap": "Swap",
|
||||
"_temp": "Temp"
|
||||
"swap": "Swap"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Total Observé",
|
||||
"diffsDetected": "Diffs Detectées"
|
||||
"quicklaunch": {
|
||||
"bookmark": "Signet",
|
||||
"service": "Service",
|
||||
"search": "Recherche",
|
||||
"custom": "Personnalisé",
|
||||
"visit": "Aller vers",
|
||||
"url": "URL"
|
||||
},
|
||||
"wmo": {
|
||||
"0-day": "Ensoleillé",
|
||||
"0-night": "Ciel clair",
|
||||
"1-day": "Principalement ensoleillé",
|
||||
"1-night": "Principalement clair",
|
||||
"2-day": "Partiellement couvert",
|
||||
"2-night": "Partiellement couvert",
|
||||
"3-day": "Couvert",
|
||||
"3-night": "Couvert",
|
||||
"63-night": "Pluie",
|
||||
"65-day": "Pluie forte",
|
||||
"85-day": "Averses de neige",
|
||||
"85-night": "Averses de neige",
|
||||
"86-day": "Averses de neige",
|
||||
"0-night": "Ciel clair",
|
||||
"45-day": "Brumeux",
|
||||
"45-night": "Brumeux",
|
||||
"48-day": "Brumeux",
|
||||
@@ -291,6 +418,8 @@
|
||||
"61-day": "Pluie légère",
|
||||
"61-night": "Pluie légère",
|
||||
"63-day": "Pluie",
|
||||
"63-night": "Pluie",
|
||||
"65-day": "Pluie forte",
|
||||
"65-night": "Pluie forte",
|
||||
"66-day": "Pluie verglaçante",
|
||||
"66-night": "Pluie verglaçante",
|
||||
@@ -310,22 +439,16 @@
|
||||
"81-night": "Averses",
|
||||
"82-day": "Averses fortes",
|
||||
"82-night": "Averses fortes",
|
||||
"85-day": "Averses de neige",
|
||||
"85-night": "Averses de neige",
|
||||
"86-day": "Averses de neige",
|
||||
"86-night": "Averses de neige",
|
||||
"95-day": "Orage",
|
||||
"95-night": "Orage",
|
||||
"96-day": "Orage avec grêle",
|
||||
"96-night": "Orage avec grêle",
|
||||
"99-day": "Orage avec grêle",
|
||||
"99-night": "Orage avec grêle",
|
||||
"0-day": "Ensoleillé"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "Signet",
|
||||
"service": "Service",
|
||||
"search": "Recherche",
|
||||
"custom": "Personnalisé",
|
||||
"visit": "Aller vers",
|
||||
"url": "URL"
|
||||
"99-night": "Orage avec grêle"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "Système",
|
||||
@@ -335,22 +458,32 @@
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"pending": "Pending",
|
||||
"pending": "En attente",
|
||||
"down": "Down"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Approuvé",
|
||||
"rejectedPushes": "Rejeté",
|
||||
"filters": "Filtres",
|
||||
"indexers": "Indexeur"
|
||||
"healthchecks": {
|
||||
"new": "Nouveau",
|
||||
"up": "En ligne",
|
||||
"grace": "En Période de Grâce",
|
||||
"down": "Hors ligne",
|
||||
"paused": "En Pause",
|
||||
"status": "Statut",
|
||||
"last_ping": "Dernier Ping",
|
||||
"never": "Pas de Ping"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Scanné",
|
||||
"containers_updated": "Mis à jour",
|
||||
"containers_failed": "Échoué"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Validé",
|
||||
"rejectedPushes": "Rejeté",
|
||||
"filters": "Filtres",
|
||||
"indexers": "Indexeur"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Queue",
|
||||
"downloads": "En attente",
|
||||
"videos": "Vidéos",
|
||||
"channels": "Chaînes",
|
||||
"playlists": "Playlists"
|
||||
@@ -361,14 +494,10 @@
|
||||
"alerts": "Alertes",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Aucun flux actif",
|
||||
"please_wait": "Merci de patienter"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Débit",
|
||||
"active": "Actif",
|
||||
"queue": "Queue",
|
||||
"queue": "En attente",
|
||||
"total": "Total"
|
||||
},
|
||||
"gluetun": {
|
||||
@@ -377,13 +506,9 @@
|
||||
"country": "Pays"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Canaux",
|
||||
"channels": "Chaînes",
|
||||
"hd": "HD"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Erreur",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Réussi",
|
||||
"failed": "Échoué",
|
||||
@@ -393,53 +518,14 @@
|
||||
"inbox": "Boîte de réception",
|
||||
"total": "Total"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "À traiter",
|
||||
"processed": "Traité",
|
||||
"errored": "En erreur",
|
||||
"saved": "Libéré"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Lu",
|
||||
"unread": "Non lu"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Patientez...",
|
||||
"wait": "Merci de patienter",
|
||||
"no_devices": "Aucune donnée d'appareil reçue"
|
||||
},
|
||||
"common": {
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "APs connectées",
|
||||
"activeUser": "Équipts actifs",
|
||||
"alerts": "Alertes",
|
||||
"connectedGateway": "Passerelles connectées",
|
||||
"connectedSwitches": "Switches connectés"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Charge CPU",
|
||||
"memoryUsed": "Mém. Utilisée",
|
||||
"uptime": "Disponibilité",
|
||||
"uptime": "Démarré depuis",
|
||||
"numberOfLeases": "Baux"
|
||||
},
|
||||
"xteve": {
|
||||
@@ -447,6 +533,12 @@
|
||||
"streams_active": "Flux actif",
|
||||
"streams_xepg": "Canal XEPG"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "Aujourd'hui",
|
||||
"absolutePower": "Puissance",
|
||||
"relativePower": "Puissance %",
|
||||
"limit": "Limite"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "Charge CPU",
|
||||
"memory": "Mém. Utilisée",
|
||||
@@ -459,13 +551,8 @@
|
||||
"print_progress": "Progression",
|
||||
"layers": "Couches"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Demande",
|
||||
"queued": "En attente",
|
||||
"series": "Séries"
|
||||
},
|
||||
"octoprint": {
|
||||
"printer_state": "Status",
|
||||
"printer_state": "Statut",
|
||||
"temp_tool": "Tool temp",
|
||||
"temp_bed": "Bed temp",
|
||||
"job_completion": "Achèvement"
|
||||
@@ -474,6 +561,16 @@
|
||||
"origin_ip": "IP Publique",
|
||||
"status": "Statut"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Charge moy.",
|
||||
"memory": "Util. Mém.",
|
||||
"wanStatus": "Statut WAN",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"temp": "Temp",
|
||||
"disk": "Util. Disque",
|
||||
"wanIP": "IP WAN"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"failed_tasks_24h": "Tâches échouées 24h",
|
||||
@@ -489,17 +586,28 @@
|
||||
"uptimekuma": {
|
||||
"up": "En ligne",
|
||||
"down": "Hors ligne",
|
||||
"uptime": "Dispo.",
|
||||
"uptime": "Démarré depuis",
|
||||
"incident": "Incident",
|
||||
"m": "m"
|
||||
"m": "mn"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Séries TV",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapitres",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Librairies",
|
||||
"series": "Séries",
|
||||
"series": "Séries TV",
|
||||
"books": "Livres"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Jours",
|
||||
"uptime": "Démarré depuis",
|
||||
"volumeAvailable": "Disponible"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Séries",
|
||||
"series": "Séries TV",
|
||||
"issues": "Issues",
|
||||
"wanted": "Demande"
|
||||
},
|
||||
@@ -509,13 +617,8 @@
|
||||
"videos": "Vidéos",
|
||||
"people": "Personnes"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Jours",
|
||||
"uptime": "Fonctionnement",
|
||||
"volumeAvailable": "Disponible"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "À traiter",
|
||||
"queue": "En attente",
|
||||
"processing": "Traitement",
|
||||
"processed": "Traité",
|
||||
"time": "Temps"
|
||||
@@ -527,10 +630,10 @@
|
||||
"alertstriggered": "Alertes déclenchées"
|
||||
},
|
||||
"nextcloud": {
|
||||
"freespace": "Libre",
|
||||
"activeusers": "Utilisateurs Actifs",
|
||||
"cpuload": "Charge Cpu",
|
||||
"memoryusage": "Utilisation Mémoire",
|
||||
"freespace": "Libre",
|
||||
"activeusers": "Utilisateurs Actifs",
|
||||
"numfiles": "Fichiers",
|
||||
"numshares": "Partages"
|
||||
},
|
||||
@@ -539,23 +642,13 @@
|
||||
"size": "Taille",
|
||||
"lastrun": "Dernière exécution",
|
||||
"nextrun": "Prochaine exécution",
|
||||
"failed": "En erreur"
|
||||
"failed": "Échoué"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "En cours",
|
||||
"total_workers": "Total",
|
||||
"records_total": "En attente"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nouveau",
|
||||
"up": "En ligne",
|
||||
"grace": "En Période de Grâce",
|
||||
"down": "Hors ligne",
|
||||
"paused": "En Pause",
|
||||
"status": "Statut",
|
||||
"last_ping": "Dernier Ping",
|
||||
"never": "Pas de Ping"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "Serveurs",
|
||||
"nodes": "Nœuds"
|
||||
@@ -565,13 +658,6 @@
|
||||
"targets_down": "Targets Down",
|
||||
"targets_total": "Total Targets"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Joueurs",
|
||||
"version": "Version",
|
||||
"status": "Statut",
|
||||
"up": "En ligne",
|
||||
"down": "Hors ligne"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Aujourd'hui",
|
||||
"gross_percent_1y": "Un an",
|
||||
@@ -588,93 +674,26 @@
|
||||
"lights_on": "Lumières allumées",
|
||||
"switches_on": "Commutateur On"
|
||||
},
|
||||
"freshrss": {
|
||||
"unread": "Non lu",
|
||||
"subscriptions": "Abonnements"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Affichages",
|
||||
"recordings": "Enregistrements",
|
||||
"scheduled": "Planifié",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Conteneurs",
|
||||
"updates": "Mises à jour"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Adresse",
|
||||
"expires": "Expire",
|
||||
"never": "Jamais",
|
||||
"last_seen": "Vu pour la dernière fois",
|
||||
"now": "Maintenant",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
"hours": "{{number}}h",
|
||||
"minutes": "{{number}}m",
|
||||
"seconds": "{{number}}s",
|
||||
"ago": "Il y a {{value}}"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "Cpu",
|
||||
"memUsage": "Mém",
|
||||
"systemTempC": "Temp",
|
||||
"poolUsage": "Pool",
|
||||
"volumeUsage": "Volume",
|
||||
"invalid": "Invalide"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Charge moy.",
|
||||
"memory": "Util. Mém.",
|
||||
"wanStatus": "Statut WAN",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"temp": "Temp",
|
||||
"disk": "Util. Disque",
|
||||
"wanIP": "IP WAN"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Demandes en cours",
|
||||
"requests_failed": "Demandes échouées"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Batterie",
|
||||
"grid_power": "Grille",
|
||||
"home_power": "Consommation",
|
||||
"charge_power": "Chargeur",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Connecté",
|
||||
"new_devices": "Nouvel Appareil",
|
||||
"down_alerts": "Alertes"
|
||||
"calibreweb": {
|
||||
"books": "Livres",
|
||||
"authors": "Auteurs",
|
||||
"categories": "Catégories",
|
||||
"series": "Séries TV"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Total en attente",
|
||||
"downloadSpeed": "Vitesse de téléchargement",
|
||||
"downloadCount": "En attente",
|
||||
"downloadBytesRemaining": "Restant",
|
||||
"downloadTotalBytes": "Taille"
|
||||
"downloadTotalBytes": "Taille",
|
||||
"downloadSpeed": "Débit"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Séries",
|
||||
"seriesCount": "Séries TV",
|
||||
"totalFiles": "Fichiers"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Nom",
|
||||
"map": "Carte",
|
||||
"currentPlayers": "Joueurs actuels",
|
||||
"players": "Joueurs",
|
||||
"maxPlayers": "Joueurs max",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping",
|
||||
"status": "Statut",
|
||||
"online": "En ligne",
|
||||
"offline": "Hors ligne"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "Résultat",
|
||||
"status": "Statut",
|
||||
@@ -686,7 +705,19 @@
|
||||
"inProgress": "En cours",
|
||||
"totalPrs": "PRs Total",
|
||||
"myPrs": "Mes PRs",
|
||||
"approved": "Approuvé"
|
||||
"approved": "Validé"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "Statut",
|
||||
"online": "En ligne",
|
||||
"offline": "Hors ligne",
|
||||
"name": "Nom",
|
||||
"map": "Carte",
|
||||
"currentPlayers": "Joueurs actuels",
|
||||
"players": "Joueurs",
|
||||
"maxPlayers": "Joueurs max",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
@@ -694,6 +725,12 @@
|
||||
"noRecent": "Obsolète",
|
||||
"totalUsed": "Esp. Utilisé"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recettes",
|
||||
"users": "Utilisateurs",
|
||||
"categories": "Catégories",
|
||||
"tags": "Étiquettes"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Téléchargement",
|
||||
"total": "Total",
|
||||
@@ -702,47 +739,23 @@
|
||||
"passed": "Réussi",
|
||||
"failed": "Échoué"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recettes",
|
||||
"users": "Utilisateurs",
|
||||
"categories": "Catégories",
|
||||
"tags": "Étiquettes"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Séries",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapitres",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"series": "Séries",
|
||||
"books": "Ebooks",
|
||||
"authors": "Auteurs",
|
||||
"categories": "Catégories"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Statut",
|
||||
"uptime": "Disponibilité",
|
||||
"uptime": "Démarré depuis",
|
||||
"lastDown": "Dernière interruption",
|
||||
"downDuration": "Durée d'interruption",
|
||||
"sitesUp": "Sites en ligne",
|
||||
"sitesDown": "Sites hors ligne",
|
||||
"paused": "En pause",
|
||||
"sitesUp": "En ligne",
|
||||
"sitesDown": "Hors ligne",
|
||||
"paused": "En Pause",
|
||||
"notyetchecked": "Non vérifié",
|
||||
"up": "En ligne",
|
||||
"up": "Up",
|
||||
"seemsdown": "Semble hors ligne",
|
||||
"down": "Hors ligne",
|
||||
"down": "Down",
|
||||
"unknown": "Inconnu"
|
||||
},
|
||||
"opendtu": {
|
||||
"relativePower": "Puissance %",
|
||||
"yieldDay": "Aujourd'hui",
|
||||
"limit": "Limite",
|
||||
"absolutePower": "Puissance"
|
||||
},
|
||||
"calendar": {
|
||||
"physicalRelease": "Release physique",
|
||||
"inCinemas": "En salle",
|
||||
"digitalRelease": "Release digitale"
|
||||
"physicalRelease": "Sortie physique",
|
||||
"digitalRelease": "Sortie numérique"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Greška",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Uspjelo",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Hiba",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Megfelelt",
|
||||
|
||||
@@ -610,7 +610,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Playing",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,58 +1,21 @@
|
||||
{
|
||||
"navidrome": {
|
||||
"nothing_streaming": "アクティブストリームなし",
|
||||
"please_wait": "お待ちください"
|
||||
},
|
||||
"npm": {
|
||||
"total": "合計",
|
||||
"enabled": "有効",
|
||||
"disabled": "無効"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "セッション",
|
||||
"numConnections": "コネクション",
|
||||
"dataRelayed": "中継",
|
||||
"transferRate": "レート"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"wait": "お待ちください",
|
||||
"temp": "温度",
|
||||
"uptime": "UP",
|
||||
"days": "日",
|
||||
"hours": "時間",
|
||||
"load": "ロード",
|
||||
"warn": "警告",
|
||||
"total": "トータル",
|
||||
"free": "空き",
|
||||
"used": "使用中",
|
||||
"crit": "Crit",
|
||||
"read": "読み込み",
|
||||
"write": "書き込み",
|
||||
"gpu": "GPU",
|
||||
"mem": "メモリ",
|
||||
"swap": "スワップ",
|
||||
"_temp": "Temp"
|
||||
},
|
||||
"autobrr": {
|
||||
"filters": "フィルター",
|
||||
"indexers": "Indexers",
|
||||
"approvedPushes": "承認済",
|
||||
"rejectedPushes": "却下"
|
||||
},
|
||||
"gluetun": {
|
||||
"region": "地域",
|
||||
"country": "国",
|
||||
"public_ip": "パブリックIP"
|
||||
},
|
||||
"common": {
|
||||
"bytes": "{{value, bytes}}",
|
||||
"bits": "{{value, bytes(bits: true)}}",
|
||||
"bbytes": "{{value, bytes(binary: true)}}",
|
||||
"bbits": "{{value, bytes(bits: true; binary: true)}}",
|
||||
"byterate": "{{value, rate(bits: false)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
"bitrate": "{{value, rate(bits: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "見つからないウィジェットタイプ: {{type}}",
|
||||
"api_error": "APIエラー",
|
||||
"information": "情報",
|
||||
"missing_type": "見つからないウィジェットタイプ: {{type}}",
|
||||
"status": "状態",
|
||||
"url": "URL",
|
||||
"raw_error": "生のエラー",
|
||||
@@ -69,14 +32,14 @@
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"mem": "MEM",
|
||||
"total": "合計",
|
||||
"free": "Free",
|
||||
"free": "空き",
|
||||
"used": "使用",
|
||||
"load": "ロード",
|
||||
"mem": "MEM",
|
||||
"temp": "温度",
|
||||
"max": "Max",
|
||||
"uptime": "UP",
|
||||
"max": "最大",
|
||||
"uptime": "上へ",
|
||||
"months": "月",
|
||||
"days": "日",
|
||||
"hours": "時間",
|
||||
@@ -88,14 +51,14 @@
|
||||
"days": "日",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"wlan": "Wi-Fi",
|
||||
"devices": "デバイス",
|
||||
"lan_devices": "LAN デバイス",
|
||||
"wlan_devices": "WLAN デバイス",
|
||||
"lan_users": "LAN ユーザ",
|
||||
"wlan_users": "WLAN ユーザ",
|
||||
"up": "UP",
|
||||
"down": "DOWN",
|
||||
"up": "上へ",
|
||||
"down": "下へ",
|
||||
"wait": "お待ちください",
|
||||
"empty_data": "サブシステム状態・不明"
|
||||
},
|
||||
@@ -104,20 +67,24 @@
|
||||
"tx": "TX",
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"running": "起動中",
|
||||
"offline": "オフライン",
|
||||
"error": "エラー",
|
||||
"unknown": "不明",
|
||||
"running": "起動中",
|
||||
"healthy": "健全",
|
||||
"starting": "起動中",
|
||||
"unhealthy": "非健全",
|
||||
"not_found": "不明",
|
||||
"exited": "終了",
|
||||
"partial": "部分的",
|
||||
"healthy": "健全"
|
||||
"partial": "部分的"
|
||||
},
|
||||
"ping": {
|
||||
"http_status": "HTTP ステータス",
|
||||
"error": "エラー",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"down": "下へ",
|
||||
"up": "上へ",
|
||||
"not_available": "利用できません。"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "再生中",
|
||||
@@ -129,21 +96,44 @@
|
||||
"episodes": "エピソード",
|
||||
"songs": "曲"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "発電量",
|
||||
"battery_soc": "バッテリー",
|
||||
"grid_power": "グリッド",
|
||||
"home_power": "消費",
|
||||
"charge_power": "チャージャー",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"flood": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "リーチ",
|
||||
"seed": "Seed"
|
||||
"seed": "シード"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "購読",
|
||||
"unread": "未読"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "アップストリーム",
|
||||
"requests": "現在のリクエスト",
|
||||
"requests_failed": "失敗したリクエスト"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "全観測数",
|
||||
"diffsDetected": "変更数"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "表示",
|
||||
"recordings": "レコーディング",
|
||||
"scheduled": "予定済",
|
||||
"passes": "パス"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "再生中",
|
||||
"transcoding": "変換中",
|
||||
"bitrate": "ビットレート",
|
||||
"no_active": "アクティブストリームなし",
|
||||
"no_active": "アクティブ・ストリーム無し",
|
||||
"plex_connection_error": "Plex接続の確認"
|
||||
},
|
||||
"omada": {
|
||||
@@ -160,9 +150,9 @@
|
||||
},
|
||||
"plex": {
|
||||
"streams": "アクティブストリーム",
|
||||
"albums": "アルバム",
|
||||
"movies": "映画",
|
||||
"tv": "テレビ番組",
|
||||
"albums": "アルバム"
|
||||
"tv": "テレビ番組"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "速度",
|
||||
@@ -178,25 +168,33 @@
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "リーチ",
|
||||
"seed": "Seed"
|
||||
"seed": "シード"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
"leech": "リーチ",
|
||||
"seed": "シード"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU使用量",
|
||||
"memUsage": "MEM使用量",
|
||||
"systemTempC": "システム温度",
|
||||
"poolUsage": "プール使用量",
|
||||
"volumeUsage": "ボリューム使用量",
|
||||
"invalid": "無効"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
"leech": "リーチ",
|
||||
"seed": "シード"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "ダウンロード",
|
||||
"upload": "アップロード",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
"leech": "リーチ",
|
||||
"seed": "シード"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "募集中",
|
||||
@@ -208,14 +206,14 @@
|
||||
"radarr": {
|
||||
"wanted": "募集中",
|
||||
"missing": "不明",
|
||||
"queued": "キュー",
|
||||
"queued": "待機中",
|
||||
"movies": "映画",
|
||||
"queue": "キュー",
|
||||
"unknown": "Unknown"
|
||||
"unknown": "不明"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "募集中",
|
||||
"queued": "キュー",
|
||||
"queued": "待機中",
|
||||
"artists": "アーティスト"
|
||||
},
|
||||
"readarr": {
|
||||
@@ -225,7 +223,7 @@
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "欠番エピソード",
|
||||
"missingMovies": "行方不明の映画"
|
||||
"missingMovies": "動画が見つかりません"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "保留中",
|
||||
@@ -243,11 +241,17 @@
|
||||
"approved": "承認済",
|
||||
"available": "利用可"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "合計",
|
||||
"connected": "接続済み",
|
||||
"new_devices": "新しいデバイス",
|
||||
"down_alerts": "ダウンアラート"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "クエリ",
|
||||
"blocked": "ブロック中",
|
||||
"gravity": "グラビティ",
|
||||
"blocked_percent": "ブロック %"
|
||||
"blocked_percent": "ブロック %",
|
||||
"gravity": "グラビティ"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "クエリ",
|
||||
@@ -265,6 +269,20 @@
|
||||
"stopped": "停止中",
|
||||
"total": "合計"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "アドレス",
|
||||
"expires": "失効",
|
||||
"never": "なし",
|
||||
"last_seen": "最終日時",
|
||||
"now": "現在",
|
||||
"years": "{{number}}年",
|
||||
"weeks": "{{number}}月",
|
||||
"days": "{{number}}日",
|
||||
"hours": "{{number}}時間",
|
||||
"minutes": "{{number}}分",
|
||||
"seconds": "{{number}}秒",
|
||||
"ago": "{{value}} 前"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "キュー",
|
||||
"processed": "処理済み",
|
||||
@@ -276,6 +294,15 @@
|
||||
"services": "サービス",
|
||||
"middleware": "ミドルウェア"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "アクティブ・ストリーム無し",
|
||||
"please_wait": "お待ちください"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "有効",
|
||||
"disabled": "無効",
|
||||
"total": "合計"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "1つ以上の暗号通貨を設定して追跡",
|
||||
"1hour": "1時間",
|
||||
@@ -289,27 +316,45 @@
|
||||
"messages": "メッセージ"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indexers",
|
||||
"numberOfGrabs": "Grabs",
|
||||
"enableIndexers": "インデックス",
|
||||
"numberOfGrabs": "Grab",
|
||||
"numberOfQueries": "クエリ",
|
||||
"numberOfFailGrabs": "Fail Grabs",
|
||||
"numberOfFailGrabs": "失敗したグラブ",
|
||||
"numberOfFailQueries": "失敗クエリー"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "設定済",
|
||||
"errored": "エラー"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "セッション",
|
||||
"numConnections": "コネクション",
|
||||
"dataRelayed": "中継",
|
||||
"transferRate": "速度"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "ユーザー",
|
||||
"user_count": "ユーザ",
|
||||
"status_count": "ポスト",
|
||||
"domain_count": "ドメイン"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "募集中",
|
||||
"queued": "待機中",
|
||||
"series": "シリーズ"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "プレイヤー",
|
||||
"version": "バージョン",
|
||||
"status": "状態",
|
||||
"up": "オンライン",
|
||||
"down": "オフライン"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "既読",
|
||||
"unread": "未読"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "ユーザー",
|
||||
"users": "ユーザ",
|
||||
"loginsLast24H": "ログイン (24時間)",
|
||||
"failedLoginsLast24H": "ログイン失敗(24時間)"
|
||||
},
|
||||
@@ -319,6 +364,26 @@
|
||||
"lxc": "LXC",
|
||||
"vms": "VM"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"load": "ロード",
|
||||
"wait": "お待ちください",
|
||||
"temp": "温度",
|
||||
"_temp": "温度",
|
||||
"warn": "警告",
|
||||
"uptime": "上へ",
|
||||
"total": "合計",
|
||||
"free": "空き",
|
||||
"used": "使用",
|
||||
"days": "日",
|
||||
"hours": "時間",
|
||||
"crit": "クリティカル",
|
||||
"read": "既読",
|
||||
"write": "書き込み",
|
||||
"gpu": "GPU",
|
||||
"mem": "メモリ",
|
||||
"swap": "スワップ"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "ブックマーク",
|
||||
"service": "サービス",
|
||||
@@ -329,47 +394,47 @@
|
||||
},
|
||||
"wmo": {
|
||||
"0-day": "晴れ",
|
||||
"1-day": "ほぼ晴れ",
|
||||
"0-night": "晴れ",
|
||||
"1-night": "ほぼ晴れ",
|
||||
"2-day": "一時くもり",
|
||||
"2-night": "一部くもり",
|
||||
"3-day": "くもり",
|
||||
"3-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": "霧雨",
|
||||
"53-day": "小雨",
|
||||
"53-night": "小雨",
|
||||
"55-day": "霧雨",
|
||||
"55-night": "霧雨",
|
||||
"56-day": "霧雨",
|
||||
"56-night": "霧雨",
|
||||
"57-day": "霧雨",
|
||||
"57-night": "霧雨",
|
||||
"56-day": "着氷性の霧雨",
|
||||
"56-night": "着氷性の霧雨",
|
||||
"57-day": "着氷性の小雨",
|
||||
"57-night": "着氷性の小雨",
|
||||
"61-day": "小雨",
|
||||
"61-night": "小雨",
|
||||
"63-day": "雨",
|
||||
"63-night": "雨",
|
||||
"67-night": "雨",
|
||||
"71-day": "雪",
|
||||
"65-day": "大雨",
|
||||
"65-night": "大雨",
|
||||
"66-day": "雨",
|
||||
"66-night": "雨",
|
||||
"67-day": "雨",
|
||||
"71-night": "雪",
|
||||
"66-day": "着氷性の雨",
|
||||
"66-night": "着氷性の雨",
|
||||
"67-day": "着氷性の雨",
|
||||
"67-night": "着氷性の雨",
|
||||
"71-day": "小雪",
|
||||
"71-night": "小雪",
|
||||
"73-day": "雪",
|
||||
"73-night": "雪",
|
||||
"75-day": "大雪",
|
||||
"75-night": "大雪",
|
||||
"77-day": "粒雪",
|
||||
"77-night": "粒雪",
|
||||
"80-day": "にわか雨",
|
||||
"80-night": "にわか雨",
|
||||
"77-day": "霧雪",
|
||||
"77-night": "霧雪",
|
||||
"80-day": "弱いにわか雨",
|
||||
"80-night": "弱いにわか雨",
|
||||
"81-day": "にわか雨",
|
||||
"81-night": "にわか雨",
|
||||
"82-day": "強いにわか雨",
|
||||
@@ -390,17 +455,33 @@
|
||||
"updates": "アップデート",
|
||||
"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": "オンライン",
|
||||
"grace": "猶予期間中",
|
||||
"down": "オフライン",
|
||||
"paused": "一時停止中",
|
||||
"status": "状態",
|
||||
"last_ping": "最後のPing",
|
||||
"never": "Pingしていません"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "スキャン済",
|
||||
"containers_updated": "更新済",
|
||||
"containers_failed": "失敗"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "承認済",
|
||||
"rejectedPushes": "却下",
|
||||
"filters": "フィルター",
|
||||
"indexers": "インデックス"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "キュー",
|
||||
"videos": "ビデオ",
|
||||
@@ -419,6 +500,11 @@
|
||||
"queue": "キュー",
|
||||
"total": "合計"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "パブリックIP",
|
||||
"region": "地域",
|
||||
"country": "国"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "チャンネル",
|
||||
"hd": "HD"
|
||||
@@ -429,7 +515,7 @@
|
||||
"unknown": "不明"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "受信箱",
|
||||
"inbox": "受信トレイ",
|
||||
"total": "合計"
|
||||
},
|
||||
"nextdns": {
|
||||
@@ -438,15 +524,21 @@
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU負荷",
|
||||
"memoryUsed": "使用メモリ",
|
||||
"memoryUsed": "使用済みメモリ",
|
||||
"uptime": "稼働時間",
|
||||
"numberOfLeases": "リース"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "全ストリーム",
|
||||
"streams_active": "アクティブ・ストリーム",
|
||||
"streams_all": "すべてのストリーム",
|
||||
"streams_active": "アクティブストリーム",
|
||||
"streams_xepg": "XEPGチャンネル"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "今日",
|
||||
"absolutePower": "電源",
|
||||
"relativePower": "電源 %",
|
||||
"limit": "リミット"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU負荷",
|
||||
"memory": "アクティブ・メモリ",
|
||||
@@ -459,21 +551,26 @@
|
||||
"print_progress": "進捗状況",
|
||||
"layers": "レイヤー"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Wanted",
|
||||
"queued": "Queued",
|
||||
"series": "シリーズ"
|
||||
},
|
||||
"octoprint": {
|
||||
"temp_bed": "ベッド温度",
|
||||
"printer_state": "状態",
|
||||
"temp_tool": "ツール温度",
|
||||
"temp_bed": "ベッド温度",
|
||||
"job_completion": "完了"
|
||||
},
|
||||
"cloudflared": {
|
||||
"origin_ip": "オリジンIP",
|
||||
"status": "状態"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "読み込み平均",
|
||||
"memory": "メモリ使用量",
|
||||
"wanStatus": "WANステータス",
|
||||
"up": "上へ",
|
||||
"down": "下へ",
|
||||
"temp": "温度",
|
||||
"disk": "ディスク使用量",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "データストア",
|
||||
"failed_tasks_24h": "失敗タスク(24h)",
|
||||
@@ -490,18 +587,29 @@
|
||||
"up": "サイトUp",
|
||||
"down": "サイトDown",
|
||||
"uptime": "稼働時間",
|
||||
"incident": "Incident",
|
||||
"m": "m"
|
||||
"incident": "インシデント",
|
||||
"m": "分"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "シリーズ",
|
||||
"archives": "アーカイブ",
|
||||
"chapters": "チャプター",
|
||||
"categories": "カテゴリー"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "ライブラリ",
|
||||
"series": "シリーズ",
|
||||
"books": "書籍"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "日",
|
||||
"uptime": "稼働時間",
|
||||
"volumeAvailable": "利用可"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "シリーズ",
|
||||
"issues": "課題",
|
||||
"wanted": "Wanted"
|
||||
"wanted": "募集中"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "アルバム",
|
||||
@@ -509,11 +617,6 @@
|
||||
"videos": "ビデオ",
|
||||
"people": "人"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "日",
|
||||
"uptime": "稼働時間",
|
||||
"volumeAvailable": "利用可能"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "キュー",
|
||||
"processing": "処理中",
|
||||
@@ -537,8 +640,8 @@
|
||||
"kopia": {
|
||||
"status": "状態",
|
||||
"size": "サイズ",
|
||||
"lastrun": "最終実行",
|
||||
"nextrun": "次の実行",
|
||||
"lastrun": "前回の実行",
|
||||
"nextrun": "次回の実行",
|
||||
"failed": "失敗"
|
||||
},
|
||||
"unmanic": {
|
||||
@@ -546,16 +649,6 @@
|
||||
"total_workers": "トータル・ワーカー",
|
||||
"records_total": "キューの長さ"
|
||||
},
|
||||
"healthchecks": {
|
||||
"never": "Pingしていません",
|
||||
"new": "New",
|
||||
"up": "オンライン",
|
||||
"grace": "猶予期間中",
|
||||
"down": "オフライン",
|
||||
"paused": "一時停止中",
|
||||
"status": "状態",
|
||||
"last_ping": "最後のPing"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "サーバ",
|
||||
"nodes": "ノード"
|
||||
@@ -565,17 +658,10 @@
|
||||
"targets_down": "ターゲット Down",
|
||||
"targets_total": "ターゲット合計"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "プレイヤー",
|
||||
"version": "バージョン",
|
||||
"status": "状態",
|
||||
"up": "オンライン",
|
||||
"down": "オフライン"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_max": "全期間",
|
||||
"gross_percent_today": "今日",
|
||||
"gross_percent_1y": "1年"
|
||||
"gross_percent_1y": "1年",
|
||||
"gross_percent_max": "全期間"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"podcasts": "ポッドキャスト",
|
||||
@@ -588,161 +674,88 @@
|
||||
"lights_on": "点灯",
|
||||
"switches_on": "スイッチオン"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "購読",
|
||||
"unread": "未読"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "ショー",
|
||||
"recordings": "レコーディング",
|
||||
"scheduled": "予定済",
|
||||
"passes": "パス"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "モニタリング",
|
||||
"updates": "アップデート"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "アドレス",
|
||||
"expires": "失効",
|
||||
"never": "なし",
|
||||
"last_seen": "最終日時",
|
||||
"now": "現在",
|
||||
"years": "{{number}}年",
|
||||
"weeks": "{{number}}月",
|
||||
"days": "{{number}}日",
|
||||
"hours": "{{number}}時間",
|
||||
"minutes": "{{number}}分",
|
||||
"seconds": "{{number}}秒",
|
||||
"ago": "{{value}} 前"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU使用量",
|
||||
"memUsage": "MEM使用量",
|
||||
"systemTempC": "システム温度",
|
||||
"poolUsage": "プール使用量",
|
||||
"volumeUsage": "ボリューム使用量",
|
||||
"invalid": "無効"
|
||||
},
|
||||
"pfsense": {
|
||||
"up": "アップ",
|
||||
"load": "読み込み平均",
|
||||
"memory": "メモリ使用量",
|
||||
"wanStatus": "WANステータス",
|
||||
"down": "ダウン",
|
||||
"temp": "温度",
|
||||
"disk": "ディスク使用量",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "アップストリーム",
|
||||
"requests": "現在のリクエスト",
|
||||
"requests_failed": "失敗したリクエスト"
|
||||
},
|
||||
"evcc": {
|
||||
"watt_hour": "Wh",
|
||||
"pv_power": "発電量",
|
||||
"battery_soc": "バッテリー",
|
||||
"grid_power": "グリッド",
|
||||
"home_power": "消費",
|
||||
"charge_power": "チャージャー"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "トータル",
|
||||
"connected": "接続済み",
|
||||
"new_devices": "新しいデバイス",
|
||||
"down_alerts": "ダウンアラート"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "キュー",
|
||||
"downloadSpeed": "スピード",
|
||||
"downloadBytesRemaining": "残り",
|
||||
"downloadTotalBytes": "サイズ"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "シリーズ",
|
||||
"totalFiles": "ファイル"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "名前",
|
||||
"map": "マップ",
|
||||
"currentPlayers": "現在のプレーヤー",
|
||||
"players": "プレーヤー",
|
||||
"maxPlayers": "最大プレーヤー",
|
||||
"bots": "ボット",
|
||||
"ping": "Ping",
|
||||
"status": "ステータス",
|
||||
"online": "オンライン",
|
||||
"offline": "オフライン"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "結果",
|
||||
"status": "ステータス",
|
||||
"buildId": "ビルドID",
|
||||
"succeeded": "成功",
|
||||
"notStarted": "Not Started",
|
||||
"failed": "失敗",
|
||||
"canceled": "キャンセル",
|
||||
"inProgress": "進行中",
|
||||
"totalPrs": "合計PR数",
|
||||
"myPrs": "私のPR",
|
||||
"approved": "承認"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
"errored": "エラー",
|
||||
"noRecent": "期限切れ",
|
||||
"totalUsed": "使用済みストレージ"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "ダウンロード中",
|
||||
"total": "トータル",
|
||||
"running": "実行中",
|
||||
"stopped": "停止中",
|
||||
"passed": "合格",
|
||||
"failed": "不合格"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "レシピ",
|
||||
"users": "ユーザー",
|
||||
"categories": "カテゴリー",
|
||||
"tags": "タグ"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "シリーズ",
|
||||
"archives": "アーカイブ",
|
||||
"chapters": "チャプター",
|
||||
"categories": "カテゴリー"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "書籍",
|
||||
"authors": "著者",
|
||||
"categories": "カテゴリー",
|
||||
"series": "シリーズ"
|
||||
},
|
||||
"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"
|
||||
"jdownloader": {
|
||||
"downloadCount": "キュー",
|
||||
"downloadBytesRemaining": "残り",
|
||||
"downloadTotalBytes": "サイズ",
|
||||
"downloadSpeed": "スピード"
|
||||
},
|
||||
"opendtu": {
|
||||
"relativePower": "Power %",
|
||||
"yieldDay": "Today",
|
||||
"limit": "Limit",
|
||||
"absolutePower": "Power"
|
||||
"kavita": {
|
||||
"seriesCount": "シリーズ",
|
||||
"totalFiles": "ファイル"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "結果",
|
||||
"status": "状態",
|
||||
"buildId": "ビルドID",
|
||||
"succeeded": "成功",
|
||||
"notStarted": "開始していません",
|
||||
"failed": "失敗",
|
||||
"canceled": "キャンセル",
|
||||
"inProgress": "進行中",
|
||||
"totalPrs": "合計PR数",
|
||||
"myPrs": "私のPR",
|
||||
"approved": "承認済"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "状態",
|
||||
"online": "オンライン",
|
||||
"offline": "オフライン",
|
||||
"name": "名前",
|
||||
"map": "マップ",
|
||||
"currentPlayers": "現在のプレーヤー",
|
||||
"players": "プレイヤー",
|
||||
"maxPlayers": "最大プレイヤー数",
|
||||
"bots": "ボット",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "はい",
|
||||
"errored": "エラー",
|
||||
"noRecent": "期限切れ",
|
||||
"totalUsed": "使用済みストレージ"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "レシピ",
|
||||
"users": "ユーザ",
|
||||
"categories": "カテゴリー",
|
||||
"tags": "タグ"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "ダウンロード中",
|
||||
"total": "合計",
|
||||
"running": "起動中",
|
||||
"stopped": "停止中",
|
||||
"passed": "合格",
|
||||
"failed": "失敗"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "状態",
|
||||
"uptime": "稼働時間",
|
||||
"lastDown": "最後のダウンタイム",
|
||||
"downDuration": "ダウンタイム感覚",
|
||||
"sitesUp": "サイトUp",
|
||||
"sitesDown": "サイトDown",
|
||||
"paused": "一時停止中",
|
||||
"notyetchecked": "チェックされていません",
|
||||
"up": "上へ",
|
||||
"seemsdown": "ダウンしているようです",
|
||||
"down": "下へ",
|
||||
"unknown": "不明"
|
||||
},
|
||||
"calendar": {
|
||||
"physicalRelease": "Physical release",
|
||||
"inCinemas": "In cinemas",
|
||||
"digitalRelease": "Digital release"
|
||||
"inCinemas": "映画館内",
|
||||
"physicalRelease": "物理的なリリース",
|
||||
"digitalRelease": "デジタル・リリース"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "오류",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "재생 중",
|
||||
|
||||
@@ -71,7 +71,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Kļūda",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Atskaņo",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Ralat",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Lulus",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,20 +1,42 @@
|
||||
{
|
||||
"common": {
|
||||
"bytes": "{{value, bytes}}",
|
||||
"bits": "{{value, bytes(bits: true)}}",
|
||||
"bbytes": "{{value, bytes(binary: true)}}",
|
||||
"bbits": "{{value, bytes(bits: true; binary: true)}}",
|
||||
"byterate": "{{value, rate(bits: false)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bitrate": "{{value, rate(bits: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Brakujący typ widżetu: {{type}}",
|
||||
"api_error": "Błąd API",
|
||||
"information": "Informacje",
|
||||
"status": "Stan",
|
||||
"url": "Adres URL",
|
||||
"raw_error": "Niesformatowany błąd",
|
||||
"response_data": "Dane odpowiedzi"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Aktualna lokalizacja",
|
||||
"allow": "Kliknij, aby zezwolić",
|
||||
"updating": "Aktualizacja",
|
||||
"wait": "Proszę czekać",
|
||||
"current": "Aktualna lokalizacja"
|
||||
"wait": "Proszę czekać"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Szukaj…"
|
||||
},
|
||||
"resources": {
|
||||
"used": "Użyte",
|
||||
"load": "Obciążenie",
|
||||
"cpu": "Procesor",
|
||||
"mem": "PAM",
|
||||
"total": "Całkowite",
|
||||
"free": "Wolne",
|
||||
"cpu": "CPU",
|
||||
"mem": "PAM",
|
||||
"used": "Użyte",
|
||||
"load": "Obciążenie",
|
||||
"temp": "TEMP.",
|
||||
"max": "Maks",
|
||||
"uptime": "CZAS",
|
||||
@@ -23,16 +45,90 @@
|
||||
"hours": "godz",
|
||||
"minutes": "min"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Użytkownicy",
|
||||
"uptime": "Czas pracy systemu",
|
||||
"days": "Dni",
|
||||
"wan": "Sieć WAN",
|
||||
"lan": "Sieć LAN",
|
||||
"wlan": "Sieć WLAN",
|
||||
"devices": "Urządzenia",
|
||||
"lan_devices": "Urządzenia LAN",
|
||||
"wlan_devices": "Urządzenia WLAN",
|
||||
"lan_users": "Użytkownicy LAN",
|
||||
"wlan_users": "Użytkownicy WLAN",
|
||||
"up": "CZAS",
|
||||
"down": "Pobieranie",
|
||||
"wait": "Proszę czekać",
|
||||
"empty_data": "Nieznany stan"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "Rx",
|
||||
"tx": "Tx",
|
||||
"mem": "PAM",
|
||||
"cpu": "Procesor",
|
||||
"running": "Działa",
|
||||
"offline": "Offline",
|
||||
"error": "Błąd",
|
||||
"unknown": "Nieznany",
|
||||
"healthy": "Zdrowy",
|
||||
"starting": "Rozpoczynanie",
|
||||
"unhealthy": "Niezdrowe",
|
||||
"not_found": "Nie znaleziono",
|
||||
"exited": "Zakończone",
|
||||
"partial": "Częściowe"
|
||||
},
|
||||
"ping": {
|
||||
"http_status": "HTTP status",
|
||||
"error": "Błąd",
|
||||
"ping": "Ping",
|
||||
"down": "Down",
|
||||
"up": "Up",
|
||||
"not_available": "Not Available"
|
||||
},
|
||||
"emby": {
|
||||
"no_active": "Brak aktywnych strumieni",
|
||||
"playing": "Odtwarzanie",
|
||||
"transcoding": "Transkodowanie",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Brak aktywnych strumieni",
|
||||
"movies": "Filmy",
|
||||
"series": "Seriale",
|
||||
"episodes": "Odcinki",
|
||||
"songs": "Piosenki"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Battery",
|
||||
"grid_power": "Siatka",
|
||||
"home_power": "Consumption",
|
||||
"charge_power": "Charger",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Subskrypcje",
|
||||
"unread": "Nieprzeczytane"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Current requests",
|
||||
"requests_failed": "Failed requests"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Obserwowanych ogółem",
|
||||
"diffsDetected": "Wykryto różnic"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Shows",
|
||||
"recordings": "Nagrywanie",
|
||||
"scheduled": "W kolejce",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "Odtwarzanie",
|
||||
"transcoding": "Transkodowanie",
|
||||
@@ -40,58 +136,24 @@
|
||||
"no_active": "Brak aktywnych strumieni",
|
||||
"plex_connection_error": "Check Plex Connection"
|
||||
},
|
||||
"speedtest": {
|
||||
"download": "Pobieranie",
|
||||
"ping": "Ping",
|
||||
"upload": "Wysyłanie"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Działające",
|
||||
"stopped": "Zatrzymane",
|
||||
"total": "Ogólnie"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"1day": "1 dzień",
|
||||
"7days": "7 dni",
|
||||
"30days": "30 dni",
|
||||
"1hour": "1 godzina",
|
||||
"configure": "Wybierz jedną lub więcej kryptowalut do śledzenia"
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "Aplikacje",
|
||||
"clients": "Klienci",
|
||||
"messages": "Wiadomości"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Brakujący typ widżetu: {{type}}",
|
||||
"api_error": "Błąd API",
|
||||
"status": "Stan",
|
||||
"url": "Adres URL",
|
||||
"information": "Informacje",
|
||||
"raw_error": "Niesformatowany błąd",
|
||||
"response_data": "Dane odpowiedzi"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "Rx",
|
||||
"tx": "Tx",
|
||||
"mem": "Pamięć",
|
||||
"cpu": "Procesor",
|
||||
"offline": "Offline",
|
||||
"error": "Błąd",
|
||||
"unknown": "Nieznany",
|
||||
"running": "Działa",
|
||||
"starting": "Rozpoczynanie",
|
||||
"unhealthy": "Niezdrowe",
|
||||
"not_found": "Nie znaleziono",
|
||||
"exited": "Exited",
|
||||
"partial": "Częściowe",
|
||||
"healthy": "Zdrowy"
|
||||
"omada": {
|
||||
"connectedAp": "Połączone punkty dostępowe",
|
||||
"activeUser": "Aktywne urządzenia",
|
||||
"alerts": "Alarmy",
|
||||
"connectedGateway": "Połączone bramy",
|
||||
"connectedSwitches": "Połączone przełączniki"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Szybkość",
|
||||
"remaining": "Pozostało",
|
||||
"downloaded": "Pobrano"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Aktywne strumienie",
|
||||
"albums": "Albumy",
|
||||
"movies": "Filmy",
|
||||
"tv": "Seriale"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Szybkość",
|
||||
"queue": "Kolejka",
|
||||
@@ -108,20 +170,46 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memUsage": "MEM Usage",
|
||||
"systemTempC": "System Temp",
|
||||
"poolUsage": "Pool Usage",
|
||||
"volumeUsage": "Volume Usage",
|
||||
"invalid": "Invalid"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "Poszukiwane",
|
||||
"queued": "W kolejce",
|
||||
"series": "Seriale",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queue": "Kolejka",
|
||||
"unknown": "Nieznany"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Poszukiwane",
|
||||
"missing": "Brakujące",
|
||||
"queued": "W kolejce",
|
||||
"movies": "Filmy",
|
||||
"missing": "Brakujące",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
"queue": "Kolejka",
|
||||
"unknown": "Nieznany"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Poszukiwane",
|
||||
@@ -149,25 +237,83 @@
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "Oczekiwane",
|
||||
"processing": "Przetwarzane",
|
||||
"approved": "Zaakceptowane",
|
||||
"available": "Dostępne",
|
||||
"processing": "Przetwarzane"
|
||||
"available": "Dostępne"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Całkowite",
|
||||
"connected": "Connected",
|
||||
"new_devices": "New Devices",
|
||||
"down_alerts": "Down Alerts"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "Zapytania",
|
||||
"blocked": "Zablokowane",
|
||||
"gravity": "Grawitacja",
|
||||
"blocked_percent": "Blocked %"
|
||||
"blocked_percent": "Blocked %",
|
||||
"gravity": "Grawitacja"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Zapytania",
|
||||
"blocked": "Zablokowane",
|
||||
"filtered": "Przefiltrowane",
|
||||
"latency": "Opóźnienia"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Wysyłanie",
|
||||
"download": "Pobieranie",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Działa",
|
||||
"stopped": "Zatrzymane",
|
||||
"total": "Całkowite"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Address",
|
||||
"expires": "Expires",
|
||||
"never": "Nigdy",
|
||||
"last_seen": "Last Seen",
|
||||
"now": "Teraz",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
"hours": "{{number}}h",
|
||||
"minutes": "{{number}}m",
|
||||
"seconds": "{{number}}s",
|
||||
"ago": "{{value}} Ago"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Kolejka",
|
||||
"processed": "Przetworzone",
|
||||
"errored": "Błędne",
|
||||
"saved": "Zapisane"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Routery",
|
||||
"services": "Serwisy",
|
||||
"middleware": "Pośrednicy"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "Brak aktywnych strumieni",
|
||||
"please_wait": "Proszę czekać"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Włączone",
|
||||
"disabled": "Wyłączone",
|
||||
"total": "Ogólnie"
|
||||
"total": "Całkowite"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "Wybierz jedną lub więcej kryptowalut do śledzenia",
|
||||
"1hour": "1 godzina",
|
||||
"1day": "1 dzień",
|
||||
"7days": "7 dni",
|
||||
"30days": "30 dni"
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "Aplikacje",
|
||||
"clients": "Klienci",
|
||||
"messages": "Wiadomości"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indeksery",
|
||||
@@ -180,28 +326,32 @@
|
||||
"configured": "Skonfigurowane",
|
||||
"errored": "Błędne"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Zapytania",
|
||||
"blocked": "Zablokowane",
|
||||
"filtered": "Przefiltrowane",
|
||||
"latency": "Opóźnienia"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sesje",
|
||||
"numConnections": "Połączenia",
|
||||
"dataRelayed": "Przekazane",
|
||||
"transferRate": "Szybkość"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "Użytkownicy",
|
||||
"status_count": "Posty",
|
||||
"domain_count": "Domeny"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sesje",
|
||||
"numConnections": "Połączenia",
|
||||
"dataRelayed": "Przekazane",
|
||||
"transferRate": "Przesył"
|
||||
"medusa": {
|
||||
"wanted": "Poszukiwane",
|
||||
"queued": "W kolejce",
|
||||
"series": "Seriale"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Gracze",
|
||||
"version": "Wersja",
|
||||
"status": "Stan",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Przeczytane",
|
||||
"unread": "Nieprzeczytane"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Użytkownicy",
|
||||
@@ -209,60 +359,40 @@
|
||||
"failedLoginsLast24H": "Nieudane logowania (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "Pamięć",
|
||||
"mem": "PAM",
|
||||
"cpu": "Procesor",
|
||||
"lxc": "Kontenery LXC",
|
||||
"vms": "Maszyn wirtualnych"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Użytkownicy",
|
||||
"uptime": "Czas pracy systemu",
|
||||
"days": "Dni",
|
||||
"wan": "WAN",
|
||||
"lan_users": "Użytkownicy LAN",
|
||||
"wlan_users": "Użytkownicy WLAN",
|
||||
"up": "Wysyłanie",
|
||||
"down": "Pobieranie",
|
||||
"wait": "Proszę czekać",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Urządzenia",
|
||||
"lan_devices": "Urządzenia LAN",
|
||||
"wlan_devices": "Urządzenia WLAN",
|
||||
"empty_data": "Nieznany stan"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Aktywne strumienie",
|
||||
"movies": "Filmy",
|
||||
"tv": "Seriale",
|
||||
"albums": "Albumy"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "Procesor",
|
||||
"load": "Obciążenie",
|
||||
"wait": "Proszę czekać",
|
||||
"temp": "TEMP",
|
||||
"temp": "TEMP.",
|
||||
"_temp": "Temperatura",
|
||||
"warn": "Ostrzeżenie",
|
||||
"uptime": "CZAS",
|
||||
"total": "Całkowite",
|
||||
"free": "Wolne",
|
||||
"used": "Użyte",
|
||||
"days": "dni",
|
||||
"hours": "godz",
|
||||
"load": "Load",
|
||||
"warn": "Warn",
|
||||
"total": "Total",
|
||||
"free": "Free",
|
||||
"used": "Used",
|
||||
"crit": "Crit",
|
||||
"read": "Read",
|
||||
"write": "Write",
|
||||
"gpu": "GPU",
|
||||
"mem": "Mem",
|
||||
"swap": "Swap",
|
||||
"_temp": "Temp"
|
||||
"read": "Przeczytane",
|
||||
"write": "Zapis",
|
||||
"gpu": "Karta graficzna",
|
||||
"mem": "Pamięć",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"diffsDetected": "Wykryto różnic",
|
||||
"totalObserved": "Obserwowanych ogółem"
|
||||
"quicklaunch": {
|
||||
"bookmark": "Zakładka",
|
||||
"service": "Usługi",
|
||||
"search": "Wyszukaj",
|
||||
"custom": "Niestandardowe",
|
||||
"visit": "Odwiedź",
|
||||
"url": "Adres URL"
|
||||
},
|
||||
"wmo": {
|
||||
"77-day": "Ziarnisty śnieg",
|
||||
"0-day": "Słoneczny",
|
||||
"0-night": "Bezchmurny",
|
||||
"1-day": "Głównie słoneczny",
|
||||
@@ -301,6 +431,7 @@
|
||||
"73-night": "Śnieg",
|
||||
"75-day": "Ciężki śnieg",
|
||||
"75-night": "Ciężki śnieg",
|
||||
"77-day": "Ziarnisty śnieg",
|
||||
"77-night": "Ziarnisty śnieg",
|
||||
"80-day": "Lekkie opady",
|
||||
"80-night": "Lekkie opady",
|
||||
@@ -319,14 +450,6 @@
|
||||
"99-day": "Burza z gradobiciem",
|
||||
"99-night": "Burza z gradobiciem"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "Zakładka",
|
||||
"service": "Usługi",
|
||||
"search": "Wyszukaj",
|
||||
"custom": "Niestandardowe",
|
||||
"visit": "Odwiedź",
|
||||
"url": "Adres URL"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "System",
|
||||
"updates": "Aktualizacje",
|
||||
@@ -335,20 +458,30 @@
|
||||
"child_bridges": "Child Bridges",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "Up",
|
||||
"pending": "Oczekujące",
|
||||
"pending": "Oczekiwane",
|
||||
"down": "Down"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nowy",
|
||||
"up": "Online",
|
||||
"grace": "In Grace Period",
|
||||
"down": "Offline",
|
||||
"paused": "Zatrzymane",
|
||||
"status": "Stan",
|
||||
"last_ping": "Last Ping",
|
||||
"never": "No pings yet"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Zeskanowane",
|
||||
"containers_updated": "Zaktualizowane",
|
||||
"containers_failed": "Niepowodzenie"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Zaakceptowane",
|
||||
"rejectedPushes": "Odrzucone",
|
||||
"filters": "Filtry",
|
||||
"indexers": "Indeksery"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Zeskanowane",
|
||||
"containers_updated": "Zaktualizowane",
|
||||
"containers_failed": "Niepowodzenie"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Kolejka",
|
||||
"videos": "Pliki wideo",
|
||||
@@ -358,18 +491,14 @@
|
||||
"truenas": {
|
||||
"load": "Obciążenie systemu",
|
||||
"uptime": "Czas działania",
|
||||
"alerts": "Ostrzeżenia",
|
||||
"alerts": "Alarmy",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"navidrome": {
|
||||
"please_wait": "Proszę czekać",
|
||||
"nothing_streaming": "Brak aktywnych strumieni"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Prędkość",
|
||||
"active": "Aktywne",
|
||||
"active": "Aktywny",
|
||||
"queue": "Kolejka",
|
||||
"total": "Razem"
|
||||
"total": "Całkowite"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "Adres publiczny",
|
||||
@@ -380,62 +509,19 @@
|
||||
"channels": "Kanały",
|
||||
"hd": "HD"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Błąd",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Powodzenie",
|
||||
"failed": "Nieudane",
|
||||
"unknown": "Nieznane"
|
||||
"failed": "Niepowodzenie",
|
||||
"unknown": "Nieznany"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "Skrzynka odbiorcza",
|
||||
"total": "W sumie"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Kolejka",
|
||||
"processed": "Przetworzone",
|
||||
"errored": "Błędne",
|
||||
"saved": "Zapisane"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Przeczytane",
|
||||
"unread": "Nieprzeczytane"
|
||||
"total": "Całkowite"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Proszę czekać",
|
||||
"no_devices": "Nie otrzymano danych urządzenia"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedSwitches": "Połączone przełączniki",
|
||||
"connectedAp": "Połączone punkty dostępowe",
|
||||
"activeUser": "Aktywne urządzenia",
|
||||
"alerts": "Alarmy",
|
||||
"connectedGateway": "Połączone bramy"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Obciążenie procesora",
|
||||
"memoryUsed": "Zuyżyta pamięć",
|
||||
@@ -447,6 +533,12 @@
|
||||
"streams_active": "Aktywne strumienie",
|
||||
"streams_xepg": "Kanały XEPG"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "Dzisiaj",
|
||||
"absolutePower": "Power",
|
||||
"relativePower": "Power %",
|
||||
"limit": "Limit"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "Obciążenie procesora",
|
||||
"memory": "Pamięć rzeczywista",
|
||||
@@ -459,31 +551,36 @@
|
||||
"print_progress": "Postęp",
|
||||
"layers": "Warstwy"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "Poszukiwane",
|
||||
"queued": "Zakolejkowane",
|
||||
"series": "Seriale"
|
||||
},
|
||||
"octoprint": {
|
||||
"printer_state": "Status",
|
||||
"printer_state": "Stan",
|
||||
"temp_tool": "Tool temp",
|
||||
"temp_bed": "Bed temp",
|
||||
"job_completion": "Ukończono"
|
||||
},
|
||||
"cloudflared": {
|
||||
"origin_ip": "Origin IP",
|
||||
"status": "Status"
|
||||
"status": "Stan"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Load Avg",
|
||||
"memory": "Mem Usage",
|
||||
"wanStatus": "WAN Status",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"temp": "Temperatura",
|
||||
"disk": "Disk Usage",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "Datastore",
|
||||
"failed_tasks_24h": "Failed Tasks 24h",
|
||||
"cpu_usage": "CPU",
|
||||
"cpu_usage": "Procesor",
|
||||
"memory_usage": "Pamięć"
|
||||
},
|
||||
"immich": {
|
||||
"users": "Użytkownicy",
|
||||
"photos": "Zdjęcia",
|
||||
"videos": "Filmy",
|
||||
"videos": "Pliki wideo",
|
||||
"storage": "Pamięć"
|
||||
},
|
||||
"uptimekuma": {
|
||||
@@ -493,31 +590,37 @@
|
||||
"incident": "Incydent",
|
||||
"m": "min"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Seriale",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "Biblioteki",
|
||||
"series": "Seriale",
|
||||
"books": "Książki"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "Dni",
|
||||
"uptime": "Czas działania",
|
||||
"volumeAvailable": "Dostępne"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "Seriale",
|
||||
"issues": "Zgłoszenia",
|
||||
"wanted": "Wanted"
|
||||
"wanted": "Poszukiwane"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "Albumy",
|
||||
"photos": "Zdjęcia",
|
||||
"videos": "Filmy",
|
||||
"videos": "Pliki wideo",
|
||||
"people": "Ludzie"
|
||||
},
|
||||
"diskstation": {
|
||||
"uptime": "Czas działania",
|
||||
"volumeAvailable": "Dostępne",
|
||||
"days": "Dni"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "Kolejka",
|
||||
"processing": "Przetwarzanie",
|
||||
"processed": "Processed",
|
||||
"processing": "Przetwarzane",
|
||||
"processed": "Przetworzone",
|
||||
"time": "Czas"
|
||||
},
|
||||
"grafana": {
|
||||
@@ -535,27 +638,17 @@
|
||||
"numshares": "Shared Items"
|
||||
},
|
||||
"kopia": {
|
||||
"status": "Status",
|
||||
"status": "Stan",
|
||||
"size": "Rozmiar",
|
||||
"lastrun": "Ostatnie uruchomienie",
|
||||
"nextrun": "Next Run",
|
||||
"failed": "Nieudane"
|
||||
"failed": "Niepowodzenie"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "Aktywni pracownicy",
|
||||
"total_workers": "Total Workers",
|
||||
"records_total": "Długość kolejki"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "Nowy",
|
||||
"up": "Online",
|
||||
"grace": "In Grace Period",
|
||||
"down": "Offline",
|
||||
"paused": "Zatrzymane",
|
||||
"status": "Status",
|
||||
"last_ping": "Last Ping",
|
||||
"never": "No pings yet"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "Serwery",
|
||||
"nodes": "Nodes"
|
||||
@@ -565,13 +658,6 @@
|
||||
"targets_down": "Targets Down",
|
||||
"targets_total": "Total Targets"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "Gracze",
|
||||
"version": "Wersja",
|
||||
"status": "Status",
|
||||
"up": "Online",
|
||||
"down": "Offline"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "Dzisiaj",
|
||||
"gross_percent_1y": "Rok",
|
||||
@@ -588,105 +674,50 @@
|
||||
"lights_on": "Lights On",
|
||||
"switches_on": "Switches On"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "Subskrypcje",
|
||||
"unread": "Nieprzeczytane"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "Shows",
|
||||
"recordings": "Nagrywanie",
|
||||
"scheduled": "W kolejce",
|
||||
"passes": "Passes"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "Monitoring",
|
||||
"updates": "Aktualizacje"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Address",
|
||||
"expires": "Expires",
|
||||
"never": "Never",
|
||||
"last_seen": "Last Seen",
|
||||
"now": "Now",
|
||||
"years": "{{number}}y",
|
||||
"weeks": "{{number}}w",
|
||||
"days": "{{number}}d",
|
||||
"hours": "{{number}}h",
|
||||
"minutes": "{{number}}m",
|
||||
"seconds": "{{number}}s",
|
||||
"ago": "{{value}} Ago"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU Usage",
|
||||
"memUsage": "MEM Usage",
|
||||
"systemTempC": "System Temp",
|
||||
"poolUsage": "Pool Usage",
|
||||
"volumeUsage": "Volume Usage",
|
||||
"invalid": "Invalid"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "Load Avg",
|
||||
"memory": "Mem Usage",
|
||||
"wanStatus": "WAN Status",
|
||||
"up": "Up",
|
||||
"down": "Down",
|
||||
"temp": "Temp",
|
||||
"disk": "Disk Usage",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "Upstreams",
|
||||
"requests": "Current requests",
|
||||
"requests_failed": "Failed requests"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "Production",
|
||||
"battery_soc": "Battery",
|
||||
"grid_power": "Grid",
|
||||
"home_power": "Consumption",
|
||||
"charge_power": "Charger",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "Total",
|
||||
"connected": "Connected",
|
||||
"new_devices": "New Devices",
|
||||
"down_alerts": "Down Alerts"
|
||||
"calibreweb": {
|
||||
"books": "Książki",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Seriale"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "Queue Count",
|
||||
"downloadSpeed": "Download Speed",
|
||||
"downloadBytesRemaining": "Remaining",
|
||||
"downloadTotalBytes": "Size"
|
||||
"downloadCount": "Kolejka",
|
||||
"downloadBytesRemaining": "Pozostało",
|
||||
"downloadTotalBytes": "Rozmiar",
|
||||
"downloadSpeed": "Prędkość"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "Series",
|
||||
"totalFiles": "Files"
|
||||
},
|
||||
"gamedig": {
|
||||
"name": "Name",
|
||||
"map": "Map",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Players",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Bots",
|
||||
"ping": "Ping",
|
||||
"status": "Status",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
"seriesCount": "Seriale",
|
||||
"totalFiles": "Pliki"
|
||||
},
|
||||
"azuredevops": {
|
||||
"status": "Status",
|
||||
"result": "Result",
|
||||
"status": "Stan",
|
||||
"buildId": "Build ID",
|
||||
"succeeded": "Succeeded",
|
||||
"notStarted": "Not Started",
|
||||
"failed": "Failed",
|
||||
"myPrs": "My PRs",
|
||||
"approved": "Approved",
|
||||
"result": "Result",
|
||||
"failed": "Niepowodzenie",
|
||||
"canceled": "Canceled",
|
||||
"inProgress": "In Progress",
|
||||
"totalPrs": "Total PRs"
|
||||
"totalPrs": "Total PRs",
|
||||
"myPrs": "My PRs",
|
||||
"approved": "Zaakceptowane"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "Stan",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"name": "Nazwa",
|
||||
"map": "Mapa",
|
||||
"currentPlayers": "Current players",
|
||||
"players": "Gracze",
|
||||
"maxPlayers": "Max players",
|
||||
"bots": "Boty",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "Ok",
|
||||
@@ -694,55 +725,37 @@
|
||||
"noRecent": "Out of Date",
|
||||
"totalUsed": "Used Storage"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"total": "Total",
|
||||
"running": "Running",
|
||||
"stopped": "Stopped",
|
||||
"passed": "Passed",
|
||||
"failed": "Failed"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "Recipes",
|
||||
"users": "Users",
|
||||
"users": "Użytkownicy",
|
||||
"categories": "Categories",
|
||||
"tags": "Tags"
|
||||
"tags": "Tagi"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "Series",
|
||||
"archives": "Archives",
|
||||
"chapters": "Chapters",
|
||||
"categories": "Categories"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "Books",
|
||||
"authors": "Authors",
|
||||
"categories": "Categories",
|
||||
"series": "Series"
|
||||
"openmediavault": {
|
||||
"downloading": "Downloading",
|
||||
"total": "Całkowite",
|
||||
"running": "Działa",
|
||||
"stopped": "Zatrzymane",
|
||||
"passed": "Powodzenie",
|
||||
"failed": "Niepowodzenie"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "Status",
|
||||
"uptime": "Uptime",
|
||||
"status": "Stan",
|
||||
"uptime": "Czas działania",
|
||||
"lastDown": "Last Downtime",
|
||||
"downDuration": "Downtime Duration",
|
||||
"sitesUp": "Sites Up",
|
||||
"sitesDown": "Sites Down",
|
||||
"paused": "Paused",
|
||||
"sitesDown": "Niedziałające strony",
|
||||
"paused": "Zatrzymane",
|
||||
"notyetchecked": "Not Yet Checked",
|
||||
"up": "Up",
|
||||
"seemsdown": "Seems Down",
|
||||
"down": "Down",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"opendtu": {
|
||||
"relativePower": "Power %",
|
||||
"yieldDay": "Today",
|
||||
"limit": "Limit",
|
||||
"absolutePower": "Power"
|
||||
"unknown": "Nieznany"
|
||||
},
|
||||
"calendar": {
|
||||
"physicalRelease": "Physical release",
|
||||
"inCinemas": "In cinemas",
|
||||
"physicalRelease": "Physical release",
|
||||
"digitalRelease": "Digital release"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Erro",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passou",
|
||||
|
||||
@@ -395,7 +395,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Erro",
|
||||
"ping": "Tempo de resposta"
|
||||
"ping": "Tempo de resposta",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Aprovado",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Ошибка",
|
||||
"ping": "Пинг"
|
||||
"ping": "Пинг",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"failed": "Неудачно",
|
||||
|
||||
@@ -195,7 +195,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Chyba",
|
||||
"ping": "Odozva"
|
||||
"ping": "Odozva",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Prehrávané",
|
||||
|
||||
@@ -152,7 +152,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Napaka",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Predvaja",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
@@ -107,7 +107,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "ข้อผิดพลาด",
|
||||
"ping": "ปิง"
|
||||
"ping": "ปิง",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "กำลังเล่น",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Hata",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Geçti",
|
||||
|
||||
@@ -172,7 +172,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Помилка",
|
||||
"ping": "Пінг"
|
||||
"ping": "Пінг",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Відтворення",
|
||||
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "错误",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "通过",
|
||||
|
||||
761
public/locales/zh-Hans/common.json
Normal file
761
public/locales/zh-Hans/common.json
Normal file
@@ -0,0 +1,761 @@
|
||||
{
|
||||
"common": {
|
||||
"bytes": "{{value, bytes}}",
|
||||
"bits": "{{value, bytes(bits: true)}}",
|
||||
"bbytes": "{{value, bytes(binary: true)}}",
|
||||
"bbits": "{{value, bytes(bits: true; binary: true)}}",
|
||||
"byterate": "{{value, rate(bits: false)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bitrate": "{{value, rate(bits: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"percent": "{{value, percent}}",
|
||||
"number": "{{value, number}}",
|
||||
"ms": "{{value, number}}"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "缺失的组件类型: {{type}}",
|
||||
"api_error": "API 错误",
|
||||
"information": "信息",
|
||||
"status": "状态",
|
||||
"url": "URL",
|
||||
"raw_error": "原始信息错误",
|
||||
"response_data": "响应数据"
|
||||
},
|
||||
"weather": {
|
||||
"current": "当前位置",
|
||||
"allow": "点击以允许",
|
||||
"updating": "更新中",
|
||||
"wait": "请稍候"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "搜索…"
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"mem": "内存",
|
||||
"total": "总计",
|
||||
"free": "空闲",
|
||||
"used": "已使用",
|
||||
"load": "负载",
|
||||
"temp": "温度",
|
||||
"max": "最大",
|
||||
"uptime": "运行时间",
|
||||
"months": "月",
|
||||
"days": "日",
|
||||
"hours": "时",
|
||||
"minutes": "分"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "用户数",
|
||||
"uptime": "系统运行时间",
|
||||
"days": "天",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "设备",
|
||||
"lan_devices": "LAN设备",
|
||||
"wlan_devices": "WLAN 设备",
|
||||
"lan_users": "LAN 用户",
|
||||
"wlan_users": "WLAN 用户",
|
||||
"up": "运行时间",
|
||||
"down": "离线",
|
||||
"wait": "请稍候",
|
||||
"empty_data": "子系统状态未知"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "接收",
|
||||
"tx": "发送",
|
||||
"mem": "内存",
|
||||
"cpu": "CPU",
|
||||
"running": "运行中",
|
||||
"offline": "离线",
|
||||
"error": "错误",
|
||||
"unknown": "未知",
|
||||
"healthy": "健康",
|
||||
"starting": "启动中",
|
||||
"unhealthy": "不健康",
|
||||
"not_found": "未找到",
|
||||
"exited": "已退出",
|
||||
"partial": "部分"
|
||||
},
|
||||
"ping": {
|
||||
"http_status": "HTTP 状态",
|
||||
"error": "错误",
|
||||
"ping": "Ping",
|
||||
"down": "离线",
|
||||
"up": "在线",
|
||||
"not_available": "不可用"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "正在播放",
|
||||
"transcoding": "转码中",
|
||||
"bitrate": "码率",
|
||||
"no_active": "无活动流",
|
||||
"movies": "电影",
|
||||
"series": "剧集",
|
||||
"episodes": "集",
|
||||
"songs": "曲目"
|
||||
},
|
||||
"evcc": {
|
||||
"pv_power": "发电量",
|
||||
"battery_soc": "电量",
|
||||
"grid_power": "电网功率",
|
||||
"home_power": "全屋功率",
|
||||
"charge_power": "充电功率",
|
||||
"watt_hour": "Wh"
|
||||
},
|
||||
"flood": {
|
||||
"download": "下载速率",
|
||||
"upload": "上传速率",
|
||||
"leech": "下载中",
|
||||
"seed": "做种中"
|
||||
},
|
||||
"freshrss": {
|
||||
"subscriptions": "订阅",
|
||||
"unread": "未读"
|
||||
},
|
||||
"caddy": {
|
||||
"upstreams": "上行",
|
||||
"requests": "当前请求",
|
||||
"requests_failed": "失败请求"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "总监测数",
|
||||
"diffsDetected": "监测到的变更"
|
||||
},
|
||||
"channelsdvrserver": {
|
||||
"shows": "剧集",
|
||||
"recordings": "录制中",
|
||||
"scheduled": "已预约",
|
||||
"passes": "通行证"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "正在播放",
|
||||
"transcoding": "转码中",
|
||||
"bitrate": "码率",
|
||||
"no_active": "无活动流",
|
||||
"plex_connection_error": "检查Plex连接"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "已连接的 AP",
|
||||
"activeUser": "活跃的设备",
|
||||
"alerts": "警告",
|
||||
"connectedGateway": "已连接的网关",
|
||||
"connectedSwitches": "已连接的开关"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "速率",
|
||||
"remaining": "剩余时间",
|
||||
"downloaded": "已下载"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "活动流",
|
||||
"albums": "专辑",
|
||||
"movies": "电影",
|
||||
"tv": "剧集"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "速率",
|
||||
"queue": "队列",
|
||||
"timeleft": "剩余时间"
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "活动中",
|
||||
"upload": "上传速率",
|
||||
"download": "下载速率"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "下载速率",
|
||||
"upload": "上传速率",
|
||||
"leech": "下载中",
|
||||
"seed": "做种中"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "下载速率",
|
||||
"upload": "上传速率",
|
||||
"leech": "下载中",
|
||||
"seed": "做种中"
|
||||
},
|
||||
"qnap": {
|
||||
"cpuUsage": "CPU 使用率",
|
||||
"memUsage": "内存使用率",
|
||||
"systemTempC": "系统温度",
|
||||
"poolUsage": "存储池使用情况",
|
||||
"volumeUsage": "分卷使用率",
|
||||
"invalid": "无效的"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "下载速率",
|
||||
"upload": "上传速率",
|
||||
"leech": "下载中",
|
||||
"seed": "做种中"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "下载速率",
|
||||
"upload": "上传速率",
|
||||
"leech": "下载中",
|
||||
"seed": "做种中"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "关注中",
|
||||
"queued": "已加入队列",
|
||||
"series": "剧集",
|
||||
"queue": "队列",
|
||||
"unknown": "未知"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "关注中",
|
||||
"missing": "缺失",
|
||||
"queued": "已加入队列",
|
||||
"movies": "电影",
|
||||
"queue": "队列",
|
||||
"unknown": "未知"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "关注中",
|
||||
"queued": "已加入队列",
|
||||
"artists": "艺术家"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "关注中",
|
||||
"queued": "已加入队列",
|
||||
"books": "书籍"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "缺少剧集",
|
||||
"missingMovies": "缺少电影"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "等待中",
|
||||
"approved": "已批准",
|
||||
"available": "可用"
|
||||
},
|
||||
"jellyseerr": {
|
||||
"pending": "等待中",
|
||||
"approved": "已批准",
|
||||
"available": "可用"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "等待中",
|
||||
"processing": "处理中",
|
||||
"approved": "已批准",
|
||||
"available": "可用"
|
||||
},
|
||||
"pialert": {
|
||||
"total": "总计",
|
||||
"connected": "已连接",
|
||||
"new_devices": "新设备",
|
||||
"down_alerts": "离线警报"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "查询",
|
||||
"blocked": "已屏蔽",
|
||||
"blocked_percent": "已屏蔽 %",
|
||||
"gravity": "屏蔽列表"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "查询",
|
||||
"blocked": "已屏蔽",
|
||||
"filtered": "已过滤",
|
||||
"latency": "延迟"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "上传速率",
|
||||
"download": "下载速率",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "运行中",
|
||||
"stopped": "已停止",
|
||||
"total": "总计"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "地址",
|
||||
"expires": "失效",
|
||||
"never": "从未",
|
||||
"last_seen": "最后上线",
|
||||
"now": "当前",
|
||||
"years": "{{number}}年",
|
||||
"weeks": "{{number}}周",
|
||||
"days": "{{number}}天",
|
||||
"hours": "{{number}}时",
|
||||
"minutes": "{{number}}分",
|
||||
"seconds": "{{number}}秒",
|
||||
"ago": "{{value}} 之前"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "队列",
|
||||
"processed": "已处理",
|
||||
"errored": "错误",
|
||||
"saved": "已保存"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "路由",
|
||||
"services": "服务",
|
||||
"middleware": "中间件"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "无活动流",
|
||||
"please_wait": "请稍候"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "启用",
|
||||
"disabled": "禁用",
|
||||
"total": "总计"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "配置一个或多个加密货币进行跟踪",
|
||||
"1hour": "1 小时",
|
||||
"1day": "1 天",
|
||||
"7days": "7 天",
|
||||
"30days": "30 天"
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "应用",
|
||||
"clients": "客户端",
|
||||
"messages": "消息"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "索引器",
|
||||
"numberOfGrabs": "抓取",
|
||||
"numberOfQueries": "查询",
|
||||
"numberOfFailGrabs": "抓取失败",
|
||||
"numberOfFailQueries": "查询失败"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "已配置",
|
||||
"errored": "错误"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "会话",
|
||||
"numConnections": "连接数",
|
||||
"dataRelayed": "中继",
|
||||
"transferRate": "速率"
|
||||
},
|
||||
"mastodon": {
|
||||
"user_count": "用户数",
|
||||
"status_count": "文章",
|
||||
"domain_count": "域名"
|
||||
},
|
||||
"medusa": {
|
||||
"wanted": "关注中",
|
||||
"queued": "已加入队列",
|
||||
"series": "剧集"
|
||||
},
|
||||
"minecraft": {
|
||||
"players": "玩家",
|
||||
"version": "版本",
|
||||
"status": "状态",
|
||||
"up": "在线",
|
||||
"down": "离线"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "已读",
|
||||
"unread": "未读"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "用户数",
|
||||
"loginsLast24H": "登录 (24小时)",
|
||||
"failedLoginsLast24H": "登录失败 (24小时)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "内存",
|
||||
"cpu": "CPU",
|
||||
"lxc": "LXC",
|
||||
"vms": "VMs"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"load": "负载",
|
||||
"wait": "请稍候",
|
||||
"temp": "温度",
|
||||
"_temp": "温度",
|
||||
"warn": "警告",
|
||||
"uptime": "运行时间",
|
||||
"total": "总计",
|
||||
"free": "空闲",
|
||||
"used": "已使用",
|
||||
"days": "日",
|
||||
"hours": "时",
|
||||
"crit": "严重",
|
||||
"read": "已读",
|
||||
"write": "写入",
|
||||
"gpu": "GPU",
|
||||
"mem": "内存",
|
||||
"swap": "Swap"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "书签",
|
||||
"service": "服务",
|
||||
"search": "搜索",
|
||||
"custom": "自定义",
|
||||
"visit": "访问",
|
||||
"url": "URL"
|
||||
},
|
||||
"wmo": {
|
||||
"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": "大雪",
|
||||
"77-day": "雪粒",
|
||||
"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": "系统",
|
||||
"updates": "更新",
|
||||
"update_available": "有可用更新",
|
||||
"up_to_date": "已是最新版本",
|
||||
"child_bridges": "子网桥",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"up": "在线",
|
||||
"pending": "等待中",
|
||||
"down": "离线"
|
||||
},
|
||||
"healthchecks": {
|
||||
"new": "新增",
|
||||
"up": "在线",
|
||||
"grace": "处于宽限期",
|
||||
"down": "离线",
|
||||
"paused": "已暂停",
|
||||
"status": "状态",
|
||||
"last_ping": "上次 Ping",
|
||||
"never": "尚未 Ping"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "已扫描",
|
||||
"containers_updated": "已更新",
|
||||
"containers_failed": "失败"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "已批准",
|
||||
"rejectedPushes": "拒绝",
|
||||
"filters": "过滤器",
|
||||
"indexers": "索引器"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "队列",
|
||||
"videos": "视频",
|
||||
"channels": "频道",
|
||||
"playlists": "播放列表"
|
||||
},
|
||||
"truenas": {
|
||||
"load": "系统负载",
|
||||
"uptime": "运行时间",
|
||||
"alerts": "警告",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "速度",
|
||||
"active": "活动中",
|
||||
"queue": "队列",
|
||||
"total": "总计"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "公网 IP",
|
||||
"region": "地区",
|
||||
"country": "国家"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "频道",
|
||||
"hd": "HD"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "通过",
|
||||
"failed": "失败",
|
||||
"unknown": "未知"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "收件箱",
|
||||
"total": "总计"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "请稍候",
|
||||
"no_devices": "未收到设备数据"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU 负载",
|
||||
"memoryUsed": "内存占用",
|
||||
"uptime": "运行时间",
|
||||
"numberOfLeases": "租约"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "所有流",
|
||||
"streams_active": "活动流",
|
||||
"streams_xepg": "XEPG 频道"
|
||||
},
|
||||
"opendtu": {
|
||||
"yieldDay": "今日",
|
||||
"absolutePower": "功率",
|
||||
"relativePower": "功率 %",
|
||||
"limit": "限制"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU 负载",
|
||||
"memory": "活动内存",
|
||||
"wanUpload": "WAN 上传",
|
||||
"wanDownload": "WAN 下载"
|
||||
},
|
||||
"moonraker": {
|
||||
"printer_state": "打印机状态",
|
||||
"print_status": "打印状态",
|
||||
"print_progress": "进度",
|
||||
"layers": "层"
|
||||
},
|
||||
"octoprint": {
|
||||
"printer_state": "状态",
|
||||
"temp_tool": "喷头温度",
|
||||
"temp_bed": "热床温度",
|
||||
"job_completion": "完成"
|
||||
},
|
||||
"cloudflared": {
|
||||
"origin_ip": "来源 IP",
|
||||
"status": "状态"
|
||||
},
|
||||
"pfsense": {
|
||||
"load": "平均负载",
|
||||
"memory": "内存使用率",
|
||||
"wanStatus": "WAN 状态",
|
||||
"up": "在线",
|
||||
"down": "离线",
|
||||
"temp": "温度",
|
||||
"disk": "磁盘使用量",
|
||||
"wanIP": "WAN IP"
|
||||
},
|
||||
"proxmoxbackupserver": {
|
||||
"datastore_usage": "数据存储",
|
||||
"failed_tasks_24h": "24小时内失败任务",
|
||||
"cpu_usage": "CPU",
|
||||
"memory_usage": "内存"
|
||||
},
|
||||
"immich": {
|
||||
"users": "用户数",
|
||||
"photos": "照片",
|
||||
"videos": "视频",
|
||||
"storage": "存储空间"
|
||||
},
|
||||
"uptimekuma": {
|
||||
"up": "在线网站",
|
||||
"down": "离线网站",
|
||||
"uptime": "运行时间",
|
||||
"incident": "事件",
|
||||
"m": "分"
|
||||
},
|
||||
"atsumeru": {
|
||||
"series": "剧集",
|
||||
"archives": "存档",
|
||||
"chapters": "章节",
|
||||
"categories": "类别"
|
||||
},
|
||||
"komga": {
|
||||
"libraries": "库",
|
||||
"series": "剧集",
|
||||
"books": "书籍"
|
||||
},
|
||||
"diskstation": {
|
||||
"days": "天",
|
||||
"uptime": "运行时间",
|
||||
"volumeAvailable": "可用"
|
||||
},
|
||||
"mylar": {
|
||||
"series": "剧集",
|
||||
"issues": "出版",
|
||||
"wanted": "关注中"
|
||||
},
|
||||
"photoprism": {
|
||||
"albums": "专辑",
|
||||
"photos": "照片",
|
||||
"videos": "视频",
|
||||
"people": "人物"
|
||||
},
|
||||
"fileflows": {
|
||||
"queue": "队列",
|
||||
"processing": "处理中",
|
||||
"processed": "已处理",
|
||||
"time": "时间"
|
||||
},
|
||||
"grafana": {
|
||||
"dashboards": "仪表板",
|
||||
"datasources": "数据源",
|
||||
"totalalerts": "警告总数",
|
||||
"alertstriggered": "触发警告"
|
||||
},
|
||||
"nextcloud": {
|
||||
"cpuload": "CPU 负载",
|
||||
"memoryusage": "内存使用量",
|
||||
"freespace": "剩余空间",
|
||||
"activeusers": "活动用户",
|
||||
"numfiles": "文件",
|
||||
"numshares": "已共享项目"
|
||||
},
|
||||
"kopia": {
|
||||
"status": "状态",
|
||||
"size": "大小",
|
||||
"lastrun": "上一次运行",
|
||||
"nextrun": "下一次运行",
|
||||
"failed": "失败"
|
||||
},
|
||||
"unmanic": {
|
||||
"active_workers": "活动工作程序",
|
||||
"total_workers": "总工作程序",
|
||||
"records_total": "队列长度"
|
||||
},
|
||||
"pterodactyl": {
|
||||
"servers": "服务器",
|
||||
"nodes": "节点"
|
||||
},
|
||||
"prometheus": {
|
||||
"targets_up": "上线目标",
|
||||
"targets_down": "离线目标",
|
||||
"targets_total": "目标总数"
|
||||
},
|
||||
"ghostfolio": {
|
||||
"gross_percent_today": "今日",
|
||||
"gross_percent_1y": "1年",
|
||||
"gross_percent_max": "所有时间"
|
||||
},
|
||||
"audiobookshelf": {
|
||||
"podcasts": "播客",
|
||||
"books": "书籍",
|
||||
"podcastsDuration": "时长",
|
||||
"booksDuration": "时长"
|
||||
},
|
||||
"homeassistant": {
|
||||
"people_home": "在家人数",
|
||||
"lights_on": "灯光开启",
|
||||
"switches_on": "开关开启"
|
||||
},
|
||||
"whatsupdocker": {
|
||||
"monitoring": "监测中",
|
||||
"updates": "更新"
|
||||
},
|
||||
"calibreweb": {
|
||||
"books": "书籍",
|
||||
"authors": "作者",
|
||||
"categories": "类别",
|
||||
"series": "剧集"
|
||||
},
|
||||
"jdownloader": {
|
||||
"downloadCount": "队列",
|
||||
"downloadBytesRemaining": "剩余时间",
|
||||
"downloadTotalBytes": "大小",
|
||||
"downloadSpeed": "速度"
|
||||
},
|
||||
"kavita": {
|
||||
"seriesCount": "剧集",
|
||||
"totalFiles": "文件"
|
||||
},
|
||||
"azuredevops": {
|
||||
"result": "结果",
|
||||
"status": "状态",
|
||||
"buildId": "构建 ID",
|
||||
"succeeded": "成功",
|
||||
"notStarted": "尚未开始",
|
||||
"failed": "失败",
|
||||
"canceled": "已取消",
|
||||
"inProgress": "处理中",
|
||||
"totalPrs": "总 PR",
|
||||
"myPrs": "我的 PR",
|
||||
"approved": "已批准"
|
||||
},
|
||||
"gamedig": {
|
||||
"status": "状态",
|
||||
"online": "在线",
|
||||
"offline": "离线",
|
||||
"name": "名称",
|
||||
"map": "地图",
|
||||
"currentPlayers": "当前玩家",
|
||||
"players": "玩家",
|
||||
"maxPlayers": "玩家上限",
|
||||
"bots": "机器人",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"urbackup": {
|
||||
"ok": "成功",
|
||||
"errored": "错误",
|
||||
"noRecent": "已过期",
|
||||
"totalUsed": "使用的存储"
|
||||
},
|
||||
"mealie": {
|
||||
"recipes": "食谱",
|
||||
"users": "用户数",
|
||||
"categories": "类别",
|
||||
"tags": "标签"
|
||||
},
|
||||
"openmediavault": {
|
||||
"downloading": "下载中",
|
||||
"total": "总计",
|
||||
"running": "运行中",
|
||||
"stopped": "已停止",
|
||||
"passed": "通过",
|
||||
"failed": "失败"
|
||||
},
|
||||
"uptimerobot": {
|
||||
"status": "状态",
|
||||
"uptime": "运行时间",
|
||||
"lastDown": "上次下线时间",
|
||||
"downDuration": "下线时长",
|
||||
"sitesUp": "在线网站",
|
||||
"sitesDown": "离线网站",
|
||||
"paused": "已暂停",
|
||||
"notyetchecked": "尚未检查",
|
||||
"up": "在线",
|
||||
"seemsdown": "貌似离线",
|
||||
"down": "离线",
|
||||
"unknown": "未知"
|
||||
},
|
||||
"calendar": {
|
||||
"inCinemas": "上映中",
|
||||
"physicalRelease": "实体发行",
|
||||
"digitalRelease": "数字发行"
|
||||
}
|
||||
}
|
||||
@@ -382,7 +382,9 @@
|
||||
},
|
||||
"ping": {
|
||||
"error": "錯誤",
|
||||
"ping": "Ping"
|
||||
"ping": "Ping",
|
||||
"up": "Up",
|
||||
"down": "Down"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "通過",
|
||||
|
||||
@@ -26,3 +26,4 @@ requests==2.31.0
|
||||
six==1.16.0
|
||||
urllib3==2.0.5
|
||||
watchdog==3.0.0
|
||||
pre-commit==3.5.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useRef } from "react";
|
||||
import classNames from "classnames";
|
||||
import { Disclosure, Transition } from '@headlessui/react';
|
||||
import { Disclosure, Transition } from "@headlessui/react";
|
||||
import { MdKeyboardArrowDown } from "react-icons/md";
|
||||
|
||||
import ErrorBoundary from "components/errorboundry";
|
||||
@@ -15,7 +15,7 @@ export default function BookmarksGroup({ bookmarks, layout, disableCollapse }) {
|
||||
className={classNames(
|
||||
"bookmark-group",
|
||||
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
|
||||
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1"
|
||||
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1",
|
||||
)}
|
||||
>
|
||||
<Disclosure defaultOpen>
|
||||
@@ -28,12 +28,14 @@ export default function BookmarksGroup({ bookmarks, layout, disableCollapse }) {
|
||||
<ResolvedIcon icon={layout.icon} />
|
||||
</div>
|
||||
)}
|
||||
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium bookmark-group-name">{bookmarks.name}</h2>
|
||||
<h2 className="text-theme-800 dark:text-theme-300 text-xl font-medium bookmark-group-name">
|
||||
{bookmarks.name}
|
||||
</h2>
|
||||
<MdKeyboardArrowDown
|
||||
className={classNames(
|
||||
disableCollapse ? "hidden" : "",
|
||||
"transition-all opacity-0 group-hover:opacity-100 ml-auto text-theme-800 dark:text-theme-300 text-xl",
|
||||
open ? "" : "rotate-180"
|
||||
open ? "" : "rotate-180",
|
||||
)}
|
||||
/>
|
||||
</Disclosure.Button>
|
||||
|
||||
@@ -15,22 +15,24 @@ export default function Item({ bookmark }) {
|
||||
title={bookmark.name}
|
||||
target={bookmark.target ?? settings.target ?? "_blank"}
|
||||
className={classNames(
|
||||
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`,
|
||||
"block w-full text-left cursor-pointer transition-all h-15 mb-3 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10"
|
||||
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
|
||||
"block w-full text-left cursor-pointer transition-all h-15 mb-3 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10",
|
||||
)}
|
||||
>
|
||||
<div className="flex">
|
||||
<div className="flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md bookmark-icon">
|
||||
{bookmark.icon &&
|
||||
{bookmark.icon && (
|
||||
<div className="flex-shrink-0 w-5 h-5">
|
||||
<ResolvedIcon icon={bookmark.icon} alt={bookmark.abbr} />
|
||||
</div>
|
||||
}
|
||||
)}
|
||||
{!bookmark.icon && bookmark.abbr}
|
||||
</div>
|
||||
<div className="flex-1 flex items-center justify-between rounded-r-md bookmark-text">
|
||||
<div className="flex-1 grow pl-3 py-2 text-xs bookmark-name">{bookmark.name}</div>
|
||||
<div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs bookmark-description">{description}</div>
|
||||
<div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs bookmark-description">
|
||||
{description}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
@@ -9,7 +9,7 @@ export default function List({ bookmarks, layout }) {
|
||||
<ul
|
||||
className={classNames(
|
||||
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col",
|
||||
"mt-3 bookmark-list"
|
||||
"mt-3 bookmark-list",
|
||||
)}
|
||||
>
|
||||
{bookmarks.map((bookmark) => (
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import useSWR from "swr"
|
||||
import useSWR from "swr";
|
||||
|
||||
export default function FileContent({ path, loadingValue, errorValue, emptyValue = '' }) {
|
||||
const fetcher = (url) => fetch(url).then((res) => res.text())
|
||||
const { data, error, isLoading } = useSWR(`/api/config/${ path }`, fetcher)
|
||||
export default function FileContent({ path, loadingValue, errorValue, emptyValue = "" }) {
|
||||
const fetcher = (url) => fetch(url).then((res) => res.text());
|
||||
const { data, error, isLoading } = useSWR(`/api/config/${path}`, fetcher);
|
||||
|
||||
if (error) return (errorValue)
|
||||
if (isLoading) return (loadingValue)
|
||||
return (data || emptyValue)
|
||||
if (error) return errorValue;
|
||||
if (isLoading) return loadingValue;
|
||||
return data || emptyValue;
|
||||
}
|
||||
|
||||
@@ -6,10 +6,19 @@ import ResolvedIcon from "./resolvedicon";
|
||||
|
||||
import { SettingsContext } from "utils/contexts/settings";
|
||||
|
||||
export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchProvider}) {
|
||||
export default function QuickLaunch({
|
||||
servicesAndBookmarks,
|
||||
searchString,
|
||||
setSearchString,
|
||||
isOpen,
|
||||
close,
|
||||
searchProvider,
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const { settings } = useContext(SettingsContext);
|
||||
const { searchDescriptions, hideVisitURL } = settings?.quicklaunch ? settings.quicklaunch : { searchDescriptions: false, hideVisitURL: false };
|
||||
const { searchDescriptions, hideVisitURL } = settings?.quicklaunch
|
||||
? settings.quicklaunch
|
||||
: { searchDescriptions: false, hideVisitURL: false };
|
||||
|
||||
const searchField = useRef();
|
||||
|
||||
@@ -19,7 +28,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
|
||||
function openCurrentItem(newWindow) {
|
||||
const result = results[currentItemIndex];
|
||||
window.open(result.href, newWindow ? "_blank" : result.target ?? settings.target ?? "_blank", 'noreferrer');
|
||||
window.open(result.href, newWindow ? "_blank" : result.target ?? settings.target ?? "_blank", "noreferrer");
|
||||
}
|
||||
|
||||
const closeAndReset = useCallback(() => {
|
||||
@@ -35,7 +44,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
try {
|
||||
if (!/.+[.:].+/g.test(rawSearchString)) throw new Error(); // basic test for probably a url
|
||||
let urlString = rawSearchString;
|
||||
if (urlString.indexOf('http') !== 0) urlString = `https://${rawSearchString}`;
|
||||
if (urlString.indexOf("http") !== 0) urlString = `https://${rawSearchString}`;
|
||||
setUrl(new URL(urlString)); // basic validation
|
||||
} catch (e) {
|
||||
setUrl(null);
|
||||
@@ -83,12 +92,12 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
useEffect(() => {
|
||||
if (searchString.length === 0) setResults([]);
|
||||
else {
|
||||
let newResults = servicesAndBookmarks.filter(r => {
|
||||
let newResults = servicesAndBookmarks.filter((r) => {
|
||||
const nameMatch = r.name.toLowerCase().includes(searchString);
|
||||
let descriptionMatch;
|
||||
if (searchDescriptions) {
|
||||
descriptionMatch = r.description?.toLowerCase().includes(searchString)
|
||||
r.priority = nameMatch ? 2 * (+nameMatch) : +descriptionMatch; // eslint-disable-line no-param-reassign
|
||||
descriptionMatch = r.description?.toLowerCase().includes(searchString);
|
||||
r.priority = nameMatch ? 2 * +nameMatch : +descriptionMatch; // eslint-disable-line no-param-reassign
|
||||
}
|
||||
return nameMatch || descriptionMatch;
|
||||
});
|
||||
@@ -98,23 +107,19 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
}
|
||||
|
||||
if (searchProvider) {
|
||||
newResults.push(
|
||||
{
|
||||
newResults.push({
|
||||
href: searchProvider.url + encodeURIComponent(searchString),
|
||||
name: `${searchProvider.name ?? t("quicklaunch.custom")} ${t("quicklaunch.search")} `,
|
||||
type: 'search',
|
||||
}
|
||||
)
|
||||
type: "search",
|
||||
});
|
||||
}
|
||||
|
||||
if (!hideVisitURL && url) {
|
||||
newResults.unshift(
|
||||
{
|
||||
newResults.unshift({
|
||||
href: url.toString(),
|
||||
name: `${t("quicklaunch.visit")} URL`,
|
||||
type: 'url',
|
||||
}
|
||||
)
|
||||
type: "url",
|
||||
});
|
||||
}
|
||||
|
||||
setResults(newResults);
|
||||
@@ -125,7 +130,6 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
}
|
||||
}, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchProvider, url, t]);
|
||||
|
||||
|
||||
const [hidden, setHidden] = useState(true);
|
||||
useEffect(() => {
|
||||
function handleBackdropClick(event) {
|
||||
@@ -134,66 +138,103 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear
|
||||
|
||||
if (isOpen) {
|
||||
searchField.current.focus();
|
||||
document.body.addEventListener('click', handleBackdropClick);
|
||||
document.body.addEventListener("click", handleBackdropClick);
|
||||
setHidden(false);
|
||||
} else {
|
||||
document.body.removeEventListener('click', handleBackdropClick);
|
||||
document.body.removeEventListener("click", handleBackdropClick);
|
||||
searchField.current.blur();
|
||||
setTimeout(() => {
|
||||
setHidden(true);
|
||||
}, 300); // disable on close
|
||||
}
|
||||
|
||||
}, [isOpen, closeAndReset]);
|
||||
|
||||
function highlightText(text) {
|
||||
const parts = text.split(new RegExp(`(${searchString})`, 'gi'));
|
||||
const parts = text.split(new RegExp(`(${searchString})`, "gi"));
|
||||
return (
|
||||
<span>
|
||||
{parts.map((part, i) =>
|
||||
part.toLowerCase() === searchString.toLowerCase() ? (
|
||||
// eslint-disable-next-line react/no-array-index-key
|
||||
return <span>{parts.map((part, i) => part.toLowerCase() === searchString.toLowerCase() ? <span key={`${searchString}_${i}`} className="bg-theme-300/10">{part}</span> : part)}</span>;
|
||||
<span key={`${searchString}_${i}`} className="bg-theme-300/10">
|
||||
{part}
|
||||
</span>
|
||||
) : (
|
||||
part
|
||||
),
|
||||
)}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={classNames(
|
||||
<div
|
||||
className={classNames(
|
||||
"relative z-40 ease-in-out duration-300 transition-opacity",
|
||||
hidden && !isOpen && "hidden",
|
||||
!hidden && isOpen && "opacity-100",
|
||||
!isOpen && "opacity-0",
|
||||
)} role="dialog" aria-modal="true">
|
||||
)}
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
>
|
||||
<div className="fixed inset-0 bg-gray-500 bg-opacity-50" />
|
||||
<div className="fixed inset-0 z-20 overflow-y-auto">
|
||||
<div className="flex min-h-full min-w-full items-start justify-center text-center">
|
||||
<dialog className="mt-[10%] min-w-[80%] max-w-[90%] md:min-w-[40%] rounded-md p-0 block font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-50 dark:bg-theme-800">
|
||||
<input placeholder="Search" className={classNames(
|
||||
<input
|
||||
placeholder="Search"
|
||||
className={classNames(
|
||||
results.length > 0 && "rounded-t-md",
|
||||
results.length === 0 && "rounded-md",
|
||||
"w-full p-4 m-0 border-0 border-b border-slate-700 focus:border-slate-700 focus:outline-0 focus:ring-0 text-sm md:text-xl text-theme-700 dark:text-theme-200 bg-theme-60 dark:bg-theme-800"
|
||||
)} type="text" autoCorrect="false" ref={searchField} value={searchString} onChange={handleSearchChange} onKeyDown={handleSearchKeyDown} />
|
||||
{results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto m-2">
|
||||
"w-full p-4 m-0 border-0 border-b border-slate-700 focus:border-slate-700 focus:outline-0 focus:ring-0 text-sm md:text-xl text-theme-700 dark:text-theme-200 bg-theme-60 dark:bg-theme-800",
|
||||
)}
|
||||
type="text"
|
||||
autoCorrect="false"
|
||||
ref={searchField}
|
||||
value={searchString}
|
||||
onChange={handleSearchChange}
|
||||
onKeyDown={handleSearchKeyDown}
|
||||
/>
|
||||
{results.length > 0 && (
|
||||
<ul className="max-h-[60vh] overflow-y-auto m-2">
|
||||
{results.map((r, i) => (
|
||||
<li key={r.container ?? r.app ?? `${r.name}-${r.href}`}>
|
||||
<button type="button" data-index={i} onMouseEnter={handleItemHover} onClick={handleItemClick} onKeyDown={handleItemKeyDown} className={classNames(
|
||||
<button
|
||||
type="button"
|
||||
data-index={i}
|
||||
onMouseEnter={handleItemHover}
|
||||
onClick={handleItemClick}
|
||||
onKeyDown={handleItemKeyDown}
|
||||
className={classNames(
|
||||
"flex flex-row w-full items-center justify-between rounded-md text-sm md:text-xl py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200",
|
||||
i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50",
|
||||
)}>
|
||||
)}
|
||||
>
|
||||
<div className="flex flex-row items-center mr-4 pointer-events-none">
|
||||
{(r.icon || r.abbr) && <div className="w-5 text-xs mr-4">
|
||||
{(r.icon || r.abbr) && (
|
||||
<div className="w-5 text-xs mr-4">
|
||||
{r.icon && <ResolvedIcon icon={r.icon} />}
|
||||
{r.abbr && r.abbr}
|
||||
</div>}
|
||||
</div>
|
||||
)}
|
||||
<div className="flex flex-col md:flex-row text-left items-baseline mr-4 pointer-events-none">
|
||||
<span className="mr-4">{r.name}</span>
|
||||
{r.description &&
|
||||
{r.description && (
|
||||
<span className="text-xs text-theme-600 text-light">
|
||||
{searchDescriptions && r.priority < 2 ? highlightText(r.description) : r.description}
|
||||
</span>
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-theme-600 font-bold pointer-events-none">{t(`quicklaunch.${r.type ? r.type.toLowerCase() : 'bookmark'}`)}</div>
|
||||
<div className="text-xs text-theme-600 font-bold pointer-events-none">
|
||||
{t(`quicklaunch.${r.type ? r.type.toLowerCase() : "bookmark"}`)}
|
||||
</div>
|
||||
</button>
|
||||
</li>
|
||||
))}
|
||||
</ul>}
|
||||
</ul>
|
||||
)}
|
||||
</dialog>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,8 +5,8 @@ import { SettingsContext } from "utils/contexts/settings";
|
||||
import { ThemeContext } from "utils/contexts/theme";
|
||||
|
||||
const iconSetURLs = {
|
||||
'mdi': "https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/",
|
||||
'si' : "https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/",
|
||||
mdi: "https://cdn.jsdelivr.net/npm/@mdi/svg@latest/svg/",
|
||||
si: "https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/",
|
||||
};
|
||||
|
||||
export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "logo" }) {
|
||||
@@ -38,12 +38,13 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
||||
if (prefix in iconSetURLs) {
|
||||
// default to theme setting
|
||||
let iconName = icon.replace(`${prefix}-`, "").replace(".svg", "");
|
||||
let iconColor = settings.iconStyle === "theme" ?
|
||||
`rgb(var(--color-${ theme === "dark" ? 300 : 900 }) / var(--tw-text-opacity, 1))` :
|
||||
"linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))";
|
||||
let iconColor =
|
||||
settings.iconStyle === "theme"
|
||||
? `rgb(var(--color-${theme === "dark" ? 300 : 900}) / var(--tw-text-opacity, 1))`
|
||||
: "linear-gradient(180deg, rgb(var(--color-logo-start)), rgb(var(--color-logo-stop)))";
|
||||
|
||||
// use custom hex color if provided
|
||||
const colorMatches = icon.match(/[#][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]$/i)
|
||||
const colorMatches = icon.match(/[#][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]$/i);
|
||||
if (colorMatches?.length) {
|
||||
iconName = icon.replace(`${prefix}-`, "").replace(".svg", "").replace(`-${colorMatches[0]}`, "");
|
||||
iconColor = `${colorMatches[0]}`;
|
||||
@@ -56,8 +57,8 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
||||
style={{
|
||||
width,
|
||||
height,
|
||||
maxWidth: '100%',
|
||||
maxHeight: '100%',
|
||||
maxWidth: "100%",
|
||||
maxHeight: "100%",
|
||||
background: `${iconColor}`,
|
||||
mask: `url(${iconSource}) no-repeat center / contain`,
|
||||
WebkitMask: `url(${iconSource}) no-repeat center / contain`,
|
||||
@@ -79,7 +80,7 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
||||
height,
|
||||
objectFit: "contain",
|
||||
maxHeight: "100%",
|
||||
maxWidth: "100%"
|
||||
maxWidth: "100%",
|
||||
}}
|
||||
alt={alt}
|
||||
/>
|
||||
@@ -97,7 +98,7 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
|
||||
height,
|
||||
objectFit: "contain",
|
||||
maxHeight: "100%",
|
||||
maxWidth: "100%"
|
||||
maxWidth: "100%",
|
||||
}}
|
||||
alt={alt}
|
||||
/>
|
||||
|
||||
@@ -33,7 +33,7 @@ export default function Dropdown({ options, value, setValue }) {
|
||||
type="button"
|
||||
className={classNames(
|
||||
value === option.value ? "bg-theme-300/40 dark:bg-theme-900/40" : "",
|
||||
"w-full block px-3 py-1.5 text-sm hover:bg-theme-300/70 hover:dark:bg-theme-900/70 text-left"
|
||||
"w-full block px-3 py-1.5 text-sm hover:bg-theme-300/70 hover:dark:bg-theme-900/70 text-left",
|
||||
)}
|
||||
>
|
||||
{option.label}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
import { useRef } from "react";
|
||||
import classNames from "classnames";
|
||||
import { Disclosure, Transition } from '@headlessui/react';
|
||||
import { Disclosure, Transition } from "@headlessui/react";
|
||||
import { MdKeyboardArrowDown } from "react-icons/md";
|
||||
|
||||
import List from "components/services/list";
|
||||
import ResolvedIcon from "components/resolvedicon";
|
||||
|
||||
export default function ServicesGroup({ group, services, layout, fiveColumns, disableCollapse }) {
|
||||
|
||||
const panel = useRef();
|
||||
|
||||
return (
|
||||
@@ -23,33 +22,43 @@ export default function ServicesGroup({ group, services, layout, fiveColumns, di
|
||||
<Disclosure defaultOpen>
|
||||
{({ open }) => (
|
||||
<>
|
||||
{ layout?.header !== false &&
|
||||
{layout?.header !== false && (
|
||||
<Disclosure.Button disabled={disableCollapse} className="flex w-full select-none items-center group">
|
||||
{layout?.icon &&
|
||||
{layout?.icon && (
|
||||
<div className="flex-shrink-0 mr-2 w-7 h-7 service-group-icon">
|
||||
<ResolvedIcon icon={layout.icon} />
|
||||
</div>
|
||||
}
|
||||
<h2 className="flex text-theme-800 dark:text-theme-300 text-xl font-medium service-group-name">{services.name}</h2>
|
||||
<MdKeyboardArrowDown className={classNames(
|
||||
disableCollapse ? 'hidden' : '',
|
||||
'transition-all opacity-0 group-hover:opacity-100 ml-auto text-theme-800 dark:text-theme-300 text-xl',
|
||||
open ? '' : 'rotate-180'
|
||||
)} />
|
||||
)}
|
||||
<h2 className="flex text-theme-800 dark:text-theme-300 text-xl font-medium service-group-name">
|
||||
{services.name}
|
||||
</h2>
|
||||
<MdKeyboardArrowDown
|
||||
className={classNames(
|
||||
disableCollapse ? "hidden" : "",
|
||||
"transition-all opacity-0 group-hover:opacity-100 ml-auto text-theme-800 dark:text-theme-300 text-xl",
|
||||
open ? "" : "rotate-180",
|
||||
)}
|
||||
/>
|
||||
</Disclosure.Button>
|
||||
}
|
||||
)}
|
||||
<Transition
|
||||
// Otherwise the transition group does display: none and cancels animation
|
||||
className="!block"
|
||||
unmount={false}
|
||||
beforeLeave={() => {
|
||||
panel.current.style.height = `${panel.current.scrollHeight}px`;
|
||||
setTimeout(() => {panel.current.style.height = `0`}, 1);
|
||||
setTimeout(() => {
|
||||
panel.current.style.height = `0`;
|
||||
}, 1);
|
||||
}}
|
||||
beforeEnter={() => {
|
||||
panel.current.style.height = `0px`;
|
||||
setTimeout(() => {panel.current.style.height = `${panel.current.scrollHeight}px`}, 1);
|
||||
setTimeout(() => {panel.current.style.height = 'auto'}, 150); // animation is 150ms
|
||||
setTimeout(() => {
|
||||
panel.current.style.height = `${panel.current.scrollHeight}px`;
|
||||
}, 1);
|
||||
setTimeout(() => {
|
||||
panel.current.style.height = "auto";
|
||||
}, 150); // animation is 150ms
|
||||
}}
|
||||
>
|
||||
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
|
||||
|
||||
@@ -4,6 +4,7 @@ import { useContext, useState } from "react";
|
||||
import Status from "./status";
|
||||
import Widget from "./widget";
|
||||
import Ping from "./ping";
|
||||
import SiteMonitor from "./site-monitor";
|
||||
import KubernetesStatus from "./kubernetes-status";
|
||||
|
||||
import Docker from "widgets/docker/component";
|
||||
@@ -14,8 +15,8 @@ import ResolvedIcon from "components/resolvedicon";
|
||||
export default function Item({ service, group }) {
|
||||
const hasLink = service.href && service.href !== "#";
|
||||
const { settings } = useContext(SettingsContext);
|
||||
const showStats = (service.showStats === false) ? false : settings.showStats;
|
||||
const statusStyle = (service.statusStyle !== undefined) ? service.statusStyle : settings.statusStyle;
|
||||
const showStats = service.showStats === false ? false : settings.showStats;
|
||||
const statusStyle = service.statusStyle !== undefined ? service.statusStyle : settings.statusStyle;
|
||||
const [statsOpen, setStatsOpen] = useState(service.showStats);
|
||||
const [statsClosing, setStatsClosing] = useState(false);
|
||||
|
||||
@@ -34,9 +35,9 @@ export default function Item({ service, group }) {
|
||||
<li key={service.name} id={service.id} className="service" data-name={service.name || ""}>
|
||||
<div
|
||||
className={classNames(
|
||||
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? '-' : ""}${settings.cardBlur}`,
|
||||
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
|
||||
hasLink && "cursor-pointer",
|
||||
"transition-all h-15 mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative overflow-clip service-card"
|
||||
"transition-all h-15 mb-2 p-1 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10 relative overflow-clip service-card",
|
||||
)}
|
||||
>
|
||||
<div className="flex select-none z-0 service-title">
|
||||
@@ -65,19 +66,27 @@ export default function Item({ service, group }) {
|
||||
>
|
||||
<div className="flex-1 px-2 py-2 text-sm text-left z-10 service-name">
|
||||
{service.name}
|
||||
<p className="text-theme-500 dark:text-theme-300 text-xs font-light service-description">{service.description}</p>
|
||||
<p className="text-theme-500 dark:text-theme-300 text-xs font-light service-description">
|
||||
{service.description}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
) : (
|
||||
<div className="flex-1 flex items-center justify-between rounded-r-md service-title-text">
|
||||
<div className="flex-1 px-2 py-2 text-sm text-left z-10 service-name">
|
||||
{service.name}
|
||||
<p className="text-theme-500 dark:text-theme-300 text-xs font-light service-description">{service.description}</p>
|
||||
<p className="text-theme-500 dark:text-theme-300 text-xs font-light service-description">
|
||||
{service.description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className={`absolute top-0 right-0 flex flex-row justify-end ${statusStyle === 'dot' ? 'gap-0' : 'gap-2'} mr-2 z-30 service-tags`}>
|
||||
<div
|
||||
className={`absolute top-0 right-0 flex flex-row justify-end ${
|
||||
statusStyle === "dot" ? "gap-0" : "gap-2 mr-2"
|
||||
} z-30 service-tags`}
|
||||
>
|
||||
{service.ping && (
|
||||
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">
|
||||
<Ping group={group} service={service.name} style={statusStyle} />
|
||||
@@ -85,6 +94,13 @@ export default function Item({ service, group }) {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{service.siteMonitor && (
|
||||
<div className="flex-shrink-0 flex items-center justify-center service-tag service-site-monitor">
|
||||
<SiteMonitor group={group} service={service.name} style={statusStyle} />
|
||||
<span className="sr-only">Site monitor status</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{service.container && (
|
||||
<button
|
||||
type="button"
|
||||
@@ -95,7 +111,7 @@ export default function Item({ service, group }) {
|
||||
<span className="sr-only">View container stats</span>
|
||||
</button>
|
||||
)}
|
||||
{(service.app && !service.external) && (
|
||||
{service.app && !service.external && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
|
||||
@@ -112,20 +128,28 @@ export default function Item({ service, group }) {
|
||||
<div
|
||||
className={classNames(
|
||||
showStats || (statsOpen && !statsClosing) ? "max-h-[110px] opacity-100" : " max-h-[0] opacity-0",
|
||||
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats"
|
||||
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats",
|
||||
)}
|
||||
>
|
||||
{(showStats || statsOpen) && <Docker service={{ widget: { container: service.container, server: service.server } }} />}
|
||||
{(showStats || statsOpen) && (
|
||||
<Docker service={{ widget: { container: service.container, server: service.server } }} />
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
{service.app && (
|
||||
<div
|
||||
className={classNames(
|
||||
showStats || (statsOpen && !statsClosing) ? "max-h-[55px] opacity-100" : " max-h-[0] opacity-0",
|
||||
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats"
|
||||
"w-full overflow-hidden transition-all duration-300 ease-in-out service-stats",
|
||||
)}
|
||||
>
|
||||
{(showStats || statsOpen) && <Kubernetes service={{ widget: { namespace: service.namespace, app: service.app, podSelector: service.podSelector } }} />}
|
||||
{(showStats || statsOpen) && (
|
||||
<Kubernetes
|
||||
service={{
|
||||
widget: { namespace: service.namespace, app: service.app, podSelector: service.podSelector },
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user