Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5fb4d611a | ||
|
|
bc9dc9704c | ||
|
|
e88eb1a884 | ||
|
|
d8f3206e8b | ||
|
|
729d306157 | ||
|
|
c35df48754 | ||
|
|
0f97f37a79 | ||
|
|
b08219dacf | ||
|
|
dd10fb97c0 | ||
|
|
87354df2de | ||
|
|
1bd04498b9 | ||
|
|
52394bc99b | ||
|
|
add85e9747 | ||
|
|
e82986adff | ||
|
|
f201267e4e | ||
|
|
9db41f8830 | ||
|
|
ba64c59632 | ||
|
|
d2626d8337 | ||
|
|
ded1090190 | ||
|
|
1114baaaa0 | ||
|
|
cf13c1c671 | ||
|
|
e70de6a59e | ||
|
|
5110eaf10f | ||
|
|
0234682720 | ||
|
|
80a7322fa1 | ||
|
|
59bdc0ce0d | ||
|
|
a288d0925b | ||
|
|
e7d2f0d82b | ||
|
|
825d8269ff | ||
|
|
f7775d173a | ||
|
|
58bced5f09 | ||
|
|
6e08507dde | ||
|
|
617a03fc15 | ||
|
|
f86bda304d | ||
|
|
1d414e659b | ||
|
|
87f7390eca | ||
|
|
ed01752546 | ||
|
|
46002a2171 | ||
|
|
14716d36a6 | ||
|
|
b4bc8a31aa | ||
|
|
b01fc316c3 | ||
|
|
4479249ac7 | ||
|
|
0529837ac8 | ||
|
|
d51ffa17ed | ||
|
|
c434a44bc4 | ||
|
|
7b5ac23a4b | ||
|
|
87ef769086 | ||
|
|
bcefb8e43c | ||
|
|
a1641c5bcc | ||
|
|
e6839480d9 | ||
|
|
4e64d9efad | ||
|
|
d68f4514cc | ||
|
|
8a69c09939 | ||
|
|
e87af81db4 | ||
|
|
6043c59da8 | ||
|
|
4cb7b97416 | ||
|
|
b1db450e00 | ||
|
|
2e8ac98924 | ||
|
|
529a628368 | ||
|
|
8a2e821c8f | ||
|
|
3cd11d6bc4 | ||
|
|
db092d2440 | ||
|
|
a4a7c91fc1 | ||
|
|
543fd44cb2 | ||
|
|
eab262c3f7 | ||
|
|
52bde8ea6d | ||
|
|
03de73560c | ||
|
|
bcb7de1b9a | ||
|
|
ca94bd32f2 | ||
|
|
cd10727795 | ||
|
|
8262a9a45b | ||
|
|
b433437636 | ||
|
|
02825ed109 | ||
|
|
a97e6149bb | ||
|
|
946b1e7f54 | ||
|
|
b5ed7cd555 | ||
|
|
233349fb2a | ||
|
|
c54e6ff0ea | ||
|
|
98c4102f72 | ||
|
|
640ee7a88e | ||
|
|
8a85246a0b | ||
|
|
655bfc95ca | ||
|
|
37a066e6bd | ||
|
|
9e959a6b7b | ||
|
|
2b6560b9e1 | ||
|
|
d8836d53bf | ||
|
|
aa15876aa2 | ||
|
|
7ca960b521 |
3
.gitignore
vendored
@@ -13,4 +13,5 @@ beszel/cmd/agent/agent
|
||||
node_modules
|
||||
beszel/build
|
||||
*timestamp*
|
||||
.swc
|
||||
.swc
|
||||
beszel/site/src/locales/**/*.ts
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you find a vulnerability in the latest version, please email me directly at hank@henrygd.me, or [submit a private advisory](https://github.com/henrygd/beszel/security/advisories/new).
|
||||
If you find a vulnerability in the latest version, please [submit a private advisory](https://github.com/henrygd/beszel/security/advisories/new).
|
||||
|
||||
If you submit an advisory, open an empty issue as well to let me know that you did (or email me), as I'm not sure if I get notifications for that.
|
||||
|
||||
If the issue is low severity (use best judgement) you may open an issue for it instead of contacting me directly.
|
||||
If it's low severity (use best judgement) you may open an issue instead of an advisory.
|
||||
|
||||
@@ -4,9 +4,16 @@ ARCH ?= $(shell go env GOARCH)
|
||||
# Skip building the web UI if true
|
||||
SKIP_WEB ?= false
|
||||
|
||||
.PHONY: tidy build-agent build-hub build clean lint
|
||||
.PHONY: tidy build-agent build-hub build clean lint dev-server dev-agent dev-hub dev generate-locales
|
||||
.DEFAULT_GOAL := build
|
||||
|
||||
clean:
|
||||
go clean
|
||||
rm -rf ./build
|
||||
|
||||
lint:
|
||||
golangci-lint run
|
||||
|
||||
tidy:
|
||||
go mod tidy
|
||||
|
||||
@@ -27,9 +34,34 @@ build-hub: tidy $(if $(filter false,$(SKIP_WEB)),build-web-ui)
|
||||
|
||||
build: build-agent build-hub
|
||||
|
||||
clean:
|
||||
go clean
|
||||
rm -rf ./build
|
||||
generate-locales:
|
||||
@if [ ! -f ./site/src/locales/en/en.ts ]; then \
|
||||
echo "Generating locales..."; \
|
||||
command -v bun >/dev/null 2>&1 && cd ./site && bun install && bun run sync || cd ./site && npm install && npm run sync; \
|
||||
fi
|
||||
|
||||
lint:
|
||||
golangci-lint run
|
||||
dev-server: generate-locales
|
||||
cd ./site
|
||||
@if command -v bun >/dev/null 2>&1; then \
|
||||
cd ./site && bun run dev; \
|
||||
else \
|
||||
cd ./site && npm run dev; \
|
||||
fi
|
||||
|
||||
dev-hub:
|
||||
mkdir -p ./site/dist && touch ./site/dist/index.html
|
||||
@if command -v entr >/dev/null 2>&1; then \
|
||||
find ./cmd/hub/*.go ./internal/{alerts,hub,records,users}/*.go | entr -r -s "cd ./cmd/hub && go run . serve"; \
|
||||
else \
|
||||
cd ./cmd/hub && go run . serve; \
|
||||
fi
|
||||
|
||||
dev-agent:
|
||||
@if command -v entr >/dev/null 2>&1; then \
|
||||
find ./cmd/agent/*.go ./internal/agent/*.go | entr -r go run beszel/cmd/agent; \
|
||||
else \
|
||||
go run beszel/cmd/agent; \
|
||||
fi
|
||||
|
||||
# KEY="..." make -j dev
|
||||
dev: dev-server dev-hub dev-agent
|
||||
|
||||
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"beszel"
|
||||
"beszel/internal/hub"
|
||||
|
||||
_ "beszel/migrations"
|
||||
|
||||
"github.com/pocketbase/pocketbase"
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
module beszel
|
||||
|
||||
go 1.22.4
|
||||
go 1.23
|
||||
|
||||
toolchain go1.23.2
|
||||
|
||||
require (
|
||||
github.com/blang/semver v3.5.1+incompatible
|
||||
github.com/containrrr/shoutrrr v0.8.0
|
||||
github.com/gliderlabs/ssh v0.3.7
|
||||
github.com/goccy/go-json v0.10.3
|
||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61
|
||||
github.com/pocketbase/dbx v1.10.1
|
||||
github.com/pocketbase/pocketbase v0.22.23
|
||||
github.com/gliderlabs/ssh v0.3.8
|
||||
github.com/goccy/go-json v0.10.4
|
||||
github.com/pocketbase/dbx v1.11.0
|
||||
github.com/pocketbase/pocketbase v0.23.9
|
||||
github.com/rhysd/go-github-selfupdate v1.2.3
|
||||
github.com/shirou/gopsutil/v4 v4.24.10
|
||||
github.com/shirou/gopsutil/v4 v4.24.11
|
||||
github.com/spf13/cast v1.7.0
|
||||
github.com/spf13/cobra v1.8.1
|
||||
golang.org/x/crypto v0.28.0
|
||||
golang.org/x/crypto v0.31.0
|
||||
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
@@ -22,41 +24,41 @@ require (
|
||||
github.com/AlecAivazis/survey/v2 v2.3.7 // indirect
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.42 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.18 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.35 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.47 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.32.3 // indirect
|
||||
github.com/aws/smithy-go v1.22.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 // indirect
|
||||
github.com/aws/smithy-go v1.22.1 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/disintegration/imaging v1.6.2 // indirect
|
||||
github.com/domodwyer/mailyak/v3 v3.6.2 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/ebitengine/purego v0.8.1 // indirect
|
||||
github.com/fatih/color v1.18.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.6 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.7 // indirect
|
||||
github.com/ganigeorgiev/fexpr v0.4.1 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
|
||||
github.com/google/go-github/v30 v30.1.0 // indirect
|
||||
github.com/google/go-querystring v1.1.0 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.13.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.14.0 // indirect
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
@@ -64,7 +66,6 @@ require (
|
||||
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.24 // indirect
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
|
||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
@@ -75,30 +76,26 @@ require (
|
||||
github.com/tklauser/go-sysconf v0.3.14 // indirect
|
||||
github.com/tklauser/numcpus v0.9.0 // indirect
|
||||
github.com/ulikunitz/xz v0.5.12 // indirect
|
||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
gocloud.dev v0.40.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect
|
||||
golang.org/x/image v0.21.0 // indirect
|
||||
golang.org/x/net v0.30.0 // indirect
|
||||
golang.org/x/oauth2 v0.23.0 // indirect
|
||||
golang.org/x/sync v0.8.0 // indirect
|
||||
golang.org/x/sys v0.26.0 // indirect
|
||||
golang.org/x/term v0.25.0 // indirect
|
||||
golang.org/x/text v0.19.0 // indirect
|
||||
golang.org/x/time v0.7.0 // indirect
|
||||
golang.org/x/image v0.23.0 // indirect
|
||||
golang.org/x/net v0.32.0 // indirect
|
||||
golang.org/x/oauth2 v0.24.0 // indirect
|
||||
golang.org/x/sync v0.10.0 // indirect
|
||||
golang.org/x/sys v0.28.0 // indirect
|
||||
golang.org/x/term v0.27.0 // indirect
|
||||
golang.org/x/text v0.21.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
|
||||
google.golang.org/api v0.204.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect
|
||||
google.golang.org/grpc v1.67.1 // indirect
|
||||
google.golang.org/protobuf v1.35.1 // indirect
|
||||
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 // indirect
|
||||
modernc.org/libc v1.61.0 // indirect
|
||||
google.golang.org/api v0.212.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484 // indirect
|
||||
google.golang.org/grpc v1.69.0 // indirect
|
||||
google.golang.org/protobuf v1.36.0 // indirect
|
||||
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 // indirect
|
||||
modernc.org/libc v1.61.4 // indirect
|
||||
modernc.org/mathutil v1.6.0 // indirect
|
||||
modernc.org/memory v1.8.0 // indirect
|
||||
modernc.org/sqlite v1.33.1 // indirect
|
||||
modernc.org/sqlite v1.34.2 // indirect
|
||||
modernc.org/strutil v1.2.0 // indirect
|
||||
modernc.org/token v1.1.0 // indirect
|
||||
)
|
||||
|
||||
244
beszel/go.sum
@@ -1,13 +1,13 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE=
|
||||
cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U=
|
||||
cloud.google.com/go/auth v0.10.0 h1:tWlkvFAh+wwTOzXIjrwM64karR1iTBZ/GRr0S/DULYo=
|
||||
cloud.google.com/go/auth v0.10.0/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
|
||||
cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14=
|
||||
cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU=
|
||||
cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs=
|
||||
cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
|
||||
cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0=
|
||||
cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo=
|
||||
cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
|
||||
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
|
||||
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
|
||||
cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4=
|
||||
cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus=
|
||||
cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs=
|
||||
@@ -26,44 +26,44 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d
|
||||
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
|
||||
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.3 h1:T0dRlFBKcdaUPGNtkBSwHZxrtis8CQU17UpNBZYd0wk=
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.3/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6 h1:pT3hpW0cOHRJx8Y0DfJUEQuqPild8jRGmSFmBgvydr0=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.6/go.mod h1:j/I2++U0xX+cr44QjHay4Cvxj6FUbnxrgmqN3H1jTZA=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.1 h1:oxIvOUXy8x0U3fR//0eq+RdCKimWI900+SV+10xsCBw=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.1/go.mod h1:bRQcttQJiARbd5JZxw6wG0yIK3eLeSCPdg6uqmmlIiI=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.42 h1:sBP0RPjBU4neGpIYyx8mkU2QqLPl5u9cmdTWVzIpHkM=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.42/go.mod h1:FwZBfU530dJ26rv9saAbxa9Ej3eF/AK0OAY86k13n4M=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.18 h1:68jFVtt3NulEzojFesM/WVarlFpCaXLKaBxDpzkQ9OQ=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.18/go.mod h1:Fjnn5jQVIo6VyedMc0/EhPpfNlPl7dHV916O6B+49aE=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.35 h1:ihPPdcCVSN0IvBByXwqVp28/l4VosBZ6sDulcvU2J7w=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.35/go.mod h1:JkgEhs3SVF51Dj3m1Bj+yL8IznpxzkwlA3jLg3x7Kls=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.22 h1:Jw50LwEkVjuVzE1NzkhNKkBf9cRN7MtE1F/b2cOKTUM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.22/go.mod h1:Y/SmAyPcOTmpeVaWSzSKiILfXTVJwrGmYZhcRbhWuEY=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.22 h1:981MHwBaRZM7+9QSR6XamDzF/o7ouUGxFzr+nVSIhrs=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.22/go.mod h1:1RA1+aBEfn+CAB/Mh0MB6LsdCYCnjZm7tKXtnk499ZQ=
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4=
|
||||
github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43 h1:iLdpkYZ4cXIQMO7ud+cqMWR1xK5ESbt1rvN77tRi1BY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.43/go.mod h1:OgbsKPAswXDd5kxnR4vZov69p3oYjbvUyIRBAAV0y9o=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22 h1:yV+hCAHZZYJQcwAaszoBNwLbPItHvApxT0kVIw6jRgs=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.22/go.mod h1:kbR1TL8llqB1eGnVbybcA4/wgScxdylOdyAd51yxPdw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3 h1:kT6BcZsmMtNkP/iYMcRG+mIEA/IbeiUimXtGmqF39y0=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.3/go.mod h1:Z8uGua2k4PPaGOYn66pK02rhMrot3Xk3tpBuUFPomZU=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3 h1:qcxX0JYlgWH3hpPUnd6U0ikcl6LLA9sLkXE2w1fpMvY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.3/go.mod h1:cLSNEmI45soc+Ef8K/L+8sEA3A3pYFEYf5B5UI+6bH4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.3 h1:ZC7Y/XgKUxwqcdhO5LE8P6oGP1eh6xlQReWNKfhvJno=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.3/go.mod h1:WqfO7M9l9yUAw0HcHaikwRd/H6gzYdz7vjejCA5e2oY=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2 h1:p9TNFL8bFUMd+38YIpTAXpoxyz0MxC7FlbFEH4P4E1U=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.66.2/go.mod h1:fNjyo0Coen9QTwQLWeV6WO2Nytwiu+cCcWaTdKCAqqE=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.3 h1:UTpsIf0loCIWEbrqdLb+0RxnTXfWh2vhw4nQmFi4nPc=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.3/go.mod h1:FZ9j3PFHHAR+w0BSEjK955w5YD2UwB/l/H0yAK3MJvI=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.3 h1:2YCmIXv3tmiItw0LlYf6v7gEHebLY45kBEnPezbUKyU=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.3/go.mod h1:u19stRyNPxGhj6dRm+Cdgu6N75qnbW7+QN0q0dsAk58=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.32.3 h1:wVnQ6tigGsRqSWDEEyH6lSAJ9OyFUsSnbaUWChuSGzs=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.32.3/go.mod h1:VZa9yTFyj4o10YGsmDO4gbQJUvvhY72fhumT8W4LqsE=
|
||||
github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM=
|
||||
github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25 h1:r67ps7oHCYnflpgDy2LZU0MAQtQbYIOqNNnqGO6xQkE=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.25/go.mod h1:GrGY+Q4fIokYLtjCVB/aFfCVL6hhGUFl8inD18fDalE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6 h1:HCpPsWqmYQieU7SS6E9HXfdAMSud0pteVXieJmcpIRI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.6/go.mod h1:ngUiVRCco++u+soRRVBIvBZxSMMvOVMXA4PJ36JLfSw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6 h1:BbGDtTi0T1DYlmjBiCr/le3wzhA37O8QTC5/Ab8+EXk=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.6/go.mod h1:hLMJt7Q8ePgViKupeymbqI0la+t9/iYFBjxQCFwuAwI=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0 h1:nyuzXooUNJexRT0Oy0UQY6AhOzxPxhtt4DcBIHyCnmw=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.71.0/go.mod h1:sT/iQz8JK3u/5gZkT+Hmr7GzVZehUMkRZpOaAwYXeGY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8=
|
||||
github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
|
||||
github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
|
||||
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
@@ -97,12 +97,12 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw
|
||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc=
|
||||
github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc=
|
||||
github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA=
|
||||
github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU=
|
||||
github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k=
|
||||
github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE=
|
||||
github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE=
|
||||
github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8=
|
||||
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
|
||||
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
@@ -117,14 +117,14 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=
|
||||
github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
|
||||
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
@@ -152,8 +152,8 @@ github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQF
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
|
||||
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
|
||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
|
||||
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k=
|
||||
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo=
|
||||
github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
|
||||
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
@@ -163,8 +163,8 @@ github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI=
|
||||
github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA=
|
||||
github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
|
||||
github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
|
||||
github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o=
|
||||
github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
|
||||
@@ -187,8 +187,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 h1:FwuzbVh87iLiUQj1+uQUsuw9x5t9m5n5g7rG7o4svW4=
|
||||
github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61/go.mod h1:paQfF1YtHe+GrGg5fOgjsjoCX/UKDr9bc1DoWpZfns8=
|
||||
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0=
|
||||
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
|
||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||
@@ -198,8 +196,6 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
|
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
|
||||
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
|
||||
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||
@@ -215,10 +211,10 @@ github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+q
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pocketbase/dbx v1.10.1 h1:cw+vsyfCJD8YObOVeqb93YErnlxwYMkNZ4rwN0G0AaA=
|
||||
github.com/pocketbase/dbx v1.10.1/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
|
||||
github.com/pocketbase/pocketbase v0.22.23 h1:cnjSiBcMf7VIhXmoBmZCAV8qKYkOubHCOQQPZMKFBAk=
|
||||
github.com/pocketbase/pocketbase v0.22.23/go.mod h1:h2ojT2pqBWH9LLl1aiawkwXiICKtzZA/kjM/8VhydR4=
|
||||
github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU=
|
||||
github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
|
||||
github.com/pocketbase/pocketbase v0.23.9 h1:0P3BaMTUO8QzyamYqd/OpPM4L7zmu6HrmDGFQmX+eu4=
|
||||
github.com/pocketbase/pocketbase v0.23.9/go.mod h1:8qIx1v60b+YES3e8H4J2QQF48J0uiydPhRi4ZHlKNjk=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
@@ -229,8 +225,8 @@ github.com/rhysd/go-github-selfupdate v1.2.3/go.mod h1:mp/N8zj6jFfBQy/XMYoWsmfzx
|
||||
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
||||
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM=
|
||||
github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
|
||||
github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
|
||||
github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
|
||||
github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
|
||||
github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
@@ -256,10 +252,6 @@ github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS
|
||||
github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
|
||||
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
|
||||
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
@@ -269,32 +261,36 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
|
||||
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
|
||||
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
|
||||
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
|
||||
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
|
||||
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
|
||||
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
|
||||
go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
|
||||
go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
|
||||
go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
|
||||
go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
|
||||
go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
|
||||
go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
|
||||
go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
|
||||
gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng=
|
||||
gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
|
||||
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
|
||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY=
|
||||
golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8=
|
||||
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo=
|
||||
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.21.0 h1:c5qV36ajHpdj4Qi0GnE0jUc/yuo33OLFaa0d+crTD5s=
|
||||
golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78=
|
||||
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
||||
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
|
||||
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
@@ -306,18 +302,18 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
|
||||
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
||||
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
|
||||
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
||||
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
|
||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -334,23 +330,23 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
|
||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
|
||||
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
|
||||
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
|
||||
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
|
||||
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
|
||||
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
|
||||
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
@@ -358,14 +354,14 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
|
||||
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
|
||||
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
|
||||
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
||||
google.golang.org/api v0.204.0 h1:3PjmQQEDkR/ENVZZwIYB4W/KzYtN8OrqnNcHWpeR8E4=
|
||||
google.golang.org/api v0.204.0/go.mod h1:69y8QSoKIbL9F94bWgWAq6wGqGwyjBgi2y8rAK8zLag=
|
||||
google.golang.org/api v0.212.0 h1:BcRj3MJfHF3FYD29rk7u9kuu1SyfGqfHcA0hSwKqkHg=
|
||||
google.golang.org/api v0.212.0/go.mod h1:gICpLlpp12/E8mycRMzgy3SQ9cFh2XnVJ6vJi/kQbvI=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
@@ -373,19 +369,19 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38 h1:Q3nlH8iSQSRUwOskjbcSMcF2jiYMNiQYZ0c2KEJLKKU=
|
||||
google.golang.org/genproto v0.0.0-20241021214115-324edc3d5d38/go.mod h1:xBI+tzfqGGN2JBeSebfKXFSdBpWVQ7sLW40PTupVRm4=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
|
||||
google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 h1:CT2Thj5AuPV9phrYMtzX11k+XkzMGfRAet42PmoTATM=
|
||||
google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988/go.mod h1:7uvplUBj4RjHAxIZ//98LzOvrQ04JBkaixRmCMI29hc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484 h1:Z7FRVJPSMaHQxD0uXU8WdgFh8PseLM8Q8NzhnpMrBhQ=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241216192217-9240e9c98484/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
|
||||
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
|
||||
google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI=
|
||||
google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
@@ -395,8 +391,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
||||
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
|
||||
google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
@@ -409,18 +405,18 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ=
|
||||
modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
|
||||
modernc.org/ccgo/v4 v4.21.0 h1:kKPI3dF7RIag8YcToh5ZwDcVMIv6VGa0ED5cvh0LMW4=
|
||||
modernc.org/ccgo/v4 v4.21.0/go.mod h1:h6kt6H/A2+ew/3MW/p6KEoQmrq/i3pr0J/SiwiaF/g0=
|
||||
modernc.org/cc/v4 v4.23.1 h1:WqJoPL3x4cUufQVHkXpXX7ThFJ1C4ik80i2eXEXbhD8=
|
||||
modernc.org/cc/v4 v4.23.1/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
|
||||
modernc.org/ccgo/v4 v4.23.1 h1:N49a7JiWGWV7lkPE4yYcvjkBGZQi93/JabRYjdWmJXc=
|
||||
modernc.org/ccgo/v4 v4.23.1/go.mod h1:JoIUegEIfutvoWV/BBfDFpPpfR2nc3U0jKucGcbmwDU=
|
||||
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
|
||||
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
|
||||
modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M=
|
||||
modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
|
||||
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852 h1:IYXPPTTjjoSHvUClZIYexDiO7g+4x+XveKT4gCIAwiY=
|
||||
modernc.org/gc/v3 v3.0.0-20241004144649-1aea3fae8852/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
||||
modernc.org/libc v1.61.0 h1:eGFcvWpqlnoGwzZeZe3PWJkkKbM/3SUGyk1DVZQ0TpE=
|
||||
modernc.org/libc v1.61.0/go.mod h1:DvxVX89wtGTu+r72MLGhygpfi3aUGgZRdAYGCAVVud0=
|
||||
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 h1:ovz6yUKX71igz2yvk4NpiCL5fvdjZAI+DhuDEGx1xyU=
|
||||
modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
|
||||
modernc.org/libc v1.61.4 h1:wVyqEx6tlltte9lPTjq0kDAdtdM9c4JH8rU6M1ZVawA=
|
||||
modernc.org/libc v1.61.4/go.mod h1:VfXVuM/Shh5XsMNrh3C6OkfL78G3loa4ZC/Ljv9k7xc=
|
||||
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
|
||||
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
|
||||
modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E=
|
||||
@@ -429,8 +425,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
|
||||
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||
modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
|
||||
modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
|
||||
modernc.org/sqlite v1.33.1 h1:trb6Z3YYoeM9eDL1O8do81kP+0ejv+YzgyFo+Gwy0nM=
|
||||
modernc.org/sqlite v1.33.1/go.mod h1:pXV2xHxhzXZsgT/RtTFAPY6JJDEvOTcTdwADQCCWD4k=
|
||||
modernc.org/sqlite v1.34.2 h1:J9n76TPsfYYkFkZ9Uy1QphILYifiVEwwOT7yP5b++2Y=
|
||||
modernc.org/sqlite v1.34.2/go.mod h1:dnR723UrTtjKpoHCAMN0Q/gZ9MT4r+iRvIBb9umWFkU=
|
||||
modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
|
||||
modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
|
||||
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
|
||||
|
||||
@@ -24,6 +24,7 @@ type Agent struct {
|
||||
sensorsContext context.Context // Sensors context to override sys location
|
||||
sensorsWhitelist map[string]struct{} // List of sensors to monitor
|
||||
systemInfo system.Info // Host system info
|
||||
gpuManager *GPUManager // Manages GPU data
|
||||
}
|
||||
|
||||
func NewAgent() *Agent {
|
||||
@@ -72,7 +73,14 @@ func (a *Agent) Run(pubKey []byte, addr string) {
|
||||
a.initializeSystemInfo()
|
||||
a.initializeDiskInfo()
|
||||
a.initializeNetIoStats()
|
||||
a.dockerManager = newDockerManager()
|
||||
a.dockerManager = newDockerManager(a)
|
||||
|
||||
// initialize GPU manager
|
||||
if gm, err := NewGPUManager(); err != nil {
|
||||
slog.Debug("GPU", "err", err)
|
||||
} else {
|
||||
a.gpuManager = gm
|
||||
}
|
||||
|
||||
// if debugging, print stats
|
||||
if a.debug {
|
||||
|
||||
@@ -38,14 +38,26 @@ func (a *Agent) initializeDiskInfo() {
|
||||
// Helper function to add a filesystem to fsStats if it doesn't exist
|
||||
addFsStat := func(device, mountpoint string, root bool) {
|
||||
key := filepath.Base(device)
|
||||
var ioMatch bool
|
||||
if _, exists := a.fsStats[key]; !exists {
|
||||
if root {
|
||||
slog.Info("Detected root device", "name", key)
|
||||
// check if root device is in /proc/diskstats, use fallback if not
|
||||
if _, exists := diskIoCounters[key]; !exists {
|
||||
slog.Warn("Device not found in diskstats", "name", key)
|
||||
key = findFallbackIoDevice(filesystem, diskIoCounters, a.fsStats)
|
||||
slog.Info("Using I/O fallback", "name", key)
|
||||
// Check if root device is in /proc/diskstats, use fallback if not
|
||||
if _, ioMatch = diskIoCounters[key]; !ioMatch {
|
||||
key, ioMatch = findIoDevice(filesystem, diskIoCounters, a.fsStats)
|
||||
if !ioMatch {
|
||||
slog.Info("Using I/O fallback", "device", device, "mountpoint", mountpoint, "fallback", key)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check if non-root has diskstats and fall back to folder name if not
|
||||
// Scenario: device is encrypted and named luks-2bcb02be-999d-4417-8d18-5c61e660fb6e - not in /proc/diskstats.
|
||||
// However, the device can be specified by mounting folder from luks device at /extra-filesystems/sda1
|
||||
if _, ioMatch = diskIoCounters[key]; !ioMatch {
|
||||
efBase := filepath.Base(mountpoint)
|
||||
if _, ioMatch = diskIoCounters[efBase]; ioMatch {
|
||||
key = efBase
|
||||
}
|
||||
}
|
||||
}
|
||||
a.fsStats[key] = &system.FsStats{Root: root, Mountpoint: mountpoint}
|
||||
@@ -92,9 +104,12 @@ func (a *Agent) initializeDiskInfo() {
|
||||
for _, p := range partitions {
|
||||
// fmt.Println(p.Device, p.Mountpoint)
|
||||
// Binary root fallback or docker root fallback
|
||||
if !hasRoot && (p.Mountpoint == "/" || (p.Mountpoint == "/etc/hosts" && strings.HasPrefix(p.Device, "/dev") && !strings.Contains(p.Device, "mapper"))) {
|
||||
addFsStat(p.Device, "/", true)
|
||||
hasRoot = true
|
||||
if !hasRoot && (p.Mountpoint == "/" || (p.Mountpoint == "/etc/hosts" && strings.HasPrefix(p.Device, "/dev"))) {
|
||||
fs, match := findIoDevice(filepath.Base(p.Device), diskIoCounters, a.fsStats)
|
||||
if match {
|
||||
addFsStat(fs, p.Mountpoint, true)
|
||||
hasRoot = true
|
||||
}
|
||||
}
|
||||
|
||||
// Check if device is in /extra-filesystems
|
||||
@@ -114,7 +129,7 @@ func (a *Agent) initializeDiskInfo() {
|
||||
mountpoint := filepath.Join(efPath, folder.Name())
|
||||
slog.Debug("/extra-filesystems", "mountpoint", mountpoint)
|
||||
if !existingMountpoints[mountpoint] {
|
||||
a.fsStats[folder.Name()] = &system.FsStats{Mountpoint: mountpoint}
|
||||
addFsStat(folder.Name(), mountpoint, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -122,7 +137,7 @@ func (a *Agent) initializeDiskInfo() {
|
||||
|
||||
// If no root filesystem set, use fallback
|
||||
if !hasRoot {
|
||||
rootDevice := findFallbackIoDevice(filepath.Base(filesystem), diskIoCounters, a.fsStats)
|
||||
rootDevice, _ := findIoDevice(filepath.Base(filesystem), diskIoCounters, a.fsStats)
|
||||
slog.Info("Root disk", "mountpoint", "/", "io", rootDevice)
|
||||
a.fsStats[rootDevice] = &system.FsStats{Root: true, Mountpoint: "/"}
|
||||
}
|
||||
@@ -130,14 +145,15 @@ func (a *Agent) initializeDiskInfo() {
|
||||
a.initializeDiskIoStats(diskIoCounters)
|
||||
}
|
||||
|
||||
// Returns the device with the most reads in /proc/diskstats,
|
||||
// or the device specified by the filesystem argument if it exists
|
||||
func findFallbackIoDevice(filesystem string, diskIoCounters map[string]disk.IOCountersStat, fsStats map[string]*system.FsStats) string {
|
||||
// Returns matching device from /proc/diskstats,
|
||||
// or the device with the most reads if no match is found.
|
||||
// bool is true if a match was found.
|
||||
func findIoDevice(filesystem string, diskIoCounters map[string]disk.IOCountersStat, fsStats map[string]*system.FsStats) (string, bool) {
|
||||
var maxReadBytes uint64
|
||||
maxReadDevice := "/"
|
||||
for _, d := range diskIoCounters {
|
||||
if d.Name == filesystem {
|
||||
return d.Name
|
||||
if d.Name == filesystem || (d.Label != "" && d.Label == filesystem) {
|
||||
return d.Name, true
|
||||
}
|
||||
if d.ReadBytes > maxReadBytes {
|
||||
// don't use if device already exists in fsStats
|
||||
@@ -147,7 +163,7 @@ func findFallbackIoDevice(filesystem string, diskIoCounters map[string]disk.IOCo
|
||||
}
|
||||
}
|
||||
}
|
||||
return maxReadDevice
|
||||
return maxReadDevice, false
|
||||
}
|
||||
|
||||
// Sets start values for disk I/O stats.
|
||||
|
||||
@@ -25,18 +25,23 @@ type dockerManager struct {
|
||||
apiContainerList *[]container.ApiInfo // List of containers from Docker API
|
||||
containerStatsMap map[string]*container.Stats // Keeps track of container stats
|
||||
validIds map[string]struct{} // Map of valid container ids, used to prune invalid containers from containerStatsMap
|
||||
goodDockerVersion bool // Whether docker version is at least 25.0.0 (one-shot works correctly)
|
||||
}
|
||||
|
||||
// Add goroutine to the queue
|
||||
func (d *dockerManager) queue() {
|
||||
d.sem <- struct{}{}
|
||||
d.wg.Add(1)
|
||||
if d.goodDockerVersion {
|
||||
d.sem <- struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove goroutine from the queue
|
||||
func (d *dockerManager) dequeue() {
|
||||
<-d.sem
|
||||
d.wg.Done()
|
||||
if d.goodDockerVersion {
|
||||
<-d.sem
|
||||
}
|
||||
}
|
||||
|
||||
// Returns stats for all running containers
|
||||
@@ -75,6 +80,7 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
go func() {
|
||||
defer dm.dequeue()
|
||||
err := dm.updateContainerStats(ctr)
|
||||
// if error, delete from map and add to failed list to retry
|
||||
if err != nil {
|
||||
dm.containerStatsMutex.Lock()
|
||||
delete(dm.containerStatsMap, ctr.IdShort)
|
||||
@@ -89,11 +95,10 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
// retry failed containers separately so we can run them in parallel (docker 24 bug)
|
||||
if len(failedContainters) > 0 {
|
||||
slog.Debug("Retrying failed containers", "count", len(failedContainters))
|
||||
// time.Sleep(time.Millisecond * 1100)
|
||||
for _, ctr := range failedContainters {
|
||||
dm.wg.Add(1)
|
||||
dm.queue()
|
||||
go func() {
|
||||
defer dm.wg.Done()
|
||||
defer dm.dequeue()
|
||||
err = dm.updateContainerStats(ctr)
|
||||
if err != nil {
|
||||
slog.Error("Error getting container stats", "err", err)
|
||||
@@ -201,12 +206,13 @@ func (dm *dockerManager) deleteContainerStatsSync(id string) {
|
||||
delete(dm.containerStatsMap, id)
|
||||
}
|
||||
|
||||
// Creates a new http client for Docker API
|
||||
func newDockerManager() *dockerManager {
|
||||
dockerHost := "unix:///var/run/docker.sock"
|
||||
if dockerHostEnv, exists := os.LookupEnv("DOCKER_HOST"); exists {
|
||||
slog.Info("DOCKER_HOST", "host", dockerHostEnv)
|
||||
dockerHost = dockerHostEnv
|
||||
// Creates a new http client for Docker or Podman API
|
||||
func newDockerManager(a *Agent) *dockerManager {
|
||||
dockerHost, exists := os.LookupEnv("DOCKER_HOST")
|
||||
if exists {
|
||||
slog.Info("DOCKER_HOST", "host", dockerHost)
|
||||
} else {
|
||||
dockerHost = getDockerHost()
|
||||
}
|
||||
|
||||
parsedURL, err := url.Parse(dockerHost)
|
||||
@@ -251,11 +257,15 @@ func newDockerManager() *dockerManager {
|
||||
Transport: transport,
|
||||
},
|
||||
containerStatsMap: make(map[string]*container.Stats),
|
||||
sem: make(chan struct{}, 5),
|
||||
}
|
||||
|
||||
// Make sure sem is initialized
|
||||
concurrency := 200
|
||||
defer func() { dockerClient.sem = make(chan struct{}, concurrency) }()
|
||||
// If using podman, return client
|
||||
if strings.Contains(dockerHost, "podman") {
|
||||
a.systemInfo.Podman = true
|
||||
dockerClient.goodDockerVersion = true
|
||||
return dockerClient
|
||||
}
|
||||
|
||||
// Check docker version
|
||||
// (versions before 25.0.0 have a bug with one-shot which requires all requests to be made in one batch)
|
||||
@@ -273,9 +283,22 @@ func newDockerManager() *dockerManager {
|
||||
|
||||
// if version > 24, one-shot works correctly and we can limit concurrent operations
|
||||
if dockerVersion, err := semver.Parse(versionInfo.Version); err == nil && dockerVersion.Major > 24 {
|
||||
concurrency = 5
|
||||
dockerClient.goodDockerVersion = true
|
||||
} else {
|
||||
slog.Info(fmt.Sprintf("Docker %s is outdated. Upgrade if possible. See https://github.com/henrygd/beszel/issues/58", versionInfo.Version))
|
||||
}
|
||||
slog.Debug("Docker", "version", versionInfo.Version, "concurrency", concurrency)
|
||||
|
||||
return dockerClient
|
||||
}
|
||||
|
||||
// Test docker / podman sockets and return if one exists
|
||||
func getDockerHost() string {
|
||||
scheme := "unix://"
|
||||
socks := []string{"/var/run/docker.sock", fmt.Sprintf("/run/user/%v/podman/podman.sock", os.Getuid())}
|
||||
for _, sock := range socks {
|
||||
if _, err := os.Stat(sock); err == nil {
|
||||
return scheme + sock
|
||||
}
|
||||
}
|
||||
return scheme + socks[0]
|
||||
}
|
||||
|
||||
235
beszel/internal/agent/gpu.go
Normal file
@@ -0,0 +1,235 @@
|
||||
package agent
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/system"
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"golang.org/x/exp/slog"
|
||||
)
|
||||
|
||||
// GPUManager manages data collection for GPUs (either Nvidia or AMD)
|
||||
type GPUManager struct {
|
||||
nvidiaSmi bool
|
||||
rocmSmi bool
|
||||
GpuDataMap map[string]*system.GPUData
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
// RocmSmiJson represents the JSON structure of rocm-smi output
|
||||
type RocmSmiJson struct {
|
||||
ID string `json:"Device ID"`
|
||||
Name string `json:"Card series"`
|
||||
Temperature string `json:"Temperature (Sensor edge) (C)"`
|
||||
MemoryUsed string `json:"VRAM Total Used Memory (B)"`
|
||||
MemoryTotal string `json:"VRAM Total Memory (B)"`
|
||||
Usage string `json:"GPU use (%)"`
|
||||
Power string `json:"Current Socket Graphics Package Power (W)"`
|
||||
}
|
||||
|
||||
// gpuCollector defines a collector for a specific GPU management utility (nvidia-smi or rocm-smi)
|
||||
type gpuCollector struct {
|
||||
name string
|
||||
cmd *exec.Cmd
|
||||
parse func([]byte) bool // returns true if valid data was found
|
||||
}
|
||||
|
||||
var errNoValidData = fmt.Errorf("no valid GPU data found") // Error for missing data
|
||||
|
||||
// starts and manages the ongoing collection of GPU data for the specified GPU management utility
|
||||
func (c *gpuCollector) start() {
|
||||
for {
|
||||
err := c.collect()
|
||||
if err != nil {
|
||||
if err == errNoValidData {
|
||||
slog.Warn(c.name + " found no valid GPU data, stopping")
|
||||
break
|
||||
}
|
||||
slog.Warn(c.name+" failed, restarting", "err", err)
|
||||
time.Sleep(time.Second * 5)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// collect executes the command, parses output with the assigned parser function
|
||||
func (c *gpuCollector) collect() error {
|
||||
stdout, err := c.cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := c.cmd.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
scanner := bufio.NewScanner(stdout)
|
||||
buf := make([]byte, 0, 8*1024)
|
||||
scanner.Buffer(buf, bufio.MaxScanTokenSize)
|
||||
|
||||
hasValidData := false
|
||||
for scanner.Scan() {
|
||||
if c.parse(scanner.Bytes()) {
|
||||
hasValidData = true
|
||||
}
|
||||
}
|
||||
|
||||
if !hasValidData {
|
||||
return errNoValidData
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return fmt.Errorf("scanner error: %w", err)
|
||||
}
|
||||
return c.cmd.Wait()
|
||||
}
|
||||
|
||||
// parseNvidiaData parses the output of nvidia-smi and updates the GPUData map
|
||||
func (gm *GPUManager) parseNvidiaData(output []byte) bool {
|
||||
fields := strings.Split(string(output), ", ")
|
||||
if len(fields) < 7 {
|
||||
return false
|
||||
}
|
||||
gm.mutex.Lock()
|
||||
defer gm.mutex.Unlock()
|
||||
lines := strings.Split(string(output), "\n")
|
||||
for _, line := range lines {
|
||||
if line != "" {
|
||||
fields := strings.Split(line, ", ")
|
||||
if len(fields) >= 7 {
|
||||
id := fields[0]
|
||||
temp, _ := strconv.ParseFloat(fields[2], 64)
|
||||
memoryUsage, _ := strconv.ParseFloat(fields[3], 64)
|
||||
totalMemory, _ := strconv.ParseFloat(fields[4], 64)
|
||||
usage, _ := strconv.ParseFloat(fields[5], 64)
|
||||
power, _ := strconv.ParseFloat(fields[6], 64)
|
||||
// add gpu if not exists
|
||||
if _, ok := gm.GpuDataMap[id]; !ok {
|
||||
name := strings.TrimPrefix(fields[1], "NVIDIA ")
|
||||
gm.GpuDataMap[id] = &system.GPUData{Name: strings.TrimSuffix(name, " Laptop GPU")}
|
||||
}
|
||||
// update gpu data
|
||||
gpu := gm.GpuDataMap[id]
|
||||
gpu.Temperature = temp
|
||||
gpu.MemoryUsed = memoryUsage / 1.024
|
||||
gpu.MemoryTotal = totalMemory / 1.024
|
||||
gpu.Usage += usage
|
||||
gpu.Power += power
|
||||
gpu.Count++
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// parseAmdData parses the output of rocm-smi and updates the GPUData map
|
||||
func (gm *GPUManager) parseAmdData(output []byte) bool {
|
||||
var rocmSmiInfo map[string]RocmSmiJson
|
||||
if err := json.Unmarshal(output, &rocmSmiInfo); err != nil || len(rocmSmiInfo) == 0 {
|
||||
return false
|
||||
}
|
||||
gm.mutex.Lock()
|
||||
defer gm.mutex.Unlock()
|
||||
for _, v := range rocmSmiInfo {
|
||||
temp, _ := strconv.ParseFloat(v.Temperature, 64)
|
||||
memoryUsage, _ := strconv.ParseFloat(v.MemoryUsed, 64)
|
||||
totalMemory, _ := strconv.ParseFloat(v.MemoryTotal, 64)
|
||||
usage, _ := strconv.ParseFloat(v.Usage, 64)
|
||||
power, _ := strconv.ParseFloat(v.Power, 64)
|
||||
memoryUsage = bytesToMegabytes(memoryUsage)
|
||||
totalMemory = bytesToMegabytes(totalMemory)
|
||||
|
||||
if _, ok := gm.GpuDataMap[v.ID]; !ok {
|
||||
gm.GpuDataMap[v.ID] = &system.GPUData{Name: v.Name}
|
||||
}
|
||||
gpu := gm.GpuDataMap[v.ID]
|
||||
gpu.Temperature = temp
|
||||
gpu.MemoryUsed = memoryUsage
|
||||
gpu.MemoryTotal = totalMemory
|
||||
gpu.Usage += usage
|
||||
gpu.Power += power
|
||||
gpu.Count++
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// sums and resets the current GPU utilization data since the last update
|
||||
func (gm *GPUManager) GetCurrentData() map[string]system.GPUData {
|
||||
gm.mutex.Lock()
|
||||
defer gm.mutex.Unlock()
|
||||
// copy / reset the data
|
||||
gpuData := make(map[string]system.GPUData, len(gm.GpuDataMap))
|
||||
for id, gpu := range gm.GpuDataMap {
|
||||
// sum the data
|
||||
gpu.Temperature = twoDecimals(gpu.Temperature)
|
||||
gpu.MemoryUsed = twoDecimals(gpu.MemoryUsed)
|
||||
gpu.MemoryTotal = twoDecimals(gpu.MemoryTotal)
|
||||
gpu.Usage = twoDecimals(gpu.Usage / gpu.Count)
|
||||
gpu.Power = twoDecimals(gpu.Power / gpu.Count)
|
||||
gpuData[id] = *gpu
|
||||
// reset the count
|
||||
gpu.Count = 1
|
||||
}
|
||||
return gpuData
|
||||
}
|
||||
|
||||
// detectGPUs returns the GPU brand (nvidia or amd) or an error if none is found
|
||||
// todo: make sure there's actually a GPU, not just if the command exists
|
||||
func (gm *GPUManager) detectGPUs() error {
|
||||
if err := exec.Command("nvidia-smi").Run(); err == nil {
|
||||
gm.nvidiaSmi = true
|
||||
}
|
||||
if err := exec.Command("rocm-smi").Run(); err == nil {
|
||||
gm.rocmSmi = true
|
||||
}
|
||||
if gm.nvidiaSmi || gm.rocmSmi {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("no GPU found - install nvidia-smi or rocm-smi")
|
||||
}
|
||||
|
||||
// startCollector starts the appropriate GPU data collector based on the command
|
||||
func (gm *GPUManager) startCollector(command string) {
|
||||
switch command {
|
||||
case "nvidia-smi":
|
||||
nvidia := gpuCollector{
|
||||
name: "nvidia-smi",
|
||||
cmd: exec.Command("nvidia-smi", "-l", "4",
|
||||
"--query-gpu=index,name,temperature.gpu,memory.used,memory.total,utilization.gpu,power.draw",
|
||||
"--format=csv,noheader,nounits"),
|
||||
parse: gm.parseNvidiaData,
|
||||
}
|
||||
go nvidia.start()
|
||||
case "rocm-smi":
|
||||
amdCollector := gpuCollector{
|
||||
name: "rocm-smi",
|
||||
cmd: exec.Command("/bin/sh", "-c",
|
||||
"while true; do rocm-smi --showid --showtemp --showuse --showpower --showproductname --showmeminfo vram --json; sleep 4.3; done"),
|
||||
parse: gm.parseAmdData,
|
||||
}
|
||||
go amdCollector.start()
|
||||
}
|
||||
}
|
||||
|
||||
// NewGPUManager creates and initializes a new GPUManager
|
||||
func NewGPUManager() (*GPUManager, error) {
|
||||
var gm GPUManager
|
||||
if err := gm.detectGPUs(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
gm.GpuDataMap = make(map[string]*system.GPUData, 1)
|
||||
|
||||
if gm.nvidiaSmi {
|
||||
gm.startCollector("nvidia-smi")
|
||||
}
|
||||
if gm.rocmSmi {
|
||||
gm.startCollector("rocm-smi")
|
||||
}
|
||||
|
||||
return &gm, nil
|
||||
}
|
||||
@@ -116,11 +116,17 @@ func (a *Agent) getSystemStats() system.Stats {
|
||||
continue
|
||||
}
|
||||
secondsElapsed := time.Since(stats.Time).Seconds()
|
||||
readPerSecond := float64(d.ReadBytes-stats.TotalRead) / secondsElapsed
|
||||
writePerSecond := float64(d.WriteBytes-stats.TotalWrite) / secondsElapsed
|
||||
readPerSecond := bytesToMegabytes(float64(d.ReadBytes-stats.TotalRead) / secondsElapsed)
|
||||
writePerSecond := bytesToMegabytes(float64(d.WriteBytes-stats.TotalWrite) / secondsElapsed)
|
||||
// check for invalid values and reset stats if so
|
||||
if readPerSecond < 0 || writePerSecond < 0 || readPerSecond > 50_000 || writePerSecond > 50_000 {
|
||||
slog.Warn("Invalid disk I/O. Resetting.", "name", d.Name, "read", readPerSecond, "write", writePerSecond)
|
||||
a.initializeDiskIoStats(ioCounters)
|
||||
break
|
||||
}
|
||||
stats.Time = time.Now()
|
||||
stats.DiskReadPs = bytesToMegabytes(readPerSecond)
|
||||
stats.DiskWritePs = bytesToMegabytes(writePerSecond)
|
||||
stats.DiskReadPs = readPerSecond
|
||||
stats.DiskWritePs = writePerSecond
|
||||
stats.TotalRead = d.ReadBytes
|
||||
stats.TotalWrite = d.WriteBytes
|
||||
// if root filesystem, update system stats
|
||||
@@ -153,7 +159,7 @@ func (a *Agent) getSystemStats() system.Stats {
|
||||
networkRecvPs := bytesToMegabytes(recvPerSecond)
|
||||
// add check for issue (#150) where sent is a massive number
|
||||
if networkSentPs > 10_000 || networkRecvPs > 10_000 {
|
||||
slog.Warn("Invalid network stats. Resetting.", "sent", networkSentPs, "recv", networkRecvPs)
|
||||
slog.Warn("Invalid net stats. Resetting.", "sent", networkSentPs, "recv", networkRecvPs)
|
||||
for _, v := range netIO {
|
||||
if _, exists := a.netInterfaces[v.Name]; !exists {
|
||||
continue
|
||||
@@ -206,6 +212,22 @@ func (a *Agent) getSystemStats() system.Stats {
|
||||
}
|
||||
}
|
||||
|
||||
// GPU data
|
||||
if a.gpuManager != nil {
|
||||
if gpuData := a.gpuManager.GetCurrentData(); len(gpuData) > 0 {
|
||||
systemStats.GPUData = gpuData
|
||||
// add temperatures
|
||||
if systemStats.Temperatures == nil {
|
||||
systemStats.Temperatures = make(map[string]float64, len(gpuData))
|
||||
}
|
||||
for _, gpu := range gpuData {
|
||||
if gpu.Temperature > 0 {
|
||||
systemStats.Temperatures[gpu.Name] = gpu.Temperature
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update base system info
|
||||
a.systemInfo.Cpu = systemStats.Cpu
|
||||
a.systemInfo.MemPct = systemStats.MemPct
|
||||
|
||||
@@ -11,11 +11,10 @@ import (
|
||||
|
||||
"github.com/containrrr/shoutrrr"
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/tools/mailer"
|
||||
"github.com/pocketbase/pocketbase/tools/types"
|
||||
"github.com/spf13/cast"
|
||||
@@ -48,8 +47,8 @@ type SystemAlertStats struct {
|
||||
}
|
||||
|
||||
type SystemAlertData struct {
|
||||
systemRecord *models.Record
|
||||
alertRecord *models.Record
|
||||
systemRecord *core.Record
|
||||
alertRecord *core.Record
|
||||
name string
|
||||
unit string
|
||||
val float64
|
||||
@@ -68,12 +67,12 @@ func NewAlertManager(app *pocketbase.PocketBase) *AlertManager {
|
||||
}
|
||||
}
|
||||
|
||||
func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemInfo system.Info, temperatures map[string]float64, extraFs map[string]*system.FsStats) error {
|
||||
func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, systemInfo system.Info, temperatures map[string]float64, extraFs map[string]*system.FsStats) error {
|
||||
// start := time.Now()
|
||||
// defer func() {
|
||||
// log.Println("alert stats took", time.Since(start))
|
||||
// }()
|
||||
alertRecords, err := am.app.Dao().FindRecordsByExpr("alerts",
|
||||
alertRecords, err := am.app.FindAllRecords("alerts",
|
||||
dbx.NewExp("system={:system}", dbx.Params{"system": systemRecord.Id}),
|
||||
)
|
||||
if err != nil || len(alertRecords) == 0 {
|
||||
@@ -82,7 +81,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemIn
|
||||
}
|
||||
|
||||
var validAlerts []SystemAlertData
|
||||
now := systemRecord.Updated.Time().UTC()
|
||||
now := systemRecord.GetDateTime("updated").Time().UTC()
|
||||
oldestTime := now
|
||||
|
||||
for _, alertRecord := range alertRecords {
|
||||
@@ -155,7 +154,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *models.Record, systemIn
|
||||
Created types.DateTime `db:"created"`
|
||||
}{}
|
||||
|
||||
err = am.app.Dao().DB().
|
||||
err = am.app.DB().
|
||||
Select("stats", "created").
|
||||
From("system_stats").
|
||||
Where(dbx.NewExp(
|
||||
@@ -325,27 +324,28 @@ func (am *AlertManager) sendSystemAlert(alert SystemAlertData) {
|
||||
body := fmt.Sprintf("%s averaged %.2f%s for the previous %v %s.", alert.descriptor, alert.val, alert.unit, alert.min, minutesLabel)
|
||||
|
||||
alert.alertRecord.Set("triggered", alert.triggered)
|
||||
if err := am.app.Dao().SaveRecord(alert.alertRecord); err != nil {
|
||||
if err := am.app.Save(alert.alertRecord); err != nil {
|
||||
// app.Logger().Error("failed to save alert record", "err", err.Error())
|
||||
return
|
||||
}
|
||||
// expand the user relation and send the alert
|
||||
if errs := am.app.Dao().ExpandRecord(alert.alertRecord, []string{"user"}, nil); len(errs) > 0 {
|
||||
if errs := am.app.ExpandRecord(alert.alertRecord, []string{"user"}, nil); len(errs) > 0 {
|
||||
// app.Logger().Error("failed to expand user relation", "errs", errs)
|
||||
return
|
||||
}
|
||||
if user := alert.alertRecord.ExpandedOne("user"); user != nil {
|
||||
am.sendAlert(AlertMessageData{
|
||||
UserID: user.GetId(),
|
||||
UserID: user.Id,
|
||||
Title: subject,
|
||||
Message: body,
|
||||
Link: am.app.Settings().Meta.AppUrl + "/system/" + url.PathEscape(systemName),
|
||||
Link: am.app.Settings().Meta.AppURL + "/system/" + url.PathEscape(systemName),
|
||||
LinkText: "View " + systemName,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *models.Record) error {
|
||||
// todo: allow x minutes downtime before sending alert
|
||||
func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *core.Record) error {
|
||||
var alertStatus string
|
||||
switch newStatus {
|
||||
case "up":
|
||||
@@ -361,9 +361,9 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
|
||||
return nil
|
||||
}
|
||||
// check if use
|
||||
alertRecords, err := am.app.Dao().FindRecordsByExpr("alerts",
|
||||
alertRecords, err := am.app.FindAllRecords("alerts",
|
||||
dbx.HashExp{
|
||||
"system": oldSystemRecord.GetId(),
|
||||
"system": oldSystemRecord.Id,
|
||||
"name": "Status",
|
||||
},
|
||||
)
|
||||
@@ -373,7 +373,7 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
|
||||
}
|
||||
for _, alertRecord := range alertRecords {
|
||||
// expand the user relation
|
||||
if errs := am.app.Dao().ExpandRecord(alertRecord, []string{"user"}, nil); len(errs) > 0 {
|
||||
if errs := am.app.ExpandRecord(alertRecord, []string{"user"}, nil); len(errs) > 0 {
|
||||
return fmt.Errorf("failed to expand: %v", errs)
|
||||
}
|
||||
user := alertRecord.ExpandedOne("user")
|
||||
@@ -387,10 +387,10 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
|
||||
// send alert
|
||||
systemName := oldSystemRecord.GetString("name")
|
||||
am.sendAlert(AlertMessageData{
|
||||
UserID: user.GetId(),
|
||||
UserID: user.Id,
|
||||
Title: fmt.Sprintf("Connection to %s is %s %v", systemName, alertStatus, emoji),
|
||||
Message: fmt.Sprintf("Connection to %s is %s", systemName, alertStatus),
|
||||
Link: am.app.Settings().Meta.AppUrl + "/system/" + url.PathEscape(systemName),
|
||||
Link: am.app.Settings().Meta.AppURL + "/system/" + url.PathEscape(systemName),
|
||||
LinkText: "View " + systemName,
|
||||
})
|
||||
}
|
||||
@@ -399,7 +399,7 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *mo
|
||||
|
||||
func (am *AlertManager) sendAlert(data AlertMessageData) {
|
||||
// get user settings
|
||||
record, err := am.app.Dao().FindFirstRecordByFilter(
|
||||
record, err := am.app.FindFirstRecordByFilter(
|
||||
"user_settings", "user={:user}",
|
||||
dbx.Params{"user": data.UserID},
|
||||
)
|
||||
@@ -511,19 +511,19 @@ func sliceContains(slice []string, item string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (am *AlertManager) SendTestNotification(c echo.Context) error {
|
||||
requestData := apis.RequestInfo(c)
|
||||
if requestData.AuthRecord == nil {
|
||||
func (am *AlertManager) SendTestNotification(e *core.RequestEvent) error {
|
||||
info, _ := e.RequestInfo()
|
||||
if info.Auth == nil {
|
||||
return apis.NewForbiddenError("Forbidden", nil)
|
||||
}
|
||||
url := c.QueryParam("url")
|
||||
url := e.Request.URL.Query().Get("url")
|
||||
// log.Println("url", url)
|
||||
if url == "" {
|
||||
return c.JSON(200, map[string]string{"err": "URL is required"})
|
||||
return e.JSON(200, map[string]string{"err": "URL is required"})
|
||||
}
|
||||
err := am.SendShoutrrrAlert(url, "Test Alert", "This is a notification from Beszel.", am.app.Settings().Meta.AppUrl, "View Beszel")
|
||||
err := am.SendShoutrrrAlert(url, "Test Alert", "This is a notification from Beszel.", am.app.Settings().Meta.AppURL, "View Beszel")
|
||||
if err != nil {
|
||||
return c.JSON(200, map[string]string{"err": err.Error()})
|
||||
return e.JSON(200, map[string]string{"err": err.Error()})
|
||||
}
|
||||
return c.JSON(200, map[string]bool{"err": false})
|
||||
return e.JSON(200, map[string]bool{"err": false})
|
||||
}
|
||||
|
||||
@@ -28,6 +28,17 @@ type Stats struct {
|
||||
MaxNetworkRecv float64 `json:"nrm,omitempty"`
|
||||
Temperatures map[string]float64 `json:"t,omitempty"`
|
||||
ExtraFs map[string]*FsStats `json:"efs,omitempty"`
|
||||
GPUData map[string]GPUData `json:"g,omitempty"`
|
||||
}
|
||||
|
||||
type GPUData struct {
|
||||
Name string `json:"n"`
|
||||
Temperature float64 `json:"-"`
|
||||
MemoryUsed float64 `json:"mu,omitempty"`
|
||||
MemoryTotal float64 `json:"mt,omitempty"`
|
||||
Usage float64 `json:"u"`
|
||||
Power float64 `json:"p,omitempty"`
|
||||
Count float64 `json:"-"`
|
||||
}
|
||||
|
||||
type FsStats struct {
|
||||
@@ -63,6 +74,7 @@ type Info struct {
|
||||
DiskPct float64 `json:"dp"`
|
||||
Bandwidth float64 `json:"b"`
|
||||
AgentVersion string `json:"v"`
|
||||
Podman bool `json:"p,omitempty"`
|
||||
}
|
||||
|
||||
// Final data structure to return to the hub
|
||||
|
||||
@@ -8,10 +8,9 @@ import (
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/spf13/cast"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
@@ -46,11 +45,11 @@ func (h *Hub) syncSystemsWithConfig() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
var firstUser *models.Record
|
||||
var firstUser *core.Record
|
||||
|
||||
// Create a map of email to user ID
|
||||
userEmailToID := make(map[string]string)
|
||||
users, err := h.app.Dao().FindRecordsByExpr("users", dbx.NewExp("id != ''"))
|
||||
users, err := h.app.FindAllRecords("users", dbx.NewExp("id != ''"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -85,13 +84,13 @@ func (h *Hub) syncSystemsWithConfig() error {
|
||||
}
|
||||
|
||||
// Get existing systems
|
||||
existingSystems, err := h.app.Dao().FindRecordsByExpr("systems", dbx.NewExp("id != ''"))
|
||||
existingSystems, err := h.app.FindAllRecords("systems", dbx.NewExp("id != ''"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Create a map of existing systems for easy lookup
|
||||
existingSystemsMap := make(map[string]*models.Record)
|
||||
existingSystemsMap := make(map[string]*core.Record)
|
||||
for _, system := range existingSystems {
|
||||
key := system.GetString("host") + ":" + system.GetString("port")
|
||||
existingSystemsMap[key] = system
|
||||
@@ -105,24 +104,24 @@ func (h *Hub) syncSystemsWithConfig() error {
|
||||
existingSystem.Set("name", sysConfig.Name)
|
||||
existingSystem.Set("users", sysConfig.Users)
|
||||
existingSystem.Set("port", sysConfig.Port)
|
||||
if err := h.app.Dao().SaveRecord(existingSystem); err != nil {
|
||||
if err := h.app.Save(existingSystem); err != nil {
|
||||
return err
|
||||
}
|
||||
delete(existingSystemsMap, key)
|
||||
} else {
|
||||
// Create new system
|
||||
systemsCollection, err := h.app.Dao().FindCollectionByNameOrId("systems")
|
||||
systemsCollection, err := h.app.FindCollectionByNameOrId("systems")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to find systems collection: %v", err)
|
||||
}
|
||||
newSystem := models.NewRecord(systemsCollection)
|
||||
newSystem := core.NewRecord(systemsCollection)
|
||||
newSystem.Set("name", sysConfig.Name)
|
||||
newSystem.Set("host", sysConfig.Host)
|
||||
newSystem.Set("port", sysConfig.Port)
|
||||
newSystem.Set("users", sysConfig.Users)
|
||||
newSystem.Set("info", system.Info{})
|
||||
newSystem.Set("status", "pending")
|
||||
if err := h.app.Dao().SaveRecord(newSystem); err != nil {
|
||||
if err := h.app.Save(newSystem); err != nil {
|
||||
return fmt.Errorf("failed to create new system: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -130,7 +129,7 @@ func (h *Hub) syncSystemsWithConfig() error {
|
||||
|
||||
// Delete systems not in config
|
||||
for _, system := range existingSystemsMap {
|
||||
if err := h.app.Dao().DeleteRecord(system); err != nil {
|
||||
if err := h.app.Delete(system); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -142,7 +141,7 @@ func (h *Hub) syncSystemsWithConfig() error {
|
||||
// Generates content for the config.yml file as a YAML string
|
||||
func (h *Hub) generateConfigYAML() (string, error) {
|
||||
// Fetch all systems from the database
|
||||
systems, err := h.app.Dao().FindRecordsByFilter("systems", "id != ''", "name", -1, 0)
|
||||
systems, err := h.app.FindRecordsByFilter("systems", "id != ''", "name", -1, 0)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -195,7 +194,7 @@ func (h *Hub) generateConfigYAML() (string, error) {
|
||||
|
||||
// New helper function to get a map of user IDs to emails
|
||||
func (h *Hub) getUserEmailMap(userIDs []string) (map[string]string, error) {
|
||||
users, err := h.app.Dao().FindRecordsByIds("users", userIDs)
|
||||
users, err := h.app.FindRecordsByIds("users", userIDs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -209,14 +208,14 @@ func (h *Hub) getUserEmailMap(userIDs []string) (map[string]string, error) {
|
||||
}
|
||||
|
||||
// Returns the current config.yml file as a JSON object
|
||||
func (h *Hub) getYamlConfig(c echo.Context) error {
|
||||
requestData := apis.RequestInfo(c)
|
||||
if requestData.AuthRecord == nil || requestData.AuthRecord.GetString("role") != "admin" {
|
||||
func (h *Hub) getYamlConfig(e *core.RequestEvent) error {
|
||||
info, _ := e.RequestInfo()
|
||||
if info.Auth == nil || info.Auth.GetString("role") != "admin" {
|
||||
return apis.NewForbiddenError("Forbidden", nil)
|
||||
}
|
||||
configContent, err := h.generateConfigYAML()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, map[string]string{"config": configContent})
|
||||
return e.JSON(200, map[string]string{"config": configContent})
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
@@ -23,37 +24,31 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/labstack/echo/v5"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
"github.com/pocketbase/pocketbase/plugins/migratecmd"
|
||||
"github.com/pocketbase/pocketbase/tools/cron"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
type Hub struct {
|
||||
app *pocketbase.PocketBase
|
||||
connectionLock *sync.Mutex
|
||||
systemConnections map[string]*ssh.Client
|
||||
systemConnections sync.Map
|
||||
sshClientConfig *ssh.ClientConfig
|
||||
pubKey string
|
||||
am *alerts.AlertManager
|
||||
um *users.UserManager
|
||||
rm *records.RecordManager
|
||||
systemStats *models.Collection
|
||||
containerStats *models.Collection
|
||||
systemStats *core.Collection
|
||||
containerStats *core.Collection
|
||||
}
|
||||
|
||||
func NewHub(app *pocketbase.PocketBase) *Hub {
|
||||
return &Hub{
|
||||
app: app,
|
||||
connectionLock: &sync.Mutex{},
|
||||
systemConnections: make(map[string]*ssh.Client),
|
||||
am: alerts.NewAlertManager(app),
|
||||
um: users.NewUserManager(app),
|
||||
rm: records.NewRecordManager(app),
|
||||
app: app,
|
||||
am: alerts.NewAlertManager(app),
|
||||
um: users.NewUserManager(app),
|
||||
rm: records.NewRecordManager(app),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,128 +64,140 @@ func (h *Hub) Run() {
|
||||
})
|
||||
|
||||
// initial setup
|
||||
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
// create ssh client config
|
||||
err := h.createSSHClientConfig()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
// set general settings
|
||||
settings := h.app.Settings()
|
||||
// batch requests (for global alerts)
|
||||
settings.Batch.Enabled = true
|
||||
// set auth settings
|
||||
usersCollection, err := h.app.Dao().FindCollectionByNameOrId("users")
|
||||
usersCollection, err := h.app.FindCollectionByNameOrId("users")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
usersAuthOptions := usersCollection.AuthOptions()
|
||||
usersAuthOptions.AllowUsernameAuth = false
|
||||
if os.Getenv("DISABLE_PASSWORD_AUTH") == "true" {
|
||||
usersAuthOptions.AllowEmailAuth = false
|
||||
} else {
|
||||
usersAuthOptions.AllowEmailAuth = true
|
||||
// disable email auth if DISABLE_PASSWORD_AUTH env var is set
|
||||
usersCollection.PasswordAuth.Enabled = os.Getenv("DISABLE_PASSWORD_AUTH") != "true"
|
||||
usersCollection.PasswordAuth.IdentityFields = []string{"email"}
|
||||
// disable oauth if no providers are configured (todo: remove this in post 0.9.0 release)
|
||||
if usersCollection.OAuth2.Enabled {
|
||||
usersCollection.OAuth2.Enabled = len(usersCollection.OAuth2.Providers) > 0
|
||||
}
|
||||
usersCollection.SetOptions(usersAuthOptions)
|
||||
if err := h.app.Dao().SaveCollection(usersCollection); err != nil {
|
||||
// allow oauth user creation if USER_CREATION is set
|
||||
if os.Getenv("USER_CREATION") == "true" {
|
||||
cr := "@request.context = 'oauth2'"
|
||||
usersCollection.CreateRule = &cr
|
||||
} else {
|
||||
usersCollection.CreateRule = nil
|
||||
}
|
||||
if err := h.app.Save(usersCollection); err != nil {
|
||||
return err
|
||||
}
|
||||
// sync systems with config
|
||||
return h.syncSystemsWithConfig()
|
||||
h.syncSystemsWithConfig()
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// serve web ui
|
||||
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
switch isGoRun {
|
||||
case true:
|
||||
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
|
||||
Scheme: "http",
|
||||
Host: "localhost:5173",
|
||||
})
|
||||
e.Router.Any("/*", echo.WrapHandler(proxy))
|
||||
se.Router.Any("/", func(e *core.RequestEvent) error {
|
||||
proxy.ServeHTTP(e.Response, e.Request)
|
||||
return nil
|
||||
})
|
||||
default:
|
||||
csp, cspExists := os.LookupEnv("CSP")
|
||||
e.Router.Any("/*", func(c echo.Context) error {
|
||||
se.Router.Any("/{path...}", func(e *core.RequestEvent) error {
|
||||
if cspExists {
|
||||
c.Response().Header().Del("X-Frame-Options")
|
||||
c.Response().Header().Set("Content-Security-Policy", csp)
|
||||
e.Response.Header().Del("X-Frame-Options")
|
||||
e.Response.Header().Set("Content-Security-Policy", csp)
|
||||
}
|
||||
indexFallback := !strings.HasPrefix(c.Request().URL.Path, "/static/")
|
||||
return apis.StaticDirectoryHandler(site.Dist, indexFallback)(c)
|
||||
indexFallback := !strings.HasPrefix(e.Request.URL.Path, "/static/")
|
||||
return apis.Static(site.DistDirFS, indexFallback)(e)
|
||||
})
|
||||
}
|
||||
return nil
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// set up scheduled jobs / ticker for system updates
|
||||
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
// 15 second ticker for system updates
|
||||
go h.startSystemUpdateTicker()
|
||||
// set up cron jobs
|
||||
scheduler := cron.New()
|
||||
// delete old records once every hour
|
||||
scheduler.MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords)
|
||||
h.app.Cron().MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords)
|
||||
// create longer records every 10 minutes
|
||||
scheduler.MustAdd("create longer records", "*/10 * * * *", func() {
|
||||
h.app.Cron().MustAdd("create longer records", "*/10 * * * *", func() {
|
||||
if systemStats, containerStats, err := h.getCollections(); err == nil {
|
||||
h.rm.CreateLongerRecords([]*models.Collection{systemStats, containerStats})
|
||||
h.rm.CreateLongerRecords([]*core.Collection{systemStats, containerStats})
|
||||
}
|
||||
})
|
||||
scheduler.Start()
|
||||
return nil
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// custom api routes
|
||||
h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
|
||||
h.app.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
// returns public key
|
||||
e.Router.GET("/api/beszel/getkey", func(c echo.Context) error {
|
||||
requestData := apis.RequestInfo(c)
|
||||
if requestData.AuthRecord == nil {
|
||||
se.Router.GET("/api/beszel/getkey", func(e *core.RequestEvent) error {
|
||||
info, _ := e.RequestInfo()
|
||||
if info.Auth == nil {
|
||||
return apis.NewForbiddenError("Forbidden", nil)
|
||||
}
|
||||
return c.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version})
|
||||
return e.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version})
|
||||
})
|
||||
// check if first time setup on login page
|
||||
e.Router.GET("/api/beszel/first-run", func(c echo.Context) error {
|
||||
adminNum, err := h.app.Dao().TotalAdmins()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(http.StatusOK, map[string]bool{"firstRun": adminNum == 0})
|
||||
se.Router.GET("/api/beszel/first-run", func(e *core.RequestEvent) error {
|
||||
total, err := h.app.CountRecords("users")
|
||||
return e.JSON(http.StatusOK, map[string]bool{"firstRun": err == nil && total == 0})
|
||||
})
|
||||
// send test notification
|
||||
e.Router.GET("/api/beszel/send-test-notification", h.am.SendTestNotification)
|
||||
se.Router.GET("/api/beszel/send-test-notification", h.am.SendTestNotification)
|
||||
// API endpoint to get config.yml content
|
||||
e.Router.GET("/api/beszel/config-yaml", h.getYamlConfig)
|
||||
return nil
|
||||
se.Router.GET("/api/beszel/config-yaml", h.getYamlConfig)
|
||||
// create first user endpoint only needed if no users exist
|
||||
if totalUsers, _ := h.app.CountRecords("users"); totalUsers == 0 {
|
||||
se.Router.POST("/api/beszel/create-user", h.um.CreateFirstUser)
|
||||
}
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// system creation defaults
|
||||
h.app.OnModelBeforeCreate("systems").Add(func(e *core.ModelEvent) error {
|
||||
record := e.Model.(*models.Record)
|
||||
record.Set("info", system.Info{})
|
||||
record.Set("status", "pending")
|
||||
return nil
|
||||
h.app.OnRecordCreate("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
e.Record.Set("info", system.Info{})
|
||||
e.Record.Set("status", "pending")
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// immediately create connection for new systems
|
||||
h.app.OnModelAfterCreate("systems").Add(func(e *core.ModelEvent) error {
|
||||
go h.updateSystem(e.Model.(*models.Record))
|
||||
return nil
|
||||
h.app.OnRecordAfterCreateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
go h.updateSystem(e.Record)
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// handle default values for user / user_settings creation
|
||||
h.app.OnModelBeforeCreate("users").Add(h.um.InitializeUserRole)
|
||||
h.app.OnModelBeforeCreate("user_settings").Add(h.um.InitializeUserSettings)
|
||||
h.app.OnRecordCreate("users").BindFunc(h.um.InitializeUserRole)
|
||||
h.app.OnRecordCreate("user_settings").BindFunc(h.um.InitializeUserSettings)
|
||||
|
||||
// empty info for systems that are paused
|
||||
h.app.OnModelBeforeUpdate("systems").Add(func(e *core.ModelEvent) error {
|
||||
if e.Model.(*models.Record).GetString("status") == "paused" {
|
||||
e.Model.(*models.Record).Set("info", system.Info{})
|
||||
h.app.OnRecordUpdate("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
if e.Record.GetString("status") == "paused" {
|
||||
e.Record.Set("info", system.Info{})
|
||||
}
|
||||
return nil
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// do things after a systems record is updated
|
||||
h.app.OnModelAfterUpdate("systems").Add(func(e *core.ModelEvent) error {
|
||||
newRecord := e.Model.(*models.Record)
|
||||
oldRecord := newRecord.OriginalCopy()
|
||||
h.app.OnRecordAfterUpdateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
newRecord := e.Record.Fresh()
|
||||
oldRecord := newRecord.Original()
|
||||
newStatus := newRecord.GetString("status")
|
||||
|
||||
// if system is disconnected and connection exists, remove it
|
||||
@@ -205,15 +212,13 @@ func (h *Hub) Run() {
|
||||
h.am.HandleStatusAlerts(newStatus, oldRecord)
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// do things after a systems record is deleted
|
||||
h.app.OnModelAfterDelete("systems").Add(func(e *core.ModelEvent) error {
|
||||
// if system connection exists, close it
|
||||
h.deleteSystemConnection(e.Model.(*models.Record))
|
||||
return nil
|
||||
// if system is deleted, close connection
|
||||
h.app.OnRecordAfterDeleteSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
h.deleteSystemConnection(e.Record)
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
if err := h.app.Start(); err != nil {
|
||||
@@ -229,7 +234,7 @@ func (h *Hub) startSystemUpdateTicker() {
|
||||
}
|
||||
|
||||
func (h *Hub) updateSystems() {
|
||||
records, err := h.app.Dao().FindRecordsByFilter(
|
||||
records, err := h.app.FindRecordsByFilter(
|
||||
"2hz5ncl8tizk5nx", // systems collection
|
||||
"status != 'paused'", // filter
|
||||
"updated", // sort
|
||||
@@ -258,13 +263,13 @@ func (h *Hub) updateSystems() {
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) updateSystem(record *models.Record) {
|
||||
func (h *Hub) updateSystem(record *core.Record) {
|
||||
var client *ssh.Client
|
||||
var err error
|
||||
|
||||
// check if system connection data exists
|
||||
if _, ok := h.systemConnections[record.Id]; ok {
|
||||
client = h.systemConnections[record.Id]
|
||||
// check if system connection exists
|
||||
if existingClient, ok := h.systemConnections.Load(record.Id); ok {
|
||||
client = existingClient.(*ssh.Client)
|
||||
} else {
|
||||
// create system connection
|
||||
client, err = h.createSystemConnection(record)
|
||||
@@ -275,9 +280,7 @@ func (h *Hub) updateSystem(record *models.Record) {
|
||||
}
|
||||
return
|
||||
}
|
||||
h.connectionLock.Lock()
|
||||
h.systemConnections[record.Id] = client
|
||||
h.connectionLock.Unlock()
|
||||
h.systemConnections.Store(record.Id, client)
|
||||
}
|
||||
// get system stats from agent
|
||||
var systemData system.CombinedData
|
||||
@@ -286,6 +289,7 @@ func (h *Hub) updateSystem(record *models.Record) {
|
||||
// if previous connection was closed, try again
|
||||
h.app.Logger().Error("Existing SSH connection closed. Retrying...", "host", record.GetString("host"), "port", record.GetString("port"))
|
||||
h.deleteSystemConnection(record)
|
||||
time.Sleep(time.Millisecond * 100)
|
||||
h.updateSystem(record)
|
||||
return
|
||||
}
|
||||
@@ -294,10 +298,9 @@ func (h *Hub) updateSystem(record *models.Record) {
|
||||
return
|
||||
}
|
||||
// update system record
|
||||
dao := h.app.Dao()
|
||||
record.Set("status", "up")
|
||||
record.Set("info", systemData.Info)
|
||||
if err := dao.SaveRecord(record); err != nil {
|
||||
if err := h.app.SaveNoValidate(record); err != nil {
|
||||
h.app.Logger().Error("Failed to update record: ", "err", err.Error())
|
||||
}
|
||||
// add system_stats and container_stats records
|
||||
@@ -305,42 +308,42 @@ func (h *Hub) updateSystem(record *models.Record) {
|
||||
h.app.Logger().Error("Failed to get collections: ", "err", err.Error())
|
||||
} else {
|
||||
// add new system_stats record
|
||||
systemStatsRecord := models.NewRecord(systemStats)
|
||||
systemStatsRecord := core.NewRecord(systemStats)
|
||||
systemStatsRecord.Set("system", record.Id)
|
||||
systemStatsRecord.Set("stats", systemData.Stats)
|
||||
systemStatsRecord.Set("type", "1m")
|
||||
if err := dao.SaveRecord(systemStatsRecord); err != nil {
|
||||
if err := h.app.SaveNoValidate(systemStatsRecord); err != nil {
|
||||
h.app.Logger().Error("Failed to save record: ", "err", err.Error())
|
||||
}
|
||||
// add new container_stats record
|
||||
if len(systemData.Containers) > 0 {
|
||||
containerStatsRecord := models.NewRecord(containerStats)
|
||||
containerStatsRecord := core.NewRecord(containerStats)
|
||||
containerStatsRecord.Set("system", record.Id)
|
||||
containerStatsRecord.Set("stats", systemData.Containers)
|
||||
containerStatsRecord.Set("type", "1m")
|
||||
if err := dao.SaveRecord(containerStatsRecord); err != nil {
|
||||
if err := h.app.SaveNoValidate(containerStatsRecord); err != nil {
|
||||
h.app.Logger().Error("Failed to save record: ", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// system info alerts (todo: extra fs alerts)
|
||||
// system info alerts
|
||||
if err := h.am.HandleSystemAlerts(record, systemData.Info, systemData.Stats.Temperatures, systemData.Stats.ExtraFs); err != nil {
|
||||
h.app.Logger().Error("System alerts error", "err", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// return system_stats and container_stats collections
|
||||
func (h *Hub) getCollections() (*models.Collection, *models.Collection, error) {
|
||||
func (h *Hub) getCollections() (*core.Collection, *core.Collection, error) {
|
||||
if h.systemStats == nil {
|
||||
systemStats, err := h.app.Dao().FindCollectionByNameOrId("system_stats")
|
||||
systemStats, err := h.app.FindCollectionByNameOrId("system_stats")
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
h.systemStats = systemStats
|
||||
}
|
||||
if h.containerStats == nil {
|
||||
containerStats, err := h.app.Dao().FindCollectionByNameOrId("container_stats")
|
||||
containerStats, err := h.app.FindCollectionByNameOrId("container_stats")
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -350,28 +353,27 @@ func (h *Hub) getCollections() (*models.Collection, *models.Collection, error) {
|
||||
}
|
||||
|
||||
// set system to specified status and save record
|
||||
func (h *Hub) updateSystemStatus(record *models.Record, status string) {
|
||||
if record.GetString("status") != status {
|
||||
func (h *Hub) updateSystemStatus(record *core.Record, status string) {
|
||||
if record.Fresh().GetString("status") != status {
|
||||
record.Set("status", status)
|
||||
if err := h.app.Dao().SaveRecord(record); err != nil {
|
||||
if err := h.app.SaveNoValidate(record); err != nil {
|
||||
h.app.Logger().Error("Failed to update record: ", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) deleteSystemConnection(record *models.Record) {
|
||||
if _, ok := h.systemConnections[record.Id]; ok {
|
||||
if h.systemConnections[record.Id] != nil {
|
||||
h.systemConnections[record.Id].Close()
|
||||
// delete system connection from map and close connection
|
||||
func (h *Hub) deleteSystemConnection(record *core.Record) {
|
||||
if client, ok := h.systemConnections.Load(record.Id); ok {
|
||||
if sshClient := client.(*ssh.Client); sshClient != nil {
|
||||
sshClient.Close()
|
||||
}
|
||||
h.connectionLock.Lock()
|
||||
defer h.connectionLock.Unlock()
|
||||
delete(h.systemConnections, record.Id)
|
||||
h.systemConnections.Delete(record.Id)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) createSystemConnection(record *models.Record) (*ssh.Client, error) {
|
||||
client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%s", record.GetString("host"), record.GetString("port")), h.sshClientConfig)
|
||||
func (h *Hub) createSystemConnection(record *core.Record) (*ssh.Client, error) {
|
||||
client, err := ssh.Dial("tcp", net.JoinHostPort(record.GetString("host"), record.GetString("port")), h.sshClientConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -397,14 +399,14 @@ func (h *Hub) createSSHClientConfig() error {
|
||||
ssh.PublicKeys(signer),
|
||||
},
|
||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
||||
Timeout: 5 * time.Second,
|
||||
Timeout: 4 * time.Second,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Fetches system stats from the agent and decodes the json data into the provided struct
|
||||
func (h *Hub) requestJsonFromAgent(client *ssh.Client, systemData *system.CombinedData) error {
|
||||
session, err := newSessionWithTimeout(client, 5*time.Second)
|
||||
session, err := newSessionWithTimeout(client, 4*time.Second)
|
||||
if err != nil {
|
||||
return fmt.Errorf("bad client")
|
||||
}
|
||||
|
||||
@@ -11,8 +11,7 @@ import (
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/daos"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/tools/types"
|
||||
)
|
||||
|
||||
@@ -41,7 +40,7 @@ func NewRecordManager(app *pocketbase.PocketBase) *RecordManager {
|
||||
}
|
||||
|
||||
// Create longer records by averaging shorter records
|
||||
func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
func (rm *RecordManager) CreateLongerRecords(collections []*core.Collection) {
|
||||
// start := time.Now()
|
||||
longerRecordData := []LongerRecordData{
|
||||
{
|
||||
@@ -71,8 +70,8 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
},
|
||||
}
|
||||
// wrap the operations in a transaction
|
||||
rm.app.Dao().RunInTransaction(func(txDao *daos.Dao) error {
|
||||
activeSystems, err := txDao.FindRecordsByExpr("systems", dbx.NewExp("status = 'up'"))
|
||||
rm.app.RunInTransaction(func(txApp core.App) error {
|
||||
activeSystems, err := txApp.FindAllRecords("systems", dbx.NewExp("status = 'up'"))
|
||||
if err != nil {
|
||||
log.Println("failed to get active systems", "err", err.Error())
|
||||
return err
|
||||
@@ -92,7 +91,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
for _, collection := range collections {
|
||||
// check creation time of last longer record if not 10m, since 10m is created every run
|
||||
if recordData.longerType != "10m" {
|
||||
lastLongerRecord, err := txDao.FindFirstRecordByFilter(
|
||||
lastLongerRecord, err := txApp.FindFirstRecordByFilter(
|
||||
collection.Id,
|
||||
"type = {:type} && system = {:system} && created > {:created}",
|
||||
dbx.Params{"type": recordData.longerType, "system": system.Id, "created": longerRecordPeriod},
|
||||
@@ -106,7 +105,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
// get shorter records from the past x minutes
|
||||
var stats RecordStats
|
||||
|
||||
err := txDao.DB().
|
||||
err := txApp.DB().
|
||||
Select("stats").
|
||||
From(collection.Name).
|
||||
AndWhere(dbx.NewExp(
|
||||
@@ -125,7 +124,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
continue
|
||||
}
|
||||
// average the shorter records and create longer record
|
||||
longerRecord := models.NewRecord(collection)
|
||||
longerRecord := core.NewRecord(collection)
|
||||
longerRecord.Set("system", system.Id)
|
||||
longerRecord.Set("type", recordData.longerType)
|
||||
switch collection.Name {
|
||||
@@ -134,7 +133,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
case "container_stats":
|
||||
longerRecord.Set("stats", rm.AverageContainerStats(stats))
|
||||
}
|
||||
if err := txDao.SaveRecord(longerRecord); err != nil {
|
||||
if err := txApp.SaveNoValidate(longerRecord); err != nil {
|
||||
log.Println("failed to save longer record", "err", err.Error())
|
||||
}
|
||||
}
|
||||
@@ -149,11 +148,7 @@ func (rm *RecordManager) CreateLongerRecords(collections []*models.Collection) {
|
||||
|
||||
// Calculate the average stats of a list of system_stats records without reflect
|
||||
func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
sum := system.Stats{
|
||||
Temperatures: make(map[string]float64),
|
||||
ExtraFs: make(map[string]*system.FsStats),
|
||||
}
|
||||
|
||||
sum := system.Stats{}
|
||||
count := float64(len(records))
|
||||
// use different counter for temps in case some records don't have them
|
||||
tempCount := float64(0)
|
||||
@@ -184,6 +179,9 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
sum.MaxDiskWritePs = max(sum.MaxDiskWritePs, stats.MaxDiskWritePs, stats.DiskWritePs)
|
||||
// add temps to sum
|
||||
if stats.Temperatures != nil {
|
||||
if sum.Temperatures == nil {
|
||||
sum.Temperatures = make(map[string]float64, len(stats.Temperatures))
|
||||
}
|
||||
tempCount++
|
||||
for key, value := range stats.Temperatures {
|
||||
if _, ok := sum.Temperatures[key]; !ok {
|
||||
@@ -194,6 +192,9 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
}
|
||||
// add extra fs to sum
|
||||
if stats.ExtraFs != nil {
|
||||
if sum.ExtraFs == nil {
|
||||
sum.ExtraFs = make(map[string]*system.FsStats, len(stats.ExtraFs))
|
||||
}
|
||||
for key, value := range stats.ExtraFs {
|
||||
if _, ok := sum.ExtraFs[key]; !ok {
|
||||
sum.ExtraFs[key] = &system.FsStats{}
|
||||
@@ -207,6 +208,25 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
sum.ExtraFs[key].MaxDiskWritePS = max(sum.ExtraFs[key].MaxDiskWritePS, value.MaxDiskWritePS, value.DiskWritePs)
|
||||
}
|
||||
}
|
||||
// add GPU data
|
||||
if stats.GPUData != nil {
|
||||
if sum.GPUData == nil {
|
||||
sum.GPUData = make(map[string]system.GPUData, len(stats.GPUData))
|
||||
}
|
||||
for id, value := range stats.GPUData {
|
||||
if _, ok := sum.GPUData[id]; !ok {
|
||||
sum.GPUData[id] = system.GPUData{Name: value.Name}
|
||||
}
|
||||
gpu := sum.GPUData[id]
|
||||
gpu.Temperature += value.Temperature
|
||||
gpu.MemoryUsed += value.MemoryUsed
|
||||
gpu.MemoryTotal += value.MemoryTotal
|
||||
gpu.Usage += value.Usage
|
||||
gpu.Power += value.Power
|
||||
gpu.Count += value.Count
|
||||
sum.GPUData[id] = gpu
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stats = system.Stats{
|
||||
@@ -232,14 +252,14 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
MaxNetworkRecv: sum.MaxNetworkRecv,
|
||||
}
|
||||
|
||||
if len(sum.Temperatures) != 0 {
|
||||
if sum.Temperatures != nil {
|
||||
stats.Temperatures = make(map[string]float64, len(sum.Temperatures))
|
||||
for key, value := range sum.Temperatures {
|
||||
stats.Temperatures[key] = twoDecimals(value / tempCount)
|
||||
}
|
||||
}
|
||||
|
||||
if len(sum.ExtraFs) != 0 {
|
||||
if sum.ExtraFs != nil {
|
||||
stats.ExtraFs = make(map[string]*system.FsStats, len(sum.ExtraFs))
|
||||
for key, value := range sum.ExtraFs {
|
||||
stats.ExtraFs[key] = &system.FsStats{
|
||||
@@ -253,6 +273,21 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
}
|
||||
}
|
||||
|
||||
if sum.GPUData != nil {
|
||||
stats.GPUData = make(map[string]system.GPUData, len(sum.GPUData))
|
||||
for id, value := range sum.GPUData {
|
||||
stats.GPUData[id] = system.GPUData{
|
||||
Name: value.Name,
|
||||
Temperature: twoDecimals(value.Temperature / count),
|
||||
MemoryUsed: twoDecimals(value.MemoryUsed / count),
|
||||
MemoryTotal: twoDecimals(value.MemoryTotal / count),
|
||||
Usage: twoDecimals(value.Usage / count),
|
||||
Power: twoDecimals(value.Power / count),
|
||||
Count: twoDecimals(value.Count / count),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return stats
|
||||
}
|
||||
|
||||
@@ -318,7 +353,7 @@ func (rm *RecordManager) DeleteOldRecords() {
|
||||
retention: 30 * 24 * time.Hour,
|
||||
},
|
||||
}
|
||||
db := rm.app.Dao().NonconcurrentDB()
|
||||
db := rm.app.NonconcurrentDB()
|
||||
for _, recordData := range recordData {
|
||||
for _, collectionSlug := range collections {
|
||||
formattedDate := time.Now().UTC().Add(-recordData.retention).Format(types.DefaultDateLayout)
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
package users
|
||||
|
||||
import (
|
||||
"beszel/migrations"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
)
|
||||
|
||||
type UserManager struct {
|
||||
@@ -26,16 +28,17 @@ func NewUserManager(app *pocketbase.PocketBase) *UserManager {
|
||||
}
|
||||
}
|
||||
|
||||
func (um *UserManager) InitializeUserRole(e *core.ModelEvent) error {
|
||||
user := e.Model.(*models.Record)
|
||||
if user.GetString("role") == "" {
|
||||
user.Set("role", "user")
|
||||
// Initialize user role if not set
|
||||
func (um *UserManager) InitializeUserRole(e *core.RecordEvent) error {
|
||||
if e.Record.GetString("role") == "" {
|
||||
e.Record.Set("role", "user")
|
||||
}
|
||||
return nil
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error {
|
||||
record := e.Model.(*models.Record)
|
||||
// Initialize user settings with defaults if not set
|
||||
func (um *UserManager) InitializeUserSettings(e *core.RecordEvent) error {
|
||||
record := e.Record
|
||||
// intialize settings with defaults
|
||||
settings := UserSettings{
|
||||
// Language: "en",
|
||||
@@ -46,7 +49,7 @@ func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error {
|
||||
record.UnmarshalJSONField("settings", &settings)
|
||||
if len(settings.NotificationEmails) == 0 {
|
||||
// get user email from auth record
|
||||
if errs := um.app.Dao().ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 {
|
||||
if errs := um.app.ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 {
|
||||
// app.Logger().Error("failed to expand user relation", "errs", errs)
|
||||
if user := record.ExpandedOne("user"); user != nil {
|
||||
settings.NotificationEmails = []string{user.GetString("email")}
|
||||
@@ -61,5 +64,57 @@ func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error {
|
||||
// settings.NotificationWebhooks = []string{""}
|
||||
// }
|
||||
record.Set("settings", settings)
|
||||
return nil
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// Custom API endpoint to create the first user.
|
||||
// Mimics previous default behavior in PocketBase < 0.23.0 allowing user to be created through the Beszel UI.
|
||||
func (um *UserManager) CreateFirstUser(e *core.RequestEvent) error {
|
||||
// check that there are no users
|
||||
totalUsers, err := um.app.CountRecords("users")
|
||||
if err != nil || totalUsers > 0 {
|
||||
return e.JSON(http.StatusForbidden, map[string]string{"err": "Forbidden"})
|
||||
}
|
||||
// check that there is only one superuser and the email matches the email of the superuser we set up in initial-settings.go
|
||||
adminUsers, err := um.app.FindAllRecords(core.CollectionNameSuperusers)
|
||||
if err != nil || len(adminUsers) != 1 || adminUsers[0].GetString("email") != migrations.TempAdminEmail {
|
||||
return e.JSON(http.StatusForbidden, map[string]string{"err": "Forbidden"})
|
||||
}
|
||||
// create first user using supplied email and password in request body
|
||||
data := struct {
|
||||
Email string `json:"email"`
|
||||
Password string `json:"password"`
|
||||
}{}
|
||||
if err := e.BindBody(&data); err != nil {
|
||||
return e.JSON(http.StatusBadRequest, map[string]string{"err": err.Error()})
|
||||
}
|
||||
if data.Email == "" || data.Password == "" {
|
||||
return e.JSON(http.StatusBadRequest, map[string]string{"err": "Bad request"})
|
||||
}
|
||||
|
||||
collection, _ := um.app.FindCollectionByNameOrId("users")
|
||||
user := core.NewRecord(collection)
|
||||
user.SetEmail(data.Email)
|
||||
user.SetPassword(data.Password)
|
||||
user.Set("role", "admin")
|
||||
user.Set("verified", true)
|
||||
if username := strings.Split(data.Email, "@")[0]; len(username) > 2 {
|
||||
user.Set("username", username)
|
||||
}
|
||||
if err := um.app.Save(user); err != nil {
|
||||
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
|
||||
}
|
||||
// create superuser using the email of the first user
|
||||
collection, _ = um.app.FindCollectionByNameOrId(core.CollectionNameSuperusers)
|
||||
adminUser := core.NewRecord(collection)
|
||||
adminUser.SetEmail(data.Email)
|
||||
adminUser.SetPassword(data.Password)
|
||||
if err := um.app.Save(adminUser); err != nil {
|
||||
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
|
||||
}
|
||||
// delete the intial superuser
|
||||
if err := um.app.Delete(adminUsers[0]); err != nil {
|
||||
return e.JSON(http.StatusInternalServerError, map[string]string{"err": err.Error()})
|
||||
}
|
||||
return e.JSON(http.StatusOK, map[string]string{"msg": "User created"})
|
||||
}
|
||||
|
||||
@@ -1,481 +0,0 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/daos"
|
||||
m "github.com/pocketbase/pocketbase/migrations"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
)
|
||||
|
||||
func init() {
|
||||
m.Register(func(db dbx.Builder) error {
|
||||
jsonData := `[
|
||||
{
|
||||
"id": "2hz5ncl8tizk5nx",
|
||||
"created": "2024-07-07 16:08:20.979Z",
|
||||
"updated": "2024-10-12 18:55:51.623Z",
|
||||
"name": "systems",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "7xloxkwk",
|
||||
"name": "name",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"pattern": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "waj7seaf",
|
||||
"name": "status",
|
||||
"type": "select",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"up",
|
||||
"down",
|
||||
"paused",
|
||||
"pending"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "ve781smf",
|
||||
"name": "host",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"pattern": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "pij0k2jk",
|
||||
"name": "port",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"pattern": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "qoq64ntl",
|
||||
"name": "info",
|
||||
"type": "json",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSize": 2000000
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "jcarjnjj",
|
||||
"name": "users",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"cascadeDelete": true,
|
||||
"minSelect": null,
|
||||
"maxSelect": null,
|
||||
"displayFields": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"listRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id",
|
||||
"viewRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id",
|
||||
"createRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
|
||||
"updateRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
|
||||
"deleteRule": "@request.auth.id != \"\" && users.id ?= @request.auth.id && @request.auth.role != \"readonly\"",
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"id": "ej9oowivz8b2mht",
|
||||
"created": "2024-07-07 16:09:09.179Z",
|
||||
"updated": "2024-10-12 18:55:51.623Z",
|
||||
"name": "system_stats",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "h9sg148r",
|
||||
"name": "system",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"cascadeDelete": true,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "azftn0be",
|
||||
"name": "stats",
|
||||
"type": "json",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSize": 2000000
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "m1ekhli3",
|
||||
"name": "type",
|
||||
"type": "select",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"1m",
|
||||
"10m",
|
||||
"20m",
|
||||
"120m",
|
||||
"480m"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE INDEX ` + "`" + `idx_GxIee0j` + "`" + ` ON ` + "`" + `system_stats` + "`" + ` (` + "`" + `system` + "`" + `)"
|
||||
],
|
||||
"listRule": "@request.auth.id != \"\"",
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"id": "juohu4jipgc13v7",
|
||||
"created": "2024-07-07 16:09:57.976Z",
|
||||
"updated": "2024-10-12 18:55:51.623Z",
|
||||
"name": "container_stats",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "hutcu6ps",
|
||||
"name": "system",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"cascadeDelete": true,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "r39hhnil",
|
||||
"name": "stats",
|
||||
"type": "json",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSize": 2000000
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "vo7iuj96",
|
||||
"name": "type",
|
||||
"type": "select",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"1m",
|
||||
"10m",
|
||||
"20m",
|
||||
"120m",
|
||||
"480m"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"listRule": "@request.auth.id != \"\"",
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"id": "_pb_users_auth_",
|
||||
"created": "2024-07-14 16:25:18.226Z",
|
||||
"updated": "2024-10-12 22:27:19.081Z",
|
||||
"name": "users",
|
||||
"type": "auth",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "qkbp58ae",
|
||||
"name": "role",
|
||||
"type": "select",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"user",
|
||||
"admin",
|
||||
"readonly"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "users_avatar",
|
||||
"name": "avatar",
|
||||
"type": "file",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"mimeTypes": [
|
||||
"image/jpeg",
|
||||
"image/png",
|
||||
"image/svg+xml",
|
||||
"image/gif",
|
||||
"image/webp"
|
||||
],
|
||||
"thumbs": null,
|
||||
"maxSelect": 1,
|
||||
"maxSize": 5242880,
|
||||
"protected": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"listRule": "id = @request.auth.id",
|
||||
"viewRule": "id = @request.auth.id",
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"options": {
|
||||
"allowEmailAuth": true,
|
||||
"allowOAuth2Auth": true,
|
||||
"allowUsernameAuth": false,
|
||||
"exceptEmailDomains": null,
|
||||
"manageRule": null,
|
||||
"minPasswordLength": 8,
|
||||
"onlyEmailDomains": null,
|
||||
"onlyVerified": true,
|
||||
"requireEmail": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "elngm8x1l60zi2v",
|
||||
"created": "2024-07-15 01:16:04.044Z",
|
||||
"updated": "2024-10-12 22:27:29.128Z",
|
||||
"name": "alerts",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "hn5ly3vi",
|
||||
"name": "user",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"cascadeDelete": true,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "g5sl3jdg",
|
||||
"name": "system",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"cascadeDelete": true,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "zj3ingrv",
|
||||
"name": "name",
|
||||
"type": "select",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSelect": 1,
|
||||
"values": [
|
||||
"Status",
|
||||
"CPU",
|
||||
"Memory",
|
||||
"Disk",
|
||||
"Temperature",
|
||||
"Bandwidth"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "o2ablxvn",
|
||||
"name": "value",
|
||||
"type": "number",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": null,
|
||||
"noDecimal": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "fstdehcq",
|
||||
"name": "min",
|
||||
"type": "number",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"min": null,
|
||||
"max": 60,
|
||||
"noDecimal": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "6hgdf6hs",
|
||||
"name": "triggered",
|
||||
"type": "bool",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {}
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"listRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"viewRule": "",
|
||||
"createRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"updateRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"deleteRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"id": "4afacsdnlu8q8r2",
|
||||
"created": "2024-09-12 17:42:55.324Z",
|
||||
"updated": "2024-10-12 18:55:51.624Z",
|
||||
"name": "user_settings",
|
||||
"type": "base",
|
||||
"system": false,
|
||||
"schema": [
|
||||
{
|
||||
"system": false,
|
||||
"id": "d5vztyxa",
|
||||
"name": "user",
|
||||
"type": "relation",
|
||||
"required": true,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"cascadeDelete": false,
|
||||
"minSelect": null,
|
||||
"maxSelect": 1,
|
||||
"displayFields": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"system": false,
|
||||
"id": "xcx4qgqq",
|
||||
"name": "settings",
|
||||
"type": "json",
|
||||
"required": false,
|
||||
"presentable": false,
|
||||
"unique": false,
|
||||
"options": {
|
||||
"maxSize": 2000000
|
||||
}
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX ` + "`" + `idx_30Lwgf2` + "`" + ` ON ` + "`" + `user_settings` + "`" + ` (` + "`" + `user` + "`" + `)"
|
||||
],
|
||||
"listRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"viewRule": null,
|
||||
"createRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"updateRule": "@request.auth.id != \"\" && user.id = @request.auth.id",
|
||||
"deleteRule": null,
|
||||
"options": {}
|
||||
}
|
||||
]`
|
||||
|
||||
collections := []*models.Collection{}
|
||||
if err := json.Unmarshal([]byte(jsonData), &collections); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return daos.New(db).ImportCollections(collections, true, nil)
|
||||
}, func(db dbx.Builder) error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
1258
beszel/migrations/1732489917_collections_snapshot.go
Normal file
@@ -1,19 +1,29 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/daos"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
m "github.com/pocketbase/pocketbase/migrations"
|
||||
"github.com/pocketbase/pocketbase/tools/security"
|
||||
)
|
||||
|
||||
var (
|
||||
TempAdminEmail = "_@b.b"
|
||||
)
|
||||
|
||||
func init() {
|
||||
m.Register(func(db dbx.Builder) error {
|
||||
dao := daos.New(db)
|
||||
|
||||
settings, _ := dao.FindSettings()
|
||||
m.Register(func(app core.App) error {
|
||||
// initial settings
|
||||
settings := app.Settings()
|
||||
settings.Meta.AppName = "Beszel"
|
||||
settings.Meta.HideControls = true
|
||||
|
||||
return dao.SaveSettings(settings)
|
||||
if err := app.Save(settings); err != nil {
|
||||
return err
|
||||
}
|
||||
// create superuser
|
||||
collection, _ := app.FindCollectionByNameOrId(core.CollectionNameSuperusers)
|
||||
user := core.NewRecord(collection)
|
||||
user.SetEmail(TempAdminEmail)
|
||||
user.SetPassword(security.RandomString(12))
|
||||
return app.Save(user)
|
||||
}, nil)
|
||||
}
|
||||
|
||||
@@ -3,11 +3,11 @@ package site
|
||||
|
||||
import (
|
||||
"embed"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
"io/fs"
|
||||
)
|
||||
|
||||
//go:embed all:dist
|
||||
var assets embed.FS
|
||||
var distDir embed.FS
|
||||
|
||||
var Dist = echo.MustSubFS(assets, "dist")
|
||||
// DistDirFS contains the embedded dist directory files (without the "dist" prefix)
|
||||
var DistDirFS, _ = fs.Sub(distDir, "dist")
|
||||
|
||||
@@ -1,7 +1,29 @@
|
||||
import type { LinguiConfig } from "@lingui/conf"
|
||||
|
||||
const config: LinguiConfig = {
|
||||
locales: ["en", "ar", "de", "es", "fr", "it", "ja", "ko", "pt", "tr", "ru", "uk", "vi", "zh-CN", "zh-HK"],
|
||||
locales: [
|
||||
"en",
|
||||
"ar",
|
||||
"cs",
|
||||
"de",
|
||||
"es",
|
||||
"fa",
|
||||
"fr",
|
||||
"hr",
|
||||
"it",
|
||||
"ja",
|
||||
"ko",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt",
|
||||
"tr",
|
||||
"ru",
|
||||
"sv",
|
||||
"uk",
|
||||
"vi",
|
||||
"zh-CN",
|
||||
"zh-HK",
|
||||
],
|
||||
sourceLocale: "en",
|
||||
compileNamespace: "ts",
|
||||
catalogs: [
|
||||
|
||||
1471
beszel/site/package-lock.json
generated
@@ -5,61 +5,61 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"build": "lingui extract --overwrite && lingui compile && vite build",
|
||||
"preview": "vite preview",
|
||||
"sync": "lingui extract --overwrite && lingui compile",
|
||||
"sync_and_purge": "lingui extract --overwrite --clean && lingui compile"
|
||||
},
|
||||
"dependencies": {
|
||||
"@henrygd/queue": "^1.0.7",
|
||||
"@lingui/detect-locale": "^4.13.0",
|
||||
"@lingui/macro": "^4.13.0",
|
||||
"@lingui/react": "^4.13.0",
|
||||
"@lingui/detect-locale": "^4.14.1",
|
||||
"@lingui/macro": "^4.14.1",
|
||||
"@lingui/react": "^4.14.1",
|
||||
"@nanostores/react": "^0.7.3",
|
||||
"@nanostores/router": "^0.11.0",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.2",
|
||||
"@radix-ui/react-checkbox": "^1.1.2",
|
||||
"@radix-ui/react-dialog": "^1.1.2",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.4",
|
||||
"@radix-ui/react-checkbox": "^1.1.3",
|
||||
"@radix-ui/react-dialog": "^1.1.4",
|
||||
"@radix-ui/react-direction": "^1.1.0",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.2",
|
||||
"@radix-ui/react-label": "^2.1.0",
|
||||
"@radix-ui/react-select": "^2.1.2",
|
||||
"@radix-ui/react-separator": "^1.1.0",
|
||||
"@radix-ui/react-slider": "^1.2.1",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"@radix-ui/react-switch": "^1.1.1",
|
||||
"@radix-ui/react-tabs": "^1.1.1",
|
||||
"@radix-ui/react-toast": "^1.2.2",
|
||||
"@radix-ui/react-tooltip": "^1.1.3",
|
||||
"@tanstack/react-table": "^8.20.5",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.4",
|
||||
"@radix-ui/react-label": "^2.1.1",
|
||||
"@radix-ui/react-select": "^2.1.4",
|
||||
"@radix-ui/react-separator": "^1.1.1",
|
||||
"@radix-ui/react-slider": "^1.2.2",
|
||||
"@radix-ui/react-slot": "^1.1.1",
|
||||
"@radix-ui/react-switch": "^1.1.2",
|
||||
"@radix-ui/react-tabs": "^1.1.2",
|
||||
"@radix-ui/react-toast": "^1.2.4",
|
||||
"@radix-ui/react-tooltip": "^1.1.6",
|
||||
"@tanstack/react-table": "^8.20.6",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.0.0",
|
||||
"cmdk": "^1.0.4",
|
||||
"d3-time": "^3.1.0",
|
||||
"lucide-react": "^0.452.0",
|
||||
"nanostores": "^0.11.3",
|
||||
"pocketbase": "^0.21.5",
|
||||
"pocketbase": "^0.22.1",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"recharts": "^2.13.0",
|
||||
"tailwind-merge": "^2.5.4",
|
||||
"recharts": "^2.15.0",
|
||||
"tailwind-merge": "^2.5.5",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"valibot": "^0.36.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lingui/cli": "^4.13.0",
|
||||
"@lingui/cli": "^4.14.1",
|
||||
"@lingui/swc-plugin": "^4.1.0",
|
||||
"@lingui/vite-plugin": "^4.13.0",
|
||||
"@types/bun": "^1.1.11",
|
||||
"@types/react": "^18.3.11",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"@vitejs/plugin-react-swc": "^3.7.1",
|
||||
"@lingui/vite-plugin": "^4.14.1",
|
||||
"@types/bun": "^1.1.14",
|
||||
"@types/react": "^18.3.17",
|
||||
"@types/react-dom": "^18.3.5",
|
||||
"@vitejs/plugin-react-swc": "^3.7.2",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"postcss": "^8.4.47",
|
||||
"tailwindcss": "^3.4.14",
|
||||
"postcss": "^8.4.49",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"tailwindcss-rtl": "^0.9.0",
|
||||
"typescript": "^5.6.3",
|
||||
"vite": "^5.4.9"
|
||||
"typescript": "^5.7.2",
|
||||
"vite": "^5.4.11"
|
||||
},
|
||||
"overrides": {
|
||||
"@nanostores/router": {
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.2 6.9c-1 0-2.5-1-4-1-2 0-4 1.1-5 3-2 3.6-.5 9 1.5 12 1 1.5 2.3 3.2 3.8 3.1 1.6 0 2.1-1 4-1 1.8 0 2.3 1 4 1 1.6 0 2.6-1.5 3.6-3a13 13 0 0 0 1.7-3.4 5.3 5.3 0 0 1-.6-9.4 5.6 5.6 0 0 0-4.4-2.4C14.8 5.6 13 7 12.2 7zm3.3-3c.9-1 1.4-2.5 1.3-3.9-1.2 0-2.7.8-3.6 1.8A5 5 0 0 0 12 5.5c1.3.1 2.7-.7 3.5-1.7"/></svg>
|
||||
|
Before Width: | Height: | Size: 378 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M.8 1.2a.8.8 0 0 0-.8 1l3.3 19.7c0 .5.5.9 1 .9h15.6a.8.8 0 0 0 .8-.7l3.3-20a.8.8 0 0 0-.8-.9zm13.7 14.3h-5l-1.3-7h7.5z"/></svg>
|
||||
|
Before Width: | Height: | Size: 196 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.3 4.4a19.8 19.8 0 0 0-4.9-1.5L14.7 4C13 4 11.1 4 9.3 4.1L8.6 3a19.7 19.7 0 0 0-5 1.5C.6 9-.4 13.6.1 18.1c2 1.5 4 2.4 6 3h.1c.5-.6.9-1.3 1.2-2l-1.9-1V18l.4-.3c4 1.8 8.2 1.8 12.1 0h.1l.4.3v.1a12.3 12.3 0 0 1-2 1l1.3 2c2-.6 4-1.5 6-3h.1c.5-5.2-.8-9.7-3.6-13.7zM8 15.4c-1.2 0-2.1-1.2-2.1-2.5s1-2.4 2.1-2.4c1.2 0 2.2 1 2.2 2.4 0 1.3-1 2.4-2.2 2.4zm8 0c-1.2 0-2.2-1.2-2.2-2.5s1-2.4 2.2-2.4c1.2 0 2.2 1 2.2 2.4 0 1.3-1 2.4-2.2 2.4Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 506 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.1 23.7v-8H6.6V12h2.5v-1.5c0-4.1 1.8-6 5.9-6h1.4a8.7 8.7 0 0 1 1.2.3V8a8.6 8.6 0 0 0-.7 0 26.8 26.8 0 0 0-.7 0c-.7 0-1.3 0-1.7.3a1.7 1.7 0 0 0-.7.6c-.2.4-.3 1-.3 1.7V12h3.9l-.4 2.1-.3 1.6h-3.2V24a12 12 0 1 0-4.4-.3Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 295 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4.2 4.6a4.2 4.2 0 0 0-2.9 1.1C-.4 7.3 0 9.7.1 10.1c0 .4.3 1.6 1.2 2.7C3 15 6.8 15 6.8 15S7.3 16 8 17c1 1.3 2 2.3 2.9 2.4H18s.4 0 1-.4c.6-.3 1-.9 1-.9s.6-.5 1.3-1.7l.5-1s2.1-4.6 2.1-9c0-1.2-.4-1.5-.4-1.5l-.4-.2s-4.5.3-6.8.3h-1.5v4.5l-.6-.3V5h-3.5l-6-.4h-.6zm.4 1.8s.3 2.3.7 3.6c.2 1.1 1 3 1 3l-1.7-.3c-1-.4-1.4-.8-1.4-.8s-.8-.5-1.1-1.5c-.7-1.7 0-2.7 0-2.7s.2-.9 1.4-1.1c.4-.2.9-.2 1-.2zM12.9 9l.5.1.9.4-.6 1.1a.7.7 0 0 0-.6.4.7.7 0 0 0 .1.7l-1 2a.7.7 0 0 0-.6.5.7.7 0 0 0 .3.7.7.7 0 0 0 1-.2.7.7 0 0 0-.2-.8l1-2a.7.7 0 0 0 .2 0 .7.7 0 0 0 .3 0 8.8 8.8 0 0 1 1 .4.8.8 0 0 1 .3.3l-.1.6c0 .3-.7 1.5-.7 1.5a.7.7 0 0 0-.7.5.7.7 0 1 0 1.2-.2l.2-.5.5-1.1c0-.1.2-.4.1-.8a1 1 0 0 0-.5-.7l-1-.6-.1-.2a.7.7 0 0 0-.2-.3l.5-1 3 1.4s.4.2.5.6v.6L16 16.8s-.2.5-.7.5a1 1 0 0 1-.4 0h-.2L10.4 15s-.4-.2-.5-.6l.1-.7 2-4.2s.3-.4.5-.5A.9.9 0 0 1 13 9z"/></svg>
|
||||
|
Before Width: | Height: | Size: 907 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm6 5.3c.4 0 .7.3.7.6v1.5a.6.6 0 0 1-.6.6H9.8C8.8 8 8 8.8 8 9.8v5.6c0 .3.3.6.6.6h5.6c1 0 1.8-.8 1.8-1.8V14a.6.6 0 0 0-.6-.6h-4.1a.6.6 0 0 1-.6-.6v-1.4a.6.6 0 0 1 .6-.6H18c.3 0 .6.2.6.6v3.4a4 4 0 0 1-4 4H5.9a.6.6 0 0 1-.6-.6V9.8a4.4 4.4 0 0 1 4.5-4.5H18Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 406 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 .3a12 12 0 0 0-3.8 23.4c.6.1.8-.3.8-.6v-2c-3.3.7-4-1.6-4-1.6-.6-1.4-1.4-1.8-1.4-1.8-1-.7.1-.7.1-.7 1.2 0 1.9 1.2 1.9 1.2 1 1.8 2.8 1.3 3.5 1 0-.8.4-1.3.7-1.6-2.7-.3-5.5-1.3-5.5-6 0-1.2.5-2.3 1.3-3.1-.2-.4-.6-1.6 0-3.2 0 0 1-.3 3.4 1.2a11.5 11.5 0 0 1 6 0c2.3-1.5 3.3-1.2 3.3-1.2.6 1.6.2 2.8 0 3.2.9.8 1.3 1.9 1.3 3.2 0 4.6-2.8 5.6-5.5 5.9.5.4.9 1 .9 2.2v3.3c0 .3.1.7.8.6A12 12 0 0 0 12 .3"/></svg>
|
||||
|
Before Width: | Height: | Size: 470 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23.6 9.6 20.3 1a.9.9 0 0 0-.3-.4.9.9 0 0 0-1 0 .9.9 0 0 0-.3.5l-2.2 6.7h-9L5.3 1.1A.9.9 0 0 0 5 .6a.9.9 0 0 0-1 0 .9.9 0 0 0-.3.4L.4 9.5a6 6 0 0 0 2 7.1l5 3.8 2.5 1.8 1.5 1.1a1 1 0 0 0 1.2 0l1.5-1 2.5-2 5-3.7a6 6 0 0 0 2-7z"/></svg>
|
||||
|
Before Width: | Height: | Size: 302 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.5 11v3.2h7.8a7 7 0 0 1-1.8 4.1 8 8 0 0 1-6 2.4c-4.8 0-8.6-3.9-8.6-8.7a8.6 8.6 0 0 1 14.5-6.4l2.3-2.3C18.7 1.4 16 0 12.5 0 5.9 0 .3 5.4.3 12S6 24 12.5 24a11 11 0 0 0 8.4-3.4c2.1-2.1 2.8-5.2 2.8-7.6 0-.8 0-1.5-.2-2h-11z"/></svg>
|
||||
|
Before Width: | Height: | Size: 299 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 0C5.8.2 5 .4 4.1.7 3.3 1 2.7 1.4 2 2c-.7.7-1 1.4-1.4 2.2C.3 4.9.1 5.8.1 7a84.6 84.6 0 0 0 .5 12.8c.4.8.8 1.4 1.4 2.1.7.7 1.4 1 2.2 1.4.7.3 1.6.5 2.9.5a85 85 0 0 0 12.8-.5c.8-.4 1.4-.8 2.1-1.4.7-.7 1-1.4 1.4-2.2.3-.7.5-1.6.5-2.9a85 85 0 0 0-.5-12.8C23 3.3 22.6 2.7 22 2c-.7-.7-1.4-1-2.2-1.4-.7-.3-1.6-.5-2.9-.5A85.5 85.5 0 0 0 7 0m.2 21.7c-1.2 0-1.8-.3-2.3-.4-.5-.2-1-.5-1.3-1-.5-.3-.7-.7-1-1.3-.1-.4-.3-1-.4-2.2a84.8 84.8 0 0 1 .4-12c.2-.5.5-1 1-1.3.3-.5.7-.7 1.3-1 .4-.1 1-.3 2.2-.4a84.4 84.4 0 0 1 12 .4c.5.3 1 .5 1.3 1 .5.3.7.7 1 1.3.1.4.3 1 .4 2.2a82.7 82.7 0 0 1-.4 12c-.2.5-.5 1-1 1.3-.3.5-.7.7-1.3 1-.4.1-1 .3-2.2.4a84.9 84.9 0 0 1-9.7 0M17 5.6A1.4 1.4 0 1 0 18.4 4 1.4 1.4 0 0 0 17 5.6M5.8 12a6.2 6.2 0 1 0 12.4 0 6.2 6.2 0 0 0-12.4 0M8 12a4 4 0 1 1 4 4 4 4 0 0 1-4-4"/></svg>
|
||||
|
Before Width: | Height: | Size: 856 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.5.9 11 2.7v18.1c-4.1-.5-7.3-2.7-7.3-5.5 0-2.5 2.8-4.7 6.7-5.4V7.6C4.4 8.3 0 11.5 0 15.3c0 4 4.7 7.3 11 7.8l3.5-1.7V.9m.7 6.7V10c1.4.3 2.7.7 3.7 1.3l-2 1.1L24 14l-.5-5.2-1.9 1c-1.7-1-4-1.8-6.4-2z"/></svg>
|
||||
|
Before Width: | Height: | Size: 276 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M23 7.2c0-3-2.4-5.6-5.2-6.5-3.5-1.1-8.1-1-11.4.6-4 2-5.3 6-5.4 10.2C1 15 1.3 24 6.4 24c3.8 0 4.3-4.8 6-7.1 1.3-1.7 3-2.2 4.9-2.7a7.1 7.1 0 0 0 5.7-7Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 227 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.7 0 12 0zm5.5 17.3c-.2.4-.6.5-1 .3-2.8-1.8-6.4-2.1-10.6-1.2-.4.2-.7-.1-.9-.5 0-.4.2-.8.6-.9 4.5-1 8.5-.6 11.6 1.3.4.2.5.7.3 1zM19 14c-.3.5-.9.6-1.3.3-3.2-2-8.2-2.5-12-1.3-.4 0-1-.2-1-.6-.2-.5 0-1 .5-1.2 4.4-1.3 9.8-.6 13.5 1.6.4.2.6.8.3 1.2zm0-3.3A19.9 19.9 0 0 0 5.3 9.3c-.6.2-1.2-.2-1.4-.7-.2-.6.2-1.2.7-1.4 4.3-1.3 11.3-1 15.7 1.6.6.3.7 1 .4 1.6-.3.4-1 .6-1.5.3z"/></svg>
|
||||
|
Before Width: | Height: | Size: 495 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m15.4 18-2.1-4.2h-3l5 10.2 5.2-10.2h-3m-7-5.6 2.8 5.6h4.2L10.5 0l-7 13.8h4.1"/></svg>
|
||||
|
Before Width: | Height: | Size: 154 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.6 4.7h1.7V10h-1.7zm4.7 0H18V10h-1.7zM6 0 1.7 4.3v15.4H7V24l4.2-4.3h3.5l7.7-7.7V0zm14.6 11.1L17 14.6h-3.4l-3 3v-3H7V1.7h13.7Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 206 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M22.5 6c-.8.3-1.6.6-2.5.7.9-.5 1.6-1.4 1.9-2.4-.8.5-1.8.9-2.7 1a4.3 4.3 0 0 0-7.3 4C8.2 9 5 7.3 3 4.8a4.2 4.2 0 0 0 1.3 5.7c-.7 0-1.3-.2-2-.5 0 2.1 1.6 3.8 3.5 4.2a4.2 4.2 0 0 1-2 .1 4.3 4.3 0 0 0 4 3A8.5 8.5 0 0 1 2.7 19h-1A12.1 12.1 0 0 0 20.3 8.8v-.6c.8-.6 1.5-1.3 2-2.2"/></svg>
|
||||
|
Before Width: | Height: | Size: 371 B |
@@ -20,6 +20,7 @@ import { useStore } from "@nanostores/react"
|
||||
import { cn, copyToClipboard, isReadOnlyUser } from "@/lib/utils"
|
||||
import { navigate } from "./router"
|
||||
import { Trans } from "@lingui/macro"
|
||||
import { i18n } from "@lingui/core"
|
||||
|
||||
export function AddSystemButton({ className }: { className?: string }) {
|
||||
const [open, setOpen] = useState(false)
|
||||
@@ -36,23 +37,26 @@ export function AddSystemButton({ className }: { className?: string }) {
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
# monitor other disks / partitions by mounting a folder in /extra-filesystems
|
||||
# - /mnt/disk1/.beszel:/extra-filesystems/disk1:ro
|
||||
# - /mnt/disk/.beszel:/extra-filesystems/sda1:ro
|
||||
environment:
|
||||
PORT: ${port}
|
||||
KEY: "${publicKey}"`)
|
||||
}
|
||||
|
||||
function copyInstallCommand(port: string) {
|
||||
copyToClipboard(
|
||||
`curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh && chmod +x install-agent.sh && ./install-agent.sh -p ${port} -k "${publicKey}"`
|
||||
)
|
||||
let cmd = `curl -sL https://raw.githubusercontent.com/henrygd/beszel/main/supplemental/scripts/install-agent.sh -o install-agent.sh && chmod +x install-agent.sh && ./install-agent.sh -p ${port} -k "${publicKey}"`
|
||||
// add china mirrors flag if zh-CN
|
||||
if ((i18n.locale + navigator.language).includes("zh-CN")) {
|
||||
cmd += ` --china-mirrors`
|
||||
}
|
||||
copyToClipboard(cmd)
|
||||
}
|
||||
|
||||
async function handleSubmit(e: SubmitEvent) {
|
||||
e.preventDefault()
|
||||
const formData = new FormData(e.target as HTMLFormElement)
|
||||
const data = Object.fromEntries(formData) as Record<string, any>
|
||||
data.users = pb.authStore.model!.id
|
||||
data.users = pb.authStore.record!.id
|
||||
try {
|
||||
setOpen(false)
|
||||
await pb.collection("systems").create(data)
|
||||
@@ -107,33 +111,27 @@ export function AddSystemButton({ className }: { className?: string }) {
|
||||
</DialogDescription>
|
||||
</TabsContent>
|
||||
<form onSubmit={handleSubmit as any}>
|
||||
<div className="grid gap-3 mt-1 mb-4">
|
||||
<div className="grid grid-cols-4 items-center gap-4">
|
||||
<Label htmlFor="name" className="text-end">
|
||||
<Trans>Name</Trans>
|
||||
</Label>
|
||||
<Input id="name" name="name" className="col-span-3" required />
|
||||
</div>
|
||||
<div className="grid grid-cols-4 items-center gap-4">
|
||||
<Label htmlFor="host" className="text-end">
|
||||
<Trans>Host / IP</Trans>
|
||||
</Label>
|
||||
<Input id="host" name="host" className="col-span-3" required />
|
||||
</div>
|
||||
<div className="grid grid-cols-4 items-center gap-4">
|
||||
<Label htmlFor="port" className="text-end">
|
||||
<Trans>Port</Trans>
|
||||
</Label>
|
||||
<Input ref={port} name="port" id="port" defaultValue="45876" className="col-span-3" required />
|
||||
</div>
|
||||
<div className="grid grid-cols-4 items-center gap-4 relative">
|
||||
<Label htmlFor="pkey" className="text-end whitespace-pre">
|
||||
<Trans comment="Use 'Key' if your language requires many more characters">Public Key</Trans>
|
||||
</Label>
|
||||
<Input readOnly id="pkey" value={publicKey} className="col-span-3" required></Input>
|
||||
<div className="grid xs:grid-cols-[auto_1fr] gap-y-3 gap-x-4 items-center mt-1 mb-4">
|
||||
<Label htmlFor="name" className="xs:text-end">
|
||||
<Trans>Name</Trans>
|
||||
</Label>
|
||||
<Input id="name" name="name" className="" required />
|
||||
<Label htmlFor="host" className="xs:text-end">
|
||||
<Trans>Host / IP</Trans>
|
||||
</Label>
|
||||
<Input id="host" name="host" className="" required />
|
||||
<Label htmlFor="port" className="xs:text-end">
|
||||
<Trans>Port</Trans>
|
||||
</Label>
|
||||
<Input ref={port} name="port" id="port" defaultValue="45876" className="" required />
|
||||
<Label htmlFor="pkey" className="xs:text-end whitespace-pre">
|
||||
<Trans comment="Use 'Key' if your language requires many more characters">Public Key</Trans>
|
||||
</Label>
|
||||
<div className="relative">
|
||||
<Input readOnly id="pkey" value={publicKey} className="" required></Input>
|
||||
<div
|
||||
className={
|
||||
"h-6 w-24 bg-gradient-to-r rtl:bg-gradient-to-l from-transparent to-background to-65% absolute end-1 pointer-events-none"
|
||||
"h-6 w-24 bg-gradient-to-r rtl:bg-gradient-to-l from-transparent to-background to-65% absolute top-2 end-1 pointer-events-none"
|
||||
}
|
||||
></div>
|
||||
<TooltipProvider delayDuration={100}>
|
||||
@@ -142,7 +140,7 @@ export function AddSystemButton({ className }: { className?: string }) {
|
||||
<Button
|
||||
type="button"
|
||||
variant={"link"}
|
||||
className="absolute end-0"
|
||||
className="absolute end-0 top-0"
|
||||
onClick={() => copyToClipboard(publicKey)}
|
||||
>
|
||||
<Copy className="h-4 w-4 " />
|
||||
|
||||
@@ -5,7 +5,6 @@ import { AlertInfo, AlertRecord, SystemRecord } from "@/types"
|
||||
import { lazy, Suspense, useRef, useState } from "react"
|
||||
import { toast } from "../ui/use-toast"
|
||||
import { RecordOptions } from "pocketbase"
|
||||
import { newQueue, Queue } from "@henrygd/queue"
|
||||
import { Trans, t, Plural } from "@lingui/macro"
|
||||
|
||||
interface AlertData {
|
||||
@@ -20,8 +19,6 @@ interface AlertData {
|
||||
|
||||
const Slider = lazy(() => import("@/components/ui/slider"))
|
||||
|
||||
let queue: Queue
|
||||
|
||||
const failedUpdateToast = () =>
|
||||
toast({
|
||||
title: t`Failed to update alert`,
|
||||
@@ -49,7 +46,7 @@ export function SystemAlert({
|
||||
} else if (checked) {
|
||||
pb.collection("alerts").create({
|
||||
system: system.id,
|
||||
user: pb.authStore.model!.id,
|
||||
user: pb.authStore.record!.id,
|
||||
name: data.key,
|
||||
value: value,
|
||||
min: min,
|
||||
@@ -88,11 +85,7 @@ export function SystemAlertGlobal({
|
||||
data.checked = false
|
||||
data.val = data.min = 0
|
||||
|
||||
data.updateAlert = (checked: boolean, value: number, min: number) => {
|
||||
if (!queue) {
|
||||
queue = newQueue(5)
|
||||
}
|
||||
|
||||
data.updateAlert = async (checked: boolean, value: number, min: number) => {
|
||||
const { set, populatedSet } = systemsWithExistingAlerts.current
|
||||
|
||||
// if overwrite checked, make sure all alerts will be overwritten
|
||||
@@ -105,48 +98,57 @@ export function SystemAlertGlobal({
|
||||
min,
|
||||
triggered: false,
|
||||
}
|
||||
for (let system of systems) {
|
||||
// if overwrite is false and system is in set (alert existed), skip
|
||||
if (!overwrite && set.has(system.id)) {
|
||||
continue
|
||||
}
|
||||
// find matching existing alert
|
||||
const existingAlert = alerts.find((alert) => alert.system === system.id && data.key === alert.name)
|
||||
// if first run, add system to set (alert already existed when global panel was opened)
|
||||
if (existingAlert && !populatedSet && !overwrite) {
|
||||
set.add(system.id)
|
||||
continue
|
||||
}
|
||||
const requestOptions: RecordOptions = {
|
||||
requestKey: system.id,
|
||||
}
|
||||
|
||||
// checked - make sure alert is created or updated
|
||||
if (checked) {
|
||||
if (existingAlert) {
|
||||
// console.log('updating', system.name)
|
||||
queue
|
||||
.add(() => pb.collection("alerts").update(existingAlert.id, recordData, requestOptions))
|
||||
.catch(failedUpdateToast)
|
||||
} else {
|
||||
// console.log('creating', system.name)
|
||||
queue
|
||||
.add(() =>
|
||||
pb.collection("alerts").create(
|
||||
{
|
||||
system: system.id,
|
||||
user: pb.authStore.model!.id,
|
||||
name: data.key,
|
||||
...recordData,
|
||||
},
|
||||
requestOptions
|
||||
)
|
||||
)
|
||||
.catch(failedUpdateToast)
|
||||
// we can only send 50 in one batch
|
||||
let done = 0
|
||||
|
||||
while (done < systems.length) {
|
||||
const batch = pb.createBatch()
|
||||
let batchSize = 0
|
||||
|
||||
for (let i = done; i < Math.min(done + 50, systems.length); i++) {
|
||||
const system = systems[i]
|
||||
// if overwrite is false and system is in set (alert existed), skip
|
||||
if (!overwrite && set.has(system.id)) {
|
||||
continue
|
||||
}
|
||||
} else if (existingAlert) {
|
||||
// console.log('deleting', system.name)
|
||||
queue.add(() => pb.collection("alerts").delete(existingAlert.id)).catch(failedUpdateToast)
|
||||
// find matching existing alert
|
||||
const existingAlert = alerts.find((alert) => alert.system === system.id && data.key === alert.name)
|
||||
// if first run, add system to set (alert already existed when global panel was opened)
|
||||
if (existingAlert && !populatedSet && !overwrite) {
|
||||
set.add(system.id)
|
||||
continue
|
||||
}
|
||||
batchSize++
|
||||
const requestOptions: RecordOptions = {
|
||||
requestKey: system.id,
|
||||
}
|
||||
|
||||
// checked - make sure alert is created or updated
|
||||
if (checked) {
|
||||
if (existingAlert) {
|
||||
batch.collection("alerts").update(existingAlert.id, recordData, requestOptions)
|
||||
} else {
|
||||
batch.collection("alerts").create(
|
||||
{
|
||||
system: system.id,
|
||||
user: pb.authStore.record!.id,
|
||||
name: data.key,
|
||||
...recordData,
|
||||
},
|
||||
requestOptions
|
||||
)
|
||||
}
|
||||
} else if (existingAlert) {
|
||||
batch.collection("alerts").delete(existingAlert.id)
|
||||
}
|
||||
}
|
||||
try {
|
||||
batchSize && batch.send()
|
||||
} catch (e) {
|
||||
failedUpdateToast()
|
||||
} finally {
|
||||
done += 50
|
||||
}
|
||||
}
|
||||
systemsWithExistingAlerts.current.populatedSet = true
|
||||
|
||||
@@ -33,11 +33,15 @@ export default memo(function AreaChartDefault({
|
||||
unit = " MB/s",
|
||||
chartName,
|
||||
chartData,
|
||||
max,
|
||||
tickFormatter,
|
||||
}: {
|
||||
maxToggled?: boolean
|
||||
unit?: string
|
||||
chartName: string
|
||||
chartData: ChartData
|
||||
max?: number
|
||||
tickFormatter?: (value: number) => string
|
||||
}) {
|
||||
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
|
||||
const { i18n } = useLingui()
|
||||
@@ -52,19 +56,21 @@ export default memo(function AreaChartDefault({
|
||||
return [[t`CPU Usage`, "cpu", 1, 0.4]]
|
||||
} else if (chartName === "dio") {
|
||||
return [
|
||||
[t({ message: "Write", comment: "Context is disk write" }), "dw", 3, 0.3],
|
||||
[t({ message: "Read", comment: "Context is disk read" }), "dr", 1, 0.3],
|
||||
[t({ message: "Write", comment: "Disk write" }), "dw", 3, 0.3],
|
||||
[t({ message: "Read", comment: "Disk read" }), "dr", 1, 0.3],
|
||||
]
|
||||
} else if (chartName === "bw") {
|
||||
return [
|
||||
[t({ message: "Sent", comment: "Context is network bytes sent (upload)" }), "ns", 5, 0.2],
|
||||
[t({ message: "Received", comment: "Context is network bytes received (download)" }), "nr", 2, 0.2],
|
||||
[t({ message: "Sent", comment: "Network bytes sent (upload)" }), "ns", 5, 0.2],
|
||||
[t({ message: "Received", comment: "Network bytes received (download)" }), "nr", 2, 0.2],
|
||||
]
|
||||
} else if (chartName.startsWith("efs")) {
|
||||
return [
|
||||
[t`Read`, `${chartName}.w`, 3, 0.3],
|
||||
[t`Write`, `${chartName}.r`, 1, 0.3],
|
||||
[t`Write`, `${chartName}.w`, 3, 0.3],
|
||||
[t`Read`, `${chartName}.r`, 1, 0.3],
|
||||
]
|
||||
} else if (chartName.startsWith("g.")) {
|
||||
return [chartName.includes("mu") ? [t`Used`, chartName, 2, 0.25] : [t`Usage`, chartName, 1, 0.4]]
|
||||
}
|
||||
return []
|
||||
}, [chartName, i18n.locale])
|
||||
@@ -89,8 +95,14 @@ export default memo(function AreaChartDefault({
|
||||
orientation={chartData.orientation}
|
||||
className="tracking-tighter"
|
||||
width={yAxisWidth}
|
||||
domain={[0, max ?? "auto"]}
|
||||
tickFormatter={(value) => {
|
||||
const val = toFixedWithoutTrailingZeros(value, 2) + unit
|
||||
let val: string
|
||||
if (tickFormatter) {
|
||||
val = tickFormatter(value)
|
||||
} else {
|
||||
val = toFixedWithoutTrailingZeros(value, 2) + unit
|
||||
}
|
||||
return updateYAxisWidth(val)
|
||||
}}
|
||||
tickLine={false}
|
||||
|
||||
@@ -116,9 +116,9 @@ export default memo(function ContainerChart({
|
||||
}
|
||||
// data function
|
||||
if (isNetChart) {
|
||||
obj.dataFunction = (key: string, data: any) => (data[key]?.nr ?? 0) + (data[key]?.ns ?? 0)
|
||||
obj.dataFunction = (key: string, data: any) => (data[key] ? data[key].nr + data[key].ns : null)
|
||||
} else {
|
||||
obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? 0
|
||||
obj.dataFunction = (key: string, data: any) => data[key]?.[dataKey] ?? null
|
||||
}
|
||||
return obj
|
||||
}, [])
|
||||
|
||||
@@ -27,6 +27,11 @@ export default memo(function DiskChart({
|
||||
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
|
||||
const { _ } = useLingui()
|
||||
|
||||
// round to nearest GB
|
||||
if (diskSize >= 100) {
|
||||
diskSize = Math.round(diskSize)
|
||||
}
|
||||
|
||||
if (chartData.systemStats.length === 0) {
|
||||
return null
|
||||
}
|
||||
|
||||
112
beszel/site/src/components/charts/gpu-power-chart.tsx
Normal file
@@ -0,0 +1,112 @@
|
||||
import { CartesianGrid, Line, LineChart, YAxis } from "recharts"
|
||||
|
||||
import {
|
||||
ChartContainer,
|
||||
ChartLegend,
|
||||
ChartLegendContent,
|
||||
ChartTooltip,
|
||||
ChartTooltipContent,
|
||||
xAxis,
|
||||
} from "@/components/ui/chart"
|
||||
import {
|
||||
useYAxisWidth,
|
||||
cn,
|
||||
formatShortDate,
|
||||
toFixedWithoutTrailingZeros,
|
||||
decimalString,
|
||||
chartMargin,
|
||||
} from "@/lib/utils"
|
||||
import { ChartData } from "@/types"
|
||||
import { memo, useMemo } from "react"
|
||||
|
||||
export default memo(function GpuPowerChart({ chartData }: { chartData: ChartData }) {
|
||||
const { yAxisWidth, updateYAxisWidth } = useYAxisWidth()
|
||||
|
||||
if (chartData.systemStats.length === 0) {
|
||||
return null
|
||||
}
|
||||
|
||||
/** Format temperature data for chart and assign colors */
|
||||
const newChartData = useMemo(() => {
|
||||
const newChartData = { data: [], colors: {} } as {
|
||||
data: Record<string, number | string>[]
|
||||
colors: Record<string, string>
|
||||
}
|
||||
const powerSums = {} as Record<string, number>
|
||||
for (let data of chartData.systemStats) {
|
||||
let newData = { created: data.created } as Record<string, number | string>
|
||||
|
||||
for (let gpu of Object.values(data.stats?.g ?? {})) {
|
||||
if (gpu.p) {
|
||||
const name = gpu.n
|
||||
newData[name] = gpu.p
|
||||
powerSums[name] = (powerSums[name] ?? 0) + newData[name]
|
||||
}
|
||||
}
|
||||
newChartData.data.push(newData)
|
||||
}
|
||||
const keys = Object.keys(powerSums).sort((a, b) => powerSums[b] - powerSums[a])
|
||||
for (let key of keys) {
|
||||
newChartData.colors[key] = `hsl(${((keys.indexOf(key) * 360) / keys.length) % 360}, 60%, 55%)`
|
||||
}
|
||||
return newChartData
|
||||
}, [chartData])
|
||||
|
||||
const colors = Object.keys(newChartData.colors)
|
||||
|
||||
// console.log('rendered at', new Date())
|
||||
|
||||
return (
|
||||
<div>
|
||||
<ChartContainer
|
||||
className={cn("h-full w-full absolute aspect-auto bg-card opacity-0 transition-opacity", {
|
||||
"opacity-100": yAxisWidth,
|
||||
})}
|
||||
>
|
||||
<LineChart accessibilityLayer data={newChartData.data} margin={chartMargin}>
|
||||
<CartesianGrid vertical={false} />
|
||||
<YAxis
|
||||
direction="ltr"
|
||||
orientation={chartData.orientation}
|
||||
className="tracking-tighter"
|
||||
domain={[0, "auto"]}
|
||||
width={yAxisWidth}
|
||||
tickFormatter={(value) => {
|
||||
const val = toFixedWithoutTrailingZeros(value, 2)
|
||||
return updateYAxisWidth(val + "W")
|
||||
}}
|
||||
tickLine={false}
|
||||
axisLine={false}
|
||||
/>
|
||||
{xAxis(chartData)}
|
||||
<ChartTooltip
|
||||
animationEasing="ease-out"
|
||||
animationDuration={150}
|
||||
// @ts-ignore
|
||||
itemSorter={(a, b) => b.value - a.value}
|
||||
content={
|
||||
<ChartTooltipContent
|
||||
labelFormatter={(_, data) => formatShortDate(data[0].payload.created)}
|
||||
contentFormatter={(item) => decimalString(item.value) + "W"}
|
||||
// indicator="line"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
{colors.map((key) => (
|
||||
<Line
|
||||
key={key}
|
||||
dataKey={key}
|
||||
name={key}
|
||||
type="monotoneX"
|
||||
dot={false}
|
||||
strokeWidth={1.5}
|
||||
stroke={newChartData.colors[key]}
|
||||
isAnimationActive={false}
|
||||
/>
|
||||
))}
|
||||
{colors.length > 1 && <ChartLegend content={<ChartLegendContent />} />}
|
||||
</LineChart>
|
||||
</ChartContainer>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
@@ -1,8 +1,7 @@
|
||||
import {
|
||||
BookIcon,
|
||||
DatabaseBackupIcon,
|
||||
Github,
|
||||
LayoutDashboard,
|
||||
LockKeyholeIcon,
|
||||
LogsIcon,
|
||||
MailIcon,
|
||||
Server,
|
||||
@@ -115,16 +114,16 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp
|
||||
</CommandShortcut>
|
||||
</CommandItem>
|
||||
<CommandItem
|
||||
keywords={["github"]}
|
||||
keywords={["help", "oauth", "oidc"]}
|
||||
onSelect={() => {
|
||||
window.location.href = "https://github.com/henrygd/beszel/blob/main/readme.md"
|
||||
window.location.href = "https://beszel.dev/guide/what-is-beszel"
|
||||
}}
|
||||
>
|
||||
<Github className="me-2 h-4 w-4" />
|
||||
<BookIcon className="me-2 h-4 w-4" />
|
||||
<span>
|
||||
<Trans>Documentation</Trans>
|
||||
</span>
|
||||
<CommandShortcut>GitHub</CommandShortcut>
|
||||
<CommandShortcut>beszel.dev</CommandShortcut>
|
||||
</CommandItem>
|
||||
</CommandGroup>
|
||||
{isAdmin() && (
|
||||
@@ -174,21 +173,6 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp
|
||||
<Trans>Admin</Trans>
|
||||
</CommandShortcut>
|
||||
</CommandItem>
|
||||
<CommandItem
|
||||
keywords={["oauth", "oicd"]}
|
||||
onSelect={() => {
|
||||
setOpen(false)
|
||||
window.open("/_/#/settings/auth-providers", "_blank")
|
||||
}}
|
||||
>
|
||||
<LockKeyholeIcon className="me-2 h-4 w-4" />
|
||||
<span>
|
||||
<Trans>Auth Providers</Trans>
|
||||
</span>
|
||||
<CommandShortcut>
|
||||
<Trans>Admin</Trans>
|
||||
</CommandShortcut>
|
||||
</CommandItem>
|
||||
<CommandItem
|
||||
keywords={["email"]}
|
||||
onSelect={() => {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { LanguagesIcon } from "lucide-react"
|
||||
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
|
||||
import languages from "../lib/languages.json"
|
||||
import languages from "@/lib/languages"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { dynamicActivate } from "@/lib/i18n"
|
||||
@@ -22,7 +22,7 @@ export function LangToggle() {
|
||||
{languages.map(({ lang, label, e }) => (
|
||||
<DropdownMenuItem
|
||||
key={lang}
|
||||
className={cn("px-3 flex gap-2.5", lang === i18n.locale && "font-semibold")}
|
||||
className={cn("px-2.5 flex gap-2.5", lang === i18n.locale && "font-semibold")}
|
||||
onClick={() => dynamicActivate(lang)}
|
||||
>
|
||||
<span>{e}</span> {label}
|
||||
|
||||
@@ -2,7 +2,7 @@ import { cn } from "@/lib/utils"
|
||||
import { buttonVariants } from "@/components/ui/button"
|
||||
import { Input } from "@/components/ui/input"
|
||||
import { Label } from "@/components/ui/label"
|
||||
import { LoaderCircle, LockIcon, LogInIcon, MailIcon, UserIcon } from "lucide-react"
|
||||
import { LoaderCircle, LockIcon, LogInIcon, MailIcon } from "lucide-react"
|
||||
import { $authenticated, pb } from "@/lib/stores"
|
||||
import * as v from "valibot"
|
||||
import { toast } from "../ui/use-toast"
|
||||
@@ -14,7 +14,7 @@ import { Trans, t } from "@lingui/macro"
|
||||
|
||||
const honeypot = v.literal("")
|
||||
const emailSchema = v.pipe(v.string(), v.email(t`Invalid email address.`))
|
||||
const passwordSchema = v.pipe(v.string(), v.minLength(10, t`Password must be at least 10 characters.`))
|
||||
const passwordSchema = v.pipe(v.string(), v.minLength(8, t`Password must be at least 8 characters.`))
|
||||
|
||||
const LoginSchema = v.looseObject({
|
||||
name: honeypot,
|
||||
@@ -24,14 +24,6 @@ const LoginSchema = v.looseObject({
|
||||
|
||||
const RegisterSchema = v.looseObject({
|
||||
name: honeypot,
|
||||
username: v.pipe(
|
||||
v.string(),
|
||||
v.regex(
|
||||
/^(?=.*[a-zA-Z])[a-zA-Z0-9_-]+$/,
|
||||
"Invalid username. You may use alphanumeric characters, underscores, and hyphens."
|
||||
),
|
||||
v.minLength(3, "Username must be at least 3 characters long.")
|
||||
),
|
||||
email: emailSchema,
|
||||
password: passwordSchema,
|
||||
passwordConfirm: passwordSchema,
|
||||
@@ -63,6 +55,8 @@ export function UserAuthForm({
|
||||
async (e: React.FormEvent<HTMLFormElement>) => {
|
||||
e.preventDefault()
|
||||
setIsLoading(true)
|
||||
// store email for later use if mfa is enabled
|
||||
let email = ""
|
||||
try {
|
||||
const formData = new FormData(e.target as HTMLFormElement)
|
||||
const data = Object.fromEntries(formData) as Record<string, any>
|
||||
@@ -78,7 +72,8 @@ export function UserAuthForm({
|
||||
setErrors(errors)
|
||||
return
|
||||
}
|
||||
const { email, password, passwordConfirm, username } = result.output
|
||||
const { password, passwordConfirm } = result.output
|
||||
email = result.output.email
|
||||
if (isFirstRun) {
|
||||
// check that passwords match
|
||||
if (password !== passwordConfirm) {
|
||||
@@ -86,27 +81,27 @@ export function UserAuthForm({
|
||||
setErrors({ passwordConfirm: msg })
|
||||
return
|
||||
}
|
||||
await pb.admins.create({
|
||||
email,
|
||||
password,
|
||||
passwordConfirm: password,
|
||||
})
|
||||
await pb.admins.authWithPassword(email, password)
|
||||
await pb.collection("users").create({
|
||||
username,
|
||||
email,
|
||||
password,
|
||||
passwordConfirm: password,
|
||||
role: "admin",
|
||||
verified: true,
|
||||
await pb.send("/api/beszel/create-user", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ email, password }),
|
||||
})
|
||||
await pb.collection("users").authWithPassword(email, password)
|
||||
} else {
|
||||
await pb.collection("users").authWithPassword(email, password)
|
||||
}
|
||||
$authenticated.set(true)
|
||||
} catch (e) {
|
||||
} catch (err: any) {
|
||||
showLoginFaliedToast()
|
||||
// todo: implement MFA
|
||||
// const mfaId = err.response?.mfaId
|
||||
// if (!mfaId) {
|
||||
// showLoginFaliedToast()
|
||||
// throw err
|
||||
// }
|
||||
// the user needs to authenticate again with another auth method, for example OTP
|
||||
// const result = await pb.collection("users").requestOTP(email)
|
||||
// ... show a modal for users to check their email and to enter the received code ...
|
||||
// await pb.collection("users").authWithOTP(result.otpId, "EMAIL_CODE", { mfaId: mfaId })
|
||||
} finally {
|
||||
setIsLoading(false)
|
||||
}
|
||||
@@ -118,34 +113,15 @@ export function UserAuthForm({
|
||||
return null
|
||||
}
|
||||
|
||||
const oauthEnabled = authMethods.oauth2.enabled && authMethods.oauth2.providers.length > 0
|
||||
const passwordEnabled = authMethods.password.enabled
|
||||
|
||||
return (
|
||||
<div className={cn("grid gap-6", className)} {...props}>
|
||||
{authMethods.emailPassword && (
|
||||
{passwordEnabled && (
|
||||
<>
|
||||
<form onSubmit={handleSubmit} onChange={() => setErrors({})}>
|
||||
<div className="grid gap-2.5">
|
||||
{isFirstRun && (
|
||||
<div className="grid gap-1 relative">
|
||||
<UserIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
||||
<Label className="sr-only" htmlFor="username">
|
||||
<Trans>Username</Trans>
|
||||
</Label>
|
||||
<Input
|
||||
autoFocus={true}
|
||||
id="username"
|
||||
name="username"
|
||||
required
|
||||
placeholder={t`username`}
|
||||
type="username"
|
||||
autoCapitalize="none"
|
||||
autoComplete="username"
|
||||
autoCorrect="off"
|
||||
disabled={isLoading || isOauthLoading}
|
||||
className="ps-9"
|
||||
/>
|
||||
{errors?.username && <p className="px-1 text-xs text-red-600">{errors.username}</p>}
|
||||
</div>
|
||||
)}
|
||||
<div className="grid gap-1 relative">
|
||||
<MailIcon className="absolute left-3 top-3 h-4 w-4 text-muted-foreground" />
|
||||
<Label className="sr-only" htmlFor="email">
|
||||
@@ -155,7 +131,7 @@ export function UserAuthForm({
|
||||
id="email"
|
||||
name="email"
|
||||
required
|
||||
placeholder={isFirstRun ? t`email` : "name@example.com"}
|
||||
placeholder="name@example.com"
|
||||
type="email"
|
||||
autoCapitalize="none"
|
||||
autoComplete="email"
|
||||
@@ -178,7 +154,7 @@ export function UserAuthForm({
|
||||
type="password"
|
||||
autoComplete="current-password"
|
||||
disabled={isLoading || isOauthLoading}
|
||||
className="ps-9 lowercase"
|
||||
className="ps-9 placeholder:lowercase"
|
||||
/>
|
||||
{errors?.password && <p className="px-1 text-xs text-red-600">{errors.password}</p>}
|
||||
</div>
|
||||
@@ -196,7 +172,7 @@ export function UserAuthForm({
|
||||
type="password"
|
||||
autoComplete="current-password"
|
||||
disabled={isLoading || isOauthLoading}
|
||||
className="ps-9 lowercase"
|
||||
className="ps-9 placeholder:lowercase"
|
||||
/>
|
||||
{errors?.passwordConfirm && <p className="px-1 text-xs text-red-600">{errors.passwordConfirm}</p>}
|
||||
</div>
|
||||
@@ -204,7 +180,7 @@ export function UserAuthForm({
|
||||
<div className="sr-only">
|
||||
{/* honeypot */}
|
||||
<label htmlFor="name"></label>
|
||||
<input id="name" type="text" name="name" tabIndex={-1} />
|
||||
<input id="name" type="text" name="name" tabIndex={-1} autoComplete="off" />
|
||||
</div>
|
||||
<button className={cn(buttonVariants())} disabled={isLoading}>
|
||||
{isLoading ? (
|
||||
@@ -216,7 +192,7 @@ export function UserAuthForm({
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
{(isFirstRun || authMethods.authProviders.length > 0) && (
|
||||
{(isFirstRun || oauthEnabled) && (
|
||||
// only show 'continue with' during onboarding or if we have auth providers
|
||||
<div className="relative">
|
||||
<div className="absolute inset-0 flex items-center">
|
||||
@@ -232,15 +208,15 @@ export function UserAuthForm({
|
||||
</>
|
||||
)}
|
||||
|
||||
{authMethods.authProviders.length > 0 && (
|
||||
{oauthEnabled && (
|
||||
<div className="grid gap-2 -mt-1">
|
||||
{authMethods.authProviders.map((provider) => (
|
||||
{authMethods.oauth2.providers.map((provider) => (
|
||||
<button
|
||||
key={provider.name}
|
||||
type="button"
|
||||
className={cn(buttonVariants({ variant: "outline" }), {
|
||||
"justify-self-center": !authMethods.emailPassword,
|
||||
"px-5": !authMethods.emailPassword,
|
||||
"justify-self-center": !passwordEnabled,
|
||||
"px-5": !passwordEnabled,
|
||||
})}
|
||||
onClick={() => {
|
||||
setIsOauthLoading(true)
|
||||
@@ -279,8 +255,8 @@ export function UserAuthForm({
|
||||
<LoaderCircle className="me-2 h-4 w-4 animate-spin" />
|
||||
) : (
|
||||
<img
|
||||
className="me-2 h-4 w-4 dark:invert"
|
||||
src={`/static/${provider.name}.svg`}
|
||||
className="me-2 h-4 w-4 dark:brightness-0 dark:invert"
|
||||
src={`/_/images/oauth2/${provider.name}.svg`}
|
||||
alt=""
|
||||
onError={(e) => {
|
||||
e.currentTarget.src = "/static/lock.svg"
|
||||
@@ -293,12 +269,12 @@ export function UserAuthForm({
|
||||
</div>
|
||||
)}
|
||||
|
||||
{!authMethods.authProviders.length && isFirstRun && (
|
||||
{!oauthEnabled && isFirstRun && (
|
||||
// only show GitHub button / dialog during onboarding
|
||||
<Dialog>
|
||||
<DialogTrigger asChild>
|
||||
<button type="button" className={cn(buttonVariants({ variant: "outline" }))}>
|
||||
<img className="me-2 h-4 w-4 dark:invert" src="/static/github.svg" alt="" />
|
||||
<img className="me-2 h-4 w-4 dark:invert" src="/_/images/oauth2/github.svg" alt="" />
|
||||
<span className="translate-y-[1px]">GitHub</span>
|
||||
</button>
|
||||
</DialogTrigger>
|
||||
@@ -316,7 +292,7 @@ export function UserAuthForm({
|
||||
<Trans>
|
||||
Please see{" "}
|
||||
<a
|
||||
href="https://github.com/henrygd/beszel/blob/main/readme.md#oauth--oidc-integration"
|
||||
href="https://beszel.dev/guide/oauth"
|
||||
className={cn(buttonVariants({ variant: "link" }), "p-0 h-auto")}
|
||||
>
|
||||
the documentation
|
||||
@@ -329,7 +305,7 @@ export function UserAuthForm({
|
||||
</Dialog>
|
||||
)}
|
||||
|
||||
{authMethods.emailPassword && !isFirstRun && (
|
||||
{passwordEnabled && !isFirstRun && (
|
||||
<Link
|
||||
href="/forgot-password"
|
||||
className="text-sm mx-auto hover:text-brand underline underline-offset-4 opacity-70 hover:opacity-100 transition-opacity"
|
||||
|
||||
@@ -7,11 +7,13 @@ import ForgotPassword from "./forgot-pass-form"
|
||||
import { $router } from "../router"
|
||||
import { AuthMethodsList } from "pocketbase"
|
||||
import { t } from "@lingui/macro"
|
||||
import { useTheme } from "../theme-provider"
|
||||
|
||||
export default function () {
|
||||
const page = useStore($router)
|
||||
const [isFirstRun, setFirstRun] = useState(false)
|
||||
const [authMethods, setAuthMethods] = useState<AuthMethodsList>()
|
||||
const { theme } = useTheme()
|
||||
|
||||
useEffect(() => {
|
||||
document.title = t`Login` + " / Beszel"
|
||||
@@ -45,7 +47,11 @@ export default function () {
|
||||
|
||||
return (
|
||||
<div className="min-h-svh grid items-center py-12">
|
||||
<div className="grid gap-5 w-full px-4 mx-auto" style={{ maxWidth: "22em" }}>
|
||||
<div
|
||||
className="grid gap-5 w-full px-4 mx-auto"
|
||||
// @ts-ignore
|
||||
style={{ maxWidth: "22em", "--border": theme == "light" ? "30 8% 80%" : "220 3% 20%" }}
|
||||
>
|
||||
<div className="text-center">
|
||||
<h1 className="mb-3">
|
||||
<Logo className="h-7 fill-foreground mx-auto" />
|
||||
|
||||
@@ -2,7 +2,6 @@ import { useState, lazy, Suspense } from "react"
|
||||
import { Button, buttonVariants } from "@/components/ui/button"
|
||||
import {
|
||||
DatabaseBackupIcon,
|
||||
LockKeyholeIcon,
|
||||
LogOutIcon,
|
||||
LogsIcon,
|
||||
SearchIcon,
|
||||
@@ -35,7 +34,7 @@ const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0
|
||||
|
||||
export default function Navbar() {
|
||||
return (
|
||||
<div className="flex items-center h-14 md:h-16 bg-card px-4 pe-3 sm:px-6 border bt-0 rounded-md my-4">
|
||||
<div className="flex items-center h-14 md:h-16 bg-card px-4 pe-3 sm:px-6 border border-border/60 bt-0 rounded-md my-4">
|
||||
<Link href="/" aria-label="Home" className="p-2 ps-0 me-3">
|
||||
<Logo className="h-[1.1rem] md:h-5 fill-foreground" />
|
||||
</Link>
|
||||
@@ -58,7 +57,7 @@ export default function Navbar() {
|
||||
</button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align={isReadOnlyUser() ? "end" : "center"} className="min-w-44">
|
||||
<DropdownMenuLabel>{pb.authStore.model?.email}</DropdownMenuLabel>
|
||||
<DropdownMenuLabel>{pb.authStore.record?.email}</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuGroup>
|
||||
{isAdmin() && (
|
||||
@@ -95,14 +94,6 @@ export default function Navbar() {
|
||||
</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem asChild>
|
||||
<a href="/_/#/settings/auth-providers" target="_blank">
|
||||
<LockKeyholeIcon className="me-2.5 h-4 w-4" />
|
||||
<span>
|
||||
<Trans>Auth Providers</Trans>
|
||||
</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -18,7 +18,6 @@ export default function Home() {
|
||||
const alerts = useStore($alerts)
|
||||
const systems = useStore($systems)
|
||||
|
||||
// todo: maybe remove active alert if changed
|
||||
const activeAlerts = useMemo(() => {
|
||||
const activeAlerts = alerts.filter((alert) => {
|
||||
const active = alert.triggered && alert.name in alertInfo
|
||||
|
||||
@@ -8,7 +8,7 @@ import { UserSettings } from "@/types"
|
||||
import { saveSettings } from "./layout"
|
||||
import { useState } from "react"
|
||||
import { Trans } from "@lingui/macro"
|
||||
import languages from "../../../lib/languages.json"
|
||||
import languages from "@/lib/languages"
|
||||
import { dynamicActivate } from "@/lib/i18n"
|
||||
import { useLingui } from "@lingui/react"
|
||||
// import { setLang } from "@/lib/i18n"
|
||||
|
||||
@@ -193,7 +193,7 @@ const ShoutrrrUrlCard = ({ url, onUrlChange, onRemove }: ShoutrrrUrlCardProps) =
|
||||
}
|
||||
|
||||
return (
|
||||
<Card className="bg-muted/30 p-2 md:p-3">
|
||||
<Card className="bg-muted/40 p-2 md:p-3">
|
||||
<div className="flex items-center gap-1">
|
||||
<Input
|
||||
type="url"
|
||||
|
||||
@@ -45,21 +45,26 @@ export function SidebarNav({ className, items, ...props }: SidebarNavProps) {
|
||||
|
||||
{/* Desktop View */}
|
||||
<nav className={cn("hidden md:grid gap-1", className)} {...props}>
|
||||
{items.map((item) => (
|
||||
<Link
|
||||
key={item.href}
|
||||
href={item.href}
|
||||
className={cn(
|
||||
buttonVariants({ variant: "ghost" }),
|
||||
"flex items-center gap-3",
|
||||
page?.path === item.href ? "bg-muted hover:bg-muted" : "hover:bg-muted/50",
|
||||
"justify-start"
|
||||
)}
|
||||
>
|
||||
{item.icon && <item.icon className="h-4 w-4" />}
|
||||
{item.title}
|
||||
</Link>
|
||||
))}
|
||||
{items.map((item) => {
|
||||
if (item.admin && !isAdmin()) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<Link
|
||||
key={item.href}
|
||||
href={item.href}
|
||||
className={cn(
|
||||
buttonVariants({ variant: "ghost" }),
|
||||
"flex items-center gap-3",
|
||||
page?.path === item.href ? "bg-muted hover:bg-muted" : "hover:bg-muted/50",
|
||||
"justify-start"
|
||||
)}
|
||||
>
|
||||
{item.icon && <item.icon className="h-4 w-4" />}
|
||||
{item.title}
|
||||
</Link>
|
||||
)
|
||||
})}
|
||||
</nav>
|
||||
</>
|
||||
)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { $systems, pb, $chartTime, $containerFilter, $userSettings, $direction } from "@/lib/stores"
|
||||
import { ChartData, ChartTimes, ContainerStatsRecord, SystemRecord, SystemStatsRecord } from "@/types"
|
||||
import { ChartData, ChartTimes, ContainerStatsRecord, GPUData, SystemRecord, SystemStatsRecord } from "@/types"
|
||||
import React, { lazy, useCallback, useEffect, useMemo, useRef, useState } from "react"
|
||||
import { Card, CardHeader, CardTitle, CardDescription } from "../ui/card"
|
||||
import { useStore } from "@nanostores/react"
|
||||
import Spinner from "../spinner"
|
||||
import { ClockArrowUp, CpuIcon, GlobeIcon, LayoutGridIcon, MonitorIcon, XIcon } from "lucide-react"
|
||||
import ChartTimeSelect from "../charts/chart-time-select"
|
||||
import { chartTimeData, cn, getPbTimestamp, useLocalStorage } from "@/lib/utils"
|
||||
import { chartTimeData, cn, getPbTimestamp, getSizeAndUnit, toFixedFloat, useLocalStorage } from "@/lib/utils"
|
||||
import { Separator } from "../ui/separator"
|
||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/tooltip"
|
||||
import { Button } from "../ui/button"
|
||||
@@ -24,6 +24,7 @@ const MemChart = lazy(() => import("../charts/mem-chart"))
|
||||
const DiskChart = lazy(() => import("../charts/disk-chart"))
|
||||
const SwapChart = lazy(() => import("../charts/swap-chart"))
|
||||
const TemperatureChart = lazy(() => import("../charts/temperature-chart"))
|
||||
const GpuPowerChart = lazy(() => import("../charts/gpu-power-chart"))
|
||||
|
||||
const cache = new Map<string, any>()
|
||||
|
||||
@@ -85,6 +86,13 @@ async function getStats<T>(collection: string, system: SystemRecord, chartTime:
|
||||
})
|
||||
}
|
||||
|
||||
function dockerOrPodman(str: string, system: SystemRecord) {
|
||||
if (system.info.p) {
|
||||
str = str.replace("docker", "podman").replace("Docker", "Podman")
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
export default function SystemDetail({ name }: { name: string }) {
|
||||
const direction = useStore($direction)
|
||||
const { _ } = useLingui()
|
||||
@@ -285,13 +293,14 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
|
||||
// if no data, show empty message
|
||||
const dataEmpty = !chartLoading && chartData.systemStats.length === 0
|
||||
const hasGpuData = Object.keys(systemStats.at(-1)?.stats.g ?? {}).length > 0
|
||||
|
||||
return (
|
||||
<>
|
||||
<div id="chartwrap" className="grid gap-4 mb-10 overflow-x-clip">
|
||||
{/* system info */}
|
||||
<Card>
|
||||
<div className="grid lg:flex gap-4 px-4 sm:px-6 pt-3 sm:pt-4 pb-5">
|
||||
<div className="grid xl:flex gap-4 px-4 sm:px-6 pt-3 sm:pt-4 pb-5">
|
||||
<div>
|
||||
<h1 className="text-[1.6rem] font-semibold mb-1.5">{system.name}</h1>
|
||||
<div className="flex flex-wrap items-center gap-3 gap-y-2 text-sm opacity-90">
|
||||
@@ -341,8 +350,8 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
<div className="lg:ms-auto flex items-center gap-2 max-sm:-mb-1">
|
||||
<ChartTimeSelect className="w-full lg:w-40" />
|
||||
<div className="xl:ms-auto flex items-center gap-2 max-sm:-mb-1">
|
||||
<ChartTimeSelect className="w-full xl:w-40" />
|
||||
<TooltipProvider delayDuration={100}>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
@@ -350,7 +359,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
aria-label={t`Toggle grid`}
|
||||
variant="outline"
|
||||
size="icon"
|
||||
className="hidden lg:flex p-0 text-primary"
|
||||
className="hidden xl:flex p-0 text-primary"
|
||||
onClick={() => setGrid(!grid)}
|
||||
>
|
||||
{grid ? (
|
||||
@@ -383,7 +392,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
grid={grid}
|
||||
title={t`Docker CPU Usage`}
|
||||
title={dockerOrPodman(t`Docker CPU Usage`, system)}
|
||||
description={t`Average CPU utilization of containers`}
|
||||
cornerEl={containerFilterBar}
|
||||
>
|
||||
@@ -404,8 +413,8 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
grid={grid}
|
||||
title={t`Docker Memory Usage`}
|
||||
description={t`Memory usage of docker containers`}
|
||||
title={dockerOrPodman(t`Docker Memory Usage`, system)}
|
||||
description={dockerOrPodman(t`Memory usage of docker containers`, system)}
|
||||
cornerEl={containerFilterBar}
|
||||
>
|
||||
<ContainerChart chartData={chartData} chartName="mem" dataKey="m" unit=" MB" />
|
||||
@@ -413,11 +422,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
)}
|
||||
|
||||
<ChartCard empty={dataEmpty} grid={grid} title={t`Disk Usage`} description={t`Usage of root partition`}>
|
||||
<DiskChart
|
||||
chartData={chartData}
|
||||
dataKey="stats.du"
|
||||
diskSize={Math.round(systemStats.at(-1)?.stats.d ?? NaN)}
|
||||
/>
|
||||
<DiskChart chartData={chartData} dataKey="stats.du" diskSize={systemStats.at(-1)?.stats.d ?? NaN} />
|
||||
</ChartCard>
|
||||
|
||||
<ChartCard
|
||||
@@ -449,8 +454,8 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
>
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
title={t`Docker Network I/O`}
|
||||
description={t`Network traffic of docker containers`}
|
||||
title={dockerOrPodman(t`Docker Network I/O`, system)}
|
||||
description={dockerOrPodman(t`Network traffic of docker containers`, system)}
|
||||
cornerEl={containerFilterBar}
|
||||
>
|
||||
{/* @ts-ignore */}
|
||||
@@ -459,6 +464,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Swap chart */}
|
||||
{(systemStats.at(-1)?.stats.su ?? 0) > 0 && (
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
@@ -470,6 +476,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
</ChartCard>
|
||||
)}
|
||||
|
||||
{/* Temperature chart */}
|
||||
{systemStats.at(-1)?.stats.t && (
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
@@ -480,11 +487,61 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
<TemperatureChart chartData={chartData} />
|
||||
</ChartCard>
|
||||
)}
|
||||
|
||||
{/* GPU power draw chart */}
|
||||
{hasGpuData && (
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
grid={grid}
|
||||
title={t`GPU Power Draw`}
|
||||
description={t`Average power consumption of GPUs`}
|
||||
>
|
||||
<GpuPowerChart chartData={chartData} />
|
||||
</ChartCard>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* GPU charts */}
|
||||
{hasGpuData && (
|
||||
<div className="grid xl:grid-cols-2 gap-4">
|
||||
{Object.keys(systemStats.at(-1)?.stats.g ?? {}).map((id) => {
|
||||
const gpu = systemStats.at(-1)?.stats.g?.[id] as GPUData
|
||||
return (
|
||||
<div key={id} className="contents">
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
grid={grid}
|
||||
title={`${gpu.n} ${t`Usage`}`}
|
||||
description={t`Average utilization of ${gpu.n}`}
|
||||
>
|
||||
<AreaChartDefault chartData={chartData} chartName={`g.${id}.u`} unit="%" />
|
||||
</ChartCard>
|
||||
<ChartCard
|
||||
empty={dataEmpty}
|
||||
grid={grid}
|
||||
title={`${gpu.n} VRAM`}
|
||||
description={t`Precise utilization at the recorded time`}
|
||||
>
|
||||
<AreaChartDefault
|
||||
chartData={chartData}
|
||||
chartName={`g.${id}.mu`}
|
||||
unit=" MB"
|
||||
max={gpu.mt}
|
||||
tickFormatter={(value) => {
|
||||
const { v, u } = getSizeAndUnit(value, false)
|
||||
return toFixedFloat(v, 1) + u
|
||||
}}
|
||||
/>
|
||||
</ChartCard>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* extra filesystem charts */}
|
||||
{Object.keys(systemStats.at(-1)?.stats.efs ?? {}).length > 0 && (
|
||||
<div className="grid lg:grid-cols-2 gap-4">
|
||||
<div className="grid xl:grid-cols-2 gap-4">
|
||||
{Object.keys(systemStats.at(-1)?.stats.efs ?? {}).map((extraFsName) => {
|
||||
return (
|
||||
<div key={extraFsName} className="contents">
|
||||
@@ -497,7 +554,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
<DiskChart
|
||||
chartData={chartData}
|
||||
dataKey={`stats.efs.${extraFsName}.du`}
|
||||
diskSize={Math.round(systemStats.at(-1)?.stats.efs?.[extraFsName].d ?? NaN)}
|
||||
diskSize={systemStats.at(-1)?.stats.efs?.[extraFsName].d ?? NaN}
|
||||
/>
|
||||
</ChartCard>
|
||||
<ChartCard
|
||||
@@ -599,8 +656,14 @@ function ChartCard({
|
||||
<CardDescription>{description}</CardDescription>
|
||||
{cornerEl && <div className="relative py-1 block sm:w-44 sm:absolute sm:top-2.5 sm:end-3.5">{cornerEl}</div>}
|
||||
</CardHeader>
|
||||
<div className="ps-0 w-[calc(100%-1.6em)] h-52 relative">
|
||||
{<Spinner msg={empty ? t`Waiting for enough records to display` : undefined} />}
|
||||
<div className="ps-0 w-[calc(100%-1.5em)] h-48 md:h-52 relative group">
|
||||
{
|
||||
<Spinner
|
||||
msg={empty ? t`Waiting for enough records to display` : undefined}
|
||||
// className="group-has-[.opacity-100]:opacity-0 transition-opacity"
|
||||
className="group-has-[.opacity-100]:invisible duration-100"
|
||||
/>
|
||||
}
|
||||
{isIntersecting && children}
|
||||
</div>
|
||||
</Card>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { cn } from "@/lib/utils"
|
||||
import { LoaderCircleIcon } from "lucide-react"
|
||||
|
||||
export default function ({ msg }: { msg?: string }) {
|
||||
export default function ({ msg, className }: { msg?: string; className?: string }) {
|
||||
return (
|
||||
<div className="flex flex-col items-center justify-center h-full absolute inset-0">
|
||||
<div className={cn(className, "flex flex-col items-center justify-center h-full absolute inset-0")}>
|
||||
{msg ? (
|
||||
<p className={"opacity-60 mb-2 text-center px-4"}>{msg}</p>
|
||||
<p className={"opacity-60 mb-2 text-center text-sm px-4"}>{msg}</p>
|
||||
) : (
|
||||
<LoaderCircleIcon className="animate-spin h-10 w-10 opacity-60" />
|
||||
)}
|
||||
|
||||
@@ -21,6 +21,9 @@ import {
|
||||
DropdownMenuCheckboxItem,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuLabel,
|
||||
DropdownMenuRadioGroup,
|
||||
DropdownMenuRadioItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from "@/components/ui/dropdown-menu"
|
||||
@@ -50,24 +53,32 @@ import {
|
||||
HardDriveIcon,
|
||||
ServerIcon,
|
||||
CpuIcon,
|
||||
ChevronDownIcon,
|
||||
LayoutGridIcon,
|
||||
LayoutListIcon,
|
||||
ArrowDownIcon,
|
||||
ArrowUpIcon,
|
||||
Settings2Icon,
|
||||
EyeIcon,
|
||||
} from "lucide-react"
|
||||
import { useEffect, useMemo, useState } from "react"
|
||||
import { $hubVersion, $systems, pb } from "@/lib/stores"
|
||||
import { useStore } from "@nanostores/react"
|
||||
import { cn, copyToClipboard, decimalString, isReadOnlyUser, useLocalStorage } from "@/lib/utils"
|
||||
import AlertsButton from "../alerts/alert-button"
|
||||
import { navigate } from "../router"
|
||||
import { Link, navigate } from "../router"
|
||||
import { EthernetIcon } from "../ui/icons"
|
||||
import { Trans, t } from "@lingui/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../ui/card"
|
||||
import { Input } from "../ui/input"
|
||||
import { ClassValue } from "clsx"
|
||||
|
||||
type ViewMode = "table" | "grid"
|
||||
|
||||
function CellFormatter(info: CellContext<SystemRecord, unknown>) {
|
||||
const val = info.getValue() as number
|
||||
return (
|
||||
<div className="flex gap-1 items-center tabular-nums tracking-tight">
|
||||
<div className="flex gap-2 items-center tabular-nums tracking-tight">
|
||||
<span className="min-w-[3.5em]">{decimalString(val, 1)}%</span>
|
||||
<span className="grow min-w-10 block bg-muted h-[1em] relative rounded-sm overflow-hidden">
|
||||
<span
|
||||
@@ -75,23 +86,26 @@ function CellFormatter(info: CellContext<SystemRecord, unknown>) {
|
||||
"absolute inset-0 w-full h-full origin-left",
|
||||
(val < 65 && "bg-green-500") || (val < 90 && "bg-yellow-500") || "bg-red-600"
|
||||
)}
|
||||
style={{ transform: `scalex(${val}%)` }}
|
||||
style={{
|
||||
transform: `scalex(${val / 100})`,
|
||||
}}
|
||||
></span>
|
||||
</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function sortableHeader(column: Column<SystemRecord, unknown>, Icon: any, hideSortIcon = false) {
|
||||
function sortableHeader(column: Column<SystemRecord, unknown>, hideSortIcon = false) {
|
||||
return (
|
||||
<Button
|
||||
variant="ghost"
|
||||
className="h-9 px-3 flex"
|
||||
onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
|
||||
>
|
||||
<Icon className="me-2 h-4 w-4" />
|
||||
{/* @ts-ignore */}
|
||||
{column.columnDef?.icon && <column.columnDef.icon className="me-2 size-4" />}
|
||||
{column.id}
|
||||
{!hideSortIcon && <ArrowUpDownIcon className="ms-2 h-4 w-4" />}
|
||||
{!hideSortIcon && <ArrowUpDownIcon className="ms-2 size-4" />}
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
@@ -100,9 +114,10 @@ export default function SystemsTable() {
|
||||
const data = useStore($systems)
|
||||
const hubVersion = useStore($hubVersion)
|
||||
const [filter, setFilter] = useState<string>()
|
||||
const [sorting, setSorting] = useState<SortingState>([])
|
||||
const [sorting, setSorting] = useState<SortingState>([{ id: t`System`, desc: false }])
|
||||
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])
|
||||
const [columnVisibility, setColumnVisibility] = useLocalStorage<VisibilityState>("cols", {})
|
||||
const [viewMode, setViewMode] = useLocalStorage<ViewMode>("viewMode", window.innerWidth > 1024 ? "table" : "grid")
|
||||
const { i18n } = useLingui()
|
||||
|
||||
useEffect(() => {
|
||||
@@ -120,64 +135,64 @@ export default function SystemsTable() {
|
||||
accessorKey: "name",
|
||||
id: t`System`,
|
||||
enableHiding: false,
|
||||
cell: (info) => {
|
||||
const { status } = info.row.original
|
||||
return (
|
||||
<span className="flex gap-0.5 items-center text-base md:pe-5">
|
||||
<span
|
||||
className={cn("w-2 h-2 left-0 rounded-full", {
|
||||
"bg-green-500": status === "up",
|
||||
"bg-red-500": status === "down",
|
||||
"bg-primary/40": status === "paused",
|
||||
"bg-yellow-500": status === "pending",
|
||||
})}
|
||||
style={{ marginBottom: "-1px" }}
|
||||
></span>
|
||||
<Button
|
||||
data-nolink
|
||||
variant={"ghost"}
|
||||
className="text-primary/90 h-7 px-1.5 gap-1.5"
|
||||
onClick={() => copyToClipboard(info.getValue() as string)}
|
||||
>
|
||||
{info.getValue() as string}
|
||||
<CopyIcon className="h-2.5 w-2.5" />
|
||||
</Button>
|
||||
</span>
|
||||
)
|
||||
},
|
||||
header: ({ column }) => sortableHeader(column, ServerIcon),
|
||||
icon: ServerIcon,
|
||||
cell: (info) => (
|
||||
<span className="flex gap-0.5 items-center text-base md:pe-5">
|
||||
<IndicatorDot system={info.row.original} />
|
||||
<Button
|
||||
data-nolink
|
||||
variant={"ghost"}
|
||||
className="text-primary/90 h-7 px-1.5 gap-1.5"
|
||||
onClick={() => copyToClipboard(info.getValue() as string)}
|
||||
>
|
||||
{info.getValue() as string}
|
||||
<CopyIcon className="h-2.5 w-2.5" />
|
||||
</Button>
|
||||
</span>
|
||||
),
|
||||
header: ({ column }) => sortableHeader(column),
|
||||
},
|
||||
{
|
||||
accessorKey: "info.cpu",
|
||||
id: t`CPU`,
|
||||
invertSorting: true,
|
||||
cell: CellFormatter,
|
||||
header: ({ column }) => sortableHeader(column, CpuIcon),
|
||||
icon: CpuIcon,
|
||||
header: ({ column }) => sortableHeader(column),
|
||||
},
|
||||
{
|
||||
accessorKey: "info.mp",
|
||||
id: t`Memory`,
|
||||
invertSorting: true,
|
||||
cell: CellFormatter,
|
||||
header: ({ column }) => sortableHeader(column, MemoryStickIcon),
|
||||
icon: MemoryStickIcon,
|
||||
header: ({ column }) => sortableHeader(column),
|
||||
},
|
||||
{
|
||||
accessorKey: "info.dp",
|
||||
id: t`Disk`,
|
||||
invertSorting: true,
|
||||
cell: CellFormatter,
|
||||
header: ({ column }) => sortableHeader(column, HardDriveIcon),
|
||||
icon: HardDriveIcon,
|
||||
header: ({ column }) => sortableHeader(column),
|
||||
},
|
||||
{
|
||||
accessorFn: (originalRow) => originalRow.info.b || 0,
|
||||
id: t`Net`,
|
||||
invertSorting: true,
|
||||
size: 115,
|
||||
header: ({ column }) => sortableHeader(column, EthernetIcon),
|
||||
cell: (info) => {
|
||||
icon: EthernetIcon,
|
||||
header: ({ column }) => sortableHeader(column),
|
||||
cell(info) {
|
||||
const val = info.getValue() as number
|
||||
return (
|
||||
<span className="tabular-nums whitespace-nowrap ps-1">{decimalString(val, val >= 100 ? 1 : 2)} MB/s</span>
|
||||
<span
|
||||
className={cn("tabular-nums whitespace-nowrap", {
|
||||
"ps-1": viewMode === "table",
|
||||
})}
|
||||
>
|
||||
{decimalString(val, val >= 100 ? 1 : 2)} MB/s
|
||||
</span>
|
||||
)
|
||||
},
|
||||
},
|
||||
@@ -186,18 +201,23 @@ export default function SystemsTable() {
|
||||
id: t`Agent`,
|
||||
invertSorting: true,
|
||||
size: 50,
|
||||
header: ({ column }) => sortableHeader(column, WifiIcon, true),
|
||||
cell: (info) => {
|
||||
icon: WifiIcon,
|
||||
header: ({ column }) => sortableHeader(column, true),
|
||||
cell(info) {
|
||||
const version = info.getValue() as string
|
||||
if (!version || !hubVersion) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<span className="flex gap-2 items-center md:pe-5 tabular-nums ps-1">
|
||||
<span
|
||||
className={cn("w-2 h-2 left-0 rounded-full", version === hubVersion ? "bg-green-500" : "bg-yellow-500")}
|
||||
style={{ marginBottom: "-1px" }}
|
||||
></span>
|
||||
<span
|
||||
className={cn("flex gap-2 items-center md:pe-5 tabular-nums", {
|
||||
"ps-1": viewMode === "table",
|
||||
})}
|
||||
>
|
||||
<IndicatorDot
|
||||
system={info.row.original}
|
||||
className={version === hubVersion ? "bg-green-500" : "bg-yellow-500"}
|
||||
/>
|
||||
<span>{info.getValue() as string}</span>
|
||||
</span>
|
||||
)
|
||||
@@ -206,83 +226,12 @@ export default function SystemsTable() {
|
||||
{
|
||||
id: t({ message: "Actions", comment: "Table column" }),
|
||||
size: 120,
|
||||
cell: ({ row }) => {
|
||||
const { id, name, status, host } = row.original
|
||||
return (
|
||||
<div className={"flex justify-end items-center gap-1"}>
|
||||
<AlertsButton system={row.original} />
|
||||
<AlertDialog>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="ghost" size={"icon"} data-nolink>
|
||||
<span className="sr-only">
|
||||
<Trans>Open menu</Trans>
|
||||
</span>
|
||||
<MoreHorizontalIcon className="w-5" />
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
<DropdownMenuItem
|
||||
className={cn(isReadOnlyUser() && "hidden")}
|
||||
onClick={() => {
|
||||
pb.collection("systems").update(id, {
|
||||
status: status === "paused" ? "pending" : "paused",
|
||||
})
|
||||
}}
|
||||
>
|
||||
{status === "paused" ? (
|
||||
<>
|
||||
<PlayCircleIcon className="me-2.5 h-4 w-4" />
|
||||
<Trans>Resume</Trans>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<PauseCircleIcon className="me-2.5 h-4 w-4" />
|
||||
<Trans>Pause</Trans>
|
||||
</>
|
||||
)}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={() => copyToClipboard(host)}>
|
||||
<CopyIcon className="me-2.5 h-4 w-4" />
|
||||
<Trans>Copy host</Trans>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator className={cn(isReadOnlyUser() && "hidden")} />
|
||||
<AlertDialogTrigger asChild>
|
||||
<DropdownMenuItem className={cn(isReadOnlyUser() && "hidden")}>
|
||||
<Trash2Icon className="me-2.5 h-4 w-4" />
|
||||
<Trans>Delete</Trans>
|
||||
</DropdownMenuItem>
|
||||
</AlertDialogTrigger>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<AlertDialogContent>
|
||||
<AlertDialogHeader>
|
||||
<AlertDialogTitle>
|
||||
<Trans>Are you sure you want to delete {name}?</Trans>
|
||||
</AlertDialogTitle>
|
||||
<AlertDialogDescription>
|
||||
<Trans>
|
||||
This action cannot be undone. This will permanently delete all current records for {name} from
|
||||
the database.
|
||||
</Trans>
|
||||
</AlertDialogDescription>
|
||||
</AlertDialogHeader>
|
||||
<AlertDialogFooter>
|
||||
<AlertDialogCancel>
|
||||
<Trans>Cancel</Trans>
|
||||
</AlertDialogCancel>
|
||||
<AlertDialogAction
|
||||
className={cn(buttonVariants({ variant: "destructive" }))}
|
||||
onClick={() => pb.collection("systems").delete(id)}
|
||||
>
|
||||
<Trans>Continue</Trans>
|
||||
</AlertDialogAction>
|
||||
</AlertDialogFooter>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
</div>
|
||||
)
|
||||
},
|
||||
cell: ({ row }) => (
|
||||
<div className="flex justify-end items-center gap-1">
|
||||
<AlertsButton system={row.original} />
|
||||
<ActionsButton system={row.original} />
|
||||
</div>
|
||||
),
|
||||
},
|
||||
] as ColumnDef<SystemRecord>[]
|
||||
}, [hubVersion, i18n.locale])
|
||||
@@ -325,86 +274,320 @@ export default function SystemsTable() {
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="outline">
|
||||
<Trans comment="Context: table columns">Columns</Trans>{" "}
|
||||
<ChevronDownIcon className="ms-1.5 h-4 w-4 opacity-90" />
|
||||
<Settings2Icon className="me-1.5 size-4 opacity-80" />
|
||||
<Trans>View</Trans>
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
{table
|
||||
.getAllColumns()
|
||||
.filter((column) => column.getCanHide())
|
||||
.map((column) => {
|
||||
return (
|
||||
<DropdownMenuCheckboxItem
|
||||
key={column.id}
|
||||
checked={column.getIsVisible()}
|
||||
onCheckedChange={(value) => column.toggleVisibility(!!value)}
|
||||
>
|
||||
{column.id}
|
||||
</DropdownMenuCheckboxItem>
|
||||
)
|
||||
})}
|
||||
<DropdownMenuContent align="end" className="h-72 md:h-auto min-w-48 md:min-w-auto overflow-y-auto">
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 divide-y md:divide-s md:divide-y-0">
|
||||
<div>
|
||||
<DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
|
||||
<LayoutGridIcon className="size-4" />
|
||||
<Trans>Layout</Trans>
|
||||
</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuRadioGroup
|
||||
className="px-1 pb-1"
|
||||
value={viewMode}
|
||||
onValueChange={(view) => setViewMode(view as ViewMode)}
|
||||
>
|
||||
<DropdownMenuRadioItem value="table" onSelect={(e) => e.preventDefault()} className="gap-2">
|
||||
<LayoutListIcon className="size-4" />
|
||||
<Trans>Table</Trans>
|
||||
</DropdownMenuRadioItem>
|
||||
<DropdownMenuRadioItem value="grid" onSelect={(e) => e.preventDefault()} className="gap-2">
|
||||
<LayoutGridIcon className="size-4" />
|
||||
<Trans>Grid</Trans>
|
||||
</DropdownMenuRadioItem>
|
||||
</DropdownMenuRadioGroup>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
|
||||
<ArrowUpDownIcon className="size-4" />
|
||||
<Trans>Sort By</Trans>
|
||||
</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<div className="px-1 pb-1">
|
||||
{table.getAllColumns().map((column) => {
|
||||
if (column.id === t`Actions` || !column.getCanSort()) return null
|
||||
let Icon = <span className="w-6"></span>
|
||||
// if current sort column, show sort direction
|
||||
if (sorting[0]?.id === column.id) {
|
||||
if (sorting[0]?.desc) {
|
||||
Icon = <ArrowUpIcon className="me-2 size-4" />
|
||||
} else {
|
||||
Icon = <ArrowDownIcon className="me-2 size-4" />
|
||||
}
|
||||
}
|
||||
return (
|
||||
<DropdownMenuItem
|
||||
onSelect={(e) => {
|
||||
e.preventDefault()
|
||||
setSorting([{ id: column.id, desc: sorting[0]?.id === column.id && !sorting[0]?.desc }])
|
||||
}}
|
||||
key={column.id}
|
||||
>
|
||||
{Icon}
|
||||
{column.id}
|
||||
</DropdownMenuItem>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<DropdownMenuLabel className="pt-2 px-3.5 flex items-center gap-2">
|
||||
<EyeIcon className="size-4" />
|
||||
<Trans>Visible Fields</Trans>
|
||||
</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<div className="px-1.5 pb-1">
|
||||
{table
|
||||
.getAllColumns()
|
||||
.filter((column) => column.getCanHide())
|
||||
.map((column) => {
|
||||
return (
|
||||
<DropdownMenuCheckboxItem
|
||||
key={column.id}
|
||||
onSelect={(e) => e.preventDefault()}
|
||||
checked={column.getIsVisible()}
|
||||
onCheckedChange={(value) => column.toggleVisibility(!!value)}
|
||||
>
|
||||
{column.id}
|
||||
</DropdownMenuCheckboxItem>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
</div>
|
||||
</CardHeader>
|
||||
<CardContent className="max-sm:p-2">
|
||||
<div className="rounded-md border overflow-hidden">
|
||||
<Table>
|
||||
<TableHeader className="bg-muted/40">
|
||||
{table.getHeaderGroups().map((headerGroup) => (
|
||||
<TableRow key={headerGroup.id}>
|
||||
{headerGroup.headers.map((header) => {
|
||||
return (
|
||||
<TableHead className="px-2" key={header.id}>
|
||||
{header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}
|
||||
</TableHead>
|
||||
)
|
||||
})}
|
||||
</TableRow>
|
||||
))}
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{table.getRowModel().rows?.length ? (
|
||||
table.getRowModel().rows.map((row) => (
|
||||
<TableRow
|
||||
key={row.original.id}
|
||||
data-state={row.getIsSelected() && "selected"}
|
||||
className={cn("cursor-pointer transition-opacity", {
|
||||
"opacity-50": row.original.status === "paused",
|
||||
<div className="p-6 pt-0 max-sm:py-3 max-sm:px-2">
|
||||
{viewMode === "table" ? (
|
||||
// table layout
|
||||
<div className="rounded-md border overflow-hidden">
|
||||
<Table>
|
||||
<TableHeader>
|
||||
{table.getHeaderGroups().map((headerGroup) => (
|
||||
<TableRow key={headerGroup.id}>
|
||||
{headerGroup.headers.map((header) => {
|
||||
return (
|
||||
<TableHead className="px-2" key={header.id}>
|
||||
{header.isPlaceholder
|
||||
? null
|
||||
: flexRender(header.column.columnDef.header, header.getContext())}
|
||||
</TableHead>
|
||||
)
|
||||
})}
|
||||
onClick={(e) => {
|
||||
const target = e.target as HTMLElement
|
||||
if (!target.closest("[data-nolink]") && e.currentTarget.contains(target)) {
|
||||
navigate(`/system/${encodeURIComponent(row.original.name)}`)
|
||||
}
|
||||
}}
|
||||
>
|
||||
{row.getVisibleCells().map((cell) => (
|
||||
<TableCell
|
||||
key={cell.id}
|
||||
style={{
|
||||
width: cell.column.getSize() === Number.MAX_SAFE_INTEGER ? "auto" : cell.column.getSize(),
|
||||
}}
|
||||
className={cn("overflow-hidden relative", data.length > 10 ? "py-2" : "py-2.5")}
|
||||
>
|
||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
||||
</TableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
))
|
||||
) : (
|
||||
<TableRow>
|
||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
||||
<Trans>No systems found.</Trans>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
</CardContent>
|
||||
))}
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{table.getRowModel().rows?.length ? (
|
||||
table.getRowModel().rows.map((row) => (
|
||||
<TableRow
|
||||
key={row.original.id}
|
||||
data-state={row.getIsSelected() && "selected"}
|
||||
className={cn("cursor-pointer transition-opacity", {
|
||||
"opacity-50": row.original.status === "paused",
|
||||
})}
|
||||
onClick={(e) => {
|
||||
const target = e.target as HTMLElement
|
||||
if (!target.closest("[data-nolink]") && e.currentTarget.contains(target)) {
|
||||
navigate(`/system/${encodeURIComponent(row.original.name)}`)
|
||||
}
|
||||
}}
|
||||
>
|
||||
{row.getVisibleCells().map((cell) => (
|
||||
<TableCell
|
||||
key={cell.id}
|
||||
style={{
|
||||
width: cell.column.getSize() === Number.MAX_SAFE_INTEGER ? "auto" : cell.column.getSize(),
|
||||
}}
|
||||
className={cn("overflow-hidden relative", data.length > 10 ? "py-2" : "py-2.5")}
|
||||
>
|
||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
||||
</TableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
))
|
||||
) : (
|
||||
<TableRow>
|
||||
<TableCell colSpan={columns.length} className="h-24 text-center">
|
||||
<Trans>No systems found.</Trans>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
)}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
) : (
|
||||
// grid layout
|
||||
<div className="grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
|
||||
{table.getRowModel().rows?.length ? (
|
||||
table.getRowModel().rows.map((row) => {
|
||||
const system = row.original
|
||||
const { status } = system
|
||||
return (
|
||||
<Card
|
||||
key={system.id}
|
||||
className={cn(
|
||||
"cursor-pointer hover:shadow-md transition-all bg-transparent w-full dark:border-border duration-200 relative",
|
||||
{
|
||||
"opacity-50": status === "paused",
|
||||
}
|
||||
)}
|
||||
>
|
||||
<CardHeader className="py-1 ps-5 pe-3 bg-muted/30 border-b border-border/60">
|
||||
<div className="flex items-center justify-between gap-2">
|
||||
<CardTitle className="text-base tracking-normal shrink-1 text-primary/90 flex items-center min-h-10 gap-2.5 min-w-0">
|
||||
<div className="flex items-center gap-2.5 min-w-0">
|
||||
<IndicatorDot system={system} />
|
||||
<CardTitle className="text-[.95em]/normal tracking-normal truncate text-primary/90">
|
||||
{system.name}
|
||||
</CardTitle>
|
||||
</div>
|
||||
</CardTitle>
|
||||
{table.getColumn(t`Actions`)?.getIsVisible() && (
|
||||
<div className="flex gap-1 flex-shrink-0 relative z-10">
|
||||
<AlertsButton system={system} />
|
||||
<ActionsButton system={system} />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-2.5 text-sm px-5 pt-3.5 pb-4">
|
||||
{table.getAllColumns().map((column) => {
|
||||
if (!column.getIsVisible() || column.id === t`System` || column.id === t`Actions`) return null
|
||||
const cell = row.getAllCells().find((cell) => cell.column.id === column.id)
|
||||
if (!cell) return null
|
||||
return (
|
||||
<div key={column.id} className="flex items-center gap-3">
|
||||
{/* @ts-ignore */}
|
||||
{column.columnDef?.icon && (
|
||||
// @ts-ignore
|
||||
<column.columnDef.icon className="size-4 text-muted-foreground" />
|
||||
)}
|
||||
<div className="flex items-center gap-3 flex-1">
|
||||
<span className="text-muted-foreground min-w-16">{column.id}:</span>
|
||||
<div className="flex-1">{flexRender(cell.column.columnDef.cell, cell.getContext())}</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</CardContent>
|
||||
<Link
|
||||
href={`/system/${encodeURIComponent(row.original.name)}`}
|
||||
className="inset-0 absolute w-full h-full"
|
||||
>
|
||||
<span className="sr-only">{row.original.name}</span>
|
||||
</Link>
|
||||
</Card>
|
||||
)
|
||||
})
|
||||
) : (
|
||||
<div className="col-span-full text-center py-8">
|
||||
<Trans>No systems found.</Trans>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
|
||||
function IndicatorDot({ system, className }: { system: SystemRecord; className?: ClassValue }) {
|
||||
className ||= {
|
||||
"bg-green-500": system.status === "up",
|
||||
"bg-red-500": system.status === "down",
|
||||
"bg-primary/40": system.status === "paused",
|
||||
"bg-yellow-500": system.status === "pending",
|
||||
}
|
||||
return (
|
||||
<span
|
||||
className={cn("flex-shrink-0 size-2 rounded-full", className)}
|
||||
// style={{ marginBottom: "-1px" }}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
function ActionsButton({ system }: { system: SystemRecord }) {
|
||||
// const [opened, setOpened] = useState(false)
|
||||
const { id, status, host, name } = system
|
||||
return (
|
||||
<AlertDialog>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="ghost" size={"icon"} data-nolink>
|
||||
<span className="sr-only">
|
||||
<Trans>Open menu</Trans>
|
||||
</span>
|
||||
<MoreHorizontalIcon className="w-5" />
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
<DropdownMenuItem
|
||||
className={cn(isReadOnlyUser() && "hidden")}
|
||||
onClick={() => {
|
||||
pb.collection("systems").update(id, {
|
||||
status: status === "paused" ? "pending" : "paused",
|
||||
})
|
||||
}}
|
||||
>
|
||||
{status === "paused" ? (
|
||||
<>
|
||||
<PlayCircleIcon className="me-2.5 size-4" />
|
||||
<Trans>Resume</Trans>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<PauseCircleIcon className="me-2.5 size-4" />
|
||||
<Trans>Pause</Trans>
|
||||
</>
|
||||
)}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={() => copyToClipboard(host)}>
|
||||
<CopyIcon className="me-2.5 size-4" />
|
||||
<Trans>Copy host</Trans>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator className={cn(isReadOnlyUser() && "hidden")} />
|
||||
<AlertDialogTrigger asChild>
|
||||
<DropdownMenuItem className={cn(isReadOnlyUser() && "hidden")}>
|
||||
<Trash2Icon className="me-2.5 size-4" />
|
||||
<Trans>Delete</Trans>
|
||||
</DropdownMenuItem>
|
||||
</AlertDialogTrigger>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<AlertDialogContent>
|
||||
<AlertDialogHeader>
|
||||
<AlertDialogTitle>
|
||||
<Trans>Are you sure you want to delete {name}?</Trans>
|
||||
</AlertDialogTitle>
|
||||
<AlertDialogDescription>
|
||||
<Trans>
|
||||
This action cannot be undone. This will permanently delete all current records for {name} from the
|
||||
database.
|
||||
</Trans>
|
||||
</AlertDialogDescription>
|
||||
</AlertDialogHeader>
|
||||
<AlertDialogFooter>
|
||||
<AlertDialogCancel>
|
||||
<Trans>Cancel</Trans>
|
||||
</AlertDialogCancel>
|
||||
<AlertDialogAction
|
||||
className={cn(buttonVariants({ variant: "destructive" }))}
|
||||
onClick={() => pb.collection("systems").delete(id)}
|
||||
>
|
||||
<Trans>Continue</Trans>
|
||||
</AlertDialogAction>
|
||||
</AlertDialogFooter>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ const AlertDialogOverlay = React.forwardRef<
|
||||
>(({ className, ...props }, ref) => (
|
||||
<AlertDialogPrimitive.Overlay
|
||||
className={cn(
|
||||
"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
||||
"fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
|
||||
@@ -11,7 +11,7 @@ const buttonVariants = cva(
|
||||
variant: {
|
||||
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
||||
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
||||
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
||||
outline: "border bg-background hover:bg-accent/70 dark:hover:bg-accent/50 hover:text-accent-foreground",
|
||||
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
||||
ghost: "hover:bg-accent hover:text-accent-foreground",
|
||||
link: "text-primary underline-offset-4 hover:underline",
|
||||
|
||||
@@ -3,7 +3,11 @@ import * as React from "react"
|
||||
import { cn } from "@/lib/utils"
|
||||
|
||||
const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (
|
||||
<div ref={ref} className={cn("rounded-lg border bg-card text-card-foreground shadow-sm", className)} {...props} />
|
||||
<div
|
||||
ref={ref}
|
||||
className={cn("rounded-lg border border-border/60 bg-card text-card-foreground shadow-sm", className)}
|
||||
{...props}
|
||||
/>
|
||||
))
|
||||
Card.displayName = "Card"
|
||||
|
||||
|
||||
@@ -334,7 +334,7 @@ const xAxis = function ({ domain, ticks, chartTime }: ChartData) {
|
||||
allowDataOverflow
|
||||
type="number"
|
||||
scale="time"
|
||||
minTickGap={15}
|
||||
minTickGap={12}
|
||||
tickMargin={8}
|
||||
axisLine={false}
|
||||
tickFormatter={chartTimeData[chartTime].format}
|
||||
|
||||
@@ -19,7 +19,7 @@ const DialogOverlay = React.forwardRef<
|
||||
<DialogPrimitive.Overlay
|
||||
ref={ref}
|
||||
className={cn(
|
||||
"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
||||
"fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
|
||||
@@ -33,7 +33,7 @@ const InputTags = React.forwardRef<HTMLInputElement, InputTagsProps>(
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
"bg-background min-h-10 flex w-full flex-wrap gap-2 rounded-md border border-input px-3 py-2 text-sm placeholder:text-muted-foreground has-[:focus-visible]:outline-none ring-offset-background has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
"bg-background min-h-10 flex w-full flex-wrap gap-2 rounded-md border px-3 py-2 text-sm placeholder:text-muted-foreground has-[:focus-visible]:outline-none ring-offset-background has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring has-[:focus-visible]:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
className
|
||||
)}
|
||||
>
|
||||
|
||||
@@ -9,7 +9,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type,
|
||||
<input
|
||||
type={type}
|
||||
className={cn(
|
||||
"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
"flex h-10 w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
className
|
||||
)}
|
||||
ref={ref}
|
||||
|
||||
@@ -17,7 +17,7 @@ const SelectTrigger = React.forwardRef<
|
||||
<SelectPrimitive.Trigger
|
||||
ref={ref}
|
||||
className={cn(
|
||||
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
||||
"flex h-10 w-full items-center justify-between rounded-md border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
|
||||
@@ -12,7 +12,9 @@ const Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableE
|
||||
Table.displayName = "Table"
|
||||
|
||||
const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(
|
||||
({ className, ...props }, ref) => <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
|
||||
({ className, ...props }, ref) => (
|
||||
<thead ref={ref} className={cn("bg-muted/30 [&_tr]:border-b", className)} {...props} />
|
||||
)
|
||||
)
|
||||
TableHeader.displayName = "TableHeader"
|
||||
|
||||
@@ -34,7 +36,10 @@ const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTML
|
||||
({ className, ...props }, ref) => (
|
||||
<tr
|
||||
ref={ref}
|
||||
className={cn("border-b hover:bg-muted/40 dark:hover:bg-muted/30 data-[state=selected]:bg-muted", className)}
|
||||
className={cn(
|
||||
"border-b border-border/60 hover:bg-muted/40 dark:hover:bg-muted/20 data-[state=selected]:bg-muted",
|
||||
className
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
)
|
||||
|
||||
@@ -8,7 +8,7 @@ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(({ classNa
|
||||
return (
|
||||
<textarea
|
||||
className={cn(
|
||||
"flex min-h-14 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
"flex min-h-14 w-full rounded-md border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
className
|
||||
)}
|
||||
ref={ref}
|
||||
|
||||
@@ -34,25 +34,25 @@
|
||||
|
||||
.dark {
|
||||
color-scheme: dark;
|
||||
--background: 240 10% 6.2%;
|
||||
--foreground: 0 0% 98.04%;
|
||||
--card: 240 8.57% 8%;
|
||||
--card-foreground: 0 0% 98.04%;
|
||||
--popover: 240 10% 6.2%;
|
||||
--popover-foreground: 0 0% 98.04%;
|
||||
--primary: 0 0% 98.04%;
|
||||
--primary-foreground: 240 5.88% 10%;
|
||||
--secondary: 240 3.7% 15.88%;
|
||||
--secondary-foreground: 0 0% 98.04%;
|
||||
--muted: 240 3.7% 15.88%;
|
||||
--muted-foreground: 240 5.03% 64.9%;
|
||||
--accent: 240 3.7% 15.88%;
|
||||
--accent-foreground: 0 0% 98.04%;
|
||||
--destructive: 0 59% 46%;
|
||||
--destructive-foreground: 0 0% 98.04%;
|
||||
--border: 240 2.86% 12%;
|
||||
--input: 240 3.7% 15.88%;
|
||||
--ring: 240 4.88% 86%;
|
||||
--background: 220 5.5% 9%;
|
||||
--foreground: 220 2% 97%;
|
||||
--card: 220 5.5% 10.5%;
|
||||
--card-foreground: 220 2% 97%;
|
||||
--popover: 220 5.5% 9%;
|
||||
--popover-foreground: 220 2% 97%;
|
||||
--primary: 220 2% 96%;
|
||||
--primary-foreground: 220 4% 10%;
|
||||
--secondary: 220 4% 16%;
|
||||
--secondary-foreground: 220 0% 98%;
|
||||
--muted: 220 6% 16%;
|
||||
--muted-foreground: 220 4% 67%;
|
||||
--accent: 220 5% 15.5%;
|
||||
--accent-foreground: 220 2% 98%;
|
||||
--destructive: 0 62% 46%;
|
||||
--destructive-foreground: 0 0% 97%;
|
||||
--border: 220 3% 16%;
|
||||
--input: 220 4% 22%;
|
||||
--ring: 220 4% 80%;
|
||||
--radius: 0.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import { $direction } from "./stores"
|
||||
import { i18n } from "@lingui/core"
|
||||
import type { Messages } from "@lingui/core"
|
||||
import languages from "@/lib/languages.json"
|
||||
import languages from "@/lib/languages"
|
||||
import { detect, fromUrl, fromStorage, fromNavigator } from "@lingui/detect-locale"
|
||||
import { messages as enMessages } from "../locales/en/en.ts"
|
||||
|
||||
console.log(languages)
|
||||
import { messages as enMessages } from "@/locales/en/en.ts"
|
||||
|
||||
// let locale = detect(fromUrl("lang"), fromStorage("lang"), fromNavigator(), "en")
|
||||
let locale = detect(fromStorage("lang"), fromNavigator(), "en")
|
||||
@@ -20,18 +18,22 @@ function activateLocale(locale: string, messages: Messages = enMessages) {
|
||||
i18n.load(locale, messages)
|
||||
i18n.activate(locale)
|
||||
document.documentElement.lang = locale
|
||||
$direction.set(locale.startsWith("ar") ? "rtl" : "ltr")
|
||||
localStorage.setItem("lang", locale)
|
||||
$direction.set(locale.startsWith("ar") || locale.startsWith("fa") ? "rtl" : "ltr")
|
||||
}
|
||||
|
||||
// dynamically loads translations for the given locale
|
||||
export async function dynamicActivate(locale: string) {
|
||||
try {
|
||||
const { messages }: { messages: Messages } = await import(`../locales/${locale}/${locale}.ts`)
|
||||
activateLocale(locale, messages)
|
||||
localStorage.setItem("lang", locale)
|
||||
} catch (error) {
|
||||
console.error(`Error loading ${locale}`, error)
|
||||
activateLocale("en")
|
||||
if (locale == "en") {
|
||||
activateLocale(locale)
|
||||
} else {
|
||||
try {
|
||||
const { messages }: { messages: Messages } = await import(`../locales/${locale}/${locale}.ts`)
|
||||
activateLocale(locale, messages)
|
||||
} catch (error) {
|
||||
console.error(`Error loading ${locale}`, error)
|
||||
activateLocale("en")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,11 +58,5 @@ if (locale?.startsWith("zh-")) {
|
||||
if (!languages.some((l) => l.lang === locale)) {
|
||||
locale = "en"
|
||||
}
|
||||
// handle non-english locales
|
||||
if (locale !== "en") {
|
||||
dynamicActivate(locale)
|
||||
} else {
|
||||
// fallback to en
|
||||
activateLocale("en")
|
||||
}
|
||||
dynamicActivate(locale)
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
[
|
||||
{
|
||||
"lang": "ar",
|
||||
"label": "العربية",
|
||||
"e": "🇵🇸"
|
||||
},
|
||||
{
|
||||
"lang": "de",
|
||||
"label": "Deutsch",
|
||||
"e": "🇩🇪"
|
||||
},
|
||||
{
|
||||
"lang": "en",
|
||||
"label": "English",
|
||||
"e": "🇺🇸"
|
||||
},
|
||||
{
|
||||
"lang": "es",
|
||||
"label": "Español",
|
||||
"e": "🇲🇽"
|
||||
},
|
||||
{
|
||||
"lang": "fr",
|
||||
"label": "Français",
|
||||
"e": "🇫🇷"
|
||||
},
|
||||
{
|
||||
"lang": "it",
|
||||
"label": "Italiano",
|
||||
"e": "🇮🇹"
|
||||
},
|
||||
{
|
||||
"lang": "ja",
|
||||
"label": "日本語",
|
||||
"e": "🇯🇵"
|
||||
},
|
||||
{
|
||||
"lang": "ko",
|
||||
"label": "한국어",
|
||||
"e": "🇰🇷"
|
||||
},
|
||||
{
|
||||
"lang": "pt",
|
||||
"label": "Português",
|
||||
"e": "🇧🇷"
|
||||
},
|
||||
{
|
||||
"lang": "tr",
|
||||
"label": "Türkçe",
|
||||
"e": "🇹🇷"
|
||||
},
|
||||
{
|
||||
"lang": "ru",
|
||||
"label": "Русский",
|
||||
"e": "🇷🇺"
|
||||
},
|
||||
{
|
||||
"lang": "uk",
|
||||
"label": "Українська",
|
||||
"e": "🇺🇦"
|
||||
},
|
||||
{
|
||||
"lang": "vi",
|
||||
"label": "Tiếng Việt",
|
||||
"e": "🇻🇳"
|
||||
},
|
||||
{
|
||||
"lang": "zh-CN",
|
||||
"label": "简体中文",
|
||||
"e": "🇨🇳"
|
||||
},
|
||||
{
|
||||
"lang": "zh-HK",
|
||||
"label": "繁體中文",
|
||||
"e": "🇭🇰"
|
||||
}
|
||||
]
|
||||
107
beszel/site/src/lib/languages.ts
Normal file
@@ -0,0 +1,107 @@
|
||||
export default [
|
||||
{
|
||||
lang: "ar",
|
||||
label: "العربية",
|
||||
e: "🇵🇸",
|
||||
},
|
||||
{
|
||||
lang: "cs",
|
||||
label: "Čeština",
|
||||
e: "🇨🇿",
|
||||
},
|
||||
{
|
||||
lang: "de",
|
||||
label: "Deutsch",
|
||||
e: "🇩🇪",
|
||||
},
|
||||
{
|
||||
lang: "en",
|
||||
label: "English",
|
||||
e: "🇺🇸",
|
||||
},
|
||||
{
|
||||
lang: "es",
|
||||
label: "Español",
|
||||
e: "🇲🇽",
|
||||
},
|
||||
{
|
||||
lang: "fa",
|
||||
label: "فارسی",
|
||||
e: "🇮🇷",
|
||||
},
|
||||
{
|
||||
lang: "fr",
|
||||
label: "Français",
|
||||
e: "🇫🇷",
|
||||
},
|
||||
{
|
||||
lang: "hr",
|
||||
label: "Hrvatski",
|
||||
e: "🇭🇷",
|
||||
},
|
||||
{
|
||||
lang: "it",
|
||||
label: "Italiano",
|
||||
e: "🇮🇹",
|
||||
},
|
||||
{
|
||||
lang: "ja",
|
||||
label: "日本語",
|
||||
e: "🇯🇵",
|
||||
},
|
||||
{
|
||||
lang: "ko",
|
||||
label: "한국어",
|
||||
e: "🇰🇷",
|
||||
},
|
||||
{
|
||||
lang: "nl",
|
||||
label: "Nederlands",
|
||||
e: "🇳🇱",
|
||||
},
|
||||
{
|
||||
lang: "pl",
|
||||
label: "Polski",
|
||||
e: "🇵🇱",
|
||||
},
|
||||
{
|
||||
lang: "pt",
|
||||
label: "Português",
|
||||
e: "🇧🇷",
|
||||
},
|
||||
{
|
||||
lang: "tr",
|
||||
label: "Türkçe",
|
||||
e: "🇹🇷",
|
||||
},
|
||||
{
|
||||
lang: "ru",
|
||||
label: "Русский",
|
||||
e: "🇷🇺",
|
||||
},
|
||||
{
|
||||
lang: "sv",
|
||||
label: "Svenska",
|
||||
e: "🇸🇪",
|
||||
},
|
||||
{
|
||||
lang: "uk",
|
||||
label: "Українська",
|
||||
e: "🇺🇦",
|
||||
},
|
||||
{
|
||||
lang: "vi",
|
||||
label: "Tiếng Việt",
|
||||
e: "🇻🇳",
|
||||
},
|
||||
{
|
||||
lang: "zh-CN",
|
||||
label: "简体中文",
|
||||
e: "🇨🇳",
|
||||
},
|
||||
{
|
||||
lang: "zh-HK",
|
||||
label: "繁體中文",
|
||||
e: "🇭🇰",
|
||||
},
|
||||
] as const
|
||||
@@ -26,7 +26,7 @@ export const $chartTime = atom("1h") as WritableAtom<ChartTimes>
|
||||
/** User settings */
|
||||
export const $userSettings = map<UserSettings>({
|
||||
chartTime: "1h",
|
||||
emails: [pb.authStore.model?.email || ""],
|
||||
emails: [pb.authStore.record?.email || ""],
|
||||
})
|
||||
// update local storage on change
|
||||
$userSettings.subscribe((value) => {
|
||||
|
||||
@@ -91,8 +91,8 @@ export const updateFavicon = (newIcon: string) => {
|
||||
;(document.querySelector("link[rel='icon']") as HTMLLinkElement).href = `/static/${newIcon}`
|
||||
}
|
||||
|
||||
export const isAdmin = () => pb.authStore.model?.role === "admin"
|
||||
export const isReadOnlyUser = () => pb.authStore.model?.role === "readonly"
|
||||
export const isAdmin = () => pb.authStore.record?.role === "admin"
|
||||
export const isReadOnlyUser = () => pb.authStore.record?.role === "readonly"
|
||||
|
||||
/** Update systems / alerts list when records change */
|
||||
export function updateRecordList<T extends RecordModel>(e: RecordSubscription<T>, $store: WritableAtom<T[]>) {
|
||||
@@ -251,7 +251,7 @@ export async function updateUserSettings() {
|
||||
}
|
||||
// create user settings if error fetching existing
|
||||
try {
|
||||
const createdSettings = await pb.collection("user_settings").create({ user: pb.authStore.model!.id })
|
||||
const createdSettings = await pb.collection("user_settings").create({ user: pb.authStore.record!.id })
|
||||
$userSettings.set(createdSettings.settings)
|
||||
} catch (e) {
|
||||
console.log("create settings", e)
|
||||
@@ -272,7 +272,7 @@ export const getSizeAndUnit = (n: number, isGigabytes = true) => {
|
||||
} else if (sizeInGB >= 1) {
|
||||
return { v: sizeInGB, u: " GB" }
|
||||
}
|
||||
return { v: n, u: " MB" }
|
||||
return { v: isGigabytes ? sizeInGB * 1_000 : n, u: " MB" }
|
||||
}
|
||||
|
||||
export const chartMargin = { top: 12 }
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ar\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Arabic\n"
|
||||
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# يوم} other {# أيام}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ساعة} other {# ساعات}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 يومًا"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "إجراءات"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "التنبيهات النشطة"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "إضافة <0>نظام</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "إضافة نظام جديد"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "إضافة نظام"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "إضافة عنوان URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "تعديل خيارات العرض للرسوم البيانية."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "مسؤول"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "وكيل"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "التنبيهات"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "جميع الأنظمة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "هل أنت متأكد أنك تريد حذف {name}؟"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "مزودو المصادقة"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "النسخ التلقائي يتطلب سياقًا آمنًا."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "متوسط"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "متوسط استخدام وحدة المعالجة المركزية للحاويات"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "المتوسط يتجاوز <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "متوسط استهلاك طاقة GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "متوسط استخدام وحدة المعالجة المركزية على مستوى النظام"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "متوسط استخدام {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "النسخ الاحتياطية"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "عرض النطاق الترددي"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "يدعم Beszel OpenID Connect والعديد من مزودي المصادقة OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "يدعم Beszel OpenID Connect والعديد من مزودي المصا
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "يستخدم Beszel <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "ثنائي"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "ثنائي"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "ذاكرة التخزين المؤقت / المخازن المؤقتة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "إلغاء"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "تحقق من السجلات لمزيد من التفاصيل."
|
||||
msgid "Check your notification service"
|
||||
msgstr "تحقق من خدمة الإشعارات الخاصة بك"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "انقر للنسخ"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "أعمدة"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "تعليمات سطر الأوامر"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "قم بتكوين كيفية تلقي إشعارات التنبيه."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "تأكيد كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "متابعة"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "متابعة"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "تم النسخ إلى الحافظة"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "نسخ"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "نسخ المضيف"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "نسخ أمر لينكس"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "نسخ أمر لينكس"
|
||||
msgid "Copy text"
|
||||
msgstr "نسخ النص"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "المعالج"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "استخدام وحدة المعالجة المركزية"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "إنشاء حساب"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "إنشاء حساب"
|
||||
msgid "Dark"
|
||||
msgstr "داكن"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "لوحة التحكم"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "لوحة التحكم"
|
||||
msgid "Default time period"
|
||||
msgstr "الفترة الزمنية الافتراضية"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "القرص"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "إدخال/إخراج القرص"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "استخدام القرص"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "استخدام القرص لـ {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "استخدام وحدة المعالجة المركزية لـ Docker"
|
||||
msgstr "استخدام CPU لـ Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "استخدام الذاكرة لـ Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "إدخال/إخراج الشبكة لـ Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "التوثيق"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "البريد الإلكتروني"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "البريد الإلكتروني"
|
||||
@@ -308,7 +304,7 @@ msgstr "البريد الإلكتروني"
|
||||
msgid "Email notifications"
|
||||
msgstr "إشعارات البريد الإلكتروني"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "أدخل عنوان البريد الإلكتروني لإعادة تعيين كلمة المرور"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "أدخل عنوان البريد الإلكتروني لإعادة تع
|
||||
msgid "Enter email address..."
|
||||
msgstr "أدخل عنوان البريد الإلكتروني..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "خطأ"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "فشل في حفظ الإعدادات"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "فشل في إرسال إشعار الاختبار"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "فشل في تحديث التنبيه"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "تصفية..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "لمدة <0>{min}</0> {min, plural, one {دقيقة} other {دقائق}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "هل نسيت كلمة المرور؟"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "هل نسيت كلمة المرور؟"
|
||||
msgid "General"
|
||||
msgstr "عام"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "استهلاك طاقة GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "شبكة"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "مضيف / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "عنوان البريد الإلكتروني غير صالح."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "كيرنل"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "كيرنل"
|
||||
msgid "Language"
|
||||
msgstr "اللغة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "التخطيط"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "فاتح"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "تسجيل الخروج"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "تسجيل الدخول"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "فشل محاولة تسجيل الدخول"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "السجلات"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "إدارة تفضيلات العرض والإشعارات."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "1 دقيقة كحد"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "الذاكرة"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "استخدام الذاكرة"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "استخدام الذاكرة لحاويات Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "الاسم"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "الشبكة"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "حركة مرور الشبكة لحاويات Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "حركة مرور الشبكة للواجهات العامة"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "لم يتم العثور على نتائج."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "لم يتم العثور على أنظمة."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "الإشعارات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "دعم OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "دعم OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "في كل إعادة تشغيل، سيتم تحديث الأنظمة في قاعدة البيانات لتتطابق مع الأنظمة المعرفة في الملف."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "فتح القائمة"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "أو المتابعة باستخدام"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "أو المتابعة باستخدام"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "الكتابة فوق التنبيهات الحالية"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "صفحة"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "الصفحات / الإعدادات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "كلمة المرور"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "يجب أن تكون كلمة المرور مكونة من 10 أحرف على الأقل."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "كلمة المرور يجب أن تتكون من 8 أحرف على الأقل."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "تم استلام طلب إعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "إيقاف مؤقت"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "إيقاف مؤقت"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "يرجى <0>تكوين خادم SMTP</0> لضمان تسليم التنبيهات."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "يرجى التحقق من السجلات لمزيد من التفاصيل."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "يرجى التحقق من بيانات الاعتماد الخاصة بك والمحاولة مرة أخرى"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "يرجى إنشاء حساب مسؤول"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموقع"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموق
|
||||
msgid "Please log in again"
|
||||
msgstr "يرجى تسجيل الدخول مرة أخرى"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "يرجى الاطلاع على <0>التوثيق</0> للحصول على التعليمات."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "يرجى تسجيل الدخول إلى حسابك"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "المنفذ"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "الاستخدام الدقيق في الوقت المسجل"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "اللغة المفضلة"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "المفتاح العام"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "قراءة"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "تم الاستلام"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "تم الاستلام"
|
||||
msgid "Reset Password"
|
||||
msgstr "إعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "استئناف"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "احفظ العنوان باستخدام مفتاح الإدخال أو
|
||||
msgid "Save Settings"
|
||||
msgstr "حفظ الإعدادات"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "بحث"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "البحث عن الأنظمة أو الإعدادات..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "البحث عن الأنظمة أو الإعدادات..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "راجع <0>إعدادات الإشعارات</0> لتكوين كيفية تلقي التنبيهات."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "تم الإرسال"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "تم الإرسال"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "يحدد النطاق الزمني الافتراضي للرسوم البيانية عند عرض النظام."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "الإعدادات"
|
||||
msgid "Settings saved"
|
||||
msgstr "تم حفظ الإعدادات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "تسجيل الدخول"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "إعدادات SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "الترتيب حسب"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "الحالة"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "مساحة التبديل المستخدمة من قبل النظام"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "استخدام التبديل"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "النظام"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "الأنظمة"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "الأنظمة"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "يمكن إدارة الأنظمة في ملف <0>config.yml</0> داخل دليل البيانات الخاص بك."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "جدول"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "درجة الحرارة"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "درجات حرارة مستشعرات النظام"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "اختبار <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "تم إرسال إشعار الاختبار"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ أمر التثبيت للوكيل أدناه."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "يجب أن يكون الوكيل قيد التشغيل على النظام للاتصال. انسخ <0>docker-compose.yml</0> للوكيل أدناه."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "يجب أن يكون الوكيل قيد التشغيل على النظ
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "ثم قم بتسجيل الدخول إلى الواجهة الخلفية وأعد تعيين كلمة مرور حساب المستخدم الخاص بك في جدول المستخدمين."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "لا يمكن التراجع عن هذا الإجراء. سيؤدي ذلك إلى حذف جميع السجلات الحالية لـ {name} من قاعدة البيانات بشكل دائم."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "معدل نقل {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "معدل نقل نظام الملفات الجذر"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "معدل نقل نظام الملفات الجذر"
|
||||
msgid "To email(s)"
|
||||
msgstr "إلى البريد الإلكتروني"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "تبديل الشبكة"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "يتم التفعيل عندما يتغير الحالة بين التش
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "يتم التفعيل عندما يتجاوز استخدام أي قرص عتبة معينة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "محدث في الوقت الحقيقي. انقر على نظام لعرض المعلومات."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "مدة التشغيل"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "الاستخدام"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "استخدام القسم الجذر"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "مستخدم"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "اسم المستخدم"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "اسم المستخدم"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "المستخدمون"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "عرض"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "الأعمدة الظاهرة"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "في انتظار وجود سجلات كافية للعرض"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "هل تريد مساعدتنا في تحسين ترجماتنا؟ تحق
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "إشعارات Webhook / Push"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "كتابة"
|
||||
|
||||
|
||||
831
beszel/site/src/locales/cs/cs.po
Normal file
@@ -0,0 +1,831 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: cs\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
"X-Crowdin-Project: beszel\n"
|
||||
"X-Crowdin-Project-ID: 733311\n"
|
||||
"X-Crowdin-Language: cs\n"
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# den} few {# dny} other {# dní}}"
|
||||
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# Hodina} few {# Hodiny} many {# Hodin} other {# Hodin}}"
|
||||
|
||||
#: src/lib/utils.ts:139
|
||||
msgid "1 hour"
|
||||
msgstr "1 hodina"
|
||||
|
||||
#: src/lib/utils.ts:162
|
||||
msgid "1 week"
|
||||
msgstr "1 týden"
|
||||
|
||||
#: src/lib/utils.ts:147
|
||||
msgid "12 hours"
|
||||
msgstr "12 hodin"
|
||||
|
||||
#: src/lib/utils.ts:155
|
||||
msgid "24 hours"
|
||||
msgstr "24 hodin"
|
||||
|
||||
#: src/lib/utils.ts:170
|
||||
msgid "30 days"
|
||||
msgstr "30 dní"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Akce"
|
||||
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Aktivní výstrahy"
|
||||
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Přidat <0>Systém</0>"
|
||||
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Přidat nový systém"
|
||||
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Přidat systém"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:156
|
||||
msgid "Add URL"
|
||||
msgstr "Přidat URL"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:81
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Upravit možnosti zobrazení pro grafy."
|
||||
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
msgid "Alerts"
|
||||
msgstr "Výstrahy"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Všechny systémy"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Opravdu chcete odstranit {name}?"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatická kopie vyžaduje zabezpečený kontext."
|
||||
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Průměr"
|
||||
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Průměrné využití CPU kontejnerů"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Průměr je vyšší než <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Průměrná spotřeba energie GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Průměrné využití CPU v celém systému"
|
||||
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Průměrné využití {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Zálohy"
|
||||
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Přenos"
|
||||
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel podporuje OpenID Connect a mnoho poskytovatelů OAuth2 ověřování."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:127
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel používá <0>Shoutrrr</0> k integraci s populárními notifikačními službami."
|
||||
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binary"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / vyrovnávací paměť"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Upozornění - možná ztráta dat"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:36
|
||||
msgid "Change general application options."
|
||||
msgstr "Změnit obecné nastavení aplikace."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:78
|
||||
msgid "Chart options"
|
||||
msgstr "Možnosti grafu"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Zkontrolujte {email} pro odkaz na obnovení."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Pro více informací zkontrolujte logy."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
msgid "Check your notification service"
|
||||
msgstr "Zkontrolujte službu upozornění"
|
||||
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Klikněte pro zkopírování"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
msgstr "Instrukce příkazového řádku"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:77
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Konfigurace způsobu přijímání upozornění."
|
||||
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Potvrdit heslo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Pokračovat"
|
||||
|
||||
#: src/lib/utils.ts:25
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Zkopírováno do schránky"
|
||||
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Kopírovat"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Kopírovat hostitele"
|
||||
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopírovat příkaz Linux"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:13
|
||||
msgid "Copy text"
|
||||
msgstr "Kopírovat text"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "Procesor"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Využití procesoru"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Vytvořit účet"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
msgid "Dark"
|
||||
msgstr "Tmavý"
|
||||
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Přehled"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:85
|
||||
msgid "Default time period"
|
||||
msgstr "Výchozí doba"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Odstranit"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Využití disku"
|
||||
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Využití disku {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Využití CPU Dockeru"
|
||||
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Využití paměti Dockeru"
|
||||
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Síťové I/O Dockeru"
|
||||
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Dokumentace"
|
||||
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:91
|
||||
msgid "Email notifications"
|
||||
msgstr "Emailová upozornění"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Zadejte e-mailovou adresu pro obnovu hesla"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:111
|
||||
msgid "Enter email address..."
|
||||
msgstr "Zadejte e-mailovou adresu..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Chyba"
|
||||
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Překračuje {0}{1} za {2, plural, one {poslední # minutu} few {poslední # minuty} other {posledních # minut}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Stávající systémy, které nejsou definovány v <0>config.yml</0>, budou odstraněny. Provádějte pravidelné zálohování."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
msgid "Export configuration"
|
||||
msgstr "Exportovat konfiguraci"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Exportovat aktuální konfiguraci systémů."
|
||||
|
||||
#: src/lib/utils.ts:38
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Ověření se nezdařilo"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:62
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Nepodařilo se uložit nastavení"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Nepodařilo se odeslat testovací oznámení"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Nepodařilo se aktualizovat upozornění"
|
||||
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtr..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Za <0>{min}</0> {min, plural, one {minutu} few {minuty} other {minut}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zapomněli jste heslo?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "Obecné"
|
||||
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Spotřeba energie GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Mřížka"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Hostitel / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Pokud jste ztratili heslo k vašemu účtu správce, můžete jej obnovit pomocí následujícího příkazu."
|
||||
|
||||
#: src/components/login/auth-form.tsx:16
|
||||
msgid "Invalid email address."
|
||||
msgstr "Neplatná e-mailová adresa."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "Jazyk"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Rozvržení"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Světlý"
|
||||
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Odhlásit"
|
||||
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Přihlásit"
|
||||
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Pokus o přihlášení selhal"
|
||||
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logy"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:80
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Hledáte místo kde vytvářet upozornění? Klikněte na ikonu zvonku <0/> v systémové tabulce."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Správa nastavení zobrazení a oznámení."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max. 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Paměť"
|
||||
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Využití paměti"
|
||||
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Využití paměti docker kontejnerů"
|
||||
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Název"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Síť"
|
||||
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Síťový provoz kontejnerů docker"
|
||||
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Síťový provoz veřejných rozhraní"
|
||||
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Nenalezeny žádné výskyty."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Nenalezeny žádné systémy."
|
||||
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Upozornění"
|
||||
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Podpora OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Při každém restartu budou systémy v databázi aktualizovány tak, aby odpovídaly systémům definovaným v souboru."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Otevřít menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Nebo pokračujte s"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Přepsat existující upozornění"
|
||||
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Stránka"
|
||||
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Stránky / Nastavení"
|
||||
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Heslo musí obsahovat alespoň 8 znaků."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Žádost o obnovu hesla byla přijata"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pozastavit"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:95
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "<0>nakonfigurujte SMTP server</0> pro zajištění toho, aby byla upozornění doručena."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Pro více informací zkontrolujte logy."
|
||||
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Zkontrolujte prosím Vaše přihlašovací údaje a zkuste to znovu"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Vytvořte si prosím účet administrátora"
|
||||
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Prosím povolte vyskakovací okna pro tento web"
|
||||
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Please log in again"
|
||||
msgstr "Přihlaste se prosím znovu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Instrukce naleznete v <0>dokumentaci</0>."
|
||||
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Přihlaste se prosím k vašemu účtu"
|
||||
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Přesné využití v zaznamenaném čase"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:58
|
||||
msgid "Preferred Language"
|
||||
msgstr "Upřednostňovaný jazyk"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Veřejný klíč"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Číst"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Přijato"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
msgid "Reset Password"
|
||||
msgstr "Obnovit heslo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Pokračovat"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:117
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Adresu uložte pomocí klávesy enter nebo čárky. Pro deaktivaci e-mailových oznámení ponechte prázdné pole."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:167
|
||||
msgid "Save Settings"
|
||||
msgstr "Uložit nastavení"
|
||||
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Hledat systémy nebo nastavení..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Podívejte se na <0>nastavení upozornění</0> pro nastavení toho, jak přijímáte upozornění."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Odeslat"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:100
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Nastaví výchozí časový rozsah grafů, když je systém zobrazen."
|
||||
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
msgstr "Nastavení"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
msgid "Settings saved"
|
||||
msgstr "Nastavení uloženo"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Přihlásit se"
|
||||
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Nastavení SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Seřadit podle"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Stav"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap prostor využívaný systémem"
|
||||
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap využití"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Systém"
|
||||
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systémy"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systémy lze spravovat v souboru <0>config.yml</0> uvnitř datového adresáře."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabulka"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Teplota"
|
||||
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Teploty systémových senzorů"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:211
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:182
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testovací oznámení odesláno"
|
||||
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Agent musí být v systému spuštěn, aby se mohl připojit. Zkopírujte níže uvedený instalační příkaz pro agenta."
|
||||
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Agent musí být v systému spuštěn, aby se mohl připojit. Zkopírujte níže uvedený soubor<0>docker-compose.yml</0> pro agenta."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Poté se přihlaste do backendu a obnovte heslo k uživatelskému účtu v tabulce uživatelů."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Tuto akci nelze vzít zpět. Tím se z databáze trvale odstraní všechny aktuální záznamy pro {name}."
|
||||
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Propustnost {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Propustnost kořenového souborového systému"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:106
|
||||
msgid "To email(s)"
|
||||
msgstr "Na email(y)"
|
||||
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Přepnout mřížku"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "Přepnout motiv"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "Spustí se, když některý senzor překročí prahovou hodnotu"
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Spustí se, když kombinace up/down překročí prahovou hodnotu"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "Spustí se, když využití procesoru překročí prahovou hodnotu"
|
||||
|
||||
#: src/lib/utils.ts:298
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "Spustí se, když využití paměti překročí prahovou hodnotu"
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Spouští se, když se změní dostupnost"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Spustí se, když využití disku překročí prahovou hodnotu"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Aktualizováno v reálném čase. Klepnutím na systém zobrazíte informace."
|
||||
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Doba provozu"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Využití"
|
||||
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Využití kořenového oddílu"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Využito"
|
||||
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Uživatelé"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Zobrazení"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Viditelné sloupce"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Čeká se na dostatek záznamů k zobrazení"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:48
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Chcete nám pomoci s našimi překlady ještě lépe? Podívejte se na <0>Crowdin</0> pro více informací."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:124
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push oznámení"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Psát"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML konfigurace"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML konfigurace"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Vaše uživatelská nastavení byla aktualizována."
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# Tag} other {# Tage}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# Stunde} other {# Stunden}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 Tage"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Aktionen"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Aktive Warnungen"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "<0>System</0> hinzufügen"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Neues System hinzufügen"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "System hinzufügen"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "URL hinzufügen"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Anzeigeoptionen für Diagramme anpassen."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Warnungen"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Alle Systeme"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Möchten Sie {name} wirklich löschen?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Authentifizierungsanbieter"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisches Kopieren erfordert einen sicheren Kontext."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Durchschnitt"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Durchschnittliche CPU-Auslastung der Container"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Durchschnitt überschreitet <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Durchschnittlicher Stromverbrauch der GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Durchschnittliche systemweite CPU-Auslastung"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Durchschnittliche Auslastung von {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandbreite"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsanbieter."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsan
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel verwendet <0>Shoutrrr</0>, um sich mit beliebten Benachrichtigungsdiensten zu integrieren."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binär"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Binär"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Puffer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Überprüfen Sie die Protokolle für weitere Details."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Überprüfen Sie Ihren Benachrichtigungsdienst"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Zum Kopieren klicken"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Spalten"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Befehlszeilenanweisungen"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Konfigurieren Sie, wie Sie Warnbenachrichtigungen erhalten."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Passwort bestätigen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Fortfahren"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Fortfahren"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "In die Zwischenablage kopiert"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Kopieren"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Host kopieren"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Linux-Befehl kopieren"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Linux-Befehl kopieren"
|
||||
msgid "Copy text"
|
||||
msgstr "Text kopieren"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU-Auslastung"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Konto erstellen"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Konto erstellen"
|
||||
msgid "Dark"
|
||||
msgstr "Dunkel"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Dashboard"
|
||||
msgid "Default time period"
|
||||
msgstr "Standardzeitraum"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Festplatte"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Festplatten-I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Festplattennutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Festplattennutzung von {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker-CPU-Auslastung"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker-Speichernutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker-Netzwerk-I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Dokumentation"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
@@ -308,7 +304,7 @@ msgstr "E-Mail"
|
||||
msgid "Email notifications"
|
||||
msgstr "E-Mail-Benachrichtigungen"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "E-Mail-Adresse eingeben, um das Passwort zurückzusetzen"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "E-Mail-Adresse eingeben, um das Passwort zurückzusetzen"
|
||||
msgid "Enter email address..."
|
||||
msgstr "E-Mail-Adresse eingeben..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Überschreitet {0}{1} in den letzten {2, plural, one {# Minute} other {# Minuten}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "Einstellungen konnten nicht gespeichert werden"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Testbenachrichtigung konnte nicht gesendet werden"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Warnung konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Für <0>{min}</0> {min, plural, one {Minute} other {Minuten}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "Passwort vergessen?"
|
||||
msgid "General"
|
||||
msgstr "Allgemein"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU-Leistungsaufnahme"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Raster"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Ungültige E-Mail-Adresse."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Hell"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Anmeldeversuch fehlgeschlagen"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Protokolle"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Anzeige- und Benachrichtigungseinstellungen verwalten."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 Min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Speicher"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Speichernutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Speichernutzung der Docker-Container"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Netz"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Netzwerkverkehr der Docker-Container"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Netzwerkverkehr der öffentlichen Schnittstellen"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Keine Ergebnisse gefunden."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Keine Systeme gefunden."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Benachrichtigungen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC-Unterstützung"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDC-Unterstützung"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Bei jedem Neustart werden die Systeme in der Datenbank aktualisiert, um den im Datei definierten Systemen zu entsprechen."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Menü öffnen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Oder fortfahren mit"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "Oder fortfahren mit"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Bestehende Warnungen überschreiben"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Seite"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Seiten / Einstellungen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "Das Passwort muss mindestens 10 Zeichen lang sein."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Das Passwort muss mindestens 8 Zeichen haben."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Anfrage zum Zurücksetzen des Passworts erhalten"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Pause"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Bitte <0>konfigurieren Sie einen SMTP-Server</0>, um sicherzustellen, dass Warnungen zugestellt werden."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Bitte überprüfen Sie die Protokolle für weitere Details."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Bitte überprüfen Sie Ihre Anmeldedaten und versuchen Sie es erneut"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Bitte erstellen Sie ein Administratorkonto"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Bitte aktivieren Sie Pop-ups für diese Seite"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Bitte aktivieren Sie Pop-ups für diese Seite"
|
||||
msgid "Please log in again"
|
||||
msgstr "Bitte melden Sie sich erneut an"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Bitte sehen Sie sich <0>die Dokumentation</0> für Anweisungen an."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Bitte melden Sie sich bei Ihrem Konto an"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Genaue Nutzung zum aufgezeichneten Zeitpunkt"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Bevorzugte Sprache"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Schlüssel"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Lesen"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Empfangen"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Empfangen"
|
||||
msgid "Reset Password"
|
||||
msgstr "Passwort zurücksetzen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Fortsetzen"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Adresse mit der Eingabetaste oder Komma speichern. Leer lassen, um E-Mai
|
||||
msgid "Save Settings"
|
||||
msgstr "Einstellungen speichern"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Nach Systemen oder Einstellungen suchen..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Nach Systemen oder Einstellungen suchen..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Siehe <0>Benachrichtigungseinstellungen</0>, um zu konfigurieren, wie Sie Warnungen erhalten."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Gesendet"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Gesendet"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Legt den Standardzeitraum für Diagramme fest, wenn ein System angezeigt wird."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Einstellungen"
|
||||
msgid "Settings saved"
|
||||
msgstr "Einstellungen gespeichert"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP-Einstellungen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Sortieren nach"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Vom System genutzter Swap-Speicher"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap-Nutzung"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systeme"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Systeme"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systeme können in einer <0>config.yml</0>-Datei in Ihrem Datenverzeichnis verwaltet werden."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabelle"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatur"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturen der Systemsensoren"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Test <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testbenachrichtigung gesendet"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie den Installationsbefehl für den Agenten unten."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. Kopieren Sie die <0>docker-compose.yml</0> für den Agenten unten."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "Der Agent muss auf dem System laufen, um eine Verbindung herzustellen. K
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Melden Sie sich dann im Backend an und setzen Sie Ihr Benutzerkontopasswort in der Benutzertabelle zurück."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch werden alle aktuellen Datensätze für {name} dauerhaft aus der Datenbank gelöscht."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Durchsatz von {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Durchsatz des Root-Dateisystems"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "Durchsatz des Root-Dateisystems"
|
||||
msgid "To email(s)"
|
||||
msgstr "An E-Mail(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Raster umschalten"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "Löst aus, wenn der Status zwischen oben und unten wechselt"
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Löst aus, wenn die Nutzung einer Festplatte einen Schwellenwert überschreitet"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "In Echtzeit aktualisiert. Klicken Sie auf ein System, um Informationen anzuzeigen."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Betriebszeit"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Nutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Nutzung der Root-Partition"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Verwendet"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Benutzer"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Ansicht"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Sichtbare Spalten"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Warten auf genügend Datensätze zur Anzeige"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "Möchten Sie uns helfen, unsere Übersetzungen noch besser zu machen? Sc
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push-Benachrichtigungen"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Schreiben"
|
||||
|
||||
|
||||
@@ -13,11 +13,11 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# day} other {# days}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hour} other {# hours}}"
|
||||
|
||||
@@ -42,24 +42,27 @@ msgid "30 days"
|
||||
msgstr "30 days"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Active Alerts"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Add <0>System</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Add New System"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Add system"
|
||||
|
||||
@@ -71,16 +74,15 @@ msgstr "Add URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Adjust display options for charts."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
@@ -90,50 +92,53 @@ msgid "Alerts"
|
||||
msgstr "Alerts"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "All Systems"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Are you sure you want to delete {name}?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Auth Providers"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatic copy requires a secure context."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Average"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Average CPU utilization of containers"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Average exceeds <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Average power consumption of GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Average system-wide CPU utilization"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Average utilization of {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandwidth"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
|
||||
@@ -141,7 +146,7 @@ msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers.
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binary"
|
||||
|
||||
@@ -149,7 +154,7 @@ msgstr "Binary"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
@@ -177,15 +182,10 @@ msgstr "Check logs for more details."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Check your notification service"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Click to copy"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Columns"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -195,12 +195,12 @@ msgstr "Command line instructions"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configure how you receive alert notifications."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirm password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Continue"
|
||||
|
||||
@@ -208,15 +208,15 @@ msgstr "Continue"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copied to clipboard"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Copy"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Copy host"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copy Linux command"
|
||||
|
||||
@@ -224,17 +224,17 @@ msgstr "Copy Linux command"
|
||||
msgid "Copy text"
|
||||
msgstr "Copy text"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU Usage"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Create account"
|
||||
|
||||
@@ -243,8 +243,8 @@ msgstr "Create account"
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
@@ -252,49 +252,45 @@ msgstr "Dashboard"
|
||||
msgid "Default time period"
|
||||
msgstr "Default time period"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Disk Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Disk usage of {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Memory Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Network I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
@@ -303,7 +299,7 @@ msgstr "Email"
|
||||
msgid "Email notifications"
|
||||
msgstr "Email notifications"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Enter email address to reset password"
|
||||
|
||||
@@ -311,13 +307,13 @@ msgstr "Enter email address to reset password"
|
||||
msgid "Enter email address..."
|
||||
msgstr "Enter email address..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
|
||||
@@ -346,20 +342,20 @@ msgstr "Failed to save settings"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Failed to send test notification"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Failed to update alert"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Forgot password?"
|
||||
|
||||
@@ -369,7 +365,15 @@ msgstr "Forgot password?"
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU Power Draw"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Grid"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -382,7 +386,7 @@ msgid "Invalid email address."
|
||||
msgstr "Invalid email address."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -390,26 +394,30 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Layout"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Light"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Log Out"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Login attempt failed"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
@@ -422,54 +430,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Manage display and notification preferences."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Memory"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Memory Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Memory usage of docker containers"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Network traffic of docker containers"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Network traffic of public interfaces"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "No results found."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "No systems found."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC support"
|
||||
|
||||
@@ -477,11 +486,11 @@ msgstr "OAuth 2 / OIDC support"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Open menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Or continue with"
|
||||
|
||||
@@ -489,28 +498,28 @@ msgstr "Or continue with"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Overwrite existing alerts"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pages / Settings"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "Password must be at least 10 characters."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Password must be at least 8 characters."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Password reset request received"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
@@ -518,20 +527,20 @@ msgstr "Pause"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Please check logs for more details."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Please check your credentials and try again"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Please create an admin account"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Please enable pop-ups for this site"
|
||||
|
||||
@@ -539,19 +548,20 @@ msgstr "Please enable pop-ups for this site"
|
||||
msgid "Please log in again"
|
||||
msgstr "Please log in again"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Please see <0>the documentation</0> for instructions."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Please sign in to your account"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Precise utilization at the recorded time"
|
||||
|
||||
@@ -560,18 +570,18 @@ msgid "Preferred Language"
|
||||
msgstr "Preferred Language"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Public Key"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Read"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Received"
|
||||
|
||||
@@ -579,7 +589,7 @@ msgstr "Received"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Resume"
|
||||
|
||||
@@ -592,11 +602,11 @@ msgstr "Save address using enter key or comma. Leave blank to disable email noti
|
||||
msgid "Save Settings"
|
||||
msgstr "Save Settings"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Search"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Search for systems or settings..."
|
||||
|
||||
@@ -604,8 +614,8 @@ msgstr "Search for systems or settings..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "See <0>notification settings</0> to configure how you receive alerts."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Sent"
|
||||
|
||||
@@ -613,9 +623,9 @@ msgstr "Sent"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Sets the default time range for charts when a system is viewed."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -625,34 +635,40 @@ msgstr "Settings"
|
||||
msgid "Settings saved"
|
||||
msgstr "Settings saved"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Sign in"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP settings"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Sort By"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap space used by the system"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap Usage"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systems"
|
||||
|
||||
@@ -660,12 +676,16 @@ msgstr "Systems"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Table"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperature"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatures of system sensors"
|
||||
|
||||
@@ -677,11 +697,11 @@ msgstr "Test <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Test notification sent"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
|
||||
@@ -689,15 +709,15 @@ msgstr "The agent must be running on the system to connect. Copy the<0>docker-co
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Then log into the backend and reset your user account password in the users table."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Throughput of {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Throughput of root filesystem"
|
||||
|
||||
@@ -705,8 +725,8 @@ msgstr "Throughput of root filesystem"
|
||||
msgid "To email(s)"
|
||||
msgstr "To email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Toggle grid"
|
||||
|
||||
@@ -738,41 +758,44 @@ msgstr "Triggers when status switches between up and down"
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Triggers when usage of any disk exceeds a threshold"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Updated in real time. Click on a system to view information."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Uptime"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Usage of root partition"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Used"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "username"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Users"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "View"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Visible Fields"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Waiting for enough records to display"
|
||||
|
||||
@@ -784,9 +807,9 @@ msgstr "Want to help us make our translations even better? Check out <0>Crowdin<
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push notifications"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Write"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# día} other {# días}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hora} other {# horas}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 días"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Acciones"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Alertas Activas"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Agregar <0>Sistema</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Agregar Nuevo Sistema"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Agregar sistema"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "Agregar URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Ajustar las opciones de visualización para los gráficos."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Administrador"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agente"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Alertas"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Todos los Sistemas"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "¿Está seguro de que desea eliminar {name}?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Proveedores de Autenticación"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copia automática requiere un contexto seguro."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Promedio"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilización promedio de CPU de los contenedores"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "El promedio excede <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilización promedio de CPU del sistema"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Copias de Seguridad"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Ancho de banda"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAut
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel utiliza <0>Shoutrrr</0> para integrarse con servicios populares de notificación."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binario"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Binario"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Caché / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Revise los registros para más detalles."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Verifique su servicio de notificaciones"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Haga clic para copiar"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Columnas"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Instrucciones de línea de comandos"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configure cómo recibe las notificaciones de alertas."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmar contraseña"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Continuar"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Continuar"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copiado al portapapeles"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Copiar host"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copiar comando de Linux"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Copiar comando de Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copiar texto"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Uso de CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Crear cuenta"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Crear cuenta"
|
||||
msgid "Dark"
|
||||
msgstr "Oscuro"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Tablero"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Tablero"
|
||||
msgid "Default time period"
|
||||
msgstr "Período de tiempo predeterminado"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "E/S de Disco"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Uso de Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Uso de disco de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Uso de CPU de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Uso de Memoria de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "E/S de Red de Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentación"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "correo electrónico"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Correo electrónico"
|
||||
@@ -308,7 +304,7 @@ msgstr "Correo electrónico"
|
||||
msgid "Email notifications"
|
||||
msgstr "Notificaciones por correo"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Ingrese la dirección de correo electrónico para restablecer la contraseña"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "Ingrese la dirección de correo electrónico para restablecer la contras
|
||||
msgid "Enter email address..."
|
||||
msgstr "Ingrese dirección de correo..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Excede {0}{1} en el último {2, plural, one {# minuto} other {# minutos}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "Error al guardar la configuración"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Error al enviar la notificación de prueba"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Error al actualizar la alerta"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrar..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "¿Olvidó su contraseña?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "¿Olvidó su contraseña?"
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Cuadrícula"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Dirección de correo electrónico no válida."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Diseño"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Cerrar Sesión"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Intento de inicio de sesión fallido"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Registros"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Administrar preferencias de visualización y notificaciones."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Máx 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Uso de Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Uso de memoria de los contenedores de Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Red"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Tráfico de red de los contenedores de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Tráfico de red de interfaces públicas"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "No se encontraron resultados."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "No se encontraron sistemas."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Soporte para OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "Soporte para OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "En cada reinicio, los sistemas en la base de datos se actualizarán para coincidir con los sistemas definidos en el archivo."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Abrir menú"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "O continuar con"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "O continuar con"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Sobrescribir alertas existentes"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Página"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Páginas / Configuraciones"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "La contraseña debe tener al menos 10 caracteres."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "La contraseña debe tener al menos 8 caracteres."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Solicitud de restablecimiento de contraseña recibida"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Pausar"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Por favor, <0>configure un servidor SMTP</0> para asegurar que las alertas sean entregadas."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Por favor, revise los registros para más detalles."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Por favor, verifique sus credenciales e intente de nuevo"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Por favor, cree una cuenta de administrador"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Por favor, habilite las ventanas emergentes para este sitio"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Por favor, habilite las ventanas emergentes para este sitio"
|
||||
msgid "Please log in again"
|
||||
msgstr "Por favor, inicie sesión de nuevo"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Por favor, consulte <0>la documentación</0> para obtener instrucciones."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Por favor, inicie sesión en su cuenta"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Puerto"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilización precisa en el momento registrado"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Idioma Preferido"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Clave Pública"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Lectura"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Recibido"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Recibido"
|
||||
msgid "Reset Password"
|
||||
msgstr "Restablecer Contraseña"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Reanudar"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Guarde la dirección usando la tecla enter o coma. Deje en blanco para d
|
||||
msgid "Save Settings"
|
||||
msgstr "Guardar Configuración"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Buscar sistemas o configuraciones..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Buscar sistemas o configuraciones..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Consulte <0>configuración de notificaciones</0> para configurar cómo recibe alertas."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Enviado"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Enviado"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Establece el rango de tiempo predeterminado para los gráficos cuando se visualiza un sistema."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Configuración"
|
||||
msgid "Settings saved"
|
||||
msgstr "Configuración guardada"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Configuración SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Ordenar por"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espacio de swap utilizado por el sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Uso de Swap"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Sistemas"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Sistemas"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Los sistemas pueden ser gestionados en un archivo <0>config.yml</0> dentro de su directorio de datos."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabla"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturas de los sensores del sistema"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Probar <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notificación de prueba enviada"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el comando de instalación para el agente a continuación."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie el <0>docker-compose.yml</0> para el agente a continuación."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "El agente debe estar ejecutándose en el sistema para conectarse. Copie
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Luego inicie sesión en el backend y restablezca la contraseña de su cuenta de usuario en la tabla de usuarios."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Esta acción no se puede deshacer. Esto eliminará permanentemente todos los registros actuales de {name} de la base de datos."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Rendimiento de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Rendimiento del sistema de archivos raíz"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "Rendimiento del sistema de archivos raíz"
|
||||
msgid "To email(s)"
|
||||
msgstr "A correo(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Alternar cuadrícula"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "Se activa cuando el estado cambia entre activo e inactivo"
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Se activa cuando el uso de cualquier disco supera un umbral"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Actualizado en tiempo real. Haga clic en un sistema para ver la información."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Tiempo de actividad"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Uso de la partición raíz"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Usado"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "nombre de usuario"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Usuarios"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Columnas visibles"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Esperando suficientes registros para mostrar"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "¿Quieres ayudarnos a mejorar nuestras traducciones? Consulta <0>Crowdin
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notificaciones Webhook / Push"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Escritura"
|
||||
|
||||
|
||||
831
beszel/site/src/locales/fa/fa.po
Normal file
@@ -0,0 +1,831 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: fa\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Persian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: beszel\n"
|
||||
"X-Crowdin-Project-ID: 733311\n"
|
||||
"X-Crowdin-Language: fa\n"
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# روز} other {# روز}}"
|
||||
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ساعت} other {# ساعت}}"
|
||||
|
||||
#: src/lib/utils.ts:139
|
||||
msgid "1 hour"
|
||||
msgstr "۱ ساعت"
|
||||
|
||||
#: src/lib/utils.ts:162
|
||||
msgid "1 week"
|
||||
msgstr "۱ هفته"
|
||||
|
||||
#: src/lib/utils.ts:147
|
||||
msgid "12 hours"
|
||||
msgstr "۱۲ ساعت"
|
||||
|
||||
#: src/lib/utils.ts:155
|
||||
msgid "24 hours"
|
||||
msgstr "۲۴ ساعت"
|
||||
|
||||
#: src/lib/utils.ts:170
|
||||
msgid "30 days"
|
||||
msgstr "۳۰ روز"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "عملیات"
|
||||
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr " هشدارهای فعال"
|
||||
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "افزودن <0>سیستم</0>"
|
||||
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "افزودن سیستم جدید"
|
||||
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "افزودن سیستم"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:156
|
||||
msgid "Add URL"
|
||||
msgstr "افزودن آدرس اینترنتی"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:81
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "تنظیم گزینههای نمایش برای نمودارها."
|
||||
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "مدیر"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "عامل"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
msgid "Alerts"
|
||||
msgstr "هشدارها"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "همه سیستمها"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "آیا مطمئن هستید که میخواهید {name} را حذف کنید؟"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "کپی خودکار نیاز به یک زمینه امن دارد."
|
||||
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "میانگین"
|
||||
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "میانگین استفاده از CPU کانتینرها"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "میانگین مصرف برق پردازندههای گرافیکی"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "میانگین استفاده از CPU در کل سیستم"
|
||||
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "میانگین استفاده از {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "پشتیبانگیریها"
|
||||
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "پهنای باند"
|
||||
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "بِزل از OpenID Connect و بسیاری از ارائهدهندگان احراز هویت OAuth2 پشتیبانی میکند."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:127
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "بِزل از <0>Shoutrrr</0> برای ادغام با سرویسهای اطلاعرسانی محبوب استفاده میکند."
|
||||
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "دودویی"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "حافظه پنهان / بافرها"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "لغو"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "احتیاط - احتمال از دست رفتن دادهها"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:36
|
||||
msgid "Change general application options."
|
||||
msgstr "تغییر گزینههای کلی برنامه."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:78
|
||||
msgid "Chart options"
|
||||
msgstr "گزینههای نمودار"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "ایمیل {email} خود را برای لینک بازنشانی بررسی کنید."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Check logs for more details."
|
||||
msgstr "برای جزئیات بیشتر، لاگها را بررسی کنید."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
msgid "Check your notification service"
|
||||
msgstr "سرویس اطلاعرسانی خود را بررسی کنید"
|
||||
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "برای کپی کردن کلیک کنید"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
msgstr "دستورالعملهای خط فرمان"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:77
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "نحوه دریافت هشدارهای اطلاعرسانی را پیکربندی کنید."
|
||||
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "تأیید رمز عبور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "ادامه"
|
||||
|
||||
#: src/lib/utils.ts:25
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "در کلیپبورد کپی شد"
|
||||
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "کپی"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "کپی میزبان"
|
||||
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "کپی دستور لینوکس"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:13
|
||||
msgid "Copy text"
|
||||
msgstr "کپی متن"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "پردازنده"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "میزان استفاده از پردازنده"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "ایجاد حساب کاربری"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
msgid "Dark"
|
||||
msgstr "تیره"
|
||||
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "داشبورد"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:85
|
||||
msgid "Default time period"
|
||||
msgstr "بازه زمانی پیشفرض"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "دیسک"
|
||||
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "ورودی/خروجی دیسک"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "میزان استفاده از دیسک"
|
||||
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "میزان استفاده از دیسک {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "میزان استفاده از CPU داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "میزان استفاده از حافظه داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "ورودی/خروجی شبکه داکر"
|
||||
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "مستندات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "ایمیل"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:91
|
||||
msgid "Email notifications"
|
||||
msgstr "اعلانهای ایمیلی"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "آدرس ایمیل را برای بازنشانی رمز عبور وارد کنید"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:111
|
||||
msgid "Enter email address..."
|
||||
msgstr "آدرس ایمیل را وارد کنید..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "خطا"
|
||||
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "در {2, plural, one {# دقیقه} other {# دقیقه}} گذشته از {0}{1} بیشتر است"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "سیستمهای موجود که در <0>config.yml</0> تعریف نشدهاند حذف خواهند شد. لطفاً به طور منظم پشتیبانگیری کنید."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
msgid "Export configuration"
|
||||
msgstr "خارج کردن پیکربندی"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "پیکربندی سیستمهای فعلی خود را خارج کنید."
|
||||
|
||||
#: src/lib/utils.ts:38
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "احراز هویت ناموفق بود"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:62
|
||||
msgid "Failed to save settings"
|
||||
msgstr "ذخیره تنظیمات ناموفق بود"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "ارسال اعلان آزمایشی ناموفق بود"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "بهروزرسانی هشدار ناموفق بود"
|
||||
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "فیلتر..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "برای <0>{min}</0> {min, plural, one {دقیقه} other {دقیقه}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "رمز عبور را فراموش کردهاید؟"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "عمومی"
|
||||
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "مصرف برق پردازنده گرافیکی"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "جدول"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "میزبان / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "اگر رمز عبور حساب مدیر خود را گم کردهاید، میتوانید آن را با استفاده از دستور زیر بازنشانی کنید."
|
||||
|
||||
#: src/components/login/auth-form.tsx:16
|
||||
msgid "Invalid email address."
|
||||
msgstr "آدرس ایمیل نامعتبر است."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "هسته"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "زبان"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "طرحبندی"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "روشن"
|
||||
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "خروج"
|
||||
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "ورود"
|
||||
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "تلاش برای ورود ناموفق بود"
|
||||
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "لاگها"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:80
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "به دنبال جایی برای ایجاد هشدار هستید؟ روی آیکونهای زنگ <0/> در جدول سیستمها کلیک کنید."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "مدیریت تنظیمات نمایش و اعلانها."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "حداکثر ۱ دقیقه"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "حافظه"
|
||||
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "میزان استفاده از حافظه"
|
||||
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "میزان استفاده از حافظه کانتینرهای داکر"
|
||||
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "نام"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "شبکه"
|
||||
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "ترافیک شبکه کانتینرهای داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "ترافیک شبکه رابطهای عمومی"
|
||||
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "هیچ نتیجهای یافت نشد."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "هیچ سیستمی یافت نشد."
|
||||
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "اعلانها"
|
||||
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "پشتیبانی از OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "در هر بار راهاندازی مجدد، سیستمهای موجود در پایگاه داده با سیستمهای تعریف شده در فایل مطابقت داده میشوند."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "باز کردن منو"
|
||||
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "یا ادامه با"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "بازنویسی هشدارهای موجود"
|
||||
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "صفحه"
|
||||
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "صفحات / تنظیمات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "رمز عبور"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "رمز عبور باید حداقل ۸ کاراکتر باشد."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "درخواست بازنشانی رمز عبور دریافت شد"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "توقف"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:95
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "لطفاً برای اطمینان از تحویل هشدارها، یک <0>سرور SMTP پیکربندی کنید</0>."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "لطفاً برای جزئیات بیشتر، لاگها را بررسی کنید."
|
||||
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "لطفاً اعتبارنامههای خود را بررسی کرده و دوباره تلاش کنید."
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "لطفاً یک حساب مدیر ایجاد کنید"
|
||||
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "لطفاً پنجرههای بازشو را برای این سایت فعال کنید"
|
||||
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Please log in again"
|
||||
msgstr "لطفاً دوباره وارد شوید"
|
||||
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "لطفاً برای دستورالعملها به <0>مستندات</0> مراجعه کنید."
|
||||
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "لطفاً به حساب کاربری خود وارد شوید"
|
||||
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "پورت"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "میزان دقیق استفاده در زمان ثبت شده"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:58
|
||||
msgid "Preferred Language"
|
||||
msgstr "زبان ترجیحی"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "کلید عمومی"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "خواندن"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "دریافت شد"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
msgid "Reset Password"
|
||||
msgstr "بازنشانی رمز عبور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "ادامه"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:117
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "آدرس را با استفاده از کلید Enter یا کاما ذخیره کنید. برای غیرفعال کردن اعلانهای ایمیلی، خالی بگذارید."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:167
|
||||
msgid "Save Settings"
|
||||
msgstr "ذخیره تنظیمات"
|
||||
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "جستجو"
|
||||
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "جستجو برای سیستمها یا تنظیمات..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "برای پیکربندی نحوه دریافت هشدارها، به <0>تنظیمات اعلان</0> مراجعه کنید."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "ارسال شد"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:100
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "بازه زمانی پیشفرض برای نمودارها هنگام مشاهده یک سیستم را تعیین میکند."
|
||||
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
msgstr "تنظیمات"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
msgid "Settings saved"
|
||||
msgstr "تنظیمات ذخیره شد"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "ورود"
|
||||
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "تنظیمات SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "مرتبسازی بر اساس"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "وضعیت"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "فضای Swap استفاده شده توسط سیستم"
|
||||
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "میزان استفاده از Swap"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "سیستم"
|
||||
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "سیستمها"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "سیستمها ممکن است در یک فایل <0>config.yml</0> درون دایرکتوری داده شما مدیریت شوند."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "جدول"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "دما"
|
||||
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "دمای حسگرهای سیستم"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:211
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "تست <0>آدرس اینترنتی</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:182
|
||||
msgid "Test notification sent"
|
||||
msgstr "اعلان آزمایشی ارسال شد"
|
||||
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "برای اتصال، عامل باید روی سیستم در حال اجرا باشد. دستور نصب عامل را از زیر کپی کنید."
|
||||
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "برای اتصال، عامل باید روی سیستم در حال اجرا باشد. <0>docker-compose.yml</0> مربوط به عامل را از زیر کپی کنید."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "سپس وارد بخش پشتیبان شوید و رمز عبور حساب کاربری خود را در جدول کاربران بازنشانی کنید."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "این عمل قابل برگشت نیست. این کار تمام رکوردهای فعلی {name} را برای همیشه از پایگاه داده حذف خواهد کرد."
|
||||
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "توان عملیاتی {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "توان عملیاتی سیستم فایل ریشه"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:106
|
||||
msgid "To email(s)"
|
||||
msgstr "به ایمیل(ها)"
|
||||
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "تغییر نمایش جدول"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "تغییر تم"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "هنگامی که هر حسگری از یک آستانه فراتر رود، فعال میشود"
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "هنگامی که مجموع بالا/پایین از یک آستانه فراتر رود، فعال میشود"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "هنگامی که میزان استفاده از CPU از یک آستانه فراتر رود، فعال میشود"
|
||||
|
||||
#: src/lib/utils.ts:298
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "هنگامی که میزان استفاده از حافظه از یک آستانه فراتر رود، فعال میشود"
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "هنگامی که وضعیت بین بالا و پایین تغییر میکند، فعال میشود"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "هنگامی که استفاده از هر دیسکی از یک آستانه فراتر رود، فعال میشود"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "به صورت لحظهای بهروزرسانی میشود. برای مشاهده اطلاعات، روی یک سیستم کلیک کنید."
|
||||
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "آپتایم"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "میزان استفاده"
|
||||
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "میزان استفاده از پارتیشن ریشه"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "استفاده شده"
|
||||
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "کاربران"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "مشاهده"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "فیلدهای قابل مشاهده"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "در انتظار رکوردهای کافی برای نمایش"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:48
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "میخواهید به ما کمک کنید تا ترجمههای خود را بهتر کنیم؟ برای جزئیات بیشتر به <0>Crowdin</0> مراجعه کنید."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:124
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "اعلانهای Webhook / Push"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "نوشتن"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
msgid "YAML Config"
|
||||
msgstr "پیکربندی YAML"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
msgid "YAML Configuration"
|
||||
msgstr "پیکربندی YAML"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "تنظیمات کاربری شما بهروزرسانی شد."
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# jour} other {# jours}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# heure} other {# heures}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 jours"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Alertes actives"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Ajouter <0>Système</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Ajouter un nouveau système"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Ajouter un système"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "Ajouter URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Ajuster les options d'affichage pour les graphiques."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Alertes"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Tous les systèmes"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Fournisseurs d'authentification"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copie automatique nécessite un contexte sécurisé."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Moyenne"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilisation moyenne du CPU des conteneurs"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "La moyenne dépasse <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilisation moyenne du CPU à l'échelle du système"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Sauvegardes"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bande passante"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'authentification OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'auth
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binaire"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Binaire"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Tampons"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Vérifiez les journaux pour plus de détails."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Vérifiez votre service de notification"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Cliquez pour copier"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Colonnes"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Instructions en ligne de commande"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configurez comment vous recevez les notifications d'alerte."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmer le mot de passe"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Continuer"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Continuer"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copié dans le presse-papiers"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Copier l'hôte"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copier la commande Linux"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Copier la commande Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copier le texte"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Utilisation du CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Créer un compte"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Créer un compte"
|
||||
msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Tableau de bord"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Tableau de bord"
|
||||
msgid "Default time period"
|
||||
msgstr "Période par défaut"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disque"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Entrée/Sortie disque"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Utilisation du disque"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Utilisation du disque de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Utilisation du CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Utilisation de la mémoire Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Entrée/Sortie réseau Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
@@ -308,7 +304,7 @@ msgstr "Email"
|
||||
msgid "Email notifications"
|
||||
msgstr "Notifications par email"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Entrez l'adresse email pour réinitialiser le mot de passe"
|
||||
|
||||
@@ -316,15 +312,15 @@ msgstr "Entrez l'adresse email pour réinitialiser le mot de passe"
|
||||
msgid "Enter email address..."
|
||||
msgstr "Entrez l'adresse email..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Dépasse {0}{1} dans la dernière {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Dépasse {0}{1} dans {2, plural, one {la dernière # minute} other {les dernières # minutes}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
@@ -351,20 +347,20 @@ msgstr "Échec de l'enregistrement des paramètres"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Échec de l'envoi de la notification de test"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Échec de la mise à jour de l'alerte"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrer..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Pour <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Mot de passe oublié ?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "Mot de passe oublié ?"
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Grille"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Hôte / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Adresse email invalide."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Noyau"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Noyau"
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Disposition"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Clair"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Déconnexion"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Échec de la tentative de connexion"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Journaux"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Gérer les préférences d'affichage et de notification."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Mémoire"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Utilisation de la mémoire"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Utilisation de la mémoire des conteneurs Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Trafic réseau des conteneurs Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Trafic réseau des interfaces publiques"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Aucun résultat trouvé."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Aucun système trouvé."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Support OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "Support OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "À chaque redémarrage, les systèmes dans la base de données seront mis à jour pour correspondre aux systèmes définis dans le fichier."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Ouvrir le menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Ou continuer avec"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "Ou continuer avec"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Écraser les alertes existantes"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pages / Paramètres"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "Le mot de passe doit contenir au moins 10 caractères."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Le mot de passe doit contenir au moins 8 caractères."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Demande de réinitialisation du mot de passe reçue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Pause"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Veuillez <0>configurer un serveur SMTP</0> pour garantir la livraison des alertes."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Veuillez vérifier les journaux pour plus de détails."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Veuillez vérifier vos identifiants et réessayer"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Veuillez créer un compte administrateur"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Veuillez activer les pop-ups pour ce site"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Veuillez activer les pop-ups pour ce site"
|
||||
msgid "Please log in again"
|
||||
msgstr "Veuillez vous reconnecter"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Veuillez consulter <0>la documentation</0> pour les instructions."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Veuillez vous connecter à votre compte"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilisation précise au moment enregistré"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Langue préférée"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Clé publique"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Lecture"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Reçu"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Reçu"
|
||||
msgid "Reset Password"
|
||||
msgstr "Réinitialiser le mot de passe"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Reprendre"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Enregistrez l'adresse en utilisant la touche Entrée ou la virgule. Lais
|
||||
msgid "Save Settings"
|
||||
msgstr "Enregistrer les paramètres"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Recherche"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Rechercher des systèmes ou des paramètres..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Rechercher des systèmes ou des paramètres..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Voir les <0>paramètres de notification</0> pour configurer comment vous recevez les alertes."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Envoyé"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Envoyé"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Définit la plage de temps par défaut pour les graphiques lorsqu'un système est consulté."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Paramètres"
|
||||
msgid "Settings saved"
|
||||
msgstr "Paramètres enregistrés"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Se connecter"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Paramètres SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Trier par"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Statut"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espace d'échange utilisé par le système"
|
||||
msgstr "Espace Swap utilisé par le système"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Utilisation de l'échange"
|
||||
msgstr "Utilisation du swap"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systèmes"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Systèmes"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Les systèmes peuvent être gérés dans un fichier <0>config.yml</0> à l'intérieur de votre répertoire de données."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tableau"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Température"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Températures des capteurs du système"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Tester <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notification de test envoyée"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez la commande d'installation pour l'agent ci-dessous."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "L'agent doit être en cours d'exécution sur le système pour se connecter. Copiez le <0>docker-compose.yml</0> pour l'agent ci-dessous."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "L'agent doit être en cours d'exécution sur le système pour se connect
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Ensuite, connectez-vous au backend et réinitialisez le mot de passe de votre compte utilisateur dans la table des utilisateurs."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Cette action ne peut pas être annulée. Cela supprimera définitivement tous les enregistrements actuels pour {name} de la base de données."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Débit de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Débit du système de fichiers racine"
|
||||
|
||||
@@ -710,14 +730,14 @@ msgstr "Débit du système de fichiers racine"
|
||||
msgid "To email(s)"
|
||||
msgstr "Aux email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Basculer la grille"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "Basculer le thème"
|
||||
msgstr "Changer le thème"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
@@ -725,7 +745,7 @@ msgstr "Déclenchement lorsque tout capteur dépasse un seuil"
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Déclenchement lorsque la montée/descente combinée dépasse un seuil"
|
||||
msgstr "Déclenchement lorsque le montant/descendant combinée dépasse un seuil"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
@@ -737,47 +757,50 @@ msgstr "Déclenchement lorsque l'utilisation de la mémoire dépasse un seuil"
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Déclenchement lorsque le statut passe de haut en bas"
|
||||
msgstr "Déclenchement lorsque le statut passe d'opérationnel à indisponible"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Déclenchement lorsque l'utilisation de tout disque dépasse un seuil"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Mis à jour en temps réel. Cliquez sur un système pour voir les informations."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Temps de fonctionnement"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Utilisation"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Utilisation de la partition racine"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Utilisé"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "nom d'utilisateur"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Utilisateurs"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Vue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonnes visibles"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "En attente de suffisamment d'enregistrements à afficher"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "Vous voulez nous aider à améliorer nos traductions ? Consultez <0>Crow
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notifications Webhook / Push"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Écriture"
|
||||
|
||||
|
||||
831
beszel/site/src/locales/hr/hr.po
Normal file
@@ -0,0 +1,831 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: hr\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Croatian\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Crowdin-Project: beszel\n"
|
||||
"X-Crowdin-Project-ID: 733311\n"
|
||||
"X-Crowdin-Language: hr\n"
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dan} other {# dani}}"
|
||||
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# sat} other {# sati}}"
|
||||
|
||||
#: src/lib/utils.ts:139
|
||||
msgid "1 hour"
|
||||
msgstr "1 sat"
|
||||
|
||||
#: src/lib/utils.ts:162
|
||||
msgid "1 week"
|
||||
msgstr "1 tjedan"
|
||||
|
||||
#: src/lib/utils.ts:147
|
||||
msgid "12 hours"
|
||||
msgstr "12 sati"
|
||||
|
||||
#: src/lib/utils.ts:155
|
||||
msgid "24 hours"
|
||||
msgstr "24 sati"
|
||||
|
||||
#: src/lib/utils.ts:170
|
||||
msgid "30 days"
|
||||
msgstr "30 dana"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Akcije"
|
||||
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Aktivna upozorenja"
|
||||
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Dodaj <0>Sistem</0>"
|
||||
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Dodaj Novi Sistem"
|
||||
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Dodaj sistem"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:156
|
||||
msgid "Add URL"
|
||||
msgstr "Dodaj URL"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:81
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Podesite opcije prikaza za grafikone."
|
||||
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
msgid "Alerts"
|
||||
msgstr "Upozorenja"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Svi Sistemi"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Jeste li sigurni da želite izbrisati {name}?"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatsko kopiranje zahtijeva siguran kontekst."
|
||||
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Prosjek"
|
||||
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Prosječna iskorištenost procesora u spremnicima"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Prosjek premašuje <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Prosječna iskorištenost procesora na cijelom sustavu"
|
||||
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Sigurnosne kopije"
|
||||
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Propusnost"
|
||||
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel podržava OpenID Connect i mnoge druge OAuth2 davatalje autentifikacije."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:127
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel koristi <0>Shoutrrr</0> za integraciju sa popularnim servisima za notifikacije."
|
||||
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binarni"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Predmemorija / Međuspremnici"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Otkaži"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Oprez - mogući gubitak podataka"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:36
|
||||
msgid "Change general application options."
|
||||
msgstr "Promijenite opće opcije aplikacije."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:78
|
||||
msgid "Chart options"
|
||||
msgstr "Opcije grafikona"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Provjerite {email} za vezu za resetiranje."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Provjerite logove za više detalja."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
msgid "Check your notification service"
|
||||
msgstr "Provjerite Vaš servis notifikacija"
|
||||
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Pritisnite za kopiranje"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
msgstr "Upute za naredbeni redak"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:77
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Konfigurirajte način primanja obavijesti upozorenja."
|
||||
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Potvrdite lozinku"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Nastavite"
|
||||
|
||||
#: src/lib/utils.ts:25
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Kopirano u međuspremnik"
|
||||
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Kopiraj"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Kopiraj hosta"
|
||||
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopiraj Linux komandu"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:13
|
||||
msgid "Copy text"
|
||||
msgstr "Kopiraj tekst"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "Procesor"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Iskorištenost procesora"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Napravite račun"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
msgid "Dark"
|
||||
msgstr "Tamno"
|
||||
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Nadzorna ploča"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:85
|
||||
msgid "Default time period"
|
||||
msgstr "Zadano vremensko razdoblje"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Izbriši"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Iskorištenost Diska"
|
||||
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Iskorištenost diska od {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Iskorištenost Docker Procesora"
|
||||
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Iskorištenost Docker Memorije"
|
||||
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Mrežni I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Dokumentacija"
|
||||
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:91
|
||||
msgid "Email notifications"
|
||||
msgstr "Email notifikacije"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Unesite email adresu za resetiranje lozinke"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:111
|
||||
msgid "Enter email address..."
|
||||
msgstr "Unesite email adresu..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Greška"
|
||||
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Premašuje {0}{1} u posljednjih {2, plural, one {# minuta} other {# minute}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Postojeći sistemi koji nisu definirani u <0>config.yml</0> će biti izbrisani. Molimo Vas napravite redovite sigurnosne kopije."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
msgid "Export configuration"
|
||||
msgstr "Izvoz konfiguracije"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Izvoz trenutne sistemske konfiguracije."
|
||||
|
||||
#: src/lib/utils.ts:38
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Provjera autentičnosti nije uspjela"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:62
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Neuspješno snimanje postavki"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Neuspješno slanje testne notifikacije"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Ažuriranje upozorenja nije uspjelo"
|
||||
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Za <0>{min}</0> {min, plural, one {minutu} other {minute}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zaboravljena lozinka?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "Općenito"
|
||||
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Ako ste izgubili lozinku za svoj administratorski račun, možete ju resetirati pomoću sljedeće naredbe."
|
||||
|
||||
#: src/components/login/auth-form.tsx:16
|
||||
msgid "Invalid email address."
|
||||
msgstr "Nevažeća adresa e-pošte."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "Jezik"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Izgled"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Svijetlo"
|
||||
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Odjava"
|
||||
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Prijava"
|
||||
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Pokušaj prijave nije uspio"
|
||||
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logovi"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:80
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Tražite gdje stvoriti upozorenja? Kliknite ikonu zvona <0/> u tablici sustava."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Upravljajte postavkama prikaza i obavijesti."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maksimalno 1 minuta"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Memorija"
|
||||
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Upotreba memorije"
|
||||
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Upotreba memorije Docker spremnika"
|
||||
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Ime"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Mrežni promet Docker spremnika"
|
||||
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Mrežni promet javnih sučelja"
|
||||
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Nema rezultata."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Nije pronađen nijedan sustav."
|
||||
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Obavijesti"
|
||||
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Podrška za OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Prilikom svakog ponovnog pokretanja, sustavi u bazi podataka biti će ažurirani kako bi odgovarali sustavima definiranim u datoteci."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Otvori menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Ili nastavi sa"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Prebrišite postojeća upozorenja"
|
||||
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Stranica"
|
||||
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Stranice / Postavke"
|
||||
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Lozinka"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Lozinka mora imati najmanje 8 znakova."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Zahtjev za ponovno postavljanje lozinke primljen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pauza"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:95
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Molimo <0>konfigurirajte SMTP server</0> kako biste osigurali isporuku upozorenja."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Za više detalja provjerite logove."
|
||||
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Provjerite svoje podatke i pokušajte ponovno"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Molimo kreirajte administratorski račun"
|
||||
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Omogućite skočne prozore za ovu stranicu"
|
||||
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Please log in again"
|
||||
msgstr "Molimo prijavite se ponovno"
|
||||
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Molimo pogledajte <0>dokumentaciju</0> za instrukcije."
|
||||
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Molimo prijavite se u svoj račun"
|
||||
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Precizno iskorištenje u zabilježenom vremenu"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:58
|
||||
msgid "Preferred Language"
|
||||
msgstr "Preferirani jezik"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Javni Ključ"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Pročitaj"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Primljeno"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
msgid "Reset Password"
|
||||
msgstr "Resetiraj Lozinku"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Nastavi"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:117
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Spremite adresu pomoću tipke enter ili zareza. Ostavite prazno kako biste onemogućili obavijesti e-poštom."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:167
|
||||
msgid "Save Settings"
|
||||
msgstr "Spremi Postavke"
|
||||
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Pretraži"
|
||||
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Pretraži za sisteme ili postavke..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Pogledajte <0>postavke obavijesti</0> da biste konfigurirali način primanja upozorenja."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Poslano"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:100
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Postavlja zadani vremenski raspon za grafikone kada se sustav gleda."
|
||||
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
msgstr "Postavke"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
msgid "Settings saved"
|
||||
msgstr "Postavke spremljene"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Prijava"
|
||||
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP postavke"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Sortiraj po"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap prostor uzet od strane sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap Iskorištenost"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Sistem"
|
||||
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Sistemi"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Sistemima se može upravljati u <0>config.yml</0> datoteci unutar data direktorija."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tablica"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperature sistemskih senzora"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:211
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Testni <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:182
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testna obavijest poslana"
|
||||
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Agent mora biti pokrenut na sistemu da bi se spojio. Kopirajte instalacijske komande za agenta ispod."
|
||||
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Agent mora biti pokrenut na sistemu da bi se spojio. Kopirajte <0>docker-compose.yml</0> za agenta ispod."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Zatim se prijavite u backend i resetirajte lozinku korisničkog računa u tablici korisnika."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Ova radnja se ne može poništiti. Ovo će trajno izbrisati sve trenutne zapise za {name} iz baze podataka."
|
||||
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Protok {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Protok root datotečnog sustava"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:106
|
||||
msgid "To email(s)"
|
||||
msgstr "Primaoci e-pošte"
|
||||
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Uključi/isključi rešetku"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "Uključi/isključi temu"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "Pokreće se kada bilo koji senzor prijeđe prag"
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Pokreće se kada kombinacija gore/dolje premaši prag"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "Pokreće se kada iskorištenost procesora premaši prag"
|
||||
|
||||
#: src/lib/utils.ts:298
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "Pokreće se kada iskorištenost memorije premaši prag"
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Pokreće se kada se status sistema promijeni"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Pokreće se kada iskorištenost bilo kojeg diska premaši prag"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Ažurirano odmah. Kliknite na sistem za više informacija."
|
||||
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Vrijeme rada"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Iskorištenost"
|
||||
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Iskorištenost root datotečnog sustava"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Iskorišteno"
|
||||
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Korisnici"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Prikaz"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Vidljiva polja"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Čeka se na više podataka prije prikaza"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:48
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Želite li nam pomoći da naše prijevode učinimo još boljim? Posjetite <0>Crowdin</0> za više detalja."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:124
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push obavijest"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Piši"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML Config"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML Konfiguracija"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Vaše korisničke postavke su ažurirane."
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: it\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Italian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# giorno} other {# giorni}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ora} other {# ore}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 giorni"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Azioni"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Avvisi Attivi"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Aggiungi <0>Sistema</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Aggiungi Nuovo Sistema"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Aggiungi sistema"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "Aggiungi URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Regola le opzioni di visualizzazione per i grafici."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Amministratore"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agente"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Avvisi"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Tutti i Sistemi"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Sei sicuro di voler eliminare {name}?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Provider di Autenticazione"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copia automatica richiede un contesto sicuro."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Media"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilizzo medio della CPU dei container"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "La media supera <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilizzo medio della CPU a livello di sistema"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Backup"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Larghezza di banda"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel utilizza <0>Shoutrrr</0> per integrarsi con i servizi di notifica popolari."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binario"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Binario"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Controlla i log per maggiori dettagli."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Controlla il tuo servizio di notifica"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Clicca per copiare"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Colonne"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Istruzioni da riga di comando"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configura come ricevere le notifiche di avviso."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Conferma password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Continua"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Continua"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copiato negli appunti"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Copia"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Copia host"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copia comando Linux"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Copia comando Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copia testo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Utilizzo CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Crea account"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Crea account"
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Cruscotto"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Cruscotto"
|
||||
msgid "Default time period"
|
||||
msgstr "Periodo di tempo predefinito"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "I/O Disco"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Utilizzo Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Utilizzo del disco di {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Utilizzo CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Utilizzo Memoria Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "I/O di Rete Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentazione"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
@@ -308,7 +304,7 @@ msgstr "Email"
|
||||
msgid "Email notifications"
|
||||
msgstr "Notifiche email"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Inserisci l'indirizzo email per reimpostare la password"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "Inserisci l'indirizzo email per reimpostare la password"
|
||||
msgid "Enter email address..."
|
||||
msgstr "Inserisci l'indirizzo email..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "Salvataggio delle impostazioni fallito"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Invio della notifica di test fallito"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Aggiornamento dell'avviso fallito"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtra..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Per <0>{min}</0> {min, plural, one {minuto} other {minuti}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Password dimenticata?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "Password dimenticata?"
|
||||
msgid "General"
|
||||
msgstr "Generale"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Griglia"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Indirizzo email non valido."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Lingua"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Chiaro"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Disconnetti"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Accedi"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Tentativo di accesso fallito"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Log"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Gestisci le preferenze di visualizzazione e notifica."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Utilizzo Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Utilizzo della memoria dei container Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Rete"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Traffico di rete dei container Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Traffico di rete delle interfacce pubbliche"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Nessun risultato trovato."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Nessun sistema trovato."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Notifiche"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Supporto OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "Supporto OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Ad ogni riavvio, i sistemi nel database verranno aggiornati per corrispondere ai sistemi definiti nel file."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Apri menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Oppure continua con"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "Oppure continua con"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Sovrascrivi avvisi esistenti"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Pagina"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pagine / Impostazioni"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "La password deve essere di almeno 10 caratteri."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "La password deve contenere almeno 8 caratteri."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Richiesta di reimpostazione password ricevuta"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Pausa"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Si prega di <0>configurare un server SMTP</0> per garantire la consegna degli avvisi."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Si prega di controllare i log per maggiori dettagli."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Si prega di controllare le credenziali e riprovare"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Si prega di creare un account amministratore"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Si prega di abilitare i pop-up per questo sito"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Si prega di abilitare i pop-up per questo sito"
|
||||
msgid "Please log in again"
|
||||
msgstr "Si prega di accedere nuovamente"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Si prega di consultare <0>la documentazione</0> per le istruzioni."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Si prega di accedere al proprio account"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilizzo preciso al momento registrato"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Lingua Preferita"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Chiave Pub"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Lettura"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Ricevuto"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Ricevuto"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reimposta Password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Riprendi"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Salva l'indirizzo usando il tasto invio o la virgola. Lascia vuoto per d
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Cerca"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Cerca sistemi o impostazioni..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Cerca sistemi o impostazioni..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Vedi <0>impostazioni di notifica</0> per configurare come ricevere gli avvisi."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Inviato"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Inviato"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Imposta l'intervallo di tempo predefinito per i grafici quando viene visualizzato un sistema."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Impostazioni"
|
||||
msgid "Settings saved"
|
||||
msgstr "Impostazioni salvate"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Accedi"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Impostazioni SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Ordina per"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Stato"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Spazio di swap utilizzato dal sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Utilizzo Swap"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Sistemi"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Sistemi"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "I sistemi possono essere gestiti in un file <0>config.yml</0> all'interno della tua directory dati."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabella"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperature dei sensori di sistema"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Test <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notifica di test inviata"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il comando di installazione per l'agente qui sotto."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il<0>docker-compose.yml</0> per l'agente qui sotto."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "L'agente deve essere in esecuzione sul sistema per connettersi. Copia il
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Quindi accedi al backend e reimposta la password del tuo account utente nella tabella degli utenti."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Questa azione non può essere annullata. Questo eliminerà permanentemente tutti i record attuali per {name} dal database."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Throughput di {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Throughput del filesystem root"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "Throughput del filesystem root"
|
||||
msgid "To email(s)"
|
||||
msgstr "A email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Attiva/disattiva griglia"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "Attiva quando lo stato passa tra up e down"
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Attiva quando l'utilizzo di un disco supera una soglia"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Aggiornato in tempo reale. Clicca su un sistema per visualizzare le informazioni."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Tempo di attività"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Utilizzo"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Utilizzo della partizione root"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Utilizzato"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "nome utente"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Utenti"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonne visibili"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "In attesa di abbastanza record da visualizzare"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "Vuoi aiutarci a migliorare ulteriormente le nostre traduzioni? Dai un'oc
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notifiche Webhook / Push"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Scrittura"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ja\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# 日} other {# 日}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# 時間} other {# 時間}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30日間"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "アクション"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "アクティブなアラート"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "<0>システム</0>を追加"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "新しいシステムを追加"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "システムを追加"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "URLを追加"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "チャートの表示オプションを調整します。"
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "管理者"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "代理"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "アラート"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "すべてのシステム"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "{name}を削除してもよろしいですか?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "認証プロバイダー"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "自動コピーには安全なコンテキストが必要です。"
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "平均"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "コンテナの平均CPU使用率"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "平均が<0>{value}{0}</0>を超えています"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "システム全体の平均CPU使用率"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "バックアップ"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "帯域幅"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "BeszelはOpenID Connectと多くのOAuth2認証プロバイダーをサポートしています。"
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "BeszelはOpenID Connectと多くのOAuth2認証プロバイダーをサ
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszelは<0>Shoutrrr</0>を使用して、人気のある通知サービスと統合します。"
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "バイナリ"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "バイナリ"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "キャッシュ / バッファ"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "詳細についてはログを確認してください。"
|
||||
msgid "Check your notification service"
|
||||
msgstr "通知サービスを確認してください"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "クリックしてコピー"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "列"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "コマンドラインの指示"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "アラート通知の受信方法を設定します。"
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "パスワードを確認"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "続行"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "続行"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "クリップボードにコピーされました"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "コピー"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "ホストをコピー"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Linuxコマンドをコピー"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Linuxコマンドをコピー"
|
||||
msgid "Copy text"
|
||||
msgstr "テキストをコピー"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU使用率"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "アカウントを作成"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "アカウントを作成"
|
||||
msgid "Dark"
|
||||
msgstr "ダーク"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "ダッシュボード"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "ダッシュボード"
|
||||
msgid "Default time period"
|
||||
msgstr "デフォルトの期間"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "ディスク"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "ディスクI/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "ディスク使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName}のディスク使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Dockerメモリ使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "DockerネットワークI/O"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "ドキュメント"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "メール"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "メール"
|
||||
@@ -308,7 +304,7 @@ msgstr "メール"
|
||||
msgid "Email notifications"
|
||||
msgstr "メール通知"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "パスワードをリセットするためにメールアドレスを入力してください"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "パスワードをリセットするためにメールアドレスを入
|
||||
msgid "Enter email address..."
|
||||
msgstr "メールアドレスを入力..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "エラー"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "過去{2, plural, one {# 分} other {# 分}}で{0}{1}を超えています"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "設定の保存に失敗しました"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "テスト通知の送信に失敗しました"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "アラートの更新に失敗しました"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "フィルター..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "<0>{min}</0> {min, plural, one {分} other {分}}の間"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "パスワードをお忘れですか?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "パスワードをお忘れですか?"
|
||||
msgid "General"
|
||||
msgstr "一般"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "グリッド"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "ホスト / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "無効なメールアドレスです。"
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "カーネル"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "カーネル"
|
||||
msgid "Language"
|
||||
msgstr "言語"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "レイアウト"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "ライト"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "ログアウト"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "ログイン"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "ログイン試行に失敗しました"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "ログ"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "表示と通知の設定を管理します。"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "最大1分"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "メモリ"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "メモリ使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Dockerコンテナのメモリ使用率"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "名前"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "帯域"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Dockerコンテナのネットワークトラフィック"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "パブリックインターフェースのネットワークトラフィック"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "結果が見つかりませんでした。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "システムが見つかりませんでした。"
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDCサポート"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDCサポート"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "再起動のたびに、データベース内のシステムはファイルに定義されたシステムに一致するように更新されます。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "メニューを開く"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "または続行"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "または続行"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "既存のアラートを上書き"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "ページ"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "ページ / 設定"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "パスワード"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "パスワードは10文字以上でなければなりません。"
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "パスワードは8文字以上である必要があります。"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "パスワードリセットのリクエストを受け取りました"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "一時停止"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "一時停止"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "アラートが配信されるように<0>SMTPサーバーを設定</0>してください。"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "詳細についてはログを確認してください。"
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "資格情報を確認して再試行してください"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "管理者アカウントを作成してください"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "このサイトのポップアップを有効にしてください"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "このサイトのポップアップを有効にしてください"
|
||||
msgid "Please log in again"
|
||||
msgstr "再度ログインしてください"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "手順については<0>ドキュメント</0>を参照してください。"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "アカウントにサインインしてください"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "ポート"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "記録された時点での正確な利用"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "優先言語"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "公開鍵"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "読み取り"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "受信"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "受信"
|
||||
msgid "Reset Password"
|
||||
msgstr "パスワードをリセット"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "再開"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Enterキーまたはカンマを使用してアドレスを保存しま
|
||||
msgid "Save Settings"
|
||||
msgstr "設定を保存"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "検索"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "システムまたは設定を検索..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "システムまたは設定を検索..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "アラートの受信方法を設定するには<0>通知設定</0>を参照してください。"
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "送信"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "送信"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "システムを表示する際のチャートのデフォルトの時間範囲を設定します。"
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "設定"
|
||||
msgid "Settings saved"
|
||||
msgstr "設定が保存されました"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "サインイン"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP設定"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "並び替え基準"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "ステータス"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "システムが使用するスワップ領域"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "スワップ使用量"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "システム"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "システム"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "システム"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "システムはデータディレクトリ内の<0>config.yml</0>ファイルで管理できます。"
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "テーブル"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "温度"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "システムセンサーの温度"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "テスト<0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "テスト通知が送信されました"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェントのインストールコマンドをコピーしてください。"
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "接続するにはエージェントがシステム上で実行されている必要があります。以下のエージェント用<0>docker-compose.yml</0>をコピーしてください。"
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "接続するにはエージェントがシステム上で実行されて
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "その後、バックエンドにログインして、ユーザーテーブルでユーザーアカウントのパスワードをリセットしてください。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "この操作は元に戻せません。これにより、データベースから{name}のすべての現在のレコードが永久に削除されます。"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName}のスループット"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "ルートファイルシステムのスループット"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "ルートファイルシステムのスループット"
|
||||
msgid "To email(s)"
|
||||
msgstr "メール宛"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "グリッドを切り替え"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "ステータスが上から下に切り替わるときにトリガーさ
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "ディスクの使用量がしきい値を超えたときにトリガーされます"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "リアルタイムで更新されます。システムをクリックして情報を表示します。"
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "稼働時間"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "ルートパーティションの使用量"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "使用済み"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "ユーザー名"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "ユーザー名"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "ユーザー"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "表示"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "表示列"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "表示するのに十分なレコードを待っています"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "翻訳をさらに良くするためにご協力いただけますか?
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / プッシュ通知"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "書き込み"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ko\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Korean\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# 일} other {# 일}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# 시간} other {# 시간}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30일"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "작업"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "활성 경고"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "<0>시스템</0> 추가"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "새 시스템 추가"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "시스템 추가"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "URL 추가"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "차트의 표시 옵션 조정."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "관리자"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "에이젠"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "경고"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "모든 시스템"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "{name}을(를) 삭제하시겠습니까?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "인증 제공자"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "자동 복사는 안전한 컨텍스트가 필요합니다."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "평균"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "컨테이너의 평균 CPU 사용량"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "평균이 <0>{value}{0}</0>을 초과합니다"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "시스템 전체의 평균 CPU 사용량"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "백업"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "대역폭"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel은 OpenID Connect 및 많은 OAuth2 인증 제공자를 지원합니다."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel은 OpenID Connect 및 많은 OAuth2 인증 제공자를 지원합
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel은 <0>Shoutrrr</0>을 사용하여 인기 있는 알림 서비스와 통합합니다."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "이진"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "이진"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "캐시 / 버퍼"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "취소"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "자세한 내용은 로그를 확인하세요."
|
||||
msgid "Check your notification service"
|
||||
msgstr "알림 서비스를 확인하세요."
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "클릭하여 복사"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "열"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "명령줄 지침"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "경고 알림을 받는 방법을 구성하세요."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "비밀번호 확인"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "계속"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "계속"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "클립보드에 복사됨"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "복사"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "호스트 복사"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "리눅스 명령 복사"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "리눅스 명령 복사"
|
||||
msgid "Copy text"
|
||||
msgstr "텍스트 복사"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU 사용량"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "계정 생성"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "계정 생성"
|
||||
msgid "Dark"
|
||||
msgstr "어두운"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "대시보드"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "대시보드"
|
||||
msgid "Default time period"
|
||||
msgstr "기본 시간 기간"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "디스크"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "디스크 I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "디스크 사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName}의 디스크 사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "도커 CPU 사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "도커 메모리 사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "도커 네트워크 I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "문서"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "이메일"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "이메일"
|
||||
@@ -308,7 +304,7 @@ msgstr "이메일"
|
||||
msgid "Email notifications"
|
||||
msgstr "이메일 알림"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "비밀번호를 재설정하려면 이메일 주소를 입력하세요"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "비밀번호를 재설정하려면 이메일 주소를 입력하세요"
|
||||
msgid "Enter email address..."
|
||||
msgstr "이메일 주소 입력..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "오류"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "마지막 {2, plural, one {# 분} other {# 분}} 동안 {0}{1} 초과"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "설정 저장 실패"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "테스트 알림 전송 실패"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "경고 업데이트 실패"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "필터..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "<0>{min}</0> {min, plural, one {분} other {분}} 동안"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "비밀번호를 잊으셨나요?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "비밀번호를 잊으셨나요?"
|
||||
msgid "General"
|
||||
msgstr "일반"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "그리드"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "호스트 / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "잘못된 이메일 주소입니다."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "커널"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "커널"
|
||||
msgid "Language"
|
||||
msgstr "언어"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "레이아웃"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "밝은"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "로그아웃"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "로그인"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "로그인 시도 실패"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "로그"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "디스플레이 및 알림 환경설정을 관리하세요."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "최대 1분"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "메모리"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "메모리 사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "도커 컨테이너의 메모리 사용량"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "이름"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "네트"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "도커 컨테이너의 네트워크 트래픽"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "공용 인터페이스의 네트워크 트래픽"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "결과가 없습니다."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "시스템을 찾을 수 없습니다."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "알림"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC 지원"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "OAuth 2 / OIDC 지원"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "각 재시작 시, 데이터베이스의 시스템이 파일에 정의된 시스템과 일치하도록 업데이트됩니다."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "메뉴 열기"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "또는 계속하기"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "또는 계속하기"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "기존 경고 덮어쓰기"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "페이지"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "페이지 / 설정"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "비밀번호"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "비밀번호는 최소 10자 이상이어야 합니다."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "비밀번호는 최소 8자 이상이어야 합니다."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "비밀번호 재설정 요청이 접수되었습니다"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "일시 중지"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "일시 중지"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "경고가 전달되도록 <0>SMTP 서버를 구성</0>하세요."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "자세한 내용은 로그를 확인하세요."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "자격 증명을 확인하고 다시 시도하세요."
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "관리자 계정을 생성하세요."
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "이 사이트에 대한 팝업을 활성화하세요."
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "이 사이트에 대한 팝업을 활성화하세요."
|
||||
msgid "Please log in again"
|
||||
msgstr "다시 로그인하세요."
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "지침은 <0>문서</0>를 참조하세요."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "계정에 로그인하세요."
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "포트"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "기록된 시간의 정확한 사용량"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "선호 언어"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "공개 키"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "읽기"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "수신됨"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "수신됨"
|
||||
msgid "Reset Password"
|
||||
msgstr "비밀번호 재설정"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "재개"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Enter 키 또는 쉼표를 사용하여 주소를 저장하세요. 이
|
||||
msgid "Save Settings"
|
||||
msgstr "설정 저장"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "검색"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "시스템 또는 설정 검색..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "시스템 또는 설정 검색..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "경고를 받는 방법을 구성하려면 <0>알림 설정</0>을 참조하세요."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "보냄"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "보냄"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "시스템을 볼 때 차트의 기본 시간 범위를 설정합니다."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "설정"
|
||||
msgid "Settings saved"
|
||||
msgstr "설정이 저장되었습니다."
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "로그인"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP 설정"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "정렬 기준"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "상태"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "시스템에서 사용된 스왑 공간"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "스왑 사용량"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "시스템"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "시스템"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "시스템"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "시스템은 데이터 디렉토리 내의 <0>config.yml</0> 파일에서 관리할 수 있습니다."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "테이블"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "온도"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "시스템 센서의 온도"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "테스트 <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "테스트 알림이 전송되었습니다."
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 에이전트 설치 명령을 복사하세요."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습니다. 아래의 <0>docker-compose.yml</0>을 복사하세요."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "에이전트가 시스템에서 실행 중이어야 연결할 수 있습
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "그런 다음 백엔드에 로그인하여 사용자 테이블에서 사용자 계정 비밀번호를 재설정하세요."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "이 작업은 되돌릴 수 없습니다. 데이터베이스에서 {name}에 대한 모든 현재 기록이 영구적으로 삭제됩니다."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName}의 처리량"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "루트 파일 시스템의 처리량"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "루트 파일 시스템의 처리량"
|
||||
msgid "To email(s)"
|
||||
msgstr "이메일로"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "그리드 전환"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "상태가 상승과 하강 사이에서 전환될 때 트리거됩니다
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "디스크 사용량이 임계값을 초과할 때 트리거됩니다."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "실시간으로 업데이트됩니다. 시스템을 클릭하여 정보를 확인하세요."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "가동 시간"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "사용량"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "루트 파티션의 사용량"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "사용됨"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "사용자"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "보기"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "표시 열"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "표시할 충분한 기록을 기다리는 중"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "번역을 더 좋게 만드는 데 도움을 주시겠습니까? 자세
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / 푸시 알림"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "쓰기"
|
||||
|
||||
|
||||
831
beszel/site/src/locales/nl/nl.po
Normal file
@@ -0,0 +1,831 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: nl\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Crowdin-Project: beszel\n"
|
||||
"X-Crowdin-Project-ID: 733311\n"
|
||||
"X-Crowdin-Language: nl\n"
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dag} other {# dagen}}"
|
||||
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# uur} other {# uren}}"
|
||||
|
||||
#: src/lib/utils.ts:139
|
||||
msgid "1 hour"
|
||||
msgstr "1 uur"
|
||||
|
||||
#: src/lib/utils.ts:162
|
||||
msgid "1 week"
|
||||
msgstr "1 week"
|
||||
|
||||
#: src/lib/utils.ts:147
|
||||
msgid "12 hours"
|
||||
msgstr "12 uren"
|
||||
|
||||
#: src/lib/utils.ts:155
|
||||
msgid "24 hours"
|
||||
msgstr "24 uren"
|
||||
|
||||
#: src/lib/utils.ts:170
|
||||
msgid "30 days"
|
||||
msgstr "30 dagen"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Actieve waarschuwingen"
|
||||
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Voeg <0>Systeem</0> toe"
|
||||
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Nieuw systeem toevoegen"
|
||||
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Voeg systeem toe"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:156
|
||||
msgid "Add URL"
|
||||
msgstr "Voeg URL toe"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:81
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Weergaveopties voor grafieken aanpassen."
|
||||
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
msgid "Alerts"
|
||||
msgstr "Waarschuwingen"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Alle systemen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Weet je zeker dat je {name} wilt verwijderen?"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisch kopiëren vereist een veilige context."
|
||||
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Gemiddelde"
|
||||
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Gemiddeld CPU-gebruik van containers"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Gemiddelde overschrijdt <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Gemiddeld stroomverbruik van GPU's"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Gemiddeld systeembrede CPU-gebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Gemiddeld gebruik van {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Back-ups"
|
||||
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandbreedte"
|
||||
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel ondersteunt OpenID Connect en vele OAuth2 authenticatieaanbieders."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:127
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel gebruikt <0>Shoutrr</0> om te integreren met populaire meldingsdiensten."
|
||||
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binair"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Opgelet - potentieel gegevensverlies"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:36
|
||||
msgid "Change general application options."
|
||||
msgstr "Wijzig algemene applicatie opties."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:78
|
||||
msgid "Chart options"
|
||||
msgstr "Grafiekopties"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Controleer {email} op een reset link."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Controleer de logs voor meer details."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
msgid "Check your notification service"
|
||||
msgstr "Controleer je meldingsservice"
|
||||
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Klik om te kopiëren"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
msgstr "Instructies voor de opdrachtregel"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:77
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configureer hoe je waarschuwingsmeldingen ontvangt."
|
||||
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Bevestig wachtwoord"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Volgende"
|
||||
|
||||
#: src/lib/utils.ts:25
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Gekopieerd naar het klembord"
|
||||
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Kopieer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Kopieer host"
|
||||
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopieer Linux-opdracht"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:13
|
||||
msgid "Copy text"
|
||||
msgstr "Kopieer tekst"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Processorgebruik"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Account aanmaken"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
msgid "Dark"
|
||||
msgstr "Donker"
|
||||
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:85
|
||||
msgid "Default time period"
|
||||
msgstr "Standaard tijdsduur"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Schijf"
|
||||
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Schijf I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Schijfgebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Schijfgebruik van {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU-gebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker geheugengebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker netwerk I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentatie"
|
||||
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:91
|
||||
msgid "Email notifications"
|
||||
msgstr "E-mailnotificaties"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Voer een e-mailadres in om het wachtwoord opnieuw in te stellen"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:111
|
||||
msgid "Enter email address..."
|
||||
msgstr "Voer een e-mailadres in..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Overschrijdt {0}{1} in de laatste {2, plural, one {# minuut} other {# minuten}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Bestaande systemen die niet gedefinieerd zijn in <0>config.yml</0> zullen worden verwijderd. Maak regelmatige backups."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
msgid "Export configuration"
|
||||
msgstr "Configuratie exporteren"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Exporteer je huidige systeemconfiguratie."
|
||||
|
||||
#: src/lib/utils.ts:38
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Authenticatie mislukt"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:62
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Instellingen opslaan mislukt"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Versturen test notificatie mislukt"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Bijwerken waarschuwing mislukt"
|
||||
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Voor <0>{min}</0> {min, plural, one {minuut} other {minuten}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Wachtwoord vergeten?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "Algemeen"
|
||||
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU stroomverbruik"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Raster"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP-adres"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Als je het wachtwoord voor je beheerdersaccount bent kwijtgeraakt, kan je het opnieuw instellen met behulp van de volgende opdracht."
|
||||
|
||||
#: src/components/login/auth-form.tsx:16
|
||||
msgid "Invalid email address."
|
||||
msgstr "Ongeldig e-mailadres."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Indeling"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Afmelden"
|
||||
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Aanmelden"
|
||||
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Aanmelding mislukt"
|
||||
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:80
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Zoek je waar je meldingen kunt aanmaken? Klik op de bel <0/> in de systeemtabel."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Weergave- en notificatievoorkeuren beheren."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Geheugen"
|
||||
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Geheugengebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Geheugengebruik van docker containers"
|
||||
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Netwerkverkeer van docker containers"
|
||||
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Netwerkverkeer van publieke interfaces"
|
||||
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Geen resultaten gevonden."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Geen systemen gevonden."
|
||||
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Meldingen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC ondersteuning"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Bij elke herstart zullen systemen in de database worden bijgewerkt om overeen te komen met de systemen die in het bestand zijn gedefinieerd."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Open menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Of ga verder met"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Overschrijf bestaande waarschuwingen"
|
||||
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Pagina"
|
||||
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pagina's / Instellingen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Wachtwoord"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Het wachtwoord moet minimaal 8 tekens bevatten."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Wachtwoord reset aanvraag ontvangen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pauze"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:95
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "<0>Configureer een SMTP-server </0> om ervoor te zorgen dat waarschuwingen worden afgeleverd."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Controleer de logs voor meer details."
|
||||
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Controleer je aanmeldgegevens en probeer het opnieuw"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Maak een beheerdersaccount aan"
|
||||
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Activeer pop-ups voor deze website"
|
||||
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Please log in again"
|
||||
msgstr "Meld je opnieuw aan"
|
||||
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Bekijk <0>de documentatie</0> voor instructies."
|
||||
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Meld je aan bij je account"
|
||||
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Poort"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Nauwkeurig gebruik op de opgenomen tijd"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:58
|
||||
msgid "Preferred Language"
|
||||
msgstr "Voorkeurstaal"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Publieke sleutel"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Lezen"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Ontvangen"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
msgid "Reset Password"
|
||||
msgstr "Wachtwoord resetten"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Hervatten"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:117
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Bewaar het adres met de enter-toets of komma. Laat leeg om e-mailmeldingen uit te schakelen."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:167
|
||||
msgid "Save Settings"
|
||||
msgstr "Instellingen opslaan"
|
||||
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Zoeken"
|
||||
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Zoek naar systemen of instellingen..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Zie <0>notificatie-instellingen</0> om te configureren hoe je meldingen ontvangt."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Verzonden"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:100
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Stelt het standaard tijdsbereik voor grafieken in wanneer een systeem wordt bekeken."
|
||||
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
msgid "Settings saved"
|
||||
msgstr "Instellingen opgeslagen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Aanmelden"
|
||||
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP-instellingen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Sorteren op"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap ruimte gebruikt door het systeem"
|
||||
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap gebruik"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systemen"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systemen kunnen worden beheerd in een <0>config.yml</0> bestand in je data map."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabel"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatuur"
|
||||
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatuur van systeem sensoren"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:211
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:182
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testmelding verzonden"
|
||||
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "De agent moet op het systeem draaien om te verbinden. Kopieer het installatiecommando voor de agent hieronder."
|
||||
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "De agent moet op het systeem draaien om te verbinden. Kopieer de<0>docker-compose.yml</0> voor de agent hieronder."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Log vervolgens in op de backend en reset het wachtwoord van je gebruikersaccount in het gebruikersoverzicht."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Deze actie kan niet ongedaan worden gemaakt. Dit zal alle huidige records voor {name} permanent verwijderen uit de database."
|
||||
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Doorvoer van {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Doorvoer van het root bestandssysteem"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:106
|
||||
msgid "To email(s)"
|
||||
msgstr "Naar e-mail(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Schakel raster"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "Schakel thema"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "Triggert wanneer een sensor een drempelwaarde overschrijdt"
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Triggert wanneer de gecombineerde up/down een drempelwaarde overschrijdt"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "Triggert wanneer het CPU-gebruik een drempelwaarde overschrijdt"
|
||||
|
||||
#: src/lib/utils.ts:298
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "Triggert wanneer het geheugengebruik een drempelwaarde overschrijdt"
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Triggert wanneer de status schakelt tussen up en down"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Triggert wanneer het gebruik van een schijf een drempelwaarde overschrijdt"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "In realtime bijgewerkt. Klik op een systeem om informatie te bekijken."
|
||||
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Actief"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Gebruik van root-partitie"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Gebruikt"
|
||||
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Weergave"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Zichtbare kolommen"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Wachtend op genoeg records om weer te geven"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:48
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Wil je ons helpen onze vertalingen nog beter te maken? Bekijk <0>Crowdin</0> voor meer informatie."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:124
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Pushmeldingen"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Schrijven"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML Configuratie"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML Configuratie"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Je gebruikersinstellingen zijn bijgewerkt."
|
||||
831
beszel/site/src/locales/pl/pl.po
Normal file
@@ -0,0 +1,831 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"POT-Creation-Date: 2024-11-01 11:30-0400\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: @lingui/cli\n"
|
||||
"Language: pl\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Polish\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
"X-Crowdin-Project: beszel\n"
|
||||
"X-Crowdin-Project-ID: 733311\n"
|
||||
"X-Crowdin-Language: pl\n"
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}"
|
||||
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {godzinę} few {# godziny} many {# godzin} other {# godziny}}"
|
||||
|
||||
#: src/lib/utils.ts:139
|
||||
msgid "1 hour"
|
||||
msgstr "1 godzina"
|
||||
|
||||
#: src/lib/utils.ts:162
|
||||
msgid "1 week"
|
||||
msgstr "1 tydzień"
|
||||
|
||||
#: src/lib/utils.ts:147
|
||||
msgid "12 hours"
|
||||
msgstr "12 godzin"
|
||||
|
||||
#: src/lib/utils.ts:155
|
||||
msgid "24 hours"
|
||||
msgstr "24 godziny"
|
||||
|
||||
#: src/lib/utils.ts:170
|
||||
msgid "30 days"
|
||||
msgstr "30 dni"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Akcje"
|
||||
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Aktywne alerty"
|
||||
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Dodaj <0>system</0>"
|
||||
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Dodaj nowy system"
|
||||
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Dodaj system"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:156
|
||||
msgid "Add URL"
|
||||
msgstr "Dodaj URL"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:81
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Dostosuj opcje wyświetlania wykresów."
|
||||
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
msgid "Alerts"
|
||||
msgstr "Alerty"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Wszystkie systemy"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Czy na pewno chcesz usunąć {name}?"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatyczne kopiowanie wymaga bezpiecznego kontekstu."
|
||||
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Średnia"
|
||||
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Średnie wykorzystanie procesora przez kontenery"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Średnia przekracza <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Średnie wykorzystanie procesora w całym systemie"
|
||||
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Kopie"
|
||||
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Przepustowość"
|
||||
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel obsługuje OpenID Connect i wielu dostawców uwierzytelniania OAuth2."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:127
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel używa <0>Shoutrrr</0> do integracji z popularnych serwisami powiadomień."
|
||||
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Plik binarny"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Pamięć podręczna / Bufory"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Uwaga- potencjalna utrata danych."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:36
|
||||
msgid "Change general application options."
|
||||
msgstr "Zmiana ogólnych ustawień aplikacji."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:78
|
||||
msgid "Chart options"
|
||||
msgstr "Opcje wykresu"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Sprawdź {email}, aby uzyskać link do resetowania."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Sprawdź logi, aby uzyskać więcej informacji."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
msgid "Check your notification service"
|
||||
msgstr "Sprawdź swój serwis powiadomień"
|
||||
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Kliknij, aby skopiować"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
msgstr "Instrukcje wiersza poleceń"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:77
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Skonfiguruj sposób otrzymywania powiadomień."
|
||||
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Potwierdź hasło"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Kontynuuj"
|
||||
|
||||
#: src/lib/utils.ts:25
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Skopiowano do schowka"
|
||||
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Kopiuj"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Kopiuj host"
|
||||
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopiuj polecenie Linux"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:13
|
||||
msgid "Copy text"
|
||||
msgstr "Kopiuj tekst"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "Procesor"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Użycie procesora"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Utwórz konto"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
msgid "Dark"
|
||||
msgstr "Ciemny"
|
||||
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Panel kontrolny"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:85
|
||||
msgid "Default time period"
|
||||
msgstr "Domyślny przedział czasu"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Dysk"
|
||||
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Dysk I/O"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Użycie dysku"
|
||||
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Wykorzystanie dysku {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Wykorzystanie procesora przez Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Wykorzystanie pamięci przez Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Sieć Docker I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Dokumentacja"
|
||||
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:91
|
||||
msgid "Email notifications"
|
||||
msgstr "Powiadomienia e-mail"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Wprowadź adres e-mail, aby zresetować hasło"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:111
|
||||
msgid "Enter email address..."
|
||||
msgstr "Wprowadź adres e-mail..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
||||
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Przekracza {0}{1} w ciągu ostatnich {2, plural, one {# minuty} other {# minut}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Istniejące systemy, które nie są zdefiniowane w <0>config.yml</0>, zostaną usunięte. Proszę regularnie tworzyć kopie zapasowe."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
msgid "Export configuration"
|
||||
msgstr "Eksportuj konfigurację"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Eksportuj aktualną konfigurację systemów."
|
||||
|
||||
#: src/lib/utils.ts:38
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Błąd autoryzacji"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:62
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Nie udało się zapisać ustawień"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Nie udało się wysłać testowego powiadomienia"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Nie udało się zaktualizować powiadomienia"
|
||||
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtruj..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Na <0>{min}</0> {min, plural, one {minutę} other {minut}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zapomniałeś hasła?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "Ogólne"
|
||||
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Siatka"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / adres IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Jeśli utraciłeś hasło do swojego konta administratora, możesz je zresetować, używając następującego polecenia."
|
||||
|
||||
#: src/components/login/auth-form.tsx:16
|
||||
msgid "Invalid email address."
|
||||
msgstr "Nieprawidłowy adres e-mail."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Jądro"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "Język"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Układ"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Jasny"
|
||||
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Wyloguj"
|
||||
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Logowanie"
|
||||
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Próba logowania nie powiodła się"
|
||||
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logi"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:80
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Szukasz, gdzie utworzyć powiadomienia? Kliknij ikonę dzwonka <0/> w tabeli systemów."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Zarządzaj preferencjami wyświetlania i powiadomień."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maks. 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Pamięć"
|
||||
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Wykorzystanie pamięci"
|
||||
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Użycie pamięci przez kontenery Docker."
|
||||
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Sieć"
|
||||
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Ruch sieciowy kontenerów Docker."
|
||||
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Ruch sieciowy interfejsów publicznych"
|
||||
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Brak wyników."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Nie znaleziono systemów."
|
||||
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Powiadomienia"
|
||||
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Wsparcie OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Przy każdym ponownym uruchomieniu systemy w bazie danych będą aktualizowane, aby odpowiadały systemom zdefiniowanym w pliku."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Otwórz menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Lub kontynuuj z"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Nadpisz istniejące alerty"
|
||||
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Strona"
|
||||
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Strony / Ustawienia"
|
||||
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Hasło"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Hasło musi mieć co najmniej 8 znaków."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Otrzymane żądanie resetowania hasła"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pauza"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:95
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Proszę <0>skonfigurować serwer SMTP</0>, aby zapewnić dostarczanie powiadomień."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Sprawdź logi, aby uzyskać więcej informacji."
|
||||
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Sprawdź swoje poświadczenia i spróbuj ponownie"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Utwórz konto administratora"
|
||||
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Włącz wyskakujące okna dla tej strony"
|
||||
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Please log in again"
|
||||
msgstr "Zaloguj się ponownie"
|
||||
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Proszę zapoznać się z <0>dokumentacją</0>."
|
||||
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Zaloguj się na swoje konto"
|
||||
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Dokładne wykorzystanie w zarejestrowanym czasie"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:58
|
||||
msgid "Preferred Language"
|
||||
msgstr "Preferowany język"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Klucz publiczny"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Czytaj"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Otrzymane"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
msgid "Reset Password"
|
||||
msgstr "Resetuj hasło"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Wznów"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:117
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Zapisz adres, używając klawisza enter lub przecinka. Pozostaw puste, aby wyłączyć powiadomienia e-mail."
|
||||
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:167
|
||||
msgid "Save Settings"
|
||||
msgstr "Zapisz ustawienia"
|
||||
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Szukaj systemów lub ustawień..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Zobacz <0>ustawienia powiadomień</0>, aby skonfigurować sposób, w jaki otrzymujesz powiadomienia."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Wysłane"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:100
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Ustawia domyślny zakres czasowy dla wykresów, gdy system jest wyświetlony."
|
||||
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
msgid "Settings saved"
|
||||
msgstr "Ustawienia zapisane"
|
||||
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Zaloguj się"
|
||||
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Ustawienia SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Sortuj według"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Pamięć wymiany używana przez system"
|
||||
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Użycie pamięci wymiany"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Systemy"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systemy mogą być zarządzane w pliku <0>config.yml</0> znajdującym się w Twoim katalogu danych."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabela"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatury czujników systemowych."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:211
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:182
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testowe powiadomienie wysłane."
|
||||
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Agent musi być uruchomiony na systemie, aby nawiązać połączenie. Skopiuj poniżej polecenie instalacji agenta."
|
||||
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Agent musi być uruchomiony na systemie, aby nawiązać połączenie. Skopiuj poniżej plik <0>docker-compose.yml</0> dla agenta."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Następnie zaloguj się do panelu administracyjnego i zresetuj hasło do konta użytkownika w tabeli użytkowników."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Tej akcji nie można cofnąć. Spowoduje to trwałe usunięcie wszystkich bieżących rekordów dla {name} z bazy danych."
|
||||
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Przepustowość {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Przepustowość głównego systemu plików"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:106
|
||||
msgid "To email(s)"
|
||||
msgstr "Do e-mail(ów)"
|
||||
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Przełącz siatkę"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
msgid "Toggle theme"
|
||||
msgstr "Zmień motyw"
|
||||
|
||||
#: src/lib/utils.ts:317
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "Wyzwalane, gdy jakikolwiek czujnik przekroczy ustalony próg."
|
||||
|
||||
#: src/lib/utils.ts:310
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Wyzwalane, gdy łączna wartość w górę/w dół przekroczy próg"
|
||||
|
||||
#: src/lib/utils.ts:292
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "Wyzwalane, gdy użycie procesora przekracza próg"
|
||||
|
||||
#: src/lib/utils.ts:298
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "Wyzwalane, wykorzystanie pamięci przekroczy ustalony próg."
|
||||
|
||||
#: src/lib/utils.ts:285
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Wyzwalane, gdy status przełącza się między stanem aktywnym a nieaktywnym"
|
||||
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Wyzwalane, gdy wykorzystanie któregokolwiek dysku przekroczy ustalony próg"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Aktualizowane w czasie rzeczywistym. Kliknij system, aby zobaczyć informacje."
|
||||
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Czas pracy"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Wykorzystanie"
|
||||
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Użycie partycji głównej"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Używane"
|
||||
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Użytkownicy"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Widok"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Widoczne kolumny"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Oczekiwanie na wystarczającą liczbę rekordów do wyświetlenia"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:48
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Chcesz pomóc nam uczynić nasze tłumaczenia jeszcze lepszymi? Sprawdź <0>Crowdin</0> po więcej szczegółów."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:124
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Powiadomienia push"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Napisz"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
msgid "YAML Config"
|
||||
msgstr "Konf. YAML"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
msgid "YAML Configuration"
|
||||
msgstr "Konfiguracja YAML"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Twoje ustawienia użytkownika zostały zaktualizowane."
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: pt\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dia} other {# dias}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hora} other {# horas}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 dias"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Ações"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Alertas Ativos"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Adicionar <0>Sistema</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Adicionar Novo Sistema"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Adicionar sistema"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "Adicionar URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Ajustar opções de exibição para gráficos."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Agente"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Alertas"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Todos os Sistemas"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Tem certeza de que deseja excluir {name}?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Provedores de Autenticação"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "A cópia automática requer um contexto seguro."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Média"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilização média de CPU dos contêineres"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "A média excede <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilização média de CPU em todo o sistema"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Largura de Banda"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAut
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel usa <0>Shoutrrr</0> para integrar com serviços de notificação populares."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Binário"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Binário"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Verifique os logs para mais detalhes."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Verifique seu serviço de notificação"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Clique para copiar"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Colunas"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Instruções de linha de comando"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configure como você recebe notificações de alerta."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmar senha"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Continuar"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Continuar"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copiado para a área de transferência"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Copiar"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Copiar host"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copiar comando Linux"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Copiar comando Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copiar texto"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Uso de CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Criar conta"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Criar conta"
|
||||
msgid "Dark"
|
||||
msgstr "Escuro"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Painel"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Painel"
|
||||
msgid "Default time period"
|
||||
msgstr "Período de tempo padrão"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "E/S de Disco"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Uso de Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Uso de disco de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Uso de CPU do Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Uso de Memória do Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "E/S de Rede do Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Documentação"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "email"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
@@ -308,7 +304,7 @@ msgstr "Email"
|
||||
msgid "Email notifications"
|
||||
msgstr "Notificações por email"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Digite o endereço de email para redefinir a senha"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "Digite o endereço de email para redefinir a senha"
|
||||
msgid "Enter email address..."
|
||||
msgstr "Digite o endereço de email..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Excede {0}{1} no último {2, plural, one {# minuto} other {# minutos}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "Falha ao salvar configurações"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Falha ao enviar notificação de teste"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Falha ao atualizar alerta"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrar..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "Por <0>{min}</0> {min, plural, one {minuto} other {minutos}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Esqueceu a senha?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "Esqueceu a senha?"
|
||||
msgid "General"
|
||||
msgstr "Geral"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Grade"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Endereço de email inválido."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr ""
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Sair"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Entrar"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Tentativa de login falhou"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Gerenciar preferências de exibição e notificação."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Máx 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Memória"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Uso de Memória"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Uso de memória dos contêineres Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Rede"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Tráfego de rede dos contêineres Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Tráfego de rede das interfaces públicas"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Nenhum resultado encontrado."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Nenhum sistema encontrado."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Notificações"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Suporte a OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "Suporte a OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "A cada reinício, os sistemas no banco de dados serão atualizados para corresponder aos sistemas definidos no arquivo."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Abrir menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Ou continue com"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "Ou continue com"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Sobrescrever alertas existentes"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Página"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Páginas / Configurações"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "A senha deve ter pelo menos 10 caracteres."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "A senha deve ter pelo menos 8 caracteres."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Solicitação de redefinição de senha recebida"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Pausar"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Pausar"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Por favor, <0>configure um servidor SMTP</0> para garantir que os alertas sejam entregues."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Por favor, verifique os logs para mais detalhes."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Por favor, verifique suas credenciais e tente novamente"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Por favor, crie uma conta de administrador"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Por favor, habilite pop-ups para este site"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Por favor, habilite pop-ups para este site"
|
||||
msgid "Please log in again"
|
||||
msgstr "Por favor, faça login novamente"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Por favor, veja <0>a documentação</0> para instruções."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Por favor, entre na sua conta"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilização precisa no momento registrado"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Idioma Preferido"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Chave Pública"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Ler"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Recebido"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Recebido"
|
||||
msgid "Reset Password"
|
||||
msgstr "Redefinir Senha"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Retomar"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Salve o endereço usando a tecla enter ou vírgula. Deixe em branco para
|
||||
msgid "Save Settings"
|
||||
msgstr "Salvar Configurações"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Pesquisar"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Pesquisar por sistemas ou configurações..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Pesquisar por sistemas ou configurações..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Veja <0>configurações de notificação</0> para configurar como você recebe alertas."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Enviado"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Enviado"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Define o intervalo de tempo padrão para gráficos quando um sistema é visualizado."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Configurações"
|
||||
msgid "Settings saved"
|
||||
msgstr "Configurações salvas"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Entrar"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Configurações SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Ordenar Por"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espaço de swap usado pelo sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Uso de Swap"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Sistemas"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Sistemas"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Os sistemas podem ser gerenciados em um arquivo <0>config.yml</0> dentro do seu diretório de dados."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Tabela"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturas dos sensores do sistema"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Testar <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notificação de teste enviada"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "O agente deve estar em execução no sistema para conectar. Copie o comando de instalação para o agente abaixo."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "O agente deve estar em execução no sistema para conectar. Copie o <0>docker-compose.yml</0> para o agente abaixo."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "O agente deve estar em execução no sistema para conectar. Copie o <0>d
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Em seguida, faça login no backend e redefina a senha da sua conta de usuário na tabela de usuários."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Esta ação não pode ser desfeita. Isso excluirá permanentemente todos os registros atuais de {name} do banco de dados."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Taxa de transferência de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Taxa de transferência do sistema de arquivos raiz"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "Taxa de transferência do sistema de arquivos raiz"
|
||||
msgid "To email(s)"
|
||||
msgstr "Para email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Alternar grade"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "Dispara quando o status alterna entre ativo e inativo"
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Dispara quando o uso de qualquer disco excede um limite"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Atualizado em tempo real. Clique em um sistema para ver informações."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Tempo de Atividade"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Uso da partição raiz"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Usado"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "nome de usuário"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Nome de usuário"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Usuários"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Visual"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Campos Visíveis"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Aguardando registros suficientes para exibir"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "Quer nos ajudar a melhorar ainda mais nossas traduções? Confira <0>Cro
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notificações Webhook / Push"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Escrever"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ru\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2024-11-02 19:37\n"
|
||||
"PO-Revision-Date: 2024-12-17 21:36\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Russian\n"
|
||||
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"X-Crowdin-File: /main/beszel/site/src/locales/en/en.po\n"
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#: src/components/routes/system.tsx:242
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# день} other {# дней}}"
|
||||
|
||||
#: src/components/routes/system.tsx:240
|
||||
#: src/components/routes/system.tsx:248
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# час} other {# часов}}"
|
||||
|
||||
@@ -47,24 +47,27 @@ msgid "30 days"
|
||||
msgstr "30 дней"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:207
|
||||
#: src/components/systems-table/systems-table.tsx:227
|
||||
#: src/components/systems-table/systems-table.tsx:313
|
||||
#: src/components/systems-table/systems-table.tsx:455
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "Actions"
|
||||
msgstr "Действия"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:61
|
||||
msgid "Active Alerts"
|
||||
msgstr "Активные оповещения"
|
||||
|
||||
#: src/components/add-system.tsx:74
|
||||
#: src/components/add-system.tsx:78
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Добавить <0>Систему</0>"
|
||||
|
||||
#: src/components/add-system.tsx:83
|
||||
#: src/components/add-system.tsx:87
|
||||
msgid "Add New System"
|
||||
msgstr "Добавить новую систему"
|
||||
|
||||
#: src/components/add-system.tsx:167
|
||||
#: src/components/add-system.tsx:178
|
||||
#: src/components/add-system.tsx:165
|
||||
#: src/components/add-system.tsx:176
|
||||
msgid "Add system"
|
||||
msgstr "Добавить систему"
|
||||
|
||||
@@ -76,16 +79,15 @@ msgstr "Добавить URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Настроить параметры отображения для графиков."
|
||||
|
||||
#: src/components/command-palette.tsx:133
|
||||
#: src/components/command-palette.tsx:146
|
||||
#: src/components/command-palette.tsx:160
|
||||
#: src/components/command-palette.tsx:174
|
||||
#: src/components/command-palette.tsx:189
|
||||
#: src/components/command-palette.tsx:204
|
||||
#: src/components/command-palette.tsx:132
|
||||
#: src/components/command-palette.tsx:145
|
||||
#: src/components/command-palette.tsx:159
|
||||
#: src/components/command-palette.tsx:173
|
||||
#: src/components/command-palette.tsx:188
|
||||
msgid "Admin"
|
||||
msgstr "Администратор"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
#: src/components/systems-table/systems-table.tsx:201
|
||||
msgid "Agent"
|
||||
msgstr "Агент"
|
||||
|
||||
@@ -95,50 +97,53 @@ msgid "Alerts"
|
||||
msgstr "Оповещения"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:317
|
||||
#: src/components/systems-table/systems-table.tsx:266
|
||||
msgid "All Systems"
|
||||
msgstr "Все системы"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:570
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Вы уверены, что хотите удалить {name}?"
|
||||
|
||||
#: src/components/command-palette.tsx:186
|
||||
#: src/components/navbar.tsx:102
|
||||
msgid "Auth Providers"
|
||||
msgstr "Поставщики аутентификации"
|
||||
|
||||
#: src/components/copy-to-clipboard.tsx:16
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Автоматическое копирование требует безопасного контекста."
|
||||
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:625
|
||||
msgid "Average"
|
||||
msgstr "Среднее"
|
||||
|
||||
#: src/components/routes/system.tsx:387
|
||||
#: src/components/routes/system.tsx:396
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Среднее использование CPU контейнерами"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:204
|
||||
#: src/components/alerts/alerts-system.tsx:206
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Среднее превышает <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:376
|
||||
#: src/components/routes/system.tsx:497
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Среднее потребление мощности всеми GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:385
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Среднее использование CPU по всей системе"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/routes/system.tsx:515
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Среднее использование {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:170
|
||||
#: src/components/navbar.tsx:93
|
||||
msgid "Backups"
|
||||
msgstr "Резервные копии"
|
||||
|
||||
#: src/components/routes/system.tsx:436
|
||||
#: src/components/routes/system.tsx:441
|
||||
#: src/lib/utils.ts:307
|
||||
msgid "Bandwidth"
|
||||
msgstr "Пропускная способность"
|
||||
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
#: src/components/login/auth-form.tsx:289
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel поддерживает OpenID Connect и многих поставщиков аутентификации OAuth2."
|
||||
|
||||
@@ -146,7 +151,7 @@ msgstr "Beszel поддерживает OpenID Connect и многих пост
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel использует <0>Shoutrrr</0> для интеграции с популярными сервисами уведомлений."
|
||||
|
||||
#: src/components/add-system.tsx:88
|
||||
#: src/components/add-system.tsx:92
|
||||
msgid "Binary"
|
||||
msgstr "Двоичный"
|
||||
|
||||
@@ -154,7 +159,7 @@ msgstr "Двоичный"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Кэш / Буферы"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:272
|
||||
#: src/components/systems-table/systems-table.tsx:581
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
@@ -182,15 +187,10 @@ msgstr "Проверьте журналы для получения более
|
||||
msgid "Check your notification service"
|
||||
msgstr "Проверьте ваш сервис уведомлений"
|
||||
|
||||
#: src/components/add-system.tsx:153
|
||||
#: src/components/add-system.tsx:151
|
||||
msgid "Click to copy"
|
||||
msgstr "Нажмите, чтобы скопировать"
|
||||
|
||||
#. Context: table columns
|
||||
#: src/components/systems-table/systems-table.tsx:328
|
||||
msgid "Columns"
|
||||
msgstr "Столбцы"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
msgid "Command line instructions"
|
||||
@@ -200,12 +200,12 @@ msgstr "Инструкции командной строки"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Настройте, как вы получаете уведомления об оповещениях."
|
||||
|
||||
#: src/components/login/auth-form.tsx:189
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:165
|
||||
#: src/components/login/auth-form.tsx:170
|
||||
msgid "Confirm password"
|
||||
msgstr "Подтвердите пароль"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:587
|
||||
msgid "Continue"
|
||||
msgstr "Продолжить"
|
||||
|
||||
@@ -213,15 +213,15 @@ msgstr "Продолжить"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Скопировано в буфер обмена"
|
||||
|
||||
#: src/components/add-system.tsx:164
|
||||
#: src/components/add-system.tsx:162
|
||||
msgid "Copy"
|
||||
msgstr "Копировать"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:247
|
||||
#: src/components/systems-table/systems-table.tsx:556
|
||||
msgid "Copy host"
|
||||
msgstr "Копировать хост"
|
||||
|
||||
#: src/components/add-system.tsx:175
|
||||
#: src/components/add-system.tsx:173
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Копировать команду Linux"
|
||||
|
||||
@@ -229,17 +229,17 @@ msgstr "Копировать команду Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Копировать текст"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
#: src/components/systems-table/systems-table.tsx:157
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:52
|
||||
#: src/components/routes/system.tsx:375
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:384
|
||||
#: src/lib/utils.ts:289
|
||||
msgid "CPU Usage"
|
||||
msgstr "Использование CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Create account"
|
||||
msgstr "Создать аккаунт"
|
||||
|
||||
@@ -248,8 +248,8 @@ msgstr "Создать аккаунт"
|
||||
msgid "Dark"
|
||||
msgstr "Темная"
|
||||
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/command-palette.tsx:81
|
||||
#: src/components/routes/home.tsx:34
|
||||
msgid "Dashboard"
|
||||
msgstr "Панель управления"
|
||||
|
||||
@@ -257,49 +257,45 @@ msgstr "Панель управления"
|
||||
msgid "Default time period"
|
||||
msgstr "Период по умолчанию"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:253
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:166
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Disk"
|
||||
msgstr "Диск"
|
||||
|
||||
#: src/components/routes/system.tsx:426
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Disk I/O"
|
||||
msgstr "Дисковый ввод/вывод"
|
||||
|
||||
#: src/components/charts/disk-chart.tsx:74
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:424
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Disk Usage"
|
||||
msgstr "Использование диска"
|
||||
|
||||
#: src/components/routes/system.tsx:495
|
||||
#: src/components/routes/system.tsx:552
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Использование диска {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:386
|
||||
#: src/components/routes/system.tsx:395
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Использование CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:416
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Использование памяти Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:452
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Сетевой ввод/вывод Docker"
|
||||
|
||||
#: src/components/command-palette.tsx:125
|
||||
#: src/components/command-palette.tsx:124
|
||||
msgid "Documentation"
|
||||
msgstr "Документация"
|
||||
|
||||
#: src/components/login/auth-form.tsx:158
|
||||
msgid "email"
|
||||
msgstr "электронная почта"
|
||||
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
#: src/components/login/auth-form.tsx:128
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
msgid "Email"
|
||||
msgstr "Электронная почта"
|
||||
@@ -308,7 +304,7 @@ msgstr "Электронная почта"
|
||||
msgid "Email notifications"
|
||||
msgstr "Уведомления по электронной почте"
|
||||
|
||||
#: src/components/login/login.tsx:36
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Введите адрес электронной почты для сброса пароля"
|
||||
|
||||
@@ -316,13 +312,13 @@ msgstr "Введите адрес электронной почты для сб
|
||||
msgid "Enter email address..."
|
||||
msgstr "Введите адрес электронной почты..."
|
||||
|
||||
#: src/components/login/auth-form.tsx:256
|
||||
#: src/components/login/auth-form.tsx:232
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:187
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:80
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Превышает {0}{1} за последние {2, plural, one {# минуту} other {# минут}}"
|
||||
|
||||
@@ -351,20 +347,20 @@ msgstr "Не удалось сохранить настройки"
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Не удалось отправить тестовое уведомление"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Не удалось обновить оповещение"
|
||||
|
||||
#: src/components/routes/system.tsx:539
|
||||
#: src/components/systems-table/systems-table.tsx:324
|
||||
#: src/components/routes/system.tsx:596
|
||||
#: src/components/systems-table/systems-table.tsx:273
|
||||
msgid "Filter..."
|
||||
msgstr "Фильтр..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:225
|
||||
#: src/components/alerts/alerts-system.tsx:227
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "На <0>{min}</0> {min, plural, one {минуту} other {минут}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:337
|
||||
#: src/components/login/auth-form.tsx:313
|
||||
msgid "Forgot password?"
|
||||
msgstr "Забыли пароль?"
|
||||
|
||||
@@ -374,7 +370,15 @@ msgstr "Забыли пароль?"
|
||||
msgid "General"
|
||||
msgstr "Общие"
|
||||
|
||||
#: src/components/add-system.tsx:119
|
||||
#: src/components/routes/system.tsx:496
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Потребляемая мощность GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:300
|
||||
msgid "Grid"
|
||||
msgstr "Сетка"
|
||||
|
||||
#: src/components/add-system.tsx:120
|
||||
msgid "Host / IP"
|
||||
msgstr "Хост / IP"
|
||||
|
||||
@@ -387,7 +391,7 @@ msgid "Invalid email address."
|
||||
msgstr "Неверный адрес электронной почты."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:254
|
||||
#: src/components/routes/system.tsx:262
|
||||
msgid "Kernel"
|
||||
msgstr "Ядро"
|
||||
|
||||
@@ -395,26 +399,30 @@ msgstr "Ядро"
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:286
|
||||
msgid "Layout"
|
||||
msgstr "Макет"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
msgid "Light"
|
||||
msgstr "Светлая"
|
||||
|
||||
#: src/components/navbar.tsx:113
|
||||
#: src/components/navbar.tsx:104
|
||||
msgid "Log Out"
|
||||
msgstr "Выйти"
|
||||
|
||||
#: src/components/login/login.tsx:17
|
||||
#: src/components/login/login.tsx:19
|
||||
msgid "Login"
|
||||
msgstr "Вход"
|
||||
|
||||
#: src/components/login/auth-form.tsx:42
|
||||
#: src/components/login/auth-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Попытка входа не удалась"
|
||||
|
||||
#: src/components/command-palette.tsx:157
|
||||
#: src/components/navbar.tsx:86
|
||||
#: src/components/command-palette.tsx:156
|
||||
#: src/components/navbar.tsx:85
|
||||
msgid "Logs"
|
||||
msgstr "Журналы"
|
||||
|
||||
@@ -427,54 +435,55 @@ msgid "Manage display and notification preferences."
|
||||
msgstr "Управляйте предпочтениями отображения и уведомлений."
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:571
|
||||
#: src/components/routes/system.tsx:628
|
||||
msgid "Max 1 min"
|
||||
msgstr "Макс 1 мин"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:159
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "Memory"
|
||||
msgstr "Память"
|
||||
|
||||
#: src/components/routes/system.tsx:397
|
||||
#: src/components/routes/system.tsx:406
|
||||
#: src/lib/utils.ts:295
|
||||
msgid "Memory Usage"
|
||||
msgstr "Использование памяти"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:417
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Использование памяти контейнерами Docker"
|
||||
|
||||
#: src/components/add-system.tsx:113
|
||||
#: src/components/add-system.tsx:116
|
||||
msgid "Name"
|
||||
msgstr "Имя"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Net"
|
||||
msgstr "Сеть"
|
||||
|
||||
#: src/components/routes/system.tsx:453
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Сетевой трафик контейнеров Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/components/routes/system.tsx:443
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Сетевой трафик публичных интерфейсов"
|
||||
|
||||
#: src/components/command-palette.tsx:50
|
||||
#: src/components/command-palette.tsx:49
|
||||
msgid "No results found."
|
||||
msgstr "Результаты не найдены."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:400
|
||||
#: src/components/systems-table/systems-table.tsx:421
|
||||
#: src/components/systems-table/systems-table.tsx:494
|
||||
msgid "No systems found."
|
||||
msgstr "Системы не найдены."
|
||||
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/command-palette.tsx:110
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:74
|
||||
msgid "Notifications"
|
||||
msgstr "Уведомления"
|
||||
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
#: src/components/login/auth-form.tsx:284
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Поддержка OAuth 2 / OIDC"
|
||||
|
||||
@@ -482,11 +491,11 @@ msgstr "Поддержка OAuth 2 / OIDC"
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "При каждом перезапуске системы в базе данных будут обновлены в соответствии с системами, определенными в файле."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:219
|
||||
#: src/components/systems-table/systems-table.tsx:528
|
||||
msgid "Open menu"
|
||||
msgstr "Открыть меню"
|
||||
|
||||
#: src/components/login/auth-form.tsx:227
|
||||
#: src/components/login/auth-form.tsx:203
|
||||
msgid "Or continue with"
|
||||
msgstr "Или продолжить с"
|
||||
|
||||
@@ -494,28 +503,28 @@ msgstr "Или продолжить с"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Перезаписать существующие оповещения"
|
||||
|
||||
#: src/components/command-palette.tsx:85
|
||||
#: src/components/command-palette.tsx:84
|
||||
msgid "Page"
|
||||
msgstr "Страница"
|
||||
|
||||
#: src/components/command-palette.tsx:72
|
||||
#: src/components/command-palette.tsx:71
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Страницы / Настройки"
|
||||
|
||||
#: src/components/login/auth-form.tsx:171
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
#: src/components/login/auth-form.tsx:147
|
||||
#: src/components/login/auth-form.tsx:152
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
msgid "Password must be at least 10 characters."
|
||||
msgstr "Пароль должен содержать не менее 10 символов."
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Пароль должен содержать не менее 8 символов."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
msgstr "Запрос на сброс пароля получен"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:241
|
||||
#: src/components/systems-table/systems-table.tsx:550
|
||||
msgid "Pause"
|
||||
msgstr "Пауза"
|
||||
|
||||
@@ -523,20 +532,20 @@ msgstr "Пауза"
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Пожалуйста, <0>настройте SMTP-сервер</0>, чтобы гарантировать доставку оповещений."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:28
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Пожалуйста, проверьте журналы для получения более подробной информации."
|
||||
|
||||
#: src/components/login/auth-form.tsx:43
|
||||
#: src/components/login/auth-form.tsx:35
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Пожалуйста, проверьте свои учетные данные и попробуйте снова"
|
||||
|
||||
#: src/components/login/login.tsx:34
|
||||
#: src/components/login/login.tsx:36
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Пожалуйста, создайте учетную запись администратора"
|
||||
|
||||
#: src/components/login/auth-form.tsx:257
|
||||
#: src/components/login/auth-form.tsx:233
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Пожалуйста, включите всплывающие окна для этого сайта"
|
||||
|
||||
@@ -544,19 +553,20 @@ msgstr "Пожалуйста, включите всплывающие окна
|
||||
msgid "Please log in again"
|
||||
msgstr "Пожалуйста, войдите снова"
|
||||
|
||||
#: src/components/login/auth-form.tsx:316
|
||||
#: src/components/login/auth-form.tsx:292
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Пожалуйста, смотрите <0>документацию</0> для получения инструкций."
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
#: src/components/login/login.tsx:40
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Пожалуйста, войдите в свою учетную запись"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/components/routes/system.tsx:407
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Точное использование в записанное время"
|
||||
|
||||
@@ -565,18 +575,18 @@ msgid "Preferred Language"
|
||||
msgstr "Предпочтительный язык"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:131
|
||||
#: src/components/add-system.tsx:128
|
||||
msgid "Public Key"
|
||||
msgstr "Ключ"
|
||||
|
||||
#. Context is disk read
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
msgid "Read"
|
||||
msgstr "Чтение"
|
||||
|
||||
#. Context is network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
msgid "Received"
|
||||
msgstr "Получено"
|
||||
|
||||
@@ -584,7 +594,7 @@ msgstr "Получено"
|
||||
msgid "Reset Password"
|
||||
msgstr "Сбросить пароль"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:236
|
||||
#: src/components/systems-table/systems-table.tsx:545
|
||||
msgid "Resume"
|
||||
msgstr "Возобновить"
|
||||
|
||||
@@ -597,11 +607,11 @@ msgstr "Сохраните адрес, используя клавишу вво
|
||||
msgid "Save Settings"
|
||||
msgstr "Сохранить настройки"
|
||||
|
||||
#: src/components/navbar.tsx:142
|
||||
#: src/components/navbar.tsx:133
|
||||
msgid "Search"
|
||||
msgstr "Поиск"
|
||||
|
||||
#: src/components/command-palette.tsx:47
|
||||
#: src/components/command-palette.tsx:46
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Поиск систем или настроек..."
|
||||
|
||||
@@ -609,8 +619,8 @@ msgstr "Поиск систем или настроек..."
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Смотрите <0>настройки уведомлений</0>, чтобы настроить, как вы получаете оповещения."
|
||||
|
||||
#. Context is network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
msgid "Sent"
|
||||
msgstr "Отправлено"
|
||||
|
||||
@@ -618,9 +628,9 @@ msgstr "Отправлено"
|
||||
msgid "Sets the default time range for charts when a system is viewed."
|
||||
msgstr "Устанавливает диапазон времени по умолчанию для графиков при просмотре системы."
|
||||
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/command-palette.tsx:95
|
||||
#: src/components/command-palette.tsx:98
|
||||
#: src/components/command-palette.tsx:113
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -630,34 +640,40 @@ msgstr "Настройки"
|
||||
msgid "Settings saved"
|
||||
msgstr "Настройки сохранены"
|
||||
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
#: src/components/login/auth-form.tsx:191
|
||||
msgid "Sign in"
|
||||
msgstr "Войти"
|
||||
|
||||
#: src/components/command-palette.tsx:201
|
||||
#: src/components/command-palette.tsx:185
|
||||
msgid "SMTP settings"
|
||||
msgstr "Настройки SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:308
|
||||
msgid "Sort By"
|
||||
msgstr "Сортировать по"
|
||||
|
||||
#: src/lib/utils.ts:282
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
#: src/components/routes/system.tsx:467
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Используемое системой пространство подкачки"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Swap Usage"
|
||||
msgstr "Использование подкачки"
|
||||
|
||||
#. System theme
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:110
|
||||
#: src/components/systems-table/systems-table.tsx:121
|
||||
#: src/components/systems-table/systems-table.tsx:117
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:136
|
||||
#: src/components/systems-table/systems-table.tsx:465
|
||||
msgid "System"
|
||||
msgstr "Система"
|
||||
|
||||
#: src/components/navbar.tsx:78
|
||||
#: src/components/navbar.tsx:77
|
||||
msgid "Systems"
|
||||
msgstr "Системы"
|
||||
|
||||
@@ -665,12 +681,16 @@ msgstr "Системы"
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Системы могут управляться в файле <0>config.yml</0> внутри вашего каталога данных."
|
||||
|
||||
#: src/components/routes/system.tsx:477
|
||||
#: src/components/systems-table/systems-table.tsx:296
|
||||
msgid "Table"
|
||||
msgstr "Таблица"
|
||||
|
||||
#: src/components/routes/system.tsx:484
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Temperature"
|
||||
msgstr "Температура"
|
||||
|
||||
#: src/components/routes/system.tsx:478
|
||||
#: src/components/routes/system.tsx:485
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Температуры датчиков системы"
|
||||
|
||||
@@ -682,11 +702,11 @@ msgstr "Тест <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Тестовое уведомление отправлено"
|
||||
|
||||
#: src/components/add-system.tsx:104
|
||||
#: src/components/add-system.tsx:108
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Агент должен работать на системе для подключения. Скопируйте команду установки агента ниже."
|
||||
|
||||
#: src/components/add-system.tsx:95
|
||||
#: src/components/add-system.tsx:99
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Агент должен работать на системе для подключения. Скопируйте <0>docker-compose.yml</0> для агента ниже."
|
||||
|
||||
@@ -694,15 +714,15 @@ msgstr "Агент должен работать на системе для по
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Затем войдите в бэкенд и сбросьте пароль вашей учетной записи в таблице пользователей."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:264
|
||||
#: src/components/systems-table/systems-table.tsx:573
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Это действие не может быть отменено. Это навсегда удалит все текущие записи для {name} из базы данных."
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Пропускная способность {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:427
|
||||
#: src/components/routes/system.tsx:432
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Пропускная способность корневой файловой системы"
|
||||
|
||||
@@ -710,8 +730,8 @@ msgstr "Пропускная способность корневой файло
|
||||
msgid "To email(s)"
|
||||
msgstr "На электронную почту"
|
||||
|
||||
#: src/components/routes/system.tsx:350
|
||||
#: src/components/routes/system.tsx:363
|
||||
#: src/components/routes/system.tsx:359
|
||||
#: src/components/routes/system.tsx:372
|
||||
msgid "Toggle grid"
|
||||
msgstr "Переключить сетку"
|
||||
|
||||
@@ -743,41 +763,44 @@ msgstr "Срабатывает, когда статус переключаетс
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Срабатывает, когда использование любого диска превышает порог"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:320
|
||||
#: src/components/systems-table/systems-table.tsx:269
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Обновляется в реальном времени. Нажмите на систему, чтобы просмотреть информацию."
|
||||
|
||||
#: src/components/routes/system.tsx:253
|
||||
#: src/components/routes/system.tsx:261
|
||||
msgid "Uptime"
|
||||
msgstr "Время работы"
|
||||
|
||||
#: src/components/routes/system.tsx:494
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:514
|
||||
#: src/components/routes/system.tsx:551
|
||||
msgid "Usage"
|
||||
msgstr "Использование"
|
||||
|
||||
#: src/components/routes/system.tsx:415
|
||||
#: src/components/routes/system.tsx:424
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Использование корневого раздела"
|
||||
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
msgid "Used"
|
||||
msgstr "Использовано"
|
||||
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "username"
|
||||
msgstr "имя пользователя"
|
||||
|
||||
#: src/components/login/auth-form.tsx:131
|
||||
msgid "Username"
|
||||
msgstr "Имя пользователя"
|
||||
|
||||
#: src/components/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:142
|
||||
#: src/components/navbar.tsx:69
|
||||
msgid "Users"
|
||||
msgstr "Пользователи"
|
||||
|
||||
#: src/components/routes/system.tsx:603
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
msgid "View"
|
||||
msgstr "Вид"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:342
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видимые столбцы"
|
||||
|
||||
#: src/components/routes/system.tsx:662
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Ожидание достаточного количества записей для отображения"
|
||||
|
||||
@@ -789,9 +812,9 @@ msgstr "Хотите помочь нам улучшить наши перево
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push уведомления"
|
||||
|
||||
#. Context is disk write
|
||||
#: src/components/charts/area-chart.tsx:55
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
msgid "Write"
|
||||
msgstr "Запись"
|
||||
|
||||
|
||||