Compare commits
190 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f92f0593f | ||
|
|
783a12b444 | ||
|
|
a48a06e680 | ||
|
|
9a2c56a5dc | ||
|
|
83a8546521 | ||
|
|
e881ec6cb5 | ||
|
|
ce336311b1 | ||
|
|
da138c5b54 | ||
|
|
69f5cd47ad | ||
|
|
638885466e | ||
|
|
523fe30452 | ||
|
|
cd78714da9 | ||
|
|
2982c146a4 | ||
|
|
989cc7de58 | ||
|
|
677224f8de | ||
|
|
8da6d33c61 | ||
|
|
9be9e3963a | ||
|
|
1d3a4af259 | ||
|
|
1251a89a9b | ||
|
|
274eaa9208 | ||
|
|
3236402d2b | ||
|
|
c86c69158a | ||
|
|
ed3d143b8a | ||
|
|
136032f920 | ||
|
|
150e9bf53f | ||
|
|
a3d92d6a73 | ||
|
|
d3a48ae0e0 | ||
|
|
4aa7e7602b | ||
|
|
d63c610cf5 | ||
|
|
0a31b0fc1c | ||
|
|
3737543766 | ||
|
|
85547277d1 | ||
|
|
8e962abc16 | ||
|
|
31a7559b86 | ||
|
|
b59921b843 | ||
|
|
95c126f2c6 | ||
|
|
c8425acd34 | ||
|
|
7ea9c00c18 | ||
|
|
3651585271 | ||
|
|
22732e33e5 | ||
|
|
9caf72aae7 | ||
|
|
5a73166d70 | ||
|
|
5b23f7d13a | ||
|
|
26ae001b5a | ||
|
|
59e5c0306f | ||
|
|
baedc001d9 | ||
|
|
6469aa2350 | ||
|
|
d4765c1e7f | ||
|
|
4bba516fdf | ||
|
|
ddde9992c5 | ||
|
|
c81612e39b | ||
|
|
993739ab8e | ||
|
|
20a84da5dc | ||
|
|
6a7532b5b7 | ||
|
|
714936a2e9 | ||
|
|
d2a40ddf33 | ||
|
|
eba30108f6 | ||
|
|
995c8a481e | ||
|
|
5b5121a609 | ||
|
|
c008cc92c2 | ||
|
|
858ccd72de | ||
|
|
a87935875d | ||
|
|
cc240f4f87 | ||
|
|
47c401145d | ||
|
|
76d46ec1ba | ||
|
|
fbc099d198 | ||
|
|
3de04bdb22 | ||
|
|
c042c245a3 | ||
|
|
68ff84c85a | ||
|
|
dfe7b0d60b | ||
|
|
afdca50bd2 | ||
|
|
cb2b28ca4b | ||
|
|
b7fb086476 | ||
|
|
2bf423132d | ||
|
|
84f57bb0a1 | ||
|
|
5043b9cd30 | ||
|
|
051f439434 | ||
|
|
dbadcd8f7a | ||
|
|
042a381b66 | ||
|
|
9b95ac3c91 | ||
|
|
0a08b8fb9b | ||
|
|
b70e179ff9 | ||
|
|
5fbb444d5f | ||
|
|
477d249da8 | ||
|
|
f12dd52208 | ||
|
|
452304b471 | ||
|
|
18cd1f961f | ||
|
|
6a5836f096 | ||
|
|
7dffe393ab | ||
|
|
fdbb8d8b35 | ||
|
|
2b92c98975 | ||
|
|
39f416c6a9 | ||
|
|
34903d528c | ||
|
|
230f1f77f9 | ||
|
|
f1dc67f206 | ||
|
|
53d1a57f3d | ||
|
|
e71af87b90 | ||
|
|
8f78184323 | ||
|
|
f861eb4bd9 | ||
|
|
a74aa5412c | ||
|
|
06772713ce | ||
|
|
4a8b7377a8 | ||
|
|
5f8b96704b | ||
|
|
d512ae7e22 | ||
|
|
11eaf9eb8e | ||
|
|
ef70e9317d | ||
|
|
f67e2c5a45 | ||
|
|
ce8259b031 | ||
|
|
d4aa866e5b | ||
|
|
6989ce8311 | ||
|
|
5875b1b264 | ||
|
|
fca7fcbad2 | ||
|
|
bbad5a7866 | ||
|
|
08153f9f54 | ||
|
|
81e51d2877 | ||
|
|
030f05b24b | ||
|
|
49b6ef2bde | ||
|
|
29bc596090 | ||
|
|
4f301856fb | ||
|
|
1cc4ae5c03 | ||
|
|
4fa51821ef | ||
|
|
4bafe6bfe7 | ||
|
|
184aa5eca6 | ||
|
|
a9df79642d | ||
|
|
e23e25890a | ||
|
|
28bd849af7 | ||
|
|
918585c3e2 | ||
|
|
0906420584 | ||
|
|
18bd9c856d | ||
|
|
93379145ac | ||
|
|
9c81d34d66 | ||
|
|
b51fcdb342 | ||
|
|
db2501633d | ||
|
|
5cd940f3cc | ||
|
|
1bc19e7857 | ||
|
|
83e3800ddf | ||
|
|
34ef216f3f | ||
|
|
2e014a5883 | ||
|
|
46a57c1cf2 | ||
|
|
78527cb375 | ||
|
|
508f687491 | ||
|
|
9a8ea9e1fe | ||
|
|
b1ae5f700e | ||
|
|
f0a67d9a29 | ||
|
|
5d113ea280 | ||
|
|
d45ae5fab9 | ||
|
|
02249d20c2 | ||
|
|
cefa0d8fde | ||
|
|
4933b4f60d | ||
|
|
55174476e8 | ||
|
|
a60053e6c4 | ||
|
|
6756838d5f | ||
|
|
74fe7a7a28 | ||
|
|
5812a6bd97 | ||
|
|
824f4b8acc | ||
|
|
a6ea9ac333 | ||
|
|
a87bda7810 | ||
|
|
a8f00f5242 | ||
|
|
6268db182e | ||
|
|
6f077f1c5e | ||
|
|
ff21033b0c | ||
|
|
6fdf1dfaa8 | ||
|
|
f1e0b9236c | ||
|
|
4da75134ed | ||
|
|
957ba4e058 | ||
|
|
732ef95bd9 | ||
|
|
37d728cc83 | ||
|
|
7fb8a18a1e | ||
|
|
0dc16977a5 | ||
|
|
ffc9387edb | ||
|
|
b911e8b56f | ||
|
|
52ca28d0ec | ||
|
|
684ce37f4d | ||
|
|
5bae5bf04d | ||
|
|
c701f723cf | ||
|
|
33da630db5 | ||
|
|
e57af4ae10 | ||
|
|
c7992260f0 | ||
|
|
6717bcf8b4 | ||
|
|
60bca7412c | ||
|
|
bd280d171b | ||
|
|
0089d396c4 | ||
|
|
c4669ca516 | ||
|
|
35e8c76120 | ||
|
|
6d6750c665 | ||
|
|
209119f14c | ||
|
|
a99555c1d0 | ||
|
|
e208693806 | ||
|
|
514d4a145d | ||
|
|
c1d0299c40 |
11
.env.example
11
.env.example
@@ -4,11 +4,16 @@ DATABASE_URL="file:./database/db.sqlite"
|
||||
# You can generate a new secret on the command line with:
|
||||
# openssl rand -base64 32
|
||||
# https://next-auth.js.org/configuration/options#secret
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
|
||||
AUTH_TRUST_HOST="true"
|
||||
NEXTAUTH_SECRET="anything"
|
||||
|
||||
# Disable analytics
|
||||
NEXT_PUBLIC_DISABLE_ANALYTICS="true"
|
||||
|
||||
DEFAULT_COLOR_SCHEME="light"
|
||||
DEFAULT_COLOR_SCHEME="light"
|
||||
|
||||
# Unraid API Configuration
|
||||
UNRAID_HOST=192.168.10.20
|
||||
UNRAID_API_KEY=your-api-key-here
|
||||
UNRAID_USE_SSL=false
|
||||
UNRAID_PORT=80
|
||||
5
.github/ISSUE_TEMPLATE/bug.yml
vendored
5
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -3,6 +3,11 @@ description: Report something that's broken, or not working like intented!
|
||||
title: '<title>'
|
||||
labels: ['🐛 Bug']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
> [!WARNING]
|
||||
> If you want to report a bug for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
|
||||
- type: dropdown
|
||||
id: environment
|
||||
attributes:
|
||||
|
||||
13
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
13
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@@ -3,6 +3,11 @@ description: Request a feature to help improve Homarr!
|
||||
title: '<title>'
|
||||
labels: ['✨ Feature']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
> [!WARNING]
|
||||
> If you want to request a feature for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
|
||||
- type: textarea
|
||||
id: feature
|
||||
attributes:
|
||||
@@ -22,3 +27,11 @@ body:
|
||||
- High (App breaking feature)
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: idiot-check
|
||||
attributes:
|
||||
label: Please tick the boxes
|
||||
description: Before submitting, please ensure that
|
||||
options:
|
||||
- label: You are **NOT** using a version superior to v1. if that is the case, please fill this issue on the new repository.
|
||||
required: true
|
||||
|
||||
5
.github/ISSUE_TEMPLATE/idea.yml
vendored
5
.github/ISSUE_TEMPLATE/idea.yml
vendored
@@ -3,6 +3,11 @@ description: Tell us your idea! We may implement it.
|
||||
title: '<title>'
|
||||
labels: ['🤔 Idea']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
> [!WARNING]
|
||||
> If you have an idea for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
|
||||
- type: textarea
|
||||
id: feature
|
||||
attributes:
|
||||
|
||||
5
.github/ISSUE_TEMPLATE/module.yml
vendored
5
.github/ISSUE_TEMPLATE/module.yml
vendored
@@ -2,6 +2,11 @@ name: 🏗️ Module request
|
||||
description: Request for a module to be added / an integration with you favourite service !
|
||||
title: '<title>'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
> [!WARNING]
|
||||
> If you want to request a new integration for 1.0, please open it on the new [repository](https://github.com/homarr-labs/homarr/issues/new/choose).
|
||||
- type: textarea
|
||||
id: name
|
||||
attributes:
|
||||
|
||||
2
.github/workflows/docker_dev.yml
vendored
2
.github/workflows/docker_dev.yml
vendored
@@ -112,7 +112,7 @@ jobs:
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
platforms: linux/amd64,linux/arm64
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
|
||||
2
.github/workflows/greetings.yml
vendored
2
.github/workflows/greetings.yml
vendored
@@ -12,5 +12,5 @@ jobs:
|
||||
- uses: actions/first-interaction@v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-message: "Hi 👋. Thank you for submitting your first issue to Homarr. Please ensure that you've provided all nessesary information. You can use the three dots > Edit button to update your post with additional images and information. Depending on the current volume of requests, the team should get in conact with you shortly."
|
||||
issue-message: "Hi 👋. Thank you for submitting your first issue to Homarr. Please ensure that you've opened this issue on the correct repository. Homarr v1 has been moved to github.com/homarr-labs/homarr "
|
||||
pr-message: "Hi 👋. Thank you for making your first contribution to Homarr. Please ensure that you've completed all the points in the TODO checklist. We'll review your changes shortly."
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
- uses: actions/stale@v5
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
stale-issue-message: "Hello 👋, this issue has been open for 60 without activity. Please close this issue if it's no longer relevant or has been resolved. Still relevant? Simply reply and I'll mark it as active."
|
||||
stale-issue-message: "Hello 👋, this issue has been open for 60 days without activity. We mark issues to help prioritise and close dead issues. Can you confirm that this issue is still relevant on the latest version? I'll remove the stale label as soon as there is further activity on this issue. Thank you 🙏"
|
||||
stale-pr-message: 'Hello 👋, this PR has gone stale. Please reply to mark it as active.'
|
||||
stale-issue-label: 'Stale'
|
||||
stale-pr-label: 'Stale'
|
||||
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -11,7 +11,7 @@
|
||||
"layout.manage.navigation.**",
|
||||
],
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.organizeImports": true
|
||||
"source.organizeImports": "explicit"
|
||||
},
|
||||
"typescript.tsdk": "node_modules/typescript/lib",
|
||||
"explorer.fileNesting.patterns": {
|
||||
|
||||
@@ -17,6 +17,7 @@ COPY yarn.lock ./temp_yarn.lock
|
||||
COPY .next/standalone ./
|
||||
COPY .next/static ./.next/static
|
||||
COPY ./scripts/run.sh ./scripts/run.sh
|
||||
RUN chmod +x ./scripts/run.sh
|
||||
COPY ./drizzle ./drizzle
|
||||
|
||||
COPY ./drizzle/migrate ./migrate
|
||||
@@ -31,16 +32,14 @@ RUN apt update && apt install -y openssl wget
|
||||
# Move node_modules to temp location to avoid overwriting
|
||||
RUN mv node_modules _node_modules
|
||||
RUN rm package.json
|
||||
|
||||
# Install dependencies for migration
|
||||
RUN cp ./migrate/package.json ./package.json
|
||||
RUN yarn
|
||||
|
||||
# Copy better_sqlite3 build for current platform
|
||||
RUN cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node
|
||||
|
||||
# Copy node_modules for migration to migrate folder for migration script
|
||||
RUN mv node_modules ./migrate/node_modules
|
||||
|
||||
# Copy temp node_modules of app to app folder
|
||||
RUN mv _node_modules node_modules
|
||||
|
||||
@@ -53,7 +52,7 @@ EXPOSE $PORT
|
||||
ENV PORT=${PORT}
|
||||
|
||||
ENV DATABASE_URL "file:/data/db.sqlite"
|
||||
ENV NEXTAUTH_URL "http://localhost:7575"
|
||||
ENV AUTH_TRUST_HOST="true"
|
||||
ENV PORT 7575
|
||||
ENV NEXTAUTH_SECRET NOT_IN_USE_BECAUSE_JWTS_ARE_UNUSED
|
||||
|
||||
@@ -62,4 +61,4 @@ HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \
|
||||
|
||||
VOLUME [ "/app/data/configs" ]
|
||||
VOLUME [ "/data" ]
|
||||
ENTRYPOINT ["sh", "./scripts/run.sh"]
|
||||
ENTRYPOINT ["sh", "./scripts/run.sh"]
|
||||
105
Dockerfile.unraid
Normal file
105
Dockerfile.unraid
Normal file
@@ -0,0 +1,105 @@
|
||||
# Multi-stage Dockerfile for Homarr Unraid UI
|
||||
# Builds entirely inside Docker to avoid native module issues
|
||||
|
||||
# Build stage
|
||||
FROM node:20.2.0-slim AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
python3 \
|
||||
make \
|
||||
g++ \
|
||||
git \
|
||||
openssl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy package files
|
||||
COPY package.json yarn.lock ./
|
||||
COPY .yarnrc.yml ./
|
||||
COPY .yarn ./.yarn
|
||||
|
||||
# Install dependencies
|
||||
RUN yarn install --immutable
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build the application
|
||||
ENV SKIP_ENV_VALIDATION=1
|
||||
ENV NEXTAUTH_SECRET=build-time-secret
|
||||
ENV DATABASE_URL=file:build.sqlite
|
||||
RUN yarn build
|
||||
|
||||
# Production stage
|
||||
FROM node:20.2.0-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Define node.js environment variables
|
||||
ARG PORT=7575
|
||||
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
ENV NODE_ENV=production
|
||||
ENV NODE_OPTIONS='--no-experimental-fetch'
|
||||
|
||||
# Copy built application from builder
|
||||
COPY --from=builder /app/next.config.js ./
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder /app/package.json ./temp_package.json
|
||||
COPY --from=builder /app/yarn.lock ./temp_yarn.lock
|
||||
COPY --from=builder /app/.next/standalone ./
|
||||
COPY --from=builder /app/.next/static ./.next/static
|
||||
COPY --from=builder /app/scripts/run.sh ./scripts/run.sh
|
||||
COPY --from=builder /app/drizzle ./drizzle
|
||||
COPY --from=builder /app/drizzle/migrate ./migrate
|
||||
COPY --from=builder /app/tsconfig.json ./migrate/tsconfig.json
|
||||
COPY --from=builder /app/cli ./cli
|
||||
|
||||
RUN chmod +x ./scripts/run.sh
|
||||
RUN mkdir -p /data
|
||||
|
||||
# Install runtime dependencies
|
||||
RUN apt-get update && apt-get install -y openssl wget && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Move node_modules to temp location to avoid overwriting
|
||||
RUN mv node_modules _node_modules
|
||||
RUN rm package.json
|
||||
|
||||
# Install dependencies for migration
|
||||
RUN cp ./migrate/package.json ./package.json
|
||||
RUN yarn install --production=false
|
||||
|
||||
# Copy better_sqlite3 build for current platform
|
||||
RUN cp /app/node_modules/better-sqlite3/build/Release/better_sqlite3.node /app/_node_modules/better-sqlite3/build/Release/better_sqlite3.node || true
|
||||
|
||||
# Copy node_modules for migration to migrate folder
|
||||
RUN mv node_modules ./migrate/node_modules
|
||||
|
||||
# Restore app node_modules
|
||||
RUN mv _node_modules node_modules
|
||||
|
||||
# Setup CLI
|
||||
RUN echo '#!/bin/bash\nnode /app/cli/cli.js "$@"' > /usr/bin/homarr
|
||||
RUN chmod +x /usr/bin/homarr
|
||||
RUN cd /app/cli && yarn install --production || true
|
||||
|
||||
# Expose the default application port
|
||||
EXPOSE $PORT
|
||||
ENV PORT=${PORT}
|
||||
|
||||
# Environment defaults
|
||||
ENV DATABASE_URL="file:/data/db.sqlite"
|
||||
ENV AUTH_TRUST_HOST="true"
|
||||
ENV PORT=7575
|
||||
ENV NEXTAUTH_SECRET=NOT_IN_USE_BECAUSE_JWTS_ARE_UNUSED
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \
|
||||
CMD wget --no-verbose --tries=1 --spider http://localhost:${PORT} || exit 1
|
||||
|
||||
VOLUME [ "/app/data/configs" ]
|
||||
VOLUME [ "/data" ]
|
||||
|
||||
ENTRYPOINT ["sh", "./scripts/run.sh"]
|
||||
79
README.md
79
README.md
@@ -1,6 +1,5 @@
|
||||
|
||||
<!-- Project Title -->
|
||||

|
||||
[](https://homarr.dev/)
|
||||
|
||||
<!-- Badges -->
|
||||
<p align="center">
|
||||
@@ -25,7 +24,7 @@
|
||||
<strong>Demo ✨</strong>
|
||||
</a>
|
||||
•
|
||||
<a href="https://homarr.dev/docs/introduction/installation">
|
||||
<a href="https://homarr.dev/docs/getting-started/">
|
||||
<strong>Install 💻</strong>
|
||||
</a> •
|
||||
<a href="https://translate.homarr.dev/">
|
||||
@@ -41,7 +40,14 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||

|
||||
|
||||
> [!IMPORTANT]
|
||||
> # The Homarr repository has been moved to [HomarrLabs](https://github.com/homarr-labs/homarr)
|
||||
> # Please create issues related to 1.0 there. This repository will be archived once the 1.0 is fully polished.
|
||||
> # 1.0 is a complete rewrite and to migrate you have to change your compose file. Please follow the [Migration Guide](https://homarr.dev/blog/2025/01/19/migration-guide-1.0) and read the [Breaking Changes](https://homarr.dev/blog/2024/09/23/version-1.0#breaking-changes)
|
||||
|
||||
|
||||
[](https://homarr.dev/)
|
||||
|
||||
- 🖌️ Highly customizable with an extensive drag and drop grid system
|
||||
- ✨ Integrates seamlessly with your favorite self-hosted applications
|
||||
@@ -53,59 +59,71 @@ Simplify the management of your server with Homarr - a sleek, modern dashboard t
|
||||
- 🦞 Comprehensive built-in icon picker with over 7000 icons
|
||||
- 🐳 Easy deployment with Docker, unRAID, and Synology
|
||||
- 🚀 Compatible with any major consumer hardware (x86, Raspberry Pi, old laptops, ...)
|
||||
- 💵 Free and Open-Source - your data stays on your device. No telemetry data.
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||

|
||||
[](https://homarr.dev/docs/category/widgets)
|
||||
|
||||
Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/integrations/), that connect to your applications and enable you to control them directly from the dashboard.
|
||||
Each widget and integration has a comprehensive documentation for your comfort.
|
||||
Homarr will integrate with the following applications of yours:
|
||||
Homarr has a [built-in collection of widgets and integrations](https://homarr.dev/docs/category/integrations), that connect to your applications and enable you to control them directly from the dashboard.
|
||||
Each widget and integration has a comprehensive documentation
|
||||
Homarr will integrate with the following applications:
|
||||
|
||||
- 📥 Torrent clients
|
||||
- [Deluge](https://homarr.dev/docs/integrations/#deluge)
|
||||
- [Transmission](https://homarr.dev/docs/integrations/#transmission)
|
||||
- [qBittorent](https://homarr.dev/docs/integrations/#qbittorrent-integration)
|
||||
- 📥 Usenet clients
|
||||
- [SABnzbd](https://homarr.dev/docs/integrations/#sabnzbd)
|
||||
- [NZBGet](https://homarr.dev/docs/integrations/#nzbget)
|
||||
- 📚 Media collection managers
|
||||
- [Sonarr](https://homarr.dev/docs/integrations/#sonarr)
|
||||
- [Radarr](https://homarr.dev/docs/integrations/#radarr)
|
||||
- [Lidarr](https://homarr.dev/docs/integrations/#lidarr)
|
||||
- [Readarr](https://homarr.dev/docs/integrations/#readarr)
|
||||
- 🎞️ Media request managers
|
||||
- [Overseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
|
||||
- [Jellyseerr](https://homarr.dev/docs/integrations/#overseerr--jellyseerr)
|
||||
- 🔌 [Dash.](https://homarr.dev/docs/integrations/#dash)
|
||||
- 🐳 [Docker](https://homarr.dev/docs/integrations/#docker)
|
||||
📥 Torrent clients
|
||||
- [Deluge](https://homarr.dev/docs/integrations/torrent#deluge)
|
||||
- [Transmission](https://homarr.dev/docs/integrations/torrent#transmission)
|
||||
- [qBittorent](https://homarr.dev/docs/integrations/torrent#qbittorrent-integration)
|
||||
|
||||
📥 Usenet clients
|
||||
- [SABnzbd](https://homarr.dev/docs/integrations/usenet#sabnzbd)
|
||||
- [NZBGet](https://homarr.dev/docs/integrations/usenet#nzbget)
|
||||
|
||||
📺 Media servers
|
||||
- [Plex](https://homarr.dev/docs/integrations/media-server/#plex)
|
||||
- [Jellyfin](https://homarr.dev/docs/integrations/media-server#jellyfin-and-emby)
|
||||
|
||||
📚 Media collection managers
|
||||
- [Sonarr](https://homarr.dev/docs/integrations/servarr#sonarr)
|
||||
- [Radarr](https://homarr.dev/docs/integrations/servarr#radarr)
|
||||
- [Lidarr](https://homarr.dev/docs/integrations/servarr#lidarr)
|
||||
- [Readarr](https://homarr.dev/docs/integrations/servarr#readarr)
|
||||
|
||||
🎞️ Media request managers
|
||||
- [Overseerr](https://homarr.dev/docs/integrations/media-requester)
|
||||
- [Jellyseerr](https://homarr.dev/docs/integrations/media-requester)
|
||||
|
||||
🚫 DNS ad-blockers
|
||||
- [Pihole](https://homarr.dev/docs/integrations/dns#pihole)
|
||||
- [AdGuard Home](https://homarr.dev/docs/integrations/dns#adguard-home)
|
||||
|
||||
Other integrations
|
||||
- [🔌 Dash.](https://homarr.dev/docs/integrations/hardware)
|
||||
- [🐳 Docker](https://homarr.dev/docs/integrations/containers)
|
||||
|
||||
We're constantly adding new integrations and widgets, which will enhance your experience even further.
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||

|
||||
[](https://demo.homarr.dev/)
|
||||
|
||||
https://user-images.githubusercontent.com/30572287/217098893-5880e7de-13d0-42c5-b505-f7921593396f.mp4
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||

|
||||
[](https://homarr.dev/docs/category/installation-1)
|
||||
|
||||
Since we are updating Homarr very frequently, we recommend reading our official installation guides:
|
||||
|
||||
<a href="https://homarr.dev/docs/introduction/installation">
|
||||
<a href="https://homarr.dev/docs/category/installation-1">
|
||||
<img src="docs/installation-button.png" width="200" />
|
||||
</a>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||

|
||||
[](https://github.com/ajnart/homarr/blob/dev/CONTRIBUTING.md)
|
||||
Homarr is maintained by motivated developers in their free-time.
|
||||
We work for fun and learning on this project.
|
||||
|
||||
@@ -123,3 +141,4 @@ You can also support us by helping with [translating the entire project](https:/
|
||||
All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️
|
||||
|
||||

|
||||
[](https://argos-ci.com?utm_source=%5Bhomarr%5D&utm_campaign=oss)
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
"type": "notebook",
|
||||
"properties": {
|
||||
"showToolbar": true,
|
||||
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/introduction/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
|
||||
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/getting-started/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
@@ -510,4 +510,4 @@
|
||||
"allowGuests": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
"type": "notebook",
|
||||
"properties": {
|
||||
"showToolbar": true,
|
||||
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/introduction/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
|
||||
"content": "<h2><strong>Welcome to Homarr 🚀👋</strong></h2><p>We're glad that you're here! Homarr is a <em>modern </em>and <em>easy to use</em> dashboard that helps you to <strong>organize and manage</strong> your home network from one place. Control is <strong>at your fingertips</strong>.</p><p>We recommend you to read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev/docs/getting-started/after-the-installation\">getting started guide</a> first. To edit this board you must enter the edit mode - only administrators can do this. Adding an app is the first step you should take. You can do this by clicking the <code>Add tile</code> button at the top right and select <code>App</code>. After you provided an internal URL, external URL and selected an icon you can drag it around when holding down the left mouse button. Make it bigger or smaller using the drag icon at the bottom right. When you're happy with it's position, you <strong>must exit edit mode to save your board</strong>. Adding widgets works the same way but may require additional configuration - read the documentation for more information.</p><p>To remove this widget, you must log in to your administrator account and click on the menu to delete it.</p><p><strong><u>Your TODO list:</u></strong></p><ul data-type=\"taskList\"><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Read the <a target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://homarr.dev\">documentation</a></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add your <em>first app</em></p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p><em>Resize </em>and <em>drag</em> your app to a different position</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Add the <em>clock widget</em> to your dashboard</p></div></li><li data-checked=\"false\" data-type=\"taskItem\"><label><input type=\"checkbox\"><span></span></label><div><p>Create a <em>new user</em></p></div></li></ul>"
|
||||
},
|
||||
"area": {
|
||||
"type": "wrapper",
|
||||
|
||||
42
docker-compose.unraid.yml
Normal file
42
docker-compose.unraid.yml
Normal file
@@ -0,0 +1,42 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
unmarr:
|
||||
image: git.xtrm-lab.org/jazzymc/homarr:latest
|
||||
container_name: unmarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# Unraid API Configuration
|
||||
- UNRAID_HOST=192.168.10.20
|
||||
- UNRAID_API_KEY=${UNRAID_API_KEY}
|
||||
- UNRAID_USE_SSL=false
|
||||
- UNRAID_PORT=80
|
||||
# App Configuration
|
||||
- TZ=Europe/Sofia
|
||||
- DATABASE_URL=file:/data/db.sqlite
|
||||
- AUTH_TRUST_HOST=true
|
||||
- NEXTAUTH_URL=https://unmarr.xtrm-lab.org
|
||||
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:-changeme}
|
||||
volumes:
|
||||
- /mnt/user/appdata/unmarr/data:/data
|
||||
- /mnt/user/appdata/unmarr/configs:/app/data/configs
|
||||
networks:
|
||||
dockerproxy:
|
||||
ipv4_address: 172.18.0.5
|
||||
labels:
|
||||
# Traefik
|
||||
- "traefik.enable=true"
|
||||
- "traefik.constraint=valid"
|
||||
- "traefik.http.routers.unmarr.rule=Host(`unmarr.xtrm-lab.org`)"
|
||||
- "traefik.http.routers.unmarr.entrypoints=https"
|
||||
- "traefik.http.routers.unmarr.tls=true"
|
||||
- "traefik.http.routers.unmarr.tls.certresolver=cloudflare"
|
||||
- "traefik.http.services.unmarr.loadbalancer.server.port=7575"
|
||||
# Unraid
|
||||
- "net.unraid.docker.managed=true"
|
||||
- "net.unraid.docker.icon=https://homarr.dev/img/logo.png"
|
||||
- "net.unraid.docker.webui=https://unmarr.xtrm-lab.org"
|
||||
|
||||
networks:
|
||||
dockerproxy:
|
||||
external: true
|
||||
148
docs/unraid-ui-project/README.md
Normal file
148
docs/unraid-ui-project/README.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Unraid Custom UI Project
|
||||
|
||||
This project transforms the Homarr fork into a custom Unraid management UI with an Orchis GTK theme.
|
||||
|
||||
## Project Goals
|
||||
|
||||
1. **Step 1**: Recreate all current Unraid WebGUI pages using Homarr as a base, with data from the Unraid GraphQL API
|
||||
2. **Step 2**: Apply a custom theme based on the Orchis GTK theme
|
||||
|
||||
## Project Resources
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [WEBGUI-COMPLETE-INVENTORY.md](./WEBGUI-COMPLETE-INVENTORY.md) | Complete inventory of ~100 Unraid WebGUI pages |
|
||||
| [unraid-api-research.md](./unraid-api-research.md) | Unraid GraphQL API documentation |
|
||||
| [homarr-architecture.md](./homarr-architecture.md) | Homarr codebase architecture |
|
||||
| [orchis-design-system.ts](./orchis-design-system.ts) | Orchis theme design tokens (TypeScript) |
|
||||
|
||||
## Unraid Server Connection
|
||||
|
||||
- **GraphQL Endpoint**: `http://192.168.10.20/graphql`
|
||||
- **Auth**: `x-api-key` header
|
||||
- **Socket**: `/var/run/unraid-api.sock`
|
||||
|
||||
## Implementation Plan
|
||||
|
||||
### Phase 1: Foundation Setup
|
||||
- [ ] Create Unraid GraphQL client integration
|
||||
- [ ] Set up API authentication layer
|
||||
- [ ] Configure environment variables for Unraid connection
|
||||
- [ ] Create base types for Unraid data models
|
||||
|
||||
### Phase 2: Core Pages (Priority Order)
|
||||
1. **Dashboard** - System overview with real-time metrics
|
||||
- System info, CPU/RAM usage, array status
|
||||
- Docker/VM summaries, network, UPS
|
||||
|
||||
2. **Array Management** (Main)
|
||||
- Array devices, pool devices, boot device
|
||||
- Parity check, array operations
|
||||
|
||||
3. **Docker Management**
|
||||
- Container list, start/stop/restart
|
||||
- Container details, logs
|
||||
|
||||
4. **VM Management**
|
||||
- VM list, power controls
|
||||
- VM details, console access
|
||||
|
||||
5. **Shares**
|
||||
- User shares, disk shares
|
||||
- Share settings, SMB/NFS security
|
||||
|
||||
### Phase 3: Orchis Theme Integration
|
||||
- [ ] Copy design tokens to `src/styles/`
|
||||
- [ ] Create Mantine theme override with Orchis values
|
||||
- [ ] Implement light/dark mode with Orchis palettes
|
||||
- [ ] Replace default components with Orchis-styled versions
|
||||
|
||||
### Phase 4: Settings & Tools
|
||||
- Settings pages (identification, disk, network, etc.)
|
||||
- Tools pages (syslog, diagnostics, system devices)
|
||||
- User management
|
||||
- Notifications system
|
||||
|
||||
### Phase 5: Real-time Features
|
||||
- GraphQL subscriptions for CPU/memory metrics
|
||||
- Nchan integration for legacy real-time features
|
||||
- WebSocket connections for live updates
|
||||
|
||||
## Key Technical Decisions
|
||||
|
||||
### Homarr Stack
|
||||
- Next.js 13 (Pages Router in this version)
|
||||
- Mantine UI v6
|
||||
- tRPC for type-safe API
|
||||
- Zustand for state management
|
||||
- React Query for server state
|
||||
|
||||
### Data Sources
|
||||
| Feature | Source |
|
||||
|---------|--------|
|
||||
| System info, array, shares | Unraid GraphQL API |
|
||||
| Docker containers | Unraid GraphQL API |
|
||||
| VMs | Unraid GraphQL API |
|
||||
| Real-time CPU/RAM | GraphQL Subscriptions |
|
||||
| Real-time disk I/O | Nchan WebSocket (`/sub/diskload`) |
|
||||
| Legacy features | PHP endpoints where needed |
|
||||
|
||||
### API Gaps (Require Legacy Endpoints)
|
||||
- Docker create/delete/restart/logs
|
||||
- VM create/delete
|
||||
- Share CRUD, User CRUD
|
||||
- System reboot/shutdown
|
||||
- Mover operations
|
||||
|
||||
## Directory Structure (New Files)
|
||||
|
||||
```
|
||||
src/
|
||||
├── lib/
|
||||
│ └── unraid/
|
||||
│ ├── client.ts # GraphQL client
|
||||
│ ├── types.ts # TypeScript types
|
||||
│ └── queries/ # GraphQL queries
|
||||
├── pages/
|
||||
│ └── unraid/
|
||||
│ ├── dashboard.tsx # Dashboard page
|
||||
│ ├── array/ # Array pages
|
||||
│ ├── docker/ # Docker pages
|
||||
│ ├── vms/ # VM pages
|
||||
│ ├── shares/ # Share pages
|
||||
│ ├── settings/ # Settings pages
|
||||
│ └── tools/ # Tools pages
|
||||
├── components/
|
||||
│ └── unraid/
|
||||
│ ├── Dashboard/ # Dashboard components
|
||||
│ ├── Array/ # Array components
|
||||
│ ├── Docker/ # Docker components
|
||||
│ └── ...
|
||||
└── styles/
|
||||
└── orchis/
|
||||
├── theme.ts # Mantine theme config
|
||||
├── variables.css # CSS custom properties
|
||||
└── components.css # Component overrides
|
||||
```
|
||||
|
||||
## Getting Started
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
yarn install
|
||||
|
||||
# Set up environment
|
||||
cp .env.example .env.local
|
||||
# Edit .env.local with your Unraid API key
|
||||
|
||||
# Run development server
|
||||
yarn dev
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```env
|
||||
UNRAID_HOST=192.168.10.20
|
||||
UNRAID_API_KEY=your-api-key-here
|
||||
UNRAID_USE_SSL=false
|
||||
```
|
||||
1505
docs/unraid-ui-project/WEBGUI-COMPLETE-INVENTORY.md
Normal file
1505
docs/unraid-ui-project/WEBGUI-COMPLETE-INVENTORY.md
Normal file
File diff suppressed because it is too large
Load Diff
60
docs/unraid-ui-project/homarr-architecture.md
Normal file
60
docs/unraid-ui-project/homarr-architecture.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Homarr Architecture
|
||||
|
||||
## Tech Stack
|
||||
- Next.js 13+ (App Router), React 18, TypeScript
|
||||
- Mantine UI (component library)
|
||||
- Zustand (client state), React Query (server state)
|
||||
- Prisma ORM (SQLite default / PostgreSQL)
|
||||
- Turbo monorepo, pnpm workspaces
|
||||
|
||||
## Project Structure
|
||||
```
|
||||
homarr/
|
||||
├── apps/web/src/ # Main Next.js app
|
||||
│ ├── app/ # App Router pages
|
||||
│ ├── components/ # React components
|
||||
│ ├── modules/ # Widgets & integrations
|
||||
│ ├── stores/ # Zustand stores
|
||||
│ └── styles/ # Themes & global CSS
|
||||
├── packages/
|
||||
│ ├── api-client/ # API client lib
|
||||
│ ├── common/ # Shared types/utils
|
||||
│ ├── definitions/ # Widget/integration defs
|
||||
│ ├── auth/ # Auth logic
|
||||
│ └── ui/ # Shared UI components
|
||||
├── prisma/ # DB schema & migrations
|
||||
└── turbo.json
|
||||
```
|
||||
|
||||
## Widget System
|
||||
Each widget in `apps/web/src/modules/`:
|
||||
- `definition.ts` - Metadata + Zod config schema
|
||||
- `component.tsx` - React component
|
||||
- `settings.tsx` - Config panel
|
||||
- `server-actions.ts` - Backend operations
|
||||
- Registered in module index, auto-discovered
|
||||
|
||||
## Integration System
|
||||
External service connectors with:
|
||||
- API client abstraction, credential management
|
||||
- URL/hostname config, SSL handling
|
||||
- Error handling, retry, rate limiting, caching
|
||||
|
||||
## Theming
|
||||
- CSS variables + Mantine theming + Tailwind
|
||||
- Light/dark mode, custom color palettes, accent colors
|
||||
- Wallpaper/background, font size, border radius customization
|
||||
- Theme persisted in database
|
||||
|
||||
## Adding New Pages
|
||||
1. Create in `apps/web/src/app/(group)/page-name/page.tsx`
|
||||
2. Use Mantine UI components
|
||||
3. Add API routes in `src/app/api/`
|
||||
4. Create Zustand store or use React Query
|
||||
5. Update navigation config
|
||||
|
||||
## Key Patterns
|
||||
- Server Components by default, `'use client'` for interactive
|
||||
- TRPC for type-safe RPC
|
||||
- Zod schemas for validation
|
||||
- Prisma for DB operations
|
||||
1329
docs/unraid-ui-project/orchis-design-system.ts
Normal file
1329
docs/unraid-ui-project/orchis-design-system.ts
Normal file
File diff suppressed because it is too large
Load Diff
81
docs/unraid-ui-project/unraid-api-research.md
Normal file
81
docs/unraid-ui-project/unraid-api-research.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Unraid API Research (Live from XTRM-Unraid v7.2.3)
|
||||
|
||||
## API: unraid-api v4.29.2 (NestJS + Apollo GraphQL)
|
||||
|
||||
### Connection
|
||||
- HTTP: `http://192.168.10.20/graphql`
|
||||
- WebSocket: `ws://192.168.10.20/graphql` (graphql-ws protocol)
|
||||
- Unix socket: `/var/run/unraid-api.sock`
|
||||
- Auth: `x-api-key` header
|
||||
|
||||
### GraphQL Queries
|
||||
| Query | Description |
|
||||
|-------|-------------|
|
||||
| `info` | System info (cpu, memory, os, baseboard, devices, display, versions) |
|
||||
| `array` | Array state, capacity, disks, parities, caches, parity check status |
|
||||
| `disks` / `disk(id)` | Physical disks with SMART status, temp, serial |
|
||||
| `docker` | Containers (id, names, state, status, image, ports, autoStart) + networks |
|
||||
| `vms` | VMs (id, name, state) |
|
||||
| `shares` | Shares (name, free, used, size, include, exclude, cache, color) |
|
||||
| `notifications` | Notifications (title, subject, description, importance, type, timestamp) |
|
||||
| `vars` | Server variables (version, name, timezone, network, SMB/NFS settings) |
|
||||
| `services` | Running services (name, online, uptime, version) |
|
||||
| `flash` | Flash drive (guid, vendor, product) |
|
||||
| `registration` | License (type, state, keyFile, expiration) |
|
||||
| `network` | Network info (accessUrls) |
|
||||
| `server` | Server details (owner, guid, wanip, lanip, localurl, remoteurl) |
|
||||
| `connect` | Connect status (dynamicRemoteAccess, settings) |
|
||||
| `plugins` | Installed plugins (name, version) |
|
||||
| `logFiles` / `logFile(path)` | Log file listing and content |
|
||||
| `upsDevices` / `upsConfiguration` | UPS monitoring |
|
||||
| `apiKeys` | API key management |
|
||||
| `customization` | Theme + activation code |
|
||||
| `me` / `owner` | Current user / server owner |
|
||||
|
||||
### GraphQL Mutations
|
||||
| Mutation | Description |
|
||||
|----------|-------------|
|
||||
| `array.setState` | Start/stop array |
|
||||
| `array.addDiskToArray` / `removeDiskFromArray` | Disk management |
|
||||
| `array.mountArrayDisk` / `unmountArrayDisk` | Mount/unmount |
|
||||
| `docker.start(id)` / `docker.stop(id)` | Container start/stop |
|
||||
| `vm.start/stop/pause/resume/forceStop/reboot/reset(id)` | VM power management |
|
||||
| `parityCheck.start/pause/resume/cancel` | Parity check control |
|
||||
| `notification.create/delete/archive/unread` | Notification CRUD |
|
||||
| `apiKey.create/update/delete` | API key management |
|
||||
| `customization.setTheme` | Theme switching |
|
||||
| `connectSignIn/SignOut` | Unraid Connect |
|
||||
| `setupRemoteAccess` | Remote access config |
|
||||
|
||||
### GraphQL Subscriptions (Real-time)
|
||||
- `systemMetricsCpu` / `systemMetricsCpuTelemetry` / `systemMetricsMemory`
|
||||
- `arraySubscription` / `parityHistorySubscription`
|
||||
- `notificationAdded` / `notificationsOverview`
|
||||
- `logFile` (live log streaming)
|
||||
- `upsUpdates`
|
||||
- `ownerSubscription` / `serversSubscription`
|
||||
|
||||
### Enums
|
||||
- ArrayState: STARTED, STOPPED, NEW_ARRAY, RECON_DISK, DISABLE_DISK, etc.
|
||||
- ArrayDiskStatus: DISK_NP, DISK_OK, DISK_INVALID, DISK_WRONG, DISK_DSBL, etc.
|
||||
- ArrayDiskType: DATA, PARITY, FLASH, CACHE
|
||||
- ContainerState: RUNNING, EXITED
|
||||
- VmState: NOSTATE, RUNNING, IDLE, PAUSED, SHUTDOWN, SHUTOFF, CRASHED, PMSUSPENDED
|
||||
- DiskFsType: XFS, BTRFS, VFAT, ZFS, EXT4, NTFS
|
||||
- DiskInterfaceType: SAS, SATA, USB, PCIE, UNKNOWN
|
||||
- ThemeName: azure, black, gray, white
|
||||
|
||||
### Legacy PHP/Nchan Endpoints
|
||||
- Nchan WebSocket channels: `/sub/var`, `/sub/docker`, `/sub/update1-3`, `/sub/diskload`, etc.
|
||||
- PHP includes: DashboardApps.php, Control.php, SmartInfo.php, Syslog.php, etc.
|
||||
- State INI files at `/var/local/emhttp/`: var.ini, disks.ini, shares.ini, etc.
|
||||
- Legacy control: POST to `/update.htm` for commands
|
||||
|
||||
### NOT Available via GraphQL
|
||||
- Docker create/delete/restart/logs
|
||||
- VM create/delete
|
||||
- Share CRUD, User CRUD
|
||||
- Detailed SMART attributes
|
||||
- Disk format/clear, spin up/down
|
||||
- System reboot/shutdown
|
||||
- Mover operations
|
||||
10
drizzle/0001_brave_mimic.sql
Normal file
10
drizzle/0001_brave_mimic.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
CREATE TABLE `migrate_token` (
|
||||
`id` text PRIMARY KEY NOT NULL,
|
||||
`token` text NOT NULL,
|
||||
`boards` integer NOT NULL,
|
||||
`users` integer NOT NULL,
|
||||
`integrations` integer NOT NULL,
|
||||
`expires` integer NOT NULL
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE UNIQUE INDEX `migrate_token_token_unique` ON `migrate_token` (`token`);
|
||||
527
drizzle/meta/0001_snapshot.json
Normal file
527
drizzle/meta/0001_snapshot.json
Normal file
@@ -0,0 +1,527 @@
|
||||
{
|
||||
"version": "5",
|
||||
"dialect": "sqlite",
|
||||
"id": "9c8971c9-6d33-4d14-b318-b19ff9fbb88f",
|
||||
"prevId": "32c1bc91-e69f-4e1d-b53c-9c43f2e6c9d3",
|
||||
"tables": {
|
||||
"account": {
|
||||
"name": "account",
|
||||
"columns": {
|
||||
"userId": {
|
||||
"name": "userId",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"type": {
|
||||
"name": "type",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"provider": {
|
||||
"name": "provider",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"providerAccountId": {
|
||||
"name": "providerAccountId",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"refresh_token": {
|
||||
"name": "refresh_token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"access_token": {
|
||||
"name": "access_token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"expires_at": {
|
||||
"name": "expires_at",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"token_type": {
|
||||
"name": "token_type",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"scope": {
|
||||
"name": "scope",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"id_token": {
|
||||
"name": "id_token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"session_state": {
|
||||
"name": "session_state",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"userId_idx": {
|
||||
"name": "userId_idx",
|
||||
"columns": [
|
||||
"userId"
|
||||
],
|
||||
"isUnique": false
|
||||
}
|
||||
},
|
||||
"foreignKeys": {
|
||||
"account_userId_user_id_fk": {
|
||||
"name": "account_userId_user_id_fk",
|
||||
"tableFrom": "account",
|
||||
"tableTo": "user",
|
||||
"columnsFrom": [
|
||||
"userId"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {
|
||||
"account_provider_providerAccountId_pk": {
|
||||
"columns": [
|
||||
"provider",
|
||||
"providerAccountId"
|
||||
]
|
||||
}
|
||||
},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"invite": {
|
||||
"name": "invite",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "text",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"token": {
|
||||
"name": "token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"expires": {
|
||||
"name": "expires",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"created_by_id": {
|
||||
"name": "created_by_id",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"invite_token_unique": {
|
||||
"name": "invite_token_unique",
|
||||
"columns": [
|
||||
"token"
|
||||
],
|
||||
"isUnique": true
|
||||
}
|
||||
},
|
||||
"foreignKeys": {
|
||||
"invite_created_by_id_user_id_fk": {
|
||||
"name": "invite_created_by_id_user_id_fk",
|
||||
"tableFrom": "invite",
|
||||
"tableTo": "user",
|
||||
"columnsFrom": [
|
||||
"created_by_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"migrate_token": {
|
||||
"name": "migrate_token",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "text",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"token": {
|
||||
"name": "token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"boards": {
|
||||
"name": "boards",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"users": {
|
||||
"name": "users",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"integrations": {
|
||||
"name": "integrations",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"expires": {
|
||||
"name": "expires",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"migrate_token_token_unique": {
|
||||
"name": "migrate_token_token_unique",
|
||||
"columns": [
|
||||
"token"
|
||||
],
|
||||
"isUnique": true
|
||||
}
|
||||
},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"session": {
|
||||
"name": "session",
|
||||
"columns": {
|
||||
"sessionToken": {
|
||||
"name": "sessionToken",
|
||||
"type": "text",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"userId": {
|
||||
"name": "userId",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"expires": {
|
||||
"name": "expires",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"user_id_idx": {
|
||||
"name": "user_id_idx",
|
||||
"columns": [
|
||||
"userId"
|
||||
],
|
||||
"isUnique": false
|
||||
}
|
||||
},
|
||||
"foreignKeys": {
|
||||
"session_userId_user_id_fk": {
|
||||
"name": "session_userId_user_id_fk",
|
||||
"tableFrom": "session",
|
||||
"tableTo": "user",
|
||||
"columnsFrom": [
|
||||
"userId"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"user_setting": {
|
||||
"name": "user_setting",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "text",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"user_id": {
|
||||
"name": "user_id",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"color_scheme": {
|
||||
"name": "color_scheme",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": "'environment'"
|
||||
},
|
||||
"language": {
|
||||
"name": "language",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": "'en'"
|
||||
},
|
||||
"default_board": {
|
||||
"name": "default_board",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": "'default'"
|
||||
},
|
||||
"first_day_of_week": {
|
||||
"name": "first_day_of_week",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": "'monday'"
|
||||
},
|
||||
"search_template": {
|
||||
"name": "search_template",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": "'https://google.com/search?q=%s'"
|
||||
},
|
||||
"open_search_in_new_tab": {
|
||||
"name": "open_search_in_new_tab",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": true
|
||||
},
|
||||
"disable_ping_pulse": {
|
||||
"name": "disable_ping_pulse",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
},
|
||||
"replace_ping_with_icons": {
|
||||
"name": "replace_ping_with_icons",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
},
|
||||
"use_debug_language": {
|
||||
"name": "use_debug_language",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
},
|
||||
"auto_focus_search": {
|
||||
"name": "auto_focus_search",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {
|
||||
"user_setting_user_id_user_id_fk": {
|
||||
"name": "user_setting_user_id_user_id_fk",
|
||||
"tableFrom": "user_setting",
|
||||
"tableTo": "user",
|
||||
"columnsFrom": [
|
||||
"user_id"
|
||||
],
|
||||
"columnsTo": [
|
||||
"id"
|
||||
],
|
||||
"onDelete": "cascade",
|
||||
"onUpdate": "no action"
|
||||
}
|
||||
},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"user": {
|
||||
"name": "user",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "text",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"name": {
|
||||
"name": "name",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"email": {
|
||||
"name": "email",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"emailVerified": {
|
||||
"name": "emailVerified",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"image": {
|
||||
"name": "image",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"password": {
|
||||
"name": "password",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"salt": {
|
||||
"name": "salt",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false
|
||||
},
|
||||
"is_admin": {
|
||||
"name": "is_admin",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
},
|
||||
"is_owner": {
|
||||
"name": "is_owner",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false,
|
||||
"default": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
},
|
||||
"verificationToken": {
|
||||
"name": "verificationToken",
|
||||
"columns": {
|
||||
"identifier": {
|
||||
"name": "identifier",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"token": {
|
||||
"name": "token",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"expires": {
|
||||
"name": "expires",
|
||||
"type": "integer",
|
||||
"primaryKey": false,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {
|
||||
"verificationToken_identifier_token_pk": {
|
||||
"columns": [
|
||||
"identifier",
|
||||
"token"
|
||||
]
|
||||
}
|
||||
},
|
||||
"uniqueConstraints": {}
|
||||
}
|
||||
},
|
||||
"enums": {},
|
||||
"_meta": {
|
||||
"schemas": {},
|
||||
"tables": {},
|
||||
"columns": {}
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,13 @@
|
||||
"when": 1695874816934,
|
||||
"tag": "0000_supreme_the_captain",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 1,
|
||||
"version": "5",
|
||||
"when": 1730643218521,
|
||||
"tag": "0001_brave_mimic",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
// This file is used to migrate the database to the current version
|
||||
// It is run when the docker container starts
|
||||
import Database from 'better-sqlite3';
|
||||
import dotenv from 'dotenv';
|
||||
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
||||
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
|
||||
const Database = require('better-sqlite3');
|
||||
const path = require('path');
|
||||
const dotenv = require('dotenv');
|
||||
const { drizzle } = require('drizzle-orm/better-sqlite3');
|
||||
const { migrate } = require('drizzle-orm/better-sqlite3/migrator');
|
||||
|
||||
const migrationsFolder = process.argv[2] ?? '../drizzle';
|
||||
|
||||
dotenv.config({ path: __dirname + '/../.env' });
|
||||
|
||||
dotenv.config({ path: path.join(__dirname, '/../.env') });
|
||||
const sqlite = new Database(process.env.DATABASE_URL!.replace('file:', ''));
|
||||
|
||||
const db = drizzle(sqlite);
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"license": "MIT",
|
||||
"description": "This package.json is used for the migration script the dependencies are only installed within the Dockerfile.",
|
||||
"scripts": {
|
||||
"db:migrate": "ts-node ./migrate.ts"
|
||||
"db:migrate": "tsx ./migrate.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/better-sqlite3": "^7.6.7",
|
||||
"better-sqlite3": "8.6.0",
|
||||
"drizzle-orm": "^0.28.6",
|
||||
"dotenv": "^16.3.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"tsx": "4.19.1",
|
||||
"typescript": "^5.2.2"
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ module.exports = {
|
||||
i18n: {
|
||||
defaultLocale: 'en',
|
||||
locales: [
|
||||
'ar',
|
||||
'cn',
|
||||
'cr',
|
||||
'cs',
|
||||
@@ -33,6 +34,9 @@ module.exports = {
|
||||
'tw',
|
||||
'uk',
|
||||
'vi',
|
||||
'et',
|
||||
'lt',
|
||||
'ro'
|
||||
],
|
||||
|
||||
localeDetection: false,
|
||||
|
||||
@@ -6,6 +6,14 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({
|
||||
});
|
||||
|
||||
module.exports = withBundleAnalyzer({
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
webpack: (config) => {
|
||||
// for dynamic loading of auth providers
|
||||
config.experiments = { ...config.experiments, topLevelAwait: true };
|
||||
return config;
|
||||
},
|
||||
images: {
|
||||
domains: ['cdn.jsdelivr.net'],
|
||||
},
|
||||
@@ -16,7 +24,7 @@ module.exports = withBundleAnalyzer({
|
||||
redirects: async () => [
|
||||
{
|
||||
source: '/',
|
||||
destination: '/board',
|
||||
destination: '/unraid',
|
||||
permanent: false,
|
||||
},
|
||||
],
|
||||
|
||||
26
package.json
26
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "homarr",
|
||||
"version": "0.14.3",
|
||||
"version": "0.16.0",
|
||||
"description": "Homarr - A homepage for your server.",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
@@ -11,7 +11,7 @@
|
||||
"dev": "next dev",
|
||||
"build": "NEXTAUTH_SECRET=WILL_BE_OVERWRITTEN next build",
|
||||
"analyze": "ANALYZE=true next build",
|
||||
"turbo": "DATABASE_URL=file:WILL_BE_OVERWRITTEN.sqlite NEXTAUTH_URL=http://WILL_BE_OVERWRITTEN turbo build",
|
||||
"turbo": "DATABASE_URL=file:WILL_BE_OVERWRITTEN.sqlite turbo build",
|
||||
"start": "next start",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"export": "next build && next export",
|
||||
@@ -19,15 +19,16 @@
|
||||
"prettier:check": "prettier --check \"**/*.{ts,tsx}\"",
|
||||
"prettier:write": "prettier --write \"**/*.{ts,tsx}\"",
|
||||
"test": "SKIP_ENV_VALIDATION=1 vitest",
|
||||
"test:docker": "yarn run turbo build && yarn test:run && docker build . -t homarr:local-dev && docker run -p 7575:7575 --name homarr-dev homarr:local-dev",
|
||||
"test:ui": "SKIP_ENV_VALIDATION=1 vitest --ui",
|
||||
"test:run": "SKIP_ENV_VALIDATION=1 vitest run",
|
||||
"test:coverage": "SKIP_ENV_VALIDATION=1 vitest run --coverage",
|
||||
"docker:build": "turbo build && docker build . -t homarr:local-dev",
|
||||
"docker:start": "docker run -p 7575:7575 --name homarr-development homarr:local-dev",
|
||||
"db:migrate": "dotenv ts-node drizzle/migrate/migrate.ts ./drizzle"
|
||||
"db:migrate": "dotenv tsx drizzle/migrate/migrate.ts ./drizzle",
|
||||
"db:add": "drizzle-kit generate:sqlite --config ./drizzle.config.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@auth/drizzle-adapter": "^0.3.2",
|
||||
"@ctrl/deluge": "^4.1.0",
|
||||
"@ctrl/qbittorrent": "^6.0.0",
|
||||
"@ctrl/shared-torrent": "^4.1.1",
|
||||
@@ -72,6 +73,7 @@
|
||||
"@trpc/server": "^10.37.1",
|
||||
"@types/bcryptjs": "^2.4.2",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
"adm-zip": "^0.5.15",
|
||||
"axios": "^1.0.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"better-sqlite3": "^8.6.0",
|
||||
@@ -83,6 +85,7 @@
|
||||
"dotenv": "^16.3.1",
|
||||
"drizzle-kit": "^0.19.13",
|
||||
"drizzle-orm": "^0.28.6",
|
||||
"drizzle-zod": "^0.5.1",
|
||||
"fily-publish-gridstack": "^0.0.13",
|
||||
"flag-icons": "^6.9.2",
|
||||
"framer-motion": "^10.0.0",
|
||||
@@ -91,12 +94,12 @@
|
||||
"i18next": "^22.5.1",
|
||||
"immer": "^10.0.2",
|
||||
"js-file-download": "^0.4.12",
|
||||
"ldapjs": "^3.0.5",
|
||||
"mantine-react-table": "^1.3.4",
|
||||
"moment": "^2.29.4",
|
||||
"moment-timezone": "^0.5.43",
|
||||
"next": "13.4.12",
|
||||
"next-auth": "^4.23.0",
|
||||
"next-i18next": "^14.0.0",
|
||||
"nextjs-cors": "^2.2.0",
|
||||
"nzbget-api": "^0.0.3",
|
||||
"prismjs": "^1.29.0",
|
||||
"react": "^18.2.0",
|
||||
@@ -105,6 +108,9 @@
|
||||
"react-simple-code-editor": "^0.13.1",
|
||||
"rss-parser": "^3.12.0",
|
||||
"sabnzbd-api": "^1.5.0",
|
||||
"swagger-ui-react": "^5.11.0",
|
||||
"tldts": "^6.1.18",
|
||||
"trpc-openapi": "^1.2.0",
|
||||
"uuid": "^9.0.0",
|
||||
"xml-js": "^1.6.11",
|
||||
"xss": "^1.0.14",
|
||||
@@ -116,12 +122,15 @@
|
||||
"@next/eslint-plugin-next": "^13.4.5",
|
||||
"@testing-library/react": "^14.0.0",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.2.0",
|
||||
"@types/adm-zip": "^0.5.5",
|
||||
"@types/better-sqlite3": "^7.6.5",
|
||||
"@types/cookies": "^0.7.7",
|
||||
"@types/dockerode": "^3.3.9",
|
||||
"@types/node": "18.17.8",
|
||||
"@types/ldapjs": "^3.0.2",
|
||||
"@types/node": "^20.6.0",
|
||||
"@types/prismjs": "^1.26.0",
|
||||
"@types/react": "^18.2.11",
|
||||
"@types/swagger-ui-react": "^4.18.3",
|
||||
"@types/umami": "^0.1.4",
|
||||
"@types/uuid": "^9.0.0",
|
||||
"@types/video.js": "^7.3.51",
|
||||
@@ -143,7 +152,7 @@
|
||||
"node-mocks-http": "^1.12.2",
|
||||
"prettier": "^3.0.0",
|
||||
"sass": "^1.56.1",
|
||||
"ts-node": "latest",
|
||||
"tsx": "4.19.1",
|
||||
"turbo": "^1.10.12",
|
||||
"typescript": "5.1.6",
|
||||
"video.js": "^8.0.3",
|
||||
@@ -178,7 +187,6 @@
|
||||
"importOrderSortSpecifiers": true
|
||||
},
|
||||
"eslintConfig": {
|
||||
"ignoreDuringBuilds": true,
|
||||
"extends": [
|
||||
"next",
|
||||
"eslint:recommended",
|
||||
|
||||
BIN
public/PoetsenOne-Regular.ttf
Normal file
BIN
public/PoetsenOne-Regular.ttf
Normal file
Binary file not shown.
BIN
public/imgs/2340450-2.png
Normal file
BIN
public/imgs/2340450-2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 188 KiB |
@@ -14,7 +14,11 @@
|
||||
"buttons": {
|
||||
"submit": "登录"
|
||||
},
|
||||
"afterLoginRedirection": "登录后,您将被重定向到 {{url}}"
|
||||
"afterLoginRedirection": "登录后,您将被重定向到 {{url}}",
|
||||
"providersEmpty": {
|
||||
"title": "验证提供程序错误",
|
||||
"message": "服务提供商未设置,请检查您的日志获取更多信息。"
|
||||
}
|
||||
},
|
||||
"alert": "您的凭据不正确或此账户不存在。请重试。"
|
||||
}
|
||||
@@ -13,9 +13,11 @@
|
||||
"previous": "上一步",
|
||||
"confirm": "确认",
|
||||
"enabled": "已启用",
|
||||
"duplicate": "复制",
|
||||
"disabled": "已禁用",
|
||||
"enableAll": "全部启用",
|
||||
"disableAll": "全部禁用",
|
||||
"setTimer": "设置计时器",
|
||||
"version": "版本",
|
||||
"changePosition": "换位",
|
||||
"remove": "删除",
|
||||
|
||||
@@ -22,5 +22,5 @@
|
||||
"message": "已创建分类\"{{name}}\""
|
||||
}
|
||||
},
|
||||
"importFromDocker": ""
|
||||
"importFromDocker": "从 docker 导入"
|
||||
}
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
"tools": {
|
||||
"title": "工具",
|
||||
"items": {
|
||||
"docker": "Docker"
|
||||
"docker": "Docker",
|
||||
"api": "API",
|
||||
"migrate": "迁移到 1.0"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
},
|
||||
"metrics": {
|
||||
"configurationSchemaVersion": "配置模式版本",
|
||||
"version": "版本",
|
||||
"version": "当前版本",
|
||||
"nodeEnvironment": "节点环境",
|
||||
"i18n": "I18n 翻译空间已加载",
|
||||
"locales": "I18n 本地语言已配置",
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
},
|
||||
"externalAddress": {
|
||||
"label": "外部地址",
|
||||
"description": "点击应用时打开的网址。"
|
||||
"description": "点击应用时打开的网址。",
|
||||
"tooltip": "您可以使用几个变量来创建动态地址:<br><br><b>[homarr_base]</b>: 不包括端口和路径的完整地址。<i>(例如:'https://subdomain.homarr.dev')</i><br><b>[homarr_hostname]</b>: 完整的基本网址,包括当前的子域。<i>(例如:'</i><b>subdomain</b>.homarr<i>.dev')</i><br><b>[homarr_domain]</b>: 域名,已过滤子域。<i>(例如:\"homarr.dev\")</i><br><b>[homarr_protocol]</b>:<i>http/https</i><br><br>这些变量都取决于当前网址。"
|
||||
}
|
||||
},
|
||||
"behaviour": {
|
||||
|
||||
@@ -15,6 +15,19 @@
|
||||
"delete": {
|
||||
"label": "永久删除",
|
||||
"disabled": "删除功能被禁用,因为较旧的 Homarr 组件不允许删除默认配置。将来可能会删除。"
|
||||
},
|
||||
"duplicate": "复制",
|
||||
"rename": {
|
||||
"label": "重命名",
|
||||
"modal": {
|
||||
"title": "重命名面板 {{name}}",
|
||||
"fields": {
|
||||
"name": {
|
||||
"label": "新名称",
|
||||
"placeholder": "新面板名称"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"badges": {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"metaTitle": "管理",
|
||||
"metaTitle": "管理中心",
|
||||
"hero": {
|
||||
"title": "欢迎回来,{{username}}!",
|
||||
"fallbackUsername": "匿名",
|
||||
|
||||
33
public/locales/cn/manage/migrate.json
Normal file
33
public/locales/cn/manage/migrate.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"metaTitle": "迁移到 1.0",
|
||||
"pageTitle": "迁移面板、组件和用户",
|
||||
"description": "将您的面板和用户导出到 ZIP 压缩包,以便在 1.0.0 版本之后将其迁移到 Homarr",
|
||||
"securityNote": {
|
||||
"title": "安全说明",
|
||||
"text": "导出用户和组件时,它还会打开一个带有加密密钥的窗口。此密钥是将数据导入 Homarr 所必需的。请妥善保管,不要与任何人分享。"
|
||||
},
|
||||
"form": {
|
||||
"label": "选择要导出的所有内容",
|
||||
"option": {
|
||||
"boards": {
|
||||
"label": "导出面板"
|
||||
},
|
||||
"integrations": {
|
||||
"label": "导出组件",
|
||||
"description": "这将包括用于组件的加密凭据。仅在导出面板时可用"
|
||||
},
|
||||
"users": {
|
||||
"label": "导出用户",
|
||||
"description": "这只会导出凭据用户,密码 hash 和 salt 已加密"
|
||||
}
|
||||
}
|
||||
},
|
||||
"action": {
|
||||
"export": "导出数据"
|
||||
},
|
||||
"modal": {
|
||||
"title": "加密密钥",
|
||||
"description": "您的数据已导出。请妥善保管此密钥,不要与任何人共享。您需要此密钥才能将数据导入 Homarr。",
|
||||
"copyDismiss": "复制并关闭"
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,11 @@
|
||||
"settings": {
|
||||
"title": "日期和时间组件设置",
|
||||
"timezone": {
|
||||
"label": "",
|
||||
"info": ""
|
||||
"label": "时区",
|
||||
"info": "选择您所在时区的名称,在此找到您所在的时区: "
|
||||
},
|
||||
"customTitle": {
|
||||
"label": ""
|
||||
"label": "城市名称或自定义标题"
|
||||
},
|
||||
"display24HourFormat": {
|
||||
"label": "全时显示(24 小时)"
|
||||
@@ -21,12 +21,12 @@
|
||||
}
|
||||
},
|
||||
"titleState": {
|
||||
"label": "",
|
||||
"info": "",
|
||||
"label": "时钟标题",
|
||||
"info": "自定义标题和时区代码可以显示在 widget 上。<br/>您还可以单独显示城市、不显示、<br/>,甚至在同时选择了城市和时区但未提供标题时单独显示时区。",
|
||||
"data": {
|
||||
"both": "",
|
||||
"city": "",
|
||||
"none": "无"
|
||||
"both": "标题和时区",
|
||||
"city": "仅标题",
|
||||
"none": "不显示"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,5 +14,12 @@
|
||||
"text": "到DNS漏洞的连接有问题。请验证您的配置/集成设置。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"durationModal": {
|
||||
"title": "设置禁用时长",
|
||||
"hours": "时",
|
||||
"minutes": "分",
|
||||
"unlimited": "留空表示无限制",
|
||||
"set": "设置"
|
||||
}
|
||||
}
|
||||
141
public/locales/cn/modules/health-monitoring.json
Normal file
141
public/locales/cn/modules/health-monitoring.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "系统健康监测",
|
||||
"description": "显示系统运行状况和状态的信息。",
|
||||
"settings": {
|
||||
"title": "系统健康监测设置",
|
||||
"fahrenheit": {
|
||||
"label": "CPU 温度(华氏度)"
|
||||
},
|
||||
"cpu": {
|
||||
"label": "显示CPU信息",
|
||||
"load": "平均负载",
|
||||
"minute": "{{minute}} 分钟",
|
||||
"minutes": "{{minutes}} 分钟"
|
||||
},
|
||||
"memory": {
|
||||
"label": "显示内存信息"
|
||||
},
|
||||
"fileSystem": {
|
||||
"label": "显示文件系统信息"
|
||||
},
|
||||
"node": {
|
||||
"label": "按节点名称过滤",
|
||||
"info": "输入您的 Proxmox 节点名称以仅显示该节点的指标。默认情况下,显示整个集群。"
|
||||
},
|
||||
"defaultViewState": {
|
||||
"label": "默认打开的部分",
|
||||
"data": {
|
||||
"none": "不显示",
|
||||
"node": "节点",
|
||||
"vm": "虚拟机",
|
||||
"lxc": "LXCs",
|
||||
"storage": "存储"
|
||||
}
|
||||
},
|
||||
"defaultTabState": {
|
||||
"label": "默认打开选项卡",
|
||||
"info": "默认打开选项卡。仅当多个集成可用时才使用。",
|
||||
"data": {
|
||||
"system": "系统",
|
||||
"cluster": "集群"
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"label": "显示摘要部分"
|
||||
},
|
||||
"showNode": {
|
||||
"label": "显示节点部分"
|
||||
},
|
||||
"showVM": {
|
||||
"label": "显示虚拟机部分"
|
||||
},
|
||||
"showLXCs": {
|
||||
"label": "显示 LXC 部分"
|
||||
},
|
||||
"showStorage": {
|
||||
"label": "显示存储部分"
|
||||
},
|
||||
"sectionIndicatorColor": {
|
||||
"label": "要求部分状态指示器为“OK”",
|
||||
"info": "全部 \"要求所有项目都在线,指标才会变为绿色。任意 \"要求至少有一个项目在线。",
|
||||
"data": {
|
||||
"any": "任意活动",
|
||||
"all": "全部活动"
|
||||
}
|
||||
},
|
||||
"ignoreCert": {
|
||||
"label": "忽略证书错误",
|
||||
"info": "如果启用,小工具在访问 Proxmox API 时将忽略证书错误。这在通过 HTTPS 访问 Proxmox 时很有帮助。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"label": "CPU",
|
||||
"load": "平均负载",
|
||||
"minute": "{{minute}} 分钟"
|
||||
},
|
||||
"memory": {
|
||||
"label": "内存",
|
||||
"totalMem": "内存总量: {{total}}GB",
|
||||
"available": "可用: {{available}}GB - {{percentage}}%"
|
||||
},
|
||||
"fileSystem": {
|
||||
"label": "文件系统",
|
||||
"available": "可用: {{available}} - {{percentage}}%"
|
||||
},
|
||||
"info": {
|
||||
"uptime": "运行时间",
|
||||
"uptimeFormat": "{{days}} 天, {{hours}} 小时, {{minutes}} 分钟",
|
||||
"updates": "可用更新",
|
||||
"reboot": "重启"
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "无法找到您的系统。",
|
||||
"text": "连接到您的系统时出现问题。请验证您的配置/集成。"
|
||||
}
|
||||
},
|
||||
"headings": {
|
||||
"system": "系统",
|
||||
"cluster": "集群"
|
||||
},
|
||||
"cluster": {
|
||||
"summary": {
|
||||
"cpu": "CPU",
|
||||
"ram": "内存"
|
||||
},
|
||||
"accordion": {
|
||||
"title": {
|
||||
"nodes": "节点",
|
||||
"vms": "虚拟机",
|
||||
"lxcs": "LXCs",
|
||||
"storage": "存储"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "名称",
|
||||
"cpu": "CPU",
|
||||
"ram": "内存",
|
||||
"node": "节点"
|
||||
}
|
||||
},
|
||||
"popover": {
|
||||
"node": "节点",
|
||||
"vmid": "VMID",
|
||||
"details": "详情",
|
||||
"cores": "核心 - {{maxCpu}}",
|
||||
"memSize": "内存 - {{maxMem}}",
|
||||
"memRatio": "内存 - {{usedMem}} / {{maxMem}}",
|
||||
"diskSize": "磁盘 - {{maxDisk}}",
|
||||
"diskRatio": "磁盘 - {{usedDisk}} / {{maxDisk}}",
|
||||
"uptime": "运行时间 - {{uptime}}",
|
||||
"plugin": "插件",
|
||||
"ha": "状态 - {{haState}}",
|
||||
"sharedStorage": "共享存储",
|
||||
"localStorage": "本地存储",
|
||||
"na": "不可用"
|
||||
}
|
||||
}
|
||||
}
|
||||
22
public/locales/cn/modules/indexer-manager.json
Normal file
22
public/locales/cn/modules/indexer-manager.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "索引器管理状态",
|
||||
"description": "有关索引器的状态",
|
||||
"settings": {
|
||||
"title": "索引器管理状态",
|
||||
"openIndexerSiteInNewTab": {
|
||||
"label": "在新选项卡中打开索引器站点"
|
||||
}
|
||||
}
|
||||
},
|
||||
"indexersStatus": {
|
||||
"title": "索引器管理",
|
||||
"testAllButton": "测试全部"
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "无法找到索引管理器",
|
||||
"text": "连接索引管理器时出现问题。请验证您的配置/集成。"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,9 @@
|
||||
"state": {
|
||||
"approved": "已批准",
|
||||
"pendingApproval": "待批准",
|
||||
"declined": "已拒绝"
|
||||
"declined": "已拒绝",
|
||||
"available": "可用",
|
||||
"partial": "部分"
|
||||
},
|
||||
"tooltips": {
|
||||
"approve": "批准请求",
|
||||
|
||||
96
public/locales/cn/modules/media-transcoding.json
Normal file
96
public/locales/cn/modules/media-transcoding.json
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "媒体转码",
|
||||
"description": "显示有关媒体转码的信息",
|
||||
"settings": {
|
||||
"title": "媒体转码设置",
|
||||
"appId": {
|
||||
"label": "选择一个应用"
|
||||
},
|
||||
"defaultView": {
|
||||
"label": "默认视图",
|
||||
"data": {
|
||||
"workers": "工作种",
|
||||
"queue": "队列",
|
||||
"statistics": "统计"
|
||||
}
|
||||
},
|
||||
"showHealthCheck": {
|
||||
"label": "显示健康检查指示器"
|
||||
},
|
||||
"showHealthChecksInQueue": {
|
||||
"label": "在队列中显示健康检查"
|
||||
},
|
||||
"queuePageSize": {
|
||||
"label": "队列:每页项目数"
|
||||
},
|
||||
"showAppIcon": {
|
||||
"label": "在右下角显示应用程序图标"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noAppSelected": "请在小组件设置中选择一个应用程序",
|
||||
"views": {
|
||||
"workers": {
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "文件",
|
||||
"eta": "剩余时间",
|
||||
"progress": "进度"
|
||||
},
|
||||
"empty": "空",
|
||||
"tooltip": {
|
||||
"transcode": "转码",
|
||||
"healthCheck": "健康检查"
|
||||
}
|
||||
}
|
||||
},
|
||||
"queue": {
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "文件",
|
||||
"size": "大小"
|
||||
},
|
||||
"footer": {
|
||||
"currentIndex": "{{start}}-{{end}} 共 {{total}}"
|
||||
},
|
||||
"empty": "空",
|
||||
"tooltip": {
|
||||
"transcode": "转码",
|
||||
"healthCheck": "健康检查"
|
||||
}
|
||||
}
|
||||
},
|
||||
"statistics": {
|
||||
"empty": "空",
|
||||
"box": {
|
||||
"transcodes": "转码: {{value}}",
|
||||
"healthChecks": "健康检查: {{value}}",
|
||||
"files": "文件: {{value}}",
|
||||
"spaceSaved": "已保存: {{value}}"
|
||||
},
|
||||
"pies": {
|
||||
"transcodes": "转码",
|
||||
"healthChecks": "健康检查",
|
||||
"videoCodecs": "编码",
|
||||
"videoContainers": "容器",
|
||||
"videoResolutions": "分辨率"
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"title": "错误",
|
||||
"message": "从 Tdarr 获取数据时发生错误。"
|
||||
},
|
||||
"tabs": {
|
||||
"workers": "工作种",
|
||||
"queue": "队列",
|
||||
"statistics": "统计"
|
||||
},
|
||||
"healthCheckStatus": {
|
||||
"title": "健康检查",
|
||||
"queued": "排队中",
|
||||
"healthy": "健康",
|
||||
"unhealthy": "不良"
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,15 @@
|
||||
},
|
||||
"textLinesClamp": {
|
||||
"label": "文字线条"
|
||||
},
|
||||
"sortByPublishDateAscending": {
|
||||
"label": "按发布日期排序(升序)"
|
||||
},
|
||||
"sortPostsWithoutPublishDateToTheTop": {
|
||||
"label": "将没有发布日期的文章置顶"
|
||||
},
|
||||
"maximumAmountOfPosts": {
|
||||
"label": "最大文章数量"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
|
||||
@@ -1,17 +1,34 @@
|
||||
{
|
||||
"entityNotFound": "未找到实体",
|
||||
"descriptor": {
|
||||
"name": "Home Assistant 实体",
|
||||
"description": "Home Assistant 中实体的当前状态",
|
||||
"name": "家庭助理实体",
|
||||
"description": "家庭助理中实体的当前状态",
|
||||
"settings": {
|
||||
"title": "实体状态",
|
||||
"entityId": {
|
||||
"label": "实体 ID",
|
||||
"info": "Home Assistant 中的唯一实体 ID。通过单击实体 > 单击齿轮图标 > 单击“实体 ID”处的复制按钮进行复制。某些自定义实体可能不受支持。"
|
||||
"info": "家庭助理中的唯一实体 ID。通过单击实体 > 单击齿轮图标 > 单击“实体 ID”处的复制按钮进行复制。某些自定义实体可能不受支持。"
|
||||
},
|
||||
"appendUnit": {
|
||||
"label": "附加测量单位",
|
||||
"info": "将测量单位属性附加到实体状态。"
|
||||
},
|
||||
"automationId": {
|
||||
"label": "可选自动化 ID",
|
||||
"info": "您唯一的自动化 ID。总是以 automation.XXXXX 开头。如果未设置,小部件将不可点击,只能显示状态。点击后,实体状态将被刷新。"
|
||||
},
|
||||
"displayName": {
|
||||
"label": "显示名称"
|
||||
},
|
||||
"displayFriendlyName": {
|
||||
"label": "显示友好名称",
|
||||
"info": "显示来自家庭助理的友好名称,而不是显示名称."
|
||||
},
|
||||
"genericToggle": {
|
||||
"label": "实体切换",
|
||||
"info": "单击时对实体执行通用的家庭助理切换操作。"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
public/locales/cn/modules/smart-home/trigger-automation.json
Normal file
16
public/locales/cn/modules/smart-home/trigger-automation.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "家庭助理自动化",
|
||||
"description": "执行自动化",
|
||||
"settings": {
|
||||
"title": "执行自动化",
|
||||
"automationId": {
|
||||
"label": "自动化 ID",
|
||||
"info": "您唯一的自动化 ID。总是以 automation.XXXXX 开头。"
|
||||
},
|
||||
"displayName": {
|
||||
"label": "显示名称"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,25 @@
|
||||
"displayRatioWithFilter": {
|
||||
"label": "显示过滤后的 torrents 列表比例",
|
||||
"info": "如果禁用,则只显示全局比率。如果设置为 \"禁用\",全局比率仍将使用标签。"
|
||||
},
|
||||
"columnOrdering": {
|
||||
"label": "启用重新排序列"
|
||||
},
|
||||
"rowSorting": {
|
||||
"label": "启用行排序"
|
||||
},
|
||||
"columns": {
|
||||
"label": "选择要显示的列",
|
||||
"data": {
|
||||
"date": "日期已添加",
|
||||
"down": "下载",
|
||||
"up": "上传",
|
||||
"eta": "剩余时间",
|
||||
"progress": "进度"
|
||||
}
|
||||
},
|
||||
"nameColumnSize": {
|
||||
"label": "更改名称列大小"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -84,10 +103,6 @@
|
||||
"text": "无法与您的 Torrent 客户端通信。请检查您的配置"
|
||||
}
|
||||
},
|
||||
"loading": {
|
||||
"title": "加载中",
|
||||
"description": "建立连接中"
|
||||
},
|
||||
"popover": {
|
||||
"introductionPrefix": "管理方:",
|
||||
"metrics": {
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
"displayCityName": {
|
||||
"label": "显示城市名称"
|
||||
},
|
||||
"displayWeekly": {
|
||||
"label": "显示每周预测"
|
||||
},
|
||||
"forecastDays": {
|
||||
"label": "显示天数"
|
||||
},
|
||||
"location": {
|
||||
"label": "天气位置"
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
}
|
||||
},
|
||||
"modal": {
|
||||
"text": "",
|
||||
"label": "您的错误",
|
||||
"reportButton": "报告该错误"
|
||||
"text": "组件意外崩溃,请阅读文档并修改错误的输入。",
|
||||
"label": "发生错误",
|
||||
"reportButton": "在 GitHub 上报告此错误"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,11 @@
|
||||
"buttons": {
|
||||
"submit": "crwdns1876:0crwdne1876:0"
|
||||
},
|
||||
"afterLoginRedirection": "crwdns3347:0{{url}}crwdne3347:0"
|
||||
"afterLoginRedirection": "crwdns3347:0{{url}}crwdne3347:0",
|
||||
"providersEmpty": {
|
||||
"title": "crwdns4236:0crwdne4236:0",
|
||||
"message": "crwdns4238:0crwdne4238:0"
|
||||
}
|
||||
},
|
||||
"alert": "crwdns3349:0crwdne3349:0"
|
||||
}
|
||||
@@ -13,9 +13,11 @@
|
||||
"previous": "crwdns3375:0crwdne3375:0",
|
||||
"confirm": "crwdns3377:0crwdne3377:0",
|
||||
"enabled": "crwdns2883:0crwdne2883:0",
|
||||
"duplicate": "crwdns4174:0crwdne4174:0",
|
||||
"disabled": "crwdns2885:0crwdne2885:0",
|
||||
"enableAll": "crwdns2887:0crwdne2887:0",
|
||||
"disableAll": "crwdns2889:0crwdne2889:0",
|
||||
"setTimer": "crwdns4484:0crwdne4484:0",
|
||||
"version": "crwdns2023:0crwdne2023:0",
|
||||
"changePosition": "crwdns2025:0crwdne2025:0",
|
||||
"remove": "crwdns2027:0crwdne2027:0",
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
"tools": {
|
||||
"title": "crwdns3525:0crwdne3525:0",
|
||||
"items": {
|
||||
"docker": "crwdns3527:0crwdne3527:0"
|
||||
"docker": "crwdns3527:0crwdne3527:0",
|
||||
"api": "crwdns4172:0crwdne4172:0",
|
||||
"migrate": "crwdns4536:0crwdne4536:0"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
},
|
||||
"externalAddress": {
|
||||
"label": "crwdns2067:0crwdne2067:0",
|
||||
"description": "crwdns2309:0crwdne2309:0"
|
||||
"description": "crwdns2309:0crwdne2309:0",
|
||||
"tooltip": "crwdns4482:0crwdne4482:0"
|
||||
}
|
||||
},
|
||||
"behaviour": {
|
||||
|
||||
@@ -15,6 +15,19 @@
|
||||
"delete": {
|
||||
"label": "crwdns3543:0crwdne3543:0",
|
||||
"disabled": "crwdns3545:0crwdne3545:0"
|
||||
},
|
||||
"duplicate": "crwdns4162:0crwdne4162:0",
|
||||
"rename": {
|
||||
"label": "crwdns4164:0crwdne4164:0",
|
||||
"modal": {
|
||||
"title": "crwdns4166:0{{name}}crwdne4166:0",
|
||||
"fields": {
|
||||
"name": {
|
||||
"label": "crwdns4168:0crwdne4168:0",
|
||||
"placeholder": "crwdns4170:0crwdne4170:0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"badges": {
|
||||
|
||||
33
public/locales/cr/manage/migrate.json
Normal file
33
public/locales/cr/manage/migrate.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"metaTitle": "crwdns4506:0crwdne4506:0",
|
||||
"pageTitle": "crwdns4508:0crwdne4508:0",
|
||||
"description": "crwdns4510:0crwdne4510:0",
|
||||
"securityNote": {
|
||||
"title": "crwdns4512:0crwdne4512:0",
|
||||
"text": "crwdns4514:0crwdne4514:0"
|
||||
},
|
||||
"form": {
|
||||
"label": "crwdns4516:0crwdne4516:0",
|
||||
"option": {
|
||||
"boards": {
|
||||
"label": "crwdns4518:0crwdne4518:0"
|
||||
},
|
||||
"integrations": {
|
||||
"label": "crwdns4520:0crwdne4520:0",
|
||||
"description": "crwdns4522:0crwdne4522:0"
|
||||
},
|
||||
"users": {
|
||||
"label": "crwdns4524:0crwdne4524:0",
|
||||
"description": "crwdns4526:0crwdne4526:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"action": {
|
||||
"export": "crwdns4528:0crwdne4528:0"
|
||||
},
|
||||
"modal": {
|
||||
"title": "crwdns4530:0crwdne4530:0",
|
||||
"description": "crwdns4532:0crwdne4532:0",
|
||||
"copyDismiss": "crwdns4534:0crwdne4534:0"
|
||||
}
|
||||
}
|
||||
@@ -14,5 +14,12 @@
|
||||
"text": "crwdns3862:0crwdne3862:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"durationModal": {
|
||||
"title": "crwdns4486:0crwdne4486:0",
|
||||
"hours": "crwdns4488:0crwdne4488:0",
|
||||
"minutes": "crwdns4490:0crwdne4490:0",
|
||||
"unlimited": "crwdns4492:0crwdne4492:0",
|
||||
"set": "crwdns4494:0crwdne4494:0"
|
||||
}
|
||||
}
|
||||
141
public/locales/cr/modules/health-monitoring.json
Normal file
141
public/locales/cr/modules/health-monitoring.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "crwdns4202:0crwdne4202:0",
|
||||
"description": "crwdns4246:0crwdne4246:0",
|
||||
"settings": {
|
||||
"title": "crwdns4248:0crwdne4248:0",
|
||||
"fahrenheit": {
|
||||
"label": "crwdns4250:0crwdne4250:0"
|
||||
},
|
||||
"cpu": {
|
||||
"label": "crwdns4252:0crwdne4252:0",
|
||||
"load": "crwdns4254:0crwdne4254:0",
|
||||
"minute": "crwdns4256:0{{minute}}crwdne4256:0",
|
||||
"minutes": "crwdns4258:0{{minutes}}crwdne4258:0"
|
||||
},
|
||||
"memory": {
|
||||
"label": "crwdns4260:0crwdne4260:0"
|
||||
},
|
||||
"fileSystem": {
|
||||
"label": "crwdns4262:0crwdne4262:0"
|
||||
},
|
||||
"node": {
|
||||
"label": "crwdns4264:0crwdne4264:0",
|
||||
"info": "crwdns4266:0crwdne4266:0"
|
||||
},
|
||||
"defaultViewState": {
|
||||
"label": "crwdns4268:0crwdne4268:0",
|
||||
"data": {
|
||||
"none": "crwdns4270:0crwdne4270:0",
|
||||
"node": "crwdns4272:0crwdne4272:0",
|
||||
"vm": "crwdns4274:0crwdne4274:0",
|
||||
"lxc": "crwdns4276:0crwdne4276:0",
|
||||
"storage": "crwdns4278:0crwdne4278:0"
|
||||
}
|
||||
},
|
||||
"defaultTabState": {
|
||||
"label": "crwdns4280:0crwdne4280:0",
|
||||
"info": "crwdns4282:0crwdne4282:0",
|
||||
"data": {
|
||||
"system": "crwdns4284:0crwdne4284:0",
|
||||
"cluster": "crwdns4286:0crwdne4286:0"
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"label": "crwdns4288:0crwdne4288:0"
|
||||
},
|
||||
"showNode": {
|
||||
"label": "crwdns4290:0crwdne4290:0"
|
||||
},
|
||||
"showVM": {
|
||||
"label": "crwdns4292:0crwdne4292:0"
|
||||
},
|
||||
"showLXCs": {
|
||||
"label": "crwdns4294:0crwdne4294:0"
|
||||
},
|
||||
"showStorage": {
|
||||
"label": "crwdns4296:0crwdne4296:0"
|
||||
},
|
||||
"sectionIndicatorColor": {
|
||||
"label": "crwdns4298:0crwdne4298:0",
|
||||
"info": "crwdns4300:0crwdne4300:0",
|
||||
"data": {
|
||||
"any": "crwdns4302:0crwdne4302:0",
|
||||
"all": "crwdns4304:0crwdne4304:0"
|
||||
}
|
||||
},
|
||||
"ignoreCert": {
|
||||
"label": "crwdns4306:0crwdne4306:0",
|
||||
"info": "crwdns4308:0crwdne4308:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"label": "crwdns4210:0crwdne4210:0",
|
||||
"load": "crwdns4212:0crwdne4212:0",
|
||||
"minute": "crwdns4214:0{{minute}}crwdne4214:0"
|
||||
},
|
||||
"memory": {
|
||||
"label": "crwdns4216:0crwdne4216:0",
|
||||
"totalMem": "crwdns4218:0{{total}}crwdne4218:0",
|
||||
"available": "crwdns4220:0{{available}}crwdnd4220:0{{percentage}}crwdne4220:0"
|
||||
},
|
||||
"fileSystem": {
|
||||
"label": "crwdns4222:0crwdne4222:0",
|
||||
"available": "crwdns4224:0{{available}}crwdnd4224:0{{percentage}}crwdne4224:0"
|
||||
},
|
||||
"info": {
|
||||
"uptime": "crwdns4226:0crwdne4226:0",
|
||||
"uptimeFormat": "crwdns4498:0{{days}}crwdnd4498:0{{hours}}crwdnd4498:0{{minutes}}crwdne4498:0",
|
||||
"updates": "crwdns4312:0crwdne4312:0",
|
||||
"reboot": "crwdns4230:0crwdne4230:0"
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "crwdns4314:0crwdne4314:0",
|
||||
"text": "crwdns4316:0crwdne4316:0"
|
||||
}
|
||||
},
|
||||
"headings": {
|
||||
"system": "crwdns4318:0crwdne4318:0",
|
||||
"cluster": "crwdns4320:0crwdne4320:0"
|
||||
},
|
||||
"cluster": {
|
||||
"summary": {
|
||||
"cpu": "crwdns4322:0crwdne4322:0",
|
||||
"ram": "crwdns4324:0crwdne4324:0"
|
||||
},
|
||||
"accordion": {
|
||||
"title": {
|
||||
"nodes": "crwdns4326:0crwdne4326:0",
|
||||
"vms": "crwdns4328:0crwdne4328:0",
|
||||
"lxcs": "crwdns4330:0crwdne4330:0",
|
||||
"storage": "crwdns4332:0crwdne4332:0"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "crwdns4334:0crwdne4334:0",
|
||||
"cpu": "crwdns4336:0crwdne4336:0",
|
||||
"ram": "crwdns4338:0crwdne4338:0",
|
||||
"node": "crwdns4340:0crwdne4340:0"
|
||||
}
|
||||
},
|
||||
"popover": {
|
||||
"node": "crwdns4342:0crwdne4342:0",
|
||||
"vmid": "crwdns4344:0crwdne4344:0",
|
||||
"details": "crwdns4346:0crwdne4346:0",
|
||||
"cores": "crwdns4348:0{{maxCpu}}crwdne4348:0",
|
||||
"memSize": "crwdns4350:0{{maxMem}}crwdne4350:0",
|
||||
"memRatio": "crwdns4352:0{{usedMem}}crwdnd4352:0{{maxMem}}crwdne4352:0",
|
||||
"diskSize": "crwdns4354:0{{maxDisk}}crwdne4354:0",
|
||||
"diskRatio": "crwdns4356:0{{usedDisk}}crwdnd4356:0{{maxDisk}}crwdne4356:0",
|
||||
"uptime": "crwdns4358:0{{uptime}}crwdne4358:0",
|
||||
"plugin": "crwdns4360:0crwdne4360:0",
|
||||
"ha": "crwdns4362:0{{haState}}crwdne4362:0",
|
||||
"sharedStorage": "crwdns4364:0crwdne4364:0",
|
||||
"localStorage": "crwdns4366:0crwdne4366:0",
|
||||
"na": "crwdns4368:0crwdne4368:0"
|
||||
}
|
||||
}
|
||||
}
|
||||
22
public/locales/cr/modules/indexer-manager.json
Normal file
22
public/locales/cr/modules/indexer-manager.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "crwdns4188:0crwdne4188:0",
|
||||
"description": "crwdns4190:0crwdne4190:0",
|
||||
"settings": {
|
||||
"title": "crwdns4192:0crwdne4192:0",
|
||||
"openIndexerSiteInNewTab": {
|
||||
"label": "crwdns4496:0crwdne4496:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"indexersStatus": {
|
||||
"title": "crwdns4194:0crwdne4194:0",
|
||||
"testAllButton": "crwdns4196:0crwdne4196:0"
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "crwdns4198:0crwdne4198:0",
|
||||
"text": "crwdns4200:0crwdne4200:0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,9 @@
|
||||
"state": {
|
||||
"approved": "crwdns2765:0crwdne2765:0",
|
||||
"pendingApproval": "crwdns2767:0crwdne2767:0",
|
||||
"declined": "crwdns2769:0crwdne2769:0"
|
||||
"declined": "crwdns2769:0crwdne2769:0",
|
||||
"available": "crwdns4140:0crwdne4140:0",
|
||||
"partial": "crwdns4142:0crwdne4142:0"
|
||||
},
|
||||
"tooltips": {
|
||||
"approve": "crwdns2893:0crwdne2893:0",
|
||||
|
||||
96
public/locales/cr/modules/media-transcoding.json
Normal file
96
public/locales/cr/modules/media-transcoding.json
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "crwdns4382:0crwdne4382:0",
|
||||
"description": "crwdns4384:0crwdne4384:0",
|
||||
"settings": {
|
||||
"title": "crwdns4386:0crwdne4386:0",
|
||||
"appId": {
|
||||
"label": "crwdns4388:0crwdne4388:0"
|
||||
},
|
||||
"defaultView": {
|
||||
"label": "crwdns4390:0crwdne4390:0",
|
||||
"data": {
|
||||
"workers": "crwdns4392:0crwdne4392:0",
|
||||
"queue": "crwdns4394:0crwdne4394:0",
|
||||
"statistics": "crwdns4396:0crwdne4396:0"
|
||||
}
|
||||
},
|
||||
"showHealthCheck": {
|
||||
"label": "crwdns4398:0crwdne4398:0"
|
||||
},
|
||||
"showHealthChecksInQueue": {
|
||||
"label": "crwdns4400:0crwdne4400:0"
|
||||
},
|
||||
"queuePageSize": {
|
||||
"label": "crwdns4402:0crwdne4402:0"
|
||||
},
|
||||
"showAppIcon": {
|
||||
"label": "crwdns4404:0crwdne4404:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"noAppSelected": "crwdns4406:0crwdne4406:0",
|
||||
"views": {
|
||||
"workers": {
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "crwdns4408:0crwdne4408:0",
|
||||
"eta": "crwdns4410:0crwdne4410:0",
|
||||
"progress": "crwdns4412:0crwdne4412:0"
|
||||
},
|
||||
"empty": "crwdns4414:0crwdne4414:0",
|
||||
"tooltip": {
|
||||
"transcode": "crwdns4416:0crwdne4416:0",
|
||||
"healthCheck": "crwdns4418:0crwdne4418:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"queue": {
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "crwdns4420:0crwdne4420:0",
|
||||
"size": "crwdns4422:0crwdne4422:0"
|
||||
},
|
||||
"footer": {
|
||||
"currentIndex": "crwdns4424:0{{start}}crwdnd4424:0{{end}}crwdnd4424:0{{total}}crwdne4424:0"
|
||||
},
|
||||
"empty": "crwdns4426:0crwdne4426:0",
|
||||
"tooltip": {
|
||||
"transcode": "crwdns4428:0crwdne4428:0",
|
||||
"healthCheck": "crwdns4430:0crwdne4430:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"statistics": {
|
||||
"empty": "crwdns4432:0crwdne4432:0",
|
||||
"box": {
|
||||
"transcodes": "crwdns4434:0{{value}}crwdne4434:0",
|
||||
"healthChecks": "crwdns4436:0{{value}}crwdne4436:0",
|
||||
"files": "crwdns4438:0{{value}}crwdne4438:0",
|
||||
"spaceSaved": "crwdns4440:0{{value}}crwdne4440:0"
|
||||
},
|
||||
"pies": {
|
||||
"transcodes": "crwdns4442:0crwdne4442:0",
|
||||
"healthChecks": "crwdns4444:0crwdne4444:0",
|
||||
"videoCodecs": "crwdns4446:0crwdne4446:0",
|
||||
"videoContainers": "crwdns4448:0crwdne4448:0",
|
||||
"videoResolutions": "crwdns4450:0crwdne4450:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"error": {
|
||||
"title": "crwdns4452:0crwdne4452:0",
|
||||
"message": "crwdns4454:0crwdne4454:0"
|
||||
},
|
||||
"tabs": {
|
||||
"workers": "crwdns4456:0crwdne4456:0",
|
||||
"queue": "crwdns4458:0crwdne4458:0",
|
||||
"statistics": "crwdns4460:0crwdne4460:0"
|
||||
},
|
||||
"healthCheckStatus": {
|
||||
"title": "crwdns4462:0crwdne4462:0",
|
||||
"queued": "crwdns4464:0crwdne4464:0",
|
||||
"healthy": "crwdns4466:0crwdne4466:0",
|
||||
"unhealthy": "crwdns4468:0crwdne4468:0"
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,15 @@
|
||||
},
|
||||
"textLinesClamp": {
|
||||
"label": "crwdns2933:0crwdne2933:0"
|
||||
},
|
||||
"sortByPublishDateAscending": {
|
||||
"label": "crwdns4160:0crwdne4160:0"
|
||||
},
|
||||
"sortPostsWithoutPublishDateToTheTop": {
|
||||
"label": "crwdns4176:0crwdne4176:0"
|
||||
},
|
||||
"maximumAmountOfPosts": {
|
||||
"label": "crwdns4178:0crwdne4178:0"
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
|
||||
@@ -9,9 +9,26 @@
|
||||
"label": "crwdns4046:0crwdne4046:0",
|
||||
"info": "crwdns4048:0crwdne4048:0"
|
||||
},
|
||||
"appendUnit": {
|
||||
"label": "crwdns4180:0crwdne4180:0",
|
||||
"info": "crwdns4182:0crwdne4182:0"
|
||||
},
|
||||
"automationId": {
|
||||
"label": "crwdns4156:0crwdne4156:0",
|
||||
"info": "crwdns4158:0crwdne4158:0"
|
||||
},
|
||||
"displayName": {
|
||||
"label": "crwdns4050:0crwdne4050:0"
|
||||
},
|
||||
"displayFriendlyName": {
|
||||
"label": "crwdns4184:0crwdne4184:0",
|
||||
"info": "crwdns4476:0crwdne4476:0"
|
||||
},
|
||||
"genericToggle": {
|
||||
"label": "crwdns4478:0crwdne4478:0",
|
||||
"info": "crwdns4480:0crwdne4480:0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
public/locales/cr/modules/smart-home/trigger-automation.json
Normal file
16
public/locales/cr/modules/smart-home/trigger-automation.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "crwdns4144:0crwdne4144:0",
|
||||
"description": "crwdns4146:0crwdne4146:0",
|
||||
"settings": {
|
||||
"title": "crwdns4148:0crwdne4148:0",
|
||||
"automationId": {
|
||||
"label": "crwdns4150:0crwdne4150:0",
|
||||
"info": "crwdns4152:0crwdne4152:0"
|
||||
},
|
||||
"displayName": {
|
||||
"label": "crwdns4154:0crwdne4154:0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,25 @@
|
||||
"displayRatioWithFilter": {
|
||||
"label": "crwdns4000:0crwdne4000:0",
|
||||
"info": "crwdns4002:0crwdne4002:0"
|
||||
},
|
||||
"columnOrdering": {
|
||||
"label": "crwdns4470:0crwdne4470:0"
|
||||
},
|
||||
"rowSorting": {
|
||||
"label": "crwdns4472:0crwdne4472:0"
|
||||
},
|
||||
"columns": {
|
||||
"label": "crwdns4370:0crwdne4370:0",
|
||||
"data": {
|
||||
"date": "crwdns4474:0crwdne4474:0",
|
||||
"down": "crwdns4372:0crwdne4372:0",
|
||||
"up": "crwdns4374:0crwdne4374:0",
|
||||
"eta": "crwdns4376:0crwdne4376:0",
|
||||
"progress": "crwdns4378:0crwdne4378:0"
|
||||
}
|
||||
},
|
||||
"nameColumnSize": {
|
||||
"label": "crwdns4380:0crwdne4380:0"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -84,10 +103,6 @@
|
||||
"text": "crwdns3193:0crwdne3193:0"
|
||||
}
|
||||
},
|
||||
"loading": {
|
||||
"title": "crwdns3195:0crwdne3195:0",
|
||||
"description": "crwdns3197:0crwdne3197:0"
|
||||
},
|
||||
"popover": {
|
||||
"introductionPrefix": "crwdns2463:0crwdne2463:0",
|
||||
"metrics": {
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
"displayCityName": {
|
||||
"label": "crwdns3047:0crwdne3047:0"
|
||||
},
|
||||
"displayWeekly": {
|
||||
"label": "crwdns4240:0crwdne4240:0"
|
||||
},
|
||||
"forecastDays": {
|
||||
"label": "crwdns4242:0crwdne4242:0"
|
||||
},
|
||||
"location": {
|
||||
"label": "crwdns1568:0crwdne1568:0"
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
}
|
||||
},
|
||||
"modal": {
|
||||
"text": "crwdns2949:0crwdne2949:0",
|
||||
"label": "crwdns2741:0crwdne2741:0",
|
||||
"reportButton": "crwdns2743:0crwdne2743:0"
|
||||
"text": "crwdns4500:0crwdne4500:0",
|
||||
"label": "crwdns4502:0crwdne4502:0",
|
||||
"reportButton": "crwdns4504:0crwdne4504:0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +1,35 @@
|
||||
{
|
||||
"metaTitle": "",
|
||||
"title": "",
|
||||
"text": "",
|
||||
"metaTitle": "Vytvořit účet",
|
||||
"title": "Vytvořit účet",
|
||||
"text": "Prosím uveďte níže své přihlašovací údaje",
|
||||
"form": {
|
||||
"fields": {
|
||||
"username": {
|
||||
"label": ""
|
||||
"label": "Uživatelské jméno"
|
||||
},
|
||||
"password": {
|
||||
"label": ""
|
||||
"label": "Heslo"
|
||||
},
|
||||
"passwordConfirmation": {
|
||||
"label": ""
|
||||
"label": "Potvrďte heslo"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": ""
|
||||
"submit": "Vytvořit účet"
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"loading": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Vytváření účtu",
|
||||
"text": "Čekejte prosím"
|
||||
},
|
||||
"success": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Účet byl vytvořen",
|
||||
"text": "Váš účet byl úspěšně vytvořen"
|
||||
},
|
||||
"error": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Chyba",
|
||||
"text": "Něco se nepodařilo, objevila se následující chyba: {{error}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,24 @@
|
||||
{
|
||||
"metaTitle": "",
|
||||
"title": "",
|
||||
"text": "",
|
||||
"metaTitle": "Přihlásit se",
|
||||
"title": "Vítejte zpět!",
|
||||
"text": "Zadejte prosím Vaše přihlašovací údaje",
|
||||
"form": {
|
||||
"fields": {
|
||||
"username": {
|
||||
"label": ""
|
||||
"label": "Uživatelské jméno"
|
||||
},
|
||||
"password": {
|
||||
"label": ""
|
||||
"label": "Heslo"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"submit": ""
|
||||
"submit": "Přihlásit se"
|
||||
},
|
||||
"afterLoginRedirection": ""
|
||||
"afterLoginRedirection": "Po přihlášení budete přesměrováni na {{url}}",
|
||||
"providersEmpty": {
|
||||
"title": "Chyba poskytovatele ověření",
|
||||
"message": "Poskytovatel(é) není/nejsou nastaven/i, další informace naleznete ve Vašich protokolech."
|
||||
}
|
||||
},
|
||||
"alert": ""
|
||||
"alert": "Vaše přihlašovací údaje jsou nesprávné nebo tento účet neexistuje. Zkuste to prosím znovu."
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"metaTitle": "Přizpůsobení {{name}} plochy",
|
||||
"pageTitle": "Přizpůsobení {{name}} plochy",
|
||||
"pageTitle": "Přizpůsobení plochy {{name}}",
|
||||
"backToBoard": "Zpět na plochu",
|
||||
"settings": {
|
||||
"appearance": {
|
||||
@@ -9,21 +9,21 @@
|
||||
}
|
||||
},
|
||||
"save": {
|
||||
"button": "",
|
||||
"note": ""
|
||||
"button": "Uložit změny",
|
||||
"note": "Pozor, máte neuložené změny!"
|
||||
},
|
||||
"notifications": {
|
||||
"pending": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "Ukládání přizpůsobení",
|
||||
"message": "Počkejte prosím, než vaše přizpůsobení uložíme"
|
||||
},
|
||||
"success": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "Přizpůsobení uloženo",
|
||||
"message": "Vaše přizpůsobení bylo úspěšně uloženo"
|
||||
},
|
||||
"error": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "Chyba",
|
||||
"message": "Nelze uložit změny"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,57 +1,59 @@
|
||||
{
|
||||
"save": "Uložit",
|
||||
"apply": "",
|
||||
"insert": "",
|
||||
"about": "",
|
||||
"cancel": "",
|
||||
"close": "",
|
||||
"apply": "Použít",
|
||||
"insert": "Vložit",
|
||||
"about": "O aplikaci",
|
||||
"cancel": "Zrušit",
|
||||
"close": "Zavřít",
|
||||
"back": "Zpět",
|
||||
"delete": "",
|
||||
"ok": "",
|
||||
"edit": "",
|
||||
"delete": "Odstranit",
|
||||
"ok": "OK",
|
||||
"edit": "Upravit",
|
||||
"next": "Další",
|
||||
"previous": "",
|
||||
"confirm": "",
|
||||
"enabled": "",
|
||||
"disabled": "",
|
||||
"enableAll": "",
|
||||
"disableAll": "",
|
||||
"version": "",
|
||||
"previous": "Zpět",
|
||||
"confirm": "Potvrdit",
|
||||
"enabled": "Zapnuto",
|
||||
"duplicate": "Duplikovat",
|
||||
"disabled": "Vypnuto",
|
||||
"enableAll": "Aktivovat vše",
|
||||
"disableAll": "Zakázat vše",
|
||||
"setTimer": "Nastavit časovat",
|
||||
"version": "Verze",
|
||||
"changePosition": "Změnit pozici",
|
||||
"remove": "",
|
||||
"removeConfirm": "",
|
||||
"createItem": "",
|
||||
"remove": "Odstranit",
|
||||
"removeConfirm": "Jste si jisti, že chcete odstranit {{item}}?",
|
||||
"createItem": "+ vytvořit {{item}}",
|
||||
"sections": {
|
||||
"settings": "",
|
||||
"settings": "Nastavení",
|
||||
"dangerZone": "Nebezpečná zóna"
|
||||
},
|
||||
"secrets": {
|
||||
"apiKey": "",
|
||||
"username": "",
|
||||
"password": ""
|
||||
"apiKey": "API klíč",
|
||||
"username": "Uživatelské jméno",
|
||||
"password": "Heslo"
|
||||
},
|
||||
"tip": "",
|
||||
"tip": "Tip: ",
|
||||
"time": {
|
||||
"seconds": "",
|
||||
"minutes": "",
|
||||
"hours": ""
|
||||
"seconds": "vteřiny",
|
||||
"minutes": "minuty",
|
||||
"hours": "hodiny"
|
||||
},
|
||||
"loading": "",
|
||||
"loading": "Načítám...",
|
||||
"breakPoints": {
|
||||
"small": "malý",
|
||||
"medium": "střední",
|
||||
"large": "velký"
|
||||
},
|
||||
"seeMore": "",
|
||||
"seeMore": "Zobrazit více...",
|
||||
"position": {
|
||||
"left": "Vlevo",
|
||||
"center": "",
|
||||
"center": "Střed",
|
||||
"right": "Vpravo"
|
||||
},
|
||||
"attributes": {
|
||||
"width": "",
|
||||
"height": ""
|
||||
"width": "Šířka",
|
||||
"height": "Výška"
|
||||
},
|
||||
"public": "",
|
||||
"public": "Veřejné",
|
||||
"restricted": "Omezené"
|
||||
}
|
||||
@@ -1,25 +1,25 @@
|
||||
{
|
||||
"modals": {
|
||||
"blockedPopups": {
|
||||
"title": "",
|
||||
"text": "",
|
||||
"title": "Vyskakovací okna jsou zablokována",
|
||||
"text": "Váš prohlížeč zablokoval Homarr přístup k jeho API. Nejčastěji je to způsobeno blokátory reklam nebo odepřenými oprávněními. Homarr nemůže automaticky žádat o oprávnění.",
|
||||
"list": {
|
||||
"browserPermission": "",
|
||||
"adBlockers": "",
|
||||
"otherBrowser": ""
|
||||
"browserPermission": "Klikněte na ikonu nastavení webu vedle adresy URL a zkontrolujte oprávnění. Povolte vyskakovací okna a přesměrování",
|
||||
"adBlockers": "Zakažte v prohlížeči blokátory reklam a bezpečnostní nástroje",
|
||||
"otherBrowser": "Zkuste jiný webový prohlížeč"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"category": {
|
||||
"openAllInNewTab": ""
|
||||
"openAllInNewTab": "Otevřít na nové kartě"
|
||||
}
|
||||
},
|
||||
"menu": {
|
||||
"moveUp": "",
|
||||
"moveDown": "",
|
||||
"addCategory": "",
|
||||
"addAbove": "",
|
||||
"addBelow": ""
|
||||
"moveUp": "Posunout nahoru",
|
||||
"moveDown": "Posunout dolů",
|
||||
"addCategory": "Přidat kategorii {{location}}",
|
||||
"addAbove": "nad",
|
||||
"addBelow": "pod"
|
||||
}
|
||||
}
|
||||
@@ -22,5 +22,5 @@
|
||||
"message": "Kategorie \"{{name}}\" byla vytvořena"
|
||||
}
|
||||
},
|
||||
"importFromDocker": ""
|
||||
"importFromDocker": "Importovat z dockeru"
|
||||
}
|
||||
|
||||
@@ -1 +1,5 @@
|
||||
{}
|
||||
{
|
||||
"title": "Přístup odepřen",
|
||||
"text": "Nemáte dostatečná oprávnění pro přístup k této stránce. Pokud se domníváte, že se jedná o chybu, kontaktujte, prosím, svého správce.",
|
||||
"switchAccount": "Přepněte na jiný účet"
|
||||
}
|
||||
@@ -1 +1,5 @@
|
||||
{}
|
||||
{
|
||||
"title": "Stránka nenalezena",
|
||||
"text": "Tato stránka nebyla nalezena. Platnost adresy URL této stránky možná vypršela, adresa URL je neplatná nebo nemáte požadovaná oprávnění pro přístup k této stránce.",
|
||||
"button": "Přejít domů"
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
"search": {
|
||||
"label": "Vyhledat",
|
||||
"engines": {
|
||||
"web": "",
|
||||
"youtube": "",
|
||||
"torrent": "",
|
||||
"movie": ""
|
||||
"web": "Hledat {{query}} na internetu",
|
||||
"youtube": "Hledat {{query}} na YouTube",
|
||||
"torrent": "Hledat {{query}} torrenty",
|
||||
"movie": "Hledat {{query}} na {{app}}"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
@@ -14,14 +14,14 @@
|
||||
"preferences": "Uživatelská nastavení",
|
||||
"defaultBoard": "Výchozí plocha",
|
||||
"manage": "Spravovat",
|
||||
"logout": "Odhlásit {{username}}",
|
||||
"login": ""
|
||||
"logout": "Odhlásit uživatele {{username}}",
|
||||
"login": "Přihlásit se"
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"movie": {
|
||||
"title": "",
|
||||
"topResults": ""
|
||||
"topResults": "{{count}} výsledků pro <b>{{search}}</b>."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"description": "",
|
||||
"description": "V režimu úprav můžete upravovat dlaždice a konfigurovat aplikace. Změny se uloží až po opuštění režimu úprav.",
|
||||
"button": {
|
||||
"disabled": "",
|
||||
"enabled": ""
|
||||
"disabled": "Vstoupit do režimu úprav",
|
||||
"enabled": "Ukončit a uložit"
|
||||
},
|
||||
"popover": {
|
||||
"title": "Režim úprav je povolen pro velikost <1>{{size}}</1>",
|
||||
"text": "Nyní můžete upravovat a configurovat Vaše aplikace. Změny <strong>nejsou uloženy</strong> dokud neopustíte režim úprav"
|
||||
"text": "Nyní můžete upravovat a konfigurovat Vaše aplikace. Změny <strong>nejsou uloženy</strong> dokud neopustíte režim úprav"
|
||||
},
|
||||
"unloadEvent": ""
|
||||
"unloadEvent": "Ukončete režim úprav pro uložení změn"
|
||||
}
|
||||
|
||||
@@ -25,11 +25,13 @@
|
||||
"tools": {
|
||||
"title": "Nástroje",
|
||||
"items": {
|
||||
"docker": ""
|
||||
"docker": "Docker",
|
||||
"api": "API",
|
||||
"migrate": "Přechod na verzi 1.0"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"title": ""
|
||||
"title": "O aplikaci"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
{}
|
||||
{
|
||||
"title": "{{position}} postranní panel"
|
||||
}
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
{
|
||||
"description": "",
|
||||
"description": "Homarr je <strong>elegantní</strong>, <strong>moderní</strong> plocha, která vám poskytne všechny aplikace a služby na dosah ruky. S aplikací Homarr máte přístup ke všemu na jednom místě a můžete vše pohodlně ovládat. Homarr se hladce integruje s aplikacemi, které jste si přidali, poskytuje Vám cenné informace a dává Vám plnou kontrolu. Instalace je snadná a Homarr podporuje širokou škálu metod nasazení.",
|
||||
"addToDashboard": "Přidat na plochu",
|
||||
"tip": "",
|
||||
"key": "",
|
||||
"action": "",
|
||||
"keybinds": "",
|
||||
"translators": "",
|
||||
"translatorsDescription": "",
|
||||
"contributors": "",
|
||||
"contributorsDescription": "",
|
||||
"tip": "Mod odkazuje na Vaši modifikační klávesu, je to Ctrl a klávesa Command/Super/Windows",
|
||||
"key": "Klávesová zkratka",
|
||||
"action": "Akce",
|
||||
"keybinds": "Klávesové zkratky",
|
||||
"translators": "Překladatelé ({{count}})",
|
||||
"translatorsDescription": "Díky těmto lidem je Homarr dostupný v {{languages}} jazycích! Chcete pomoci přeložit Homarr do svého jazyka? Přečtěte si, jak na to, <a>zde</a>.",
|
||||
"contributors": "Přispěvatelé ({{count}})",
|
||||
"contributorsDescription": "Tito lidé vytvořili kód, díky kterému funguje homarr! Chcete pomoci vybudovat Homarr? Přečtěte si, jak na to, <a>zde</a>",
|
||||
"actions": {
|
||||
"toggleTheme": "",
|
||||
"focusSearchBar": "",
|
||||
"openDocker": "",
|
||||
"toggleEdit": ""
|
||||
"toggleTheme": "Přepne světlý/tmavý motiv",
|
||||
"focusSearchBar": "Zaměří na vyhledávací panel",
|
||||
"openDocker": "Otevře Docker widget",
|
||||
"toggleEdit": "Přepne režim úprav"
|
||||
},
|
||||
"metrics": {
|
||||
"configurationSchemaVersion": "",
|
||||
"version": "",
|
||||
"nodeEnvironment": "",
|
||||
"i18n": "",
|
||||
"locales": "",
|
||||
"experimental_disableEditMode": ""
|
||||
"configurationSchemaVersion": "Verze konfiguračního schématu",
|
||||
"version": "Verze",
|
||||
"nodeEnvironment": "Prostředí uzlu",
|
||||
"i18n": "Načteny jmenné prostory překladu I18n",
|
||||
"locales": "Nakonfigurováno I18n jazyků",
|
||||
"experimental_disableEditMode": "<b>EXPERIMENTÁLNÍ</b>: Zakázat režim úprav"
|
||||
},
|
||||
"version": {
|
||||
"new": "",
|
||||
"dropdown": ""
|
||||
"new": "Nová verze: {{newVersion}}",
|
||||
"dropdown": "Verze {{newVersion}} je nyní dostupná! Vaše aktuální verze je {{currentVersion}}"
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"tabs": {
|
||||
"general": "Obecné",
|
||||
"behaviour": "Chování",
|
||||
"network": "",
|
||||
"network": "Síť",
|
||||
"appearance": "Vzhled",
|
||||
"integration": "Integrace"
|
||||
},
|
||||
@@ -24,14 +24,15 @@
|
||||
"enablePings": "Zkontrolujte, zda je IP adresa správná, povolením pingů. Běžte do Přizpůsobení plochy -> Rozložení -> Povolit ping. Na dlaždicích aplikace se objeví malá červená nebo zelená bublina a po najetí na ni se zobrazí kód odpovědi (ve většině případů se očekává zelená bublina s kódem 200).",
|
||||
"wget": "Chcete-li se ujistit, že homarr může komunikovat s ostatními aplikacemi, zkontrolujte, zda wget/curl/ping odpovídá IP adrese:portu aplikace.",
|
||||
"iframe": "Pokud jde o iframe, ty by měly vždy používat stejný protokol (http/s) jako Homarr.",
|
||||
"clearCache": ""
|
||||
"clearCache": "Některé informace jsou zaznamenány v mezipaměti, takže integrace nemusí fungovat, pokud nevymažete mezipaměť v obecných možnostech aplikace Homarr."
|
||||
},
|
||||
"footer": "Pro řešení dalších problémů se obraťte na náš {{discord}}."
|
||||
}
|
||||
},
|
||||
"externalAddress": {
|
||||
"label": "Veřejná adresa",
|
||||
"description": "URL která bude otevřena po kliknutí na aplikaci."
|
||||
"description": "URL která bude otevřena po kliknutí na aplikaci.",
|
||||
"tooltip": "Můžete použít několik proměnných k vytvoření dynamických adres:<br><br><b>[homarr_base]</b> : plná adresa bez portu a cesty. <i>(Příklad: 'https://subdomain.homarr.dev')</i><br><b>[homarr_hostname]</b> : plná základní url včetně její aktuální subdomény. <i>(Příklad: 'subdomain.homarr.dev')</i><br><b>[homarr_domain]</b> : doména bez subdomény. <i>(Příklad: `homarr.dev')</i><br><b>[homarr_protocol]</b> : <i>http/https</i><br><br>Všechny tyto proměnné závisejí na aktuální url adrese."
|
||||
}
|
||||
},
|
||||
"behaviour": {
|
||||
@@ -41,9 +42,9 @@
|
||||
},
|
||||
"tooltipDescription": {
|
||||
"label": "Popis aplikace",
|
||||
"description": ""
|
||||
"description": "Zadaný text se zobrazí po najetí na aplikaci.\nPoužijte jej k tomu, abyste uživatelům poskytli více informací o své aplikaci, nebo jej nechte prázdný, aby se nic nezobrazovalo."
|
||||
},
|
||||
"customProtocolWarning": ""
|
||||
"customProtocolWarning": "Používá se nestandardní protokol. To může vyžadovat předinstalované aplikace a může přinést bezpečnostní rizika. Ujistěte se, že vaše adresa je bezpečná a důvěryhodná."
|
||||
},
|
||||
"network": {
|
||||
"statusChecker": {
|
||||
@@ -60,12 +61,12 @@
|
||||
"label": "Ikona aplikace",
|
||||
"description": "Začněte psát pro vyhledání ikony. Můžete také vložit adresu URL obrázku a použít vlastní ikonu.",
|
||||
"autocomplete": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Nebyly nalezeny žádné výsledky",
|
||||
"text": "Zkuste použít konkrétnější vyhledávací výraz. Pokud nemůžete najít požadovanou ikonu, vložte adresu URL obrázku Vaší žádané ikony"
|
||||
},
|
||||
"noItems": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Načítám externí ikony",
|
||||
"text": "Může to chvíli trvat"
|
||||
}
|
||||
},
|
||||
"appNameFontSize": {
|
||||
@@ -74,11 +75,11 @@
|
||||
},
|
||||
"appNameStatus": {
|
||||
"label": "Stav názvu aplikace",
|
||||
"description": "Zvolte, kde se má název zobrazit, pokud se vůbec má zobrazit.",
|
||||
"description": "Zvolte, kde se má název zobrazit, resp. má-li se vůbec má zobrazit.",
|
||||
"dropdown": {
|
||||
"normal": "Zobrazení názvu pouze na dlaždici",
|
||||
"hover": "Zobrazení názvu pouze při najetí myší",
|
||||
"hidden": "Nezobrazovat vůbec"
|
||||
"hidden": "Nezobrazovat název vůbec"
|
||||
}
|
||||
},
|
||||
"positionAppName": {
|
||||
@@ -98,31 +99,31 @@
|
||||
},
|
||||
"integration": {
|
||||
"type": {
|
||||
"label": "Nastavení propojení",
|
||||
"label": "Nastavení integrace",
|
||||
"description": "Konfigurace integrace, která bude použita pro připojení k vaší aplikaci.",
|
||||
"placeholder": "Vyberte integraci",
|
||||
"defined": "",
|
||||
"undefined": "",
|
||||
"public": "",
|
||||
"private": "",
|
||||
"explanationPrivate": "",
|
||||
"explanationPublic": ""
|
||||
"defined": "Definováno",
|
||||
"undefined": "Nedefinovaný",
|
||||
"public": "Veřejné",
|
||||
"private": "Soukromý",
|
||||
"explanationPrivate": "Soukromé heslo/API klíč se na server odešle pouze jednou. Po obnovení stránky se již nikdy neodešle.",
|
||||
"explanationPublic": "Veřejný secret se vždy odešle klientovi a je přístupný prostřednictvím API. Neměl by obsahovat žádné důvěrné hodnoty, jako jsou uživatelská jména, hesla, tokeny, certifikáty a podobně!"
|
||||
},
|
||||
"secrets": {
|
||||
"description": "",
|
||||
"warning": "",
|
||||
"clear": "",
|
||||
"save": "",
|
||||
"update": ""
|
||||
"description": "Chcete-li aktualizovat API klíč, zadejte novou hodnotu a klikněte na tlačítko uložit. Chcete-li API klíč vymazat, použijte tlačítko vymazat.",
|
||||
"warning": "Vaše přihlašovací údaje slouží jako přístup k vašim integracím a <strong> nikdy</strong> byste je neměli sdílet s nikým jiným. Tým Homarr Vás nikdy nebude žádat o Vaše přihlašovací údaje. Dbejte na to, abyste svá <strong>hesla bezpečně ukládali a spravovali</strong>.",
|
||||
"clear": "Vymazat heslo/klíč",
|
||||
"save": "Uložit heslo/klíč",
|
||||
"update": "Aktualizovat heslo/klíč"
|
||||
}
|
||||
},
|
||||
"validation": {
|
||||
"popover": "",
|
||||
"name": "",
|
||||
"noUrl": "",
|
||||
"invalidUrl": "",
|
||||
"noIconUrl": "",
|
||||
"noExternalUri": "",
|
||||
"invalidExternalUri": ""
|
||||
"popover": "Váš formulář obsahuje neplatná data. Proto jej nelze uložit. Vyřešte prosím všechny problémy a znovu uložte změny",
|
||||
"name": "Jméno aplikace je nutné vyplnit",
|
||||
"noUrl": "URL je nutné vyplnit",
|
||||
"invalidUrl": "URL je nutné vyplnit",
|
||||
"noIconUrl": "Toto pole je nutné vyplnit",
|
||||
"noExternalUri": "Je vyžadována externí URI",
|
||||
"invalidExternalUri": "Externí URI není platná URI"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,8 @@
|
||||
{}
|
||||
{
|
||||
"xPosition": "Poloha osy X",
|
||||
"width": "Šířka",
|
||||
"height": "Výška",
|
||||
"yPosition": "Poloha osy Y",
|
||||
"zeroOrHigher": "0 a vyšší",
|
||||
"betweenXandY": "Mezi {{min}} a {{max}}"
|
||||
}
|
||||
@@ -15,6 +15,19 @@
|
||||
"delete": {
|
||||
"label": "Trvale smazat",
|
||||
"disabled": "Smazání je zakázáno, protože starší komponenty Homarru neumožňují smazání výchozí konfigurace. Smazání bude možné v budoucnu."
|
||||
},
|
||||
"duplicate": "Duplikovat",
|
||||
"rename": {
|
||||
"label": "Přejmenovat",
|
||||
"modal": {
|
||||
"title": "Přejmenovat plochu {{name}}",
|
||||
"fields": {
|
||||
"name": {
|
||||
"label": "Nové jméno",
|
||||
"placeholder": "Nové jméno plochy"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"badges": {
|
||||
@@ -27,15 +40,15 @@
|
||||
},
|
||||
"modals": {
|
||||
"delete": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Odstranit plochu",
|
||||
"text": "Jste si jisti, že chcete tuto plochu smazat? Tuto akci nelze vrátit zpět a vaše data budou trvale ztracena."
|
||||
},
|
||||
"create": {
|
||||
"title": "Vytvořit plochu",
|
||||
"text": "Název nelze po vytvoření plochy změnit.",
|
||||
"text": "Jméno nelze po vytvoření plochy změnit.",
|
||||
"form": {
|
||||
"name": {
|
||||
"label": ""
|
||||
"label": "Název"
|
||||
},
|
||||
"submit": "Vytvořit"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"metaTitle": "Spravovat",
|
||||
"hero": {
|
||||
"title": "Vítej zpět, {{username}}",
|
||||
"fallbackUsername": "",
|
||||
"fallbackUsername": "Anonymní",
|
||||
"subtitle": "Vítejte ve Vašem Centru aplikací. Organizujte, optimalizujte a ovládněte!"
|
||||
},
|
||||
"quickActions": {
|
||||
|
||||
33
public/locales/cs/manage/migrate.json
Normal file
33
public/locales/cs/manage/migrate.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"metaTitle": "Přechod na verzi 1.0",
|
||||
"pageTitle": "Migrace ploch, integrací a uživatelů",
|
||||
"description": "Exportujete své plochy a uživatele do ZIP-Archivu, aby jste je mohli migrovat do Homarru po verzi 1.0.0",
|
||||
"securityNote": {
|
||||
"title": "Bezpečnostní poznámka",
|
||||
"text": "Při exportování uživatelů a integrací se otevře okno s šifrovacím klíčem. Tento klíč je vyžadován pro následovný import dat do Homarru. Uchovejte jej na bezpečném místě a s nikým jej nesdílejte."
|
||||
},
|
||||
"form": {
|
||||
"label": "Vyberte vše, co chcete exportovat",
|
||||
"option": {
|
||||
"boards": {
|
||||
"label": "Exportovat plochy"
|
||||
},
|
||||
"integrations": {
|
||||
"label": "Exportovat integrace",
|
||||
"description": "Toto bude obsahovat pouze zašifrované údaje pro integrace. Tato možnost je dostupná pouze při exportování ploch"
|
||||
},
|
||||
"users": {
|
||||
"label": "Exportovat uživatele",
|
||||
"description": "Toto exportuje pouze údaje uživatelů, hesla, hash a salt jsou zašifrovány"
|
||||
}
|
||||
}
|
||||
},
|
||||
"action": {
|
||||
"export": "Exportovat data"
|
||||
},
|
||||
"modal": {
|
||||
"title": "Šifrovací klíč",
|
||||
"description": "Vaše data byla exportována. Uchovejte tento klíč v bezpečí a s nikým jej nesdílejte. Tento klíč budete potřebovat pro import dat do Homarru.",
|
||||
"copyDismiss": "Zkopírovat a zavřít"
|
||||
}
|
||||
}
|
||||
@@ -6,10 +6,10 @@
|
||||
},
|
||||
"filter": {
|
||||
"roles": {
|
||||
"all": "",
|
||||
"normal": "",
|
||||
"admin": "",
|
||||
"owner": ""
|
||||
"all": "Všichni",
|
||||
"normal": "Uživatelé",
|
||||
"admin": "Administrátoři",
|
||||
"owner": "Vlastníci"
|
||||
}
|
||||
},
|
||||
"table": {
|
||||
@@ -19,26 +19,26 @@
|
||||
}
|
||||
},
|
||||
"tooltips": {
|
||||
"deleteUser": "",
|
||||
"demoteAdmin": "",
|
||||
"promoteToAdmin": ""
|
||||
"deleteUser": "Vymazat uživatele",
|
||||
"demoteAdmin": "Zrušit oprávnění správce",
|
||||
"promoteToAdmin": "Povýšit na správce"
|
||||
},
|
||||
"modals": {
|
||||
"delete": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Vymazat uživatele {{name}}",
|
||||
"text": "Jste si jisti, že chcete vymazat uživatele {{name}}? Tím se odstraní data spojená s tímto účtem, ale ne panely vytvořené tímto uživatelem."
|
||||
},
|
||||
"change-role": {
|
||||
"promote": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Povýšit uživatele {{name}} na správce",
|
||||
"text": "Jste si jisti, že chcete uživatele {{name}} povýšit na správce? Tím získá uživatel přístup ke všem prostředkům ve vaší instanci Homarr."
|
||||
},
|
||||
"demote": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Zrušit oprávnění správce pro uživatele {{name}}",
|
||||
"text": "Jste si jisti, že chcete zrušit oprávnění správce pro uživatele {{name}}? Tím ztratí přístup ke všem prostředkům ve vaší instanci Homarr."
|
||||
},
|
||||
"confirm": ""
|
||||
"confirm": "Potvrdit"
|
||||
}
|
||||
},
|
||||
"searchDoesntMatch": ""
|
||||
"searchDoesntMatch": "Vašemu vyhledávání neodpovídají žádné záznamy. Prosím, upravte svůj filtr."
|
||||
}
|
||||
@@ -3,9 +3,9 @@
|
||||
"steps": {
|
||||
"account": {
|
||||
"title": "První krok",
|
||||
"text": "",
|
||||
"text": "Tvorba účtu",
|
||||
"username": {
|
||||
"label": ""
|
||||
"label": "Uživatelské jméno"
|
||||
},
|
||||
"email": {
|
||||
"label": "E-mail"
|
||||
@@ -13,40 +13,40 @@
|
||||
},
|
||||
"security": {
|
||||
"title": "Druhý krok",
|
||||
"text": "",
|
||||
"text": "Heslo",
|
||||
"password": {
|
||||
"label": ""
|
||||
"label": "Heslo"
|
||||
}
|
||||
},
|
||||
"finish": {
|
||||
"title": "Potvrzení",
|
||||
"text": "",
|
||||
"text": "Uložit do databáze",
|
||||
"card": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Zkontrolujte, co jste vyplnili",
|
||||
"text": "Po odeslání dat se uživatel bude moci přihlásit. Jste si jisti, že chcete tohoto uživatele uložit do databáze?"
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"property": "",
|
||||
"value": "",
|
||||
"username": "",
|
||||
"property": "Vlastnosti",
|
||||
"value": "Hodnoty",
|
||||
"username": "Uživatelské jméno",
|
||||
"email": "E-mail",
|
||||
"password": ""
|
||||
"password": "Heslo"
|
||||
},
|
||||
"notSet": "",
|
||||
"valid": ""
|
||||
"notSet": "Nenastaveno",
|
||||
"valid": "Platné"
|
||||
},
|
||||
"failed": ""
|
||||
"failed": "Vytvoření uživatele se nezdařilo: {{error}}"
|
||||
},
|
||||
"completed": {
|
||||
"alert": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Uživatel byl úspěšně vytvořen",
|
||||
"text": "Uživatel byl vytvořen v databázi. Nyní se může přihlásit."
|
||||
}
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"generateRandomPassword": "",
|
||||
"createAnother": ""
|
||||
"generateRandomPassword": "Vygenerovat náhodné heslo",
|
||||
"createAnother": "Vytvořit dalšího uživatele"
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"metaTitle": "",
|
||||
"back": "",
|
||||
"metaTitle": "Uživatel {{username}}",
|
||||
"back": "Zpět na správu uživatelů",
|
||||
"sections": {
|
||||
"general": {
|
||||
"title": "Obecné",
|
||||
"inputs": {
|
||||
"username": {
|
||||
"label": ""
|
||||
"label": "Uživatelské jméno"
|
||||
},
|
||||
"eMail": {
|
||||
"label": "E-mail"
|
||||
@@ -14,40 +14,40 @@
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"title": "",
|
||||
"title": "Bezpečnost",
|
||||
"inputs": {
|
||||
"password": {
|
||||
"label": ""
|
||||
"label": "Nové heslo"
|
||||
},
|
||||
"terminateExistingSessions": {
|
||||
"label": "",
|
||||
"description": ""
|
||||
"label": "Ukončit stávající relace",
|
||||
"description": "Přinutit uživatele, aby se znovu přihlásil na svých zařízeních"
|
||||
},
|
||||
"confirm": {
|
||||
"label": "",
|
||||
"description": ""
|
||||
"label": "Potvrdit",
|
||||
"description": "Heslo bude aktualizováno. Akci nelze vrátit zpět."
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"title": "",
|
||||
"currentRole": "",
|
||||
"title": "Role",
|
||||
"currentRole": "Současná role: ",
|
||||
"badges": {
|
||||
"owner": "",
|
||||
"admin": "",
|
||||
"normal": ""
|
||||
"owner": "Vlastník",
|
||||
"admin": "Administrátor",
|
||||
"normal": "Normální"
|
||||
}
|
||||
},
|
||||
"deletion": {
|
||||
"title": "",
|
||||
"title": "Smazání účtu",
|
||||
"inputs": {
|
||||
"confirmUsername": {
|
||||
"label": "",
|
||||
"description": ""
|
||||
"label": "Potvrďte uživatelské jméno",
|
||||
"description": "Pro potvrzení smazání zadejte uživatelské jméno"
|
||||
},
|
||||
"confirm": {
|
||||
"label": "Trvale smazat",
|
||||
"description": ""
|
||||
"description": "Jsem si vědom toho, že tato akce je trvalá a všechna data účtu budou ztracena."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"metaTitle": "",
|
||||
"metaTitle": "Pozvánky uživatelů",
|
||||
"pageTitle": "Správa pozvánek uživatelů",
|
||||
"description": "Pomocí pozvánek můžete pozvat uživatele do instance služby Homarr. Pozvánka je platná pouze po určitou dobu a lze ji použít pouze jednou. Platnost musí být v rozmezí od 5 minut do 12 měsíců od vytvoření.",
|
||||
"description": "Pomocí pozvánek můžete pozvat uživatele do Homarra. Pozvánka je platná pouze po určitou dobu a lze ji použít pouze jednou. Platnost pozvánky musí být v rozmezí od 5 minut do 12 měsíců od vytvoření.",
|
||||
"button": {
|
||||
"createInvite": "Vytvořit pozvánku",
|
||||
"deleteInvite": ""
|
||||
"deleteInvite": "Odstranit pozvánku"
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"id": "ID",
|
||||
"creator": "Vytvořil",
|
||||
"creator": "Vytvořil/a",
|
||||
"expires": "Expiruje",
|
||||
"action": "Akce"
|
||||
},
|
||||
"data": {
|
||||
"expiresAt": "",
|
||||
"expiresAt": "vypršela {{at}}",
|
||||
"expiresIn": "za {{in}}"
|
||||
}
|
||||
},
|
||||
@@ -28,20 +28,20 @@
|
||||
}
|
||||
},
|
||||
"copy": {
|
||||
"title": "",
|
||||
"description": "",
|
||||
"invitationLink": "",
|
||||
"title": "Kopírovat pozvánku",
|
||||
"description": "Vaše pozvánka byla vygenerována. Po zavření tohoto okna <b>již nebude možné tento odkaz zkopírovat</b>. Pokud si již nepřejete uvedenou osobu pozvat, můžete tuto pozvánku kdykoli smazat.",
|
||||
"invitationLink": "Odkaz na pozvánku",
|
||||
"details": {
|
||||
"id": "ID",
|
||||
"token": ""
|
||||
"token": "Token"
|
||||
},
|
||||
"button": {
|
||||
"close": ""
|
||||
"close": "Zkopírovat odkaz a zavřít"
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
"title": "Odstranit pozvánku",
|
||||
"description": "Jste si jisti, že chcete tuto pozvánku smazat? Uživatelé s tímto odkazem již nebudou moci pomocí tohoto odkazu vytvořit účet."
|
||||
}
|
||||
},
|
||||
"noInvites": "Zatím zde nejsou žádné pozvánky."
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Záložka",
|
||||
"name": "Záložky",
|
||||
"description": "Zobrazí statický seznam textů nebo odkazů",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení widgetu",
|
||||
"name": {
|
||||
"label": "",
|
||||
"info": ""
|
||||
"label": "Název widgetu",
|
||||
"info": "Ponechte prázdné, aby název zůstal skrytý."
|
||||
},
|
||||
"items": {
|
||||
"label": ""
|
||||
"label": "Položky"
|
||||
},
|
||||
"layout": {
|
||||
"label": "Rozložení",
|
||||
"data": {
|
||||
"autoGrid": "",
|
||||
"horizontal": "",
|
||||
"vertical": ""
|
||||
"autoGrid": "Automatická mřížka",
|
||||
"horizontal": "Horizontální",
|
||||
"vertical": "Vertikální"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"noneFound": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Seznam záložek je prázdný",
|
||||
"text": "Přidejte nové položky do tohoto seznamu v režimu úprav"
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"validation": {
|
||||
"length": "",
|
||||
"invalidLink": "",
|
||||
"errorMsg": ""
|
||||
"length": "Délka musí být mezi {{shortest}} a {{longest}}",
|
||||
"invalidLink": "Neplatný odkaz",
|
||||
"errorMsg": "Neuloženo, protože došlo k chybám. Prosím, zkontrolujte vyplněné informace"
|
||||
},
|
||||
"name": "",
|
||||
"url": "",
|
||||
"name": "Název",
|
||||
"url": "URL",
|
||||
"newTab": "Otevřít na nové kartě",
|
||||
"hideHostname": "",
|
||||
"hideIcon": "",
|
||||
"delete": ""
|
||||
"hideHostname": "Skrýt název hostitele",
|
||||
"hideIcon": "Skrýt ikonu",
|
||||
"delete": "Odstranit"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,29 +3,29 @@
|
||||
"name": "Kalendář",
|
||||
"description": "Zobrazí kalendář s nadcházejícími vydáními z podporovaných integrací.",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení pro widget kalendáře",
|
||||
"radarrReleaseType": {
|
||||
"label": "",
|
||||
"label": "Typ vydání filmu pro Radarr",
|
||||
"data": {
|
||||
"inCinemas": "",
|
||||
"physicalRelease": "",
|
||||
"digitalRelease": ""
|
||||
"inCinemas": "V Kinech",
|
||||
"physicalRelease": "Fyzické",
|
||||
"digitalRelease": "Digitální"
|
||||
}
|
||||
},
|
||||
"hideWeekDays": {
|
||||
"label": ""
|
||||
"label": "Skrýt názvy dnů"
|
||||
},
|
||||
"showUnmonitored": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat nemonitorované položky"
|
||||
},
|
||||
"fontSize": {
|
||||
"label": "",
|
||||
"label": "Velikost písma",
|
||||
"data": {
|
||||
"xs": "",
|
||||
"sm": "",
|
||||
"md": "",
|
||||
"lg": "",
|
||||
"xl": ""
|
||||
"xs": "Extra malé",
|
||||
"sm": "Malé",
|
||||
"md": "Střední",
|
||||
"lg": "Velké",
|
||||
"xl": "Extra velké"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"buttons": {
|
||||
"play": "",
|
||||
"request": ""
|
||||
"play": "Přehrát",
|
||||
"request": "Vyžádat"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"settings": {
|
||||
"label": ""
|
||||
"label": "Nastavení"
|
||||
},
|
||||
"errors": {
|
||||
"unmappedOptions": {
|
||||
|
||||
@@ -1,81 +1,81 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Dash.",
|
||||
"description": "Zobrazuje grafy z externího Dash. Instance uvnitř Homarru.",
|
||||
"description": "Zobrazuje grafy z externí Dash. Instance uvnitř Homarru.",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení pro Dash. widget",
|
||||
"dashName": {
|
||||
"label": ""
|
||||
"label": "Dash. jméno"
|
||||
},
|
||||
"url": {
|
||||
"label": ""
|
||||
"label": "Dash. URL"
|
||||
},
|
||||
"usePercentages": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat procenta"
|
||||
},
|
||||
"columns": {
|
||||
"label": ""
|
||||
"label": "Počet sloupců"
|
||||
},
|
||||
"graphHeight": {
|
||||
"label": ""
|
||||
"label": "Výška grafů"
|
||||
},
|
||||
"graphsOrder": {
|
||||
"label": "",
|
||||
"label": "Grafy (seřazené)",
|
||||
"storage": {
|
||||
"label": "",
|
||||
"label": "Úložiště",
|
||||
"enabled": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat ve widgetu"
|
||||
},
|
||||
"span": {
|
||||
"label": ""
|
||||
"label": "Rozpětí sloupce"
|
||||
},
|
||||
"compactView": {
|
||||
"label": ""
|
||||
"label": "Zobrazit jako text (kompaktní)"
|
||||
},
|
||||
"multiView": {
|
||||
"label": ""
|
||||
"label": "Zobrazit jako zobrazení pro více disků"
|
||||
}
|
||||
},
|
||||
"network": {
|
||||
"label": "",
|
||||
"label": "Síť",
|
||||
"enabled": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat ve widgetu"
|
||||
},
|
||||
"span": {
|
||||
"label": ""
|
||||
"label": "Rozpětí sloupce"
|
||||
},
|
||||
"compactView": {
|
||||
"label": ""
|
||||
"label": "Zobrazit jako text (kompaktní)"
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"label": "",
|
||||
"label": "Procesor",
|
||||
"enabled": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat ve widgetu"
|
||||
},
|
||||
"span": {
|
||||
"label": ""
|
||||
"label": "Rozpětí sloupce"
|
||||
},
|
||||
"multiView": {
|
||||
"label": ""
|
||||
"label": "Zobrazit jako zobrazení pro více jader procesoru"
|
||||
}
|
||||
},
|
||||
"ram": {
|
||||
"label": "",
|
||||
"label": "RAM",
|
||||
"enabled": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat ve widgetu"
|
||||
},
|
||||
"span": {
|
||||
"label": ""
|
||||
"label": "Rozpětí sloupce"
|
||||
}
|
||||
},
|
||||
"gpu": {
|
||||
"label": "",
|
||||
"label": "Grafická karta",
|
||||
"enabled": {
|
||||
"label": ""
|
||||
"label": "Zobrazovat ve widgetu"
|
||||
},
|
||||
"span": {
|
||||
"label": ""
|
||||
"label": "Rozpětí sloupce"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -84,34 +84,34 @@
|
||||
"card": {
|
||||
"title": "Dash.",
|
||||
"errors": {
|
||||
"noService": "",
|
||||
"noInformation": "",
|
||||
"noService": "Nebyla nalezena žádná služba Dash. Přidejte ji prosím na svou Homarr plochu nebo nastavte URL aplikace Dash. v možnostech modulu",
|
||||
"noInformation": "Nepodařilo se získat informace z dash. - používáte nejnovější verzi?",
|
||||
"protocolDowngrade": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Zjištěn downgrade protokolu",
|
||||
"text": "Připojení k vaší instanci Dash. používá protokol HTTP. To představuje bezpečnostní riziko, protože protokol HTTP není šifrovaný a útočníci by mohli toto připojení zneužít. Ujistěte se, že Dash. používá HTTPS, nebo snižte úroveň Homarr na HTTP (nedoporučujeme)."
|
||||
}
|
||||
},
|
||||
"graphs": {
|
||||
"storage": {
|
||||
"title": "",
|
||||
"label": ""
|
||||
"title": "Úložiště",
|
||||
"label": "Úložiště:"
|
||||
},
|
||||
"network": {
|
||||
"title": "",
|
||||
"label": "",
|
||||
"title": "Síť",
|
||||
"label": "Síť:",
|
||||
"metrics": {
|
||||
"download": "",
|
||||
"upload": ""
|
||||
"download": "Stahování",
|
||||
"upload": "Nahrávání"
|
||||
}
|
||||
},
|
||||
"cpu": {
|
||||
"title": ""
|
||||
"title": "Procesor"
|
||||
},
|
||||
"ram": {
|
||||
"title": ""
|
||||
"title": "RAM"
|
||||
},
|
||||
"gpu": {
|
||||
"title": ""
|
||||
"title": "Grafická karta"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,30 +3,30 @@
|
||||
"name": "Datum a čas",
|
||||
"description": "Zobrazuje aktuální datum a čas.",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení widgetu Datum a čas",
|
||||
"timezone": {
|
||||
"label": "",
|
||||
"info": ""
|
||||
"label": "Časové pásmo",
|
||||
"info": "Vyberte název svého časového pásma, najdete jej zde: "
|
||||
},
|
||||
"customTitle": {
|
||||
"label": ""
|
||||
"label": "Název města nebo vlastní název"
|
||||
},
|
||||
"display24HourFormat": {
|
||||
"label": ""
|
||||
"label": "Zobrazit ve 24hodinovém formátu"
|
||||
},
|
||||
"dateFormat": {
|
||||
"label": "",
|
||||
"label": "Formátování data",
|
||||
"data": {
|
||||
"hide": ""
|
||||
"hide": "Skrýt datum"
|
||||
}
|
||||
},
|
||||
"titleState": {
|
||||
"label": "",
|
||||
"info": "",
|
||||
"label": "Popis hodin",
|
||||
"info": "Na widgetu lze zobrazit vlastní název a kód časové zóny.<br/>Můžete také zobrazit pouze město, nezobrazit nic,<br/>nebo dokonce zobrazit pouze časové pásmo, pokud je jsou obě informace zadány, ale není zadán vlastní název.",
|
||||
"data": {
|
||||
"both": "",
|
||||
"city": "",
|
||||
"none": ""
|
||||
"both": "Název a časové pásmo",
|
||||
"city": "Pouze název",
|
||||
"none": "Žádný"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,29 +6,29 @@
|
||||
"card": {
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "",
|
||||
"size": "",
|
||||
"download": "",
|
||||
"upload": "",
|
||||
"estimatedTimeOfArrival": "",
|
||||
"progress": ""
|
||||
"name": "Název",
|
||||
"size": "Velikost",
|
||||
"download": "Stahování",
|
||||
"upload": "Nahrávání",
|
||||
"estimatedTimeOfArrival": "Odhadovaný čas",
|
||||
"progress": "Postup"
|
||||
},
|
||||
"body": {
|
||||
"nothingFound": ""
|
||||
"nothingFound": "Nebyly nalezeny žádné torrenty"
|
||||
}
|
||||
},
|
||||
"lineChart": {
|
||||
"title": "Aktuální rychlost stahování",
|
||||
"download": "",
|
||||
"upload": "",
|
||||
"timeSpan": "",
|
||||
"totalDownload": "",
|
||||
"totalUpload": ""
|
||||
"download": "Stahování: {{download}}",
|
||||
"upload": "Nahrávání: {{upload}}",
|
||||
"timeSpan": "před {{seconds}} sekundami",
|
||||
"totalDownload": "Stahování: {{download}}/s",
|
||||
"totalUpload": "Nahrávání: {{upload}}/s"
|
||||
},
|
||||
"errors": {
|
||||
"noDownloadClients": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Nebyl nalezen žádný podporovaný klient pro stahování!",
|
||||
"text": "Chcete-li zobrazit aktuální stahování, přidejte službu stahování"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,16 +3,23 @@
|
||||
"name": "Ovládání DNS hole",
|
||||
"description": "Ovládejte PiHole nebo AdGuard z plochy",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení DNS hole",
|
||||
"showToggleAllButtons": {
|
||||
"label": ""
|
||||
"label": "Zobrazit tlačítka \"Povolit/Zakázat vše\""
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"general": {
|
||||
"title": "",
|
||||
"text": ""
|
||||
"title": "Nepodařilo se najít DNS hole",
|
||||
"text": "Došlo k problému s připojením k Vaší DNS Hole. Ověřte prosím svou konfiguraci."
|
||||
}
|
||||
}
|
||||
},
|
||||
"durationModal": {
|
||||
"title": "Nastavit dobu trvání deaktivace",
|
||||
"hours": "Hodin",
|
||||
"minutes": "Minut",
|
||||
"unlimited": "ponechte prázdne pro neomezenou dobu",
|
||||
"set": "Nastavit"
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "Shrnutí DNS hole",
|
||||
"name": "Souhrn DNS hole",
|
||||
"description": "Zobrazuje důležitá data ze služby PiHole nebo AdGuard",
|
||||
"settings": {
|
||||
"title": "",
|
||||
"title": "Nastavení pro souhrn DNS Hole",
|
||||
"usePiHoleColors": {
|
||||
"label": ""
|
||||
"label": "Používat barvy z PiHole"
|
||||
},
|
||||
"layout": {
|
||||
"label": "Rozložení",
|
||||
"data": {
|
||||
"grid": "",
|
||||
"row": "",
|
||||
"column": ""
|
||||
"grid": "2x2",
|
||||
"row": "Horizontální",
|
||||
"column": "Vertikální"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"metrics": {
|
||||
"domainsOnAdlist": "",
|
||||
"queriesToday": "",
|
||||
"queriesBlockedTodayPercentage": "",
|
||||
"queriesBlockedToday": ""
|
||||
"domainsOnAdlist": "Domény na adlistech",
|
||||
"queriesToday": "Dotazů dnes",
|
||||
"queriesBlockedTodayPercentage": "Zablokováno dnes",
|
||||
"queriesBlockedToday": "Zablokováno dnes"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,83 +1,83 @@
|
||||
{
|
||||
"descriptor": {
|
||||
"name": "",
|
||||
"description": ""
|
||||
"name": "Docker",
|
||||
"description": "Umožňuje snadno zobrazit a spravovat všechny Docker kontejnery."
|
||||
},
|
||||
"search": {
|
||||
"placeholder": ""
|
||||
"placeholder": "Vyhledávejte podle kontejneru nebo názvu snímku"
|
||||
},
|
||||
"table": {
|
||||
"header": {
|
||||
"name": "",
|
||||
"image": "",
|
||||
"ports": "",
|
||||
"state": ""
|
||||
"name": "Název",
|
||||
"image": "Obraz",
|
||||
"ports": "Porty",
|
||||
"state": "Status"
|
||||
},
|
||||
"body": {
|
||||
"portCollapse": ""
|
||||
"portCollapse": "+ dalších {{ports}}"
|
||||
},
|
||||
"states": {
|
||||
"running": "",
|
||||
"created": "",
|
||||
"stopped": "",
|
||||
"unknown": ""
|
||||
"running": "Běží",
|
||||
"created": "Vytvořený",
|
||||
"stopped": "Zastavený",
|
||||
"unknown": "Neznámý"
|
||||
}
|
||||
},
|
||||
"actionBar": {
|
||||
"addService": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "Přidat aplikaci",
|
||||
"message": "Přidat aplikaci do Homarra"
|
||||
},
|
||||
"restart": {
|
||||
"title": ""
|
||||
"title": "Restartovat"
|
||||
},
|
||||
"stop": {
|
||||
"title": ""
|
||||
"title": "Zastavit"
|
||||
},
|
||||
"start": {
|
||||
"title": ""
|
||||
"title": "Spustit"
|
||||
},
|
||||
"refreshData": {
|
||||
"title": ""
|
||||
"title": "Aktualizovat data"
|
||||
},
|
||||
"remove": {
|
||||
"title": ""
|
||||
"title": "Odstranit"
|
||||
},
|
||||
"addToHomarr": {
|
||||
"title": ""
|
||||
"title": "Přidat do Homarra"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"start": {
|
||||
"start": "",
|
||||
"end": ""
|
||||
"start": "Startuje",
|
||||
"end": "Zastaven"
|
||||
},
|
||||
"stop": {
|
||||
"start": "",
|
||||
"end": ""
|
||||
"start": "Zastavování",
|
||||
"end": "Zastavený"
|
||||
},
|
||||
"restart": {
|
||||
"start": "",
|
||||
"end": ""
|
||||
"start": "Restartování",
|
||||
"end": "Restartován"
|
||||
},
|
||||
"remove": {
|
||||
"start": "",
|
||||
"end": ""
|
||||
"start": "Odstraňování",
|
||||
"end": "Odstraněn"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"integrationFailed": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "Integrace Dockeru selhala",
|
||||
"message": "Zapomněli jste připojit Docker socket?"
|
||||
},
|
||||
"unknownError": {
|
||||
"title": ""
|
||||
"title": "Došlo k chybě"
|
||||
},
|
||||
"oneServiceAtATime": {
|
||||
"title": ""
|
||||
"title": "Přidávejte, prosím, vždy jen jednu aplikaci nebo službu!"
|
||||
}
|
||||
},
|
||||
"actionIcon": {
|
||||
"tooltip": ""
|
||||
"tooltip": "Docker"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user