mirror of
https://github.com/henrygd/beszel.git
synced 2026-03-23 22:16:18 +01:00
Compare commits
74 Commits
v0.10.0
...
c01bfd9332
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c01bfd9332 | ||
|
|
209e82aed2 | ||
|
|
c66e740d52 | ||
|
|
551ae49c2e | ||
|
|
906daa6f2a | ||
|
|
49e55943c1 | ||
|
|
9e75cbc1ef | ||
|
|
79190a2c51 | ||
|
|
32960c7c35 | ||
|
|
cdff974a8a | ||
|
|
20a6ef129c | ||
|
|
d1e5310f83 | ||
|
|
152173eab5 | ||
|
|
c2aec69638 | ||
|
|
16c97fe77b | ||
|
|
bed5bc2791 | ||
|
|
424c7aceff | ||
|
|
8eb101e714 | ||
|
|
f2e69e2a80 | ||
|
|
41b4dbce98 | ||
|
|
c3432fc7b5 | ||
|
|
b167244e28 | ||
|
|
bcca6a5a9d | ||
|
|
6b661b4878 | ||
|
|
bc537edb73 | ||
|
|
561a3e8aaf | ||
|
|
f173ea37da | ||
|
|
0d9f2ba06a | ||
|
|
4e772e6008 | ||
|
|
b959d97502 | ||
|
|
735cbe2cf0 | ||
|
|
0f5a470495 | ||
|
|
a42e99370e | ||
|
|
abfae78af1 | ||
|
|
e36c40c4a9 | ||
|
|
bf7b2ae598 | ||
|
|
f71ee4b058 | ||
|
|
f2466eb37d | ||
|
|
7244c7130b | ||
|
|
f2e84a9d3e | ||
|
|
04a1ee5e4e | ||
|
|
9b83088897 | ||
|
|
13b30aa255 | ||
|
|
2bd25e9e8d | ||
|
|
4fe192bf28 | ||
|
|
2056ae285f | ||
|
|
a02e7a0a69 | ||
|
|
b1a9e90034 | ||
|
|
20916fab3e | ||
|
|
0c777cca72 | ||
|
|
44e30ad429 | ||
|
|
9e30786dda | ||
|
|
1f677773e7 | ||
|
|
882289da91 | ||
|
|
fbbc4eff27 | ||
|
|
b78231f677 | ||
|
|
332e2d14a9 | ||
|
|
e088b88c84 | ||
|
|
09840f95d9 | ||
|
|
de03bb658a | ||
|
|
bcadfeb729 | ||
|
|
ec582a9171 | ||
|
|
0c3eaefc90 | ||
|
|
d6b5866f90 | ||
|
|
2ba629e4b4 | ||
|
|
6e9341b7ff | ||
|
|
89499a341b | ||
|
|
9c88845798 | ||
|
|
c9f65f63e6 | ||
|
|
996620c8e0 | ||
|
|
626c1358d9 | ||
|
|
19dd39b7db | ||
|
|
d482b50e31 | ||
|
|
f61ec49c76 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -15,5 +15,4 @@ beszel/build
|
||||
*timestamp*
|
||||
.swc
|
||||
beszel/site/src/locales/**/*.ts
|
||||
*.bak
|
||||
__debug_*
|
||||
*.bak
|
||||
@@ -14,10 +14,6 @@ clean:
|
||||
lint:
|
||||
golangci-lint run
|
||||
|
||||
test: export GOEXPERIMENT=synctest
|
||||
test:
|
||||
go test -tags=testing ./...
|
||||
|
||||
tidy:
|
||||
go mod tidy
|
||||
|
||||
|
||||
@@ -14,14 +14,14 @@ import (
|
||||
|
||||
// cli options
|
||||
type cmdOptions struct {
|
||||
key string // key is the public key(s) for SSH authentication.
|
||||
listen string // listen is the address or port to listen on.
|
||||
key string // key is the public key(s) for SSH authentication.
|
||||
addr string // addr is the address or port to listen on.
|
||||
}
|
||||
|
||||
// parseFlags parses the command line flags and populates the config struct.
|
||||
func (opts *cmdOptions) parseFlags() {
|
||||
flag.StringVar(&opts.key, "key", "", "Public key(s) for SSH authentication")
|
||||
flag.StringVar(&opts.listen, "listen", "", "Address or port to listen on")
|
||||
flag.StringVar(&opts.addr, "addr", "", "Address or port to listen on")
|
||||
|
||||
flag.Usage = func() {
|
||||
fmt.Printf("Usage: %s [options] [subcommand]\n", os.Args[0])
|
||||
@@ -82,11 +82,11 @@ func (opts *cmdOptions) loadPublicKeys() ([]ssh.PublicKey, error) {
|
||||
// getAddress gets the address to listen on from the command line flag, environment variable, or default value.
|
||||
func (opts *cmdOptions) getAddress() string {
|
||||
// Try command line flag first
|
||||
if opts.listen != "" {
|
||||
return opts.listen
|
||||
if opts.addr != "" {
|
||||
return opts.addr
|
||||
}
|
||||
// Try environment variables
|
||||
if addr, ok := agent.GetEnv("LISTEN"); ok && addr != "" {
|
||||
if addr, ok := agent.GetEnv("ADDR"); ok && addr != "" {
|
||||
return addr
|
||||
}
|
||||
// Legacy PORT environment variable support
|
||||
@@ -101,7 +101,7 @@ func (opts *cmdOptions) getNetwork() string {
|
||||
if network, _ := agent.GetEnv("NETWORK"); network != "" {
|
||||
return network
|
||||
}
|
||||
if strings.HasPrefix(opts.listen, "/") {
|
||||
if strings.HasPrefix(opts.addr, "/") {
|
||||
return "unix"
|
||||
}
|
||||
return "tcp"
|
||||
@@ -117,7 +117,7 @@ func main() {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
opts.listen = opts.getAddress()
|
||||
opts.addr = opts.getAddress()
|
||||
|
||||
var serverConfig agent.ServerOptions
|
||||
var err error
|
||||
@@ -126,7 +126,7 @@ func main() {
|
||||
log.Fatal("Failed to load public keys:", err)
|
||||
}
|
||||
|
||||
serverConfig.Addr = opts.listen
|
||||
serverConfig.Addr = opts.addr
|
||||
serverConfig.Network = opts.getNetwork()
|
||||
|
||||
agent := agent.NewAgent()
|
||||
|
||||
@@ -27,22 +27,22 @@ func TestGetAddress(t *testing.T) {
|
||||
{
|
||||
name: "use address from flag",
|
||||
opts: cmdOptions{
|
||||
listen: "8080",
|
||||
addr: "8080",
|
||||
},
|
||||
expected: "8080",
|
||||
},
|
||||
{
|
||||
name: "use unix socket from flag",
|
||||
opts: cmdOptions{
|
||||
listen: "/tmp/beszel.sock",
|
||||
addr: "/tmp/beszel.sock",
|
||||
},
|
||||
expected: "/tmp/beszel.sock",
|
||||
},
|
||||
{
|
||||
name: "use LISTEN env var",
|
||||
name: "use ADDR env var",
|
||||
opts: cmdOptions{},
|
||||
envVars: map[string]string{
|
||||
"LISTEN": "1.2.3.4:9090",
|
||||
"ADDR": "1.2.3.4:9090",
|
||||
},
|
||||
expected: "1.2.3.4:9090",
|
||||
},
|
||||
@@ -57,21 +57,21 @@ func TestGetAddress(t *testing.T) {
|
||||
{
|
||||
name: "use unix socket from env var",
|
||||
opts: cmdOptions{
|
||||
listen: "",
|
||||
addr: "",
|
||||
},
|
||||
envVars: map[string]string{
|
||||
"LISTEN": "/tmp/beszel.sock",
|
||||
"ADDR": "/tmp/beszel.sock",
|
||||
},
|
||||
expected: "/tmp/beszel.sock",
|
||||
},
|
||||
{
|
||||
name: "flag takes precedence over env vars",
|
||||
opts: cmdOptions{
|
||||
listen: ":8080",
|
||||
addr: ":8080",
|
||||
},
|
||||
envVars: map[string]string{
|
||||
"LISTEN": ":9090",
|
||||
"PORT": "7070",
|
||||
"ADDR": ":9090",
|
||||
"PORT": "7070",
|
||||
},
|
||||
expected: ":8080",
|
||||
},
|
||||
@@ -201,27 +201,27 @@ func TestGetNetwork(t *testing.T) {
|
||||
},
|
||||
{
|
||||
name: "only port",
|
||||
opts: cmdOptions{listen: "8080"},
|
||||
opts: cmdOptions{addr: "8080"},
|
||||
expected: "tcp",
|
||||
},
|
||||
{
|
||||
name: "ipv4 address",
|
||||
opts: cmdOptions{listen: "1.2.3.4:8080"},
|
||||
opts: cmdOptions{addr: "1.2.3.4:8080"},
|
||||
expected: "tcp",
|
||||
},
|
||||
{
|
||||
name: "ipv6 address",
|
||||
opts: cmdOptions{listen: "[2001:db8::1]:8080"},
|
||||
opts: cmdOptions{addr: "[2001:db8::1]:8080"},
|
||||
expected: "tcp",
|
||||
},
|
||||
{
|
||||
name: "unix network",
|
||||
opts: cmdOptions{listen: "/tmp/beszel.sock"},
|
||||
opts: cmdOptions{addr: "/tmp/beszel.sock"},
|
||||
expected: "unix",
|
||||
},
|
||||
{
|
||||
name: "env var network",
|
||||
opts: cmdOptions{listen: ":8080"},
|
||||
opts: cmdOptions{addr: ":8080"},
|
||||
envVars: map[string]string{"NETWORK": "tcp4"},
|
||||
expected: "tcp4",
|
||||
},
|
||||
@@ -256,32 +256,32 @@ func TestParseFlags(t *testing.T) {
|
||||
name: "no flags",
|
||||
args: []string{"cmd"},
|
||||
expected: cmdOptions{
|
||||
key: "",
|
||||
listen: "",
|
||||
key: "",
|
||||
addr: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "key flag only",
|
||||
args: []string{"cmd", "-key", "testkey"},
|
||||
expected: cmdOptions{
|
||||
key: "testkey",
|
||||
listen: "",
|
||||
key: "testkey",
|
||||
addr: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "addr flag only",
|
||||
args: []string{"cmd", "-listen", ":8080"},
|
||||
args: []string{"cmd", "-addr", ":8080"},
|
||||
expected: cmdOptions{
|
||||
key: "",
|
||||
listen: ":8080",
|
||||
key: "",
|
||||
addr: ":8080",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "both flags",
|
||||
args: []string{"cmd", "-key", "testkey", "-listen", ":8080"},
|
||||
args: []string{"cmd", "-key", "testkey", "-addr", ":8080"},
|
||||
expected: cmdOptions{
|
||||
key: "testkey",
|
||||
listen: ":8080",
|
||||
key: "testkey",
|
||||
addr: ":8080",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,46 +1,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"beszel"
|
||||
"beszel/internal/hub"
|
||||
_ "beszel/migrations"
|
||||
"os"
|
||||
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/plugins/migratecmd"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func main() {
|
||||
baseApp := getBaseApp()
|
||||
h := hub.NewHub(baseApp)
|
||||
h.BootstrapHub()
|
||||
h.Start()
|
||||
}
|
||||
|
||||
// getBaseApp creates a new PocketBase app with the default config
|
||||
func getBaseApp() *pocketbase.PocketBase {
|
||||
isDev := os.Getenv("ENV") == "dev"
|
||||
|
||||
baseApp := pocketbase.NewWithConfig(pocketbase.Config{
|
||||
DefaultDataDir: beszel.AppName + "_data",
|
||||
DefaultDev: isDev,
|
||||
})
|
||||
baseApp.RootCmd.Version = beszel.Version
|
||||
baseApp.RootCmd.Use = beszel.AppName
|
||||
baseApp.RootCmd.Short = ""
|
||||
// add update command
|
||||
baseApp.RootCmd.AddCommand(&cobra.Command{
|
||||
Use: "update",
|
||||
Short: "Update " + beszel.AppName + " to the latest version",
|
||||
Run: hub.Update,
|
||||
})
|
||||
|
||||
// enable auto creation of migration files when making collection changes in the Admin UI
|
||||
migratecmd.MustRegister(baseApp, baseApp.RootCmd, migratecmd.Config{
|
||||
Automigrate: isDev,
|
||||
Dir: "../../migrations",
|
||||
})
|
||||
|
||||
return baseApp
|
||||
hub.NewHub().Run()
|
||||
}
|
||||
|
||||
@@ -8,39 +8,39 @@ require (
|
||||
github.com/gliderlabs/ssh v0.3.8
|
||||
github.com/goccy/go-json v0.10.5
|
||||
github.com/pocketbase/dbx v1.11.0
|
||||
github.com/pocketbase/pocketbase v0.25.9
|
||||
github.com/pocketbase/pocketbase v0.25.0
|
||||
github.com/rhysd/go-github-selfupdate v1.2.3
|
||||
github.com/shirou/gopsutil/v4 v4.25.2
|
||||
github.com/shirou/gopsutil/v4 v4.25.1
|
||||
github.com/spf13/cast v1.7.1
|
||||
github.com/spf13/cobra v1.9.1
|
||||
github.com/spf13/cobra v1.8.1
|
||||
github.com/stretchr/testify v1.10.0
|
||||
golang.org/x/crypto v0.35.0
|
||||
golang.org/x/exp v0.0.0-20250228200357-dead58393ab7
|
||||
golang.org/x/crypto v0.32.0
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
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.36.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.8 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.61 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.64 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.78.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.16 // indirect
|
||||
github.com/aws/smithy-go v1.22.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.59 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 // indirect
|
||||
github.com/aws/smithy-go v1.22.2 // 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
|
||||
@@ -59,7 +59,7 @@ require (
|
||||
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
||||
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20250224150550-a661cff19cfb // indirect
|
||||
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/ncruces/go-strftime v0.1.9 // indirect
|
||||
@@ -75,18 +75,19 @@ require (
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
gocloud.dev v0.40.0 // indirect
|
||||
golang.org/x/image v0.24.0 // indirect
|
||||
golang.org/x/net v0.35.0 // indirect
|
||||
golang.org/x/oauth2 v0.27.0 // indirect
|
||||
golang.org/x/net v0.34.0 // indirect
|
||||
golang.org/x/oauth2 v0.26.0 // indirect
|
||||
golang.org/x/sync v0.11.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/term v0.29.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
|
||||
google.golang.org/api v0.223.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e // indirect
|
||||
google.golang.org/api v0.220.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489 // indirect
|
||||
google.golang.org/grpc v1.70.0 // indirect
|
||||
google.golang.org/protobuf v1.36.5 // indirect
|
||||
modernc.org/libc v1.61.13 // indirect
|
||||
google.golang.org/protobuf v1.36.4 // indirect
|
||||
modernc.org/libc v1.55.3 // indirect
|
||||
modernc.org/mathutil v1.7.1 // indirect
|
||||
modernc.org/memory v1.8.2 // indirect
|
||||
modernc.org/sqlite v1.35.0 // indirect
|
||||
modernc.org/sqlite v1.34.5 // indirect
|
||||
)
|
||||
|
||||
183
beszel/go.sum
183
beszel/go.sum
@@ -1,8 +1,8 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
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.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps=
|
||||
cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8=
|
||||
cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0=
|
||||
cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
|
||||
cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
|
||||
cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0=
|
||||
@@ -22,44 +22,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.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.8 h1:RpwAfYcV2lr/yRc4lWhUM9JRPQqKgKWmou3LV7UfWP4=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.8/go.mod h1:t+G7Fq1OcO8cXTPPXzxQSnj/5Xzdc9jAAD3Xrn9/Mgo=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.61 h1:Hd/uX6Wo2iUW1JWII+rmyCD7MMhOe7ALwQXN6sKDd1o=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.61/go.mod h1:L7vaLkwHY1qgW0gG1zG0z/X0sQ5tpIY5iI13+j3qI80=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.64 h1:RTko0AQ0i1vWXDM97DkuW6zskgOxFxm4RqC0kmBJFkE=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.64/go.mod h1:ty968MpOa5CoQ/ALWNB8Gmfoehof2nRHDR/DZDPfimE=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 h1:t/gZFyrijKuSU0elA5kRngP/oU3mc0I+Dvp8HwRE4c0=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.78.0 h1:EBm8lXevBWe+kK9VOU/IBeOI189WPRwPUc3LvJK9GOs=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.78.0/go.mod h1:4qzsZSzB/KiX2EzDjs9D7A8rI/WGJxZceVJIHqtJjIU=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.0 h1:2U9sF8nKy7UgyEeLiZTRg6ShBS22z8UnYpV6aRFL0is=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.25.0/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.0 h1:wjAdc85cXdQR5uLx5FwWvGIHm4OPJhTyzUHU8craXtE=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.0/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.16 h1:BHEK2Q/7CMRMCb3nySi/w8UbIcPhKvYP5s1xf8/izn0=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.16/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4=
|
||||
github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k=
|
||||
github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E=
|
||||
github.com/aws/aws-sdk-go-v2 v1.36.1/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.6 h1:fqgqEKK5HaZVWLQoLiC9Q+xDlSp+1LYidp6ybGE2OGg=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.29.6/go.mod h1:Ft+WLODzDQmCTHDvqAH1JfC2xxbZ0MxpZAcJqmE1LTQ=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.59 h1:9btwmrt//Q6JcSdgJOLI98sdr5p7tssS9yAsGe8aKP4=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.59/go.mod h1:NM8fM6ovI3zak23UISdWidyZuI1ghNe2xjzUZAyT+08=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 h1:KwsodFKVQTlI5EyhRSugALzsV6mG/SGrdjlMXSZSdso=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28/go.mod h1:EY3APf9MzygVhKuPXAc5H+MkGb8k/DOSQjWS0LgkKqI=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 h1:5Vsrfdlf9KQP3leGX1dD7VwZq/3HAerEFoXAII4t6zo=
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59/go.mod h1:7XTNs3NYApJjkx6A2Fk9qq23qBuBnIU58k3fKC2Fr1I=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 h1:BjUcr3X3K0wZPGFg2bxOWW3VPN8rkE3/61zhP+IHviA=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32/go.mod h1:80+OGC/bgzzFFTUmcuwD0lb4YutwQeKLFpmt6hoWapU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 h1:m1GeXHVMJsRsUAqG6HjZWx9dj7F5TR+cF1bjyfYyBd4=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32/go.mod h1:IitoQxGfaKdVLNg0hD8/DXmAqNy0H4K2H2Sf91ti8sI=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 h1:OIHj/nAhVzIXGzbAE+4XmZ8FPvro3THr6NlqErJc3wY=
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32/go.mod h1:LiBEsDo34OJXqdDlRGsilhlIiXR7DL+6Cx2f4p1EgzI=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 h1:cCBJaT7EeEojpJ4s7wTDbhZlHVJOgNHN7iw6qVurGaw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6/go.mod h1:WYH1ABybY7JK9TITPnk6ZlP7gQB8psI4c9qDmMsnLSA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 h1:SYVGSFQHlchIcy6e7x12bsrxClCXSP5et8cqVhL8cuw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13/go.mod h1:kizuDaLX37bG5WZaoxGPQR/LNFXpxp0vsUnqfkWXfNE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 h1:OBsrtam3rk8NfBEq7OLOMm5HtQ9Yyw32X4UQMya/wjw=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13/go.mod h1:3U4gFA5pmoCOja7aq4nSaIAGbaOHv2Yl2ug018cmC+Q=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 h1:DJYjOvNgC30JAcDCRmtQHoYK4trc7XetDXRTEAReGKA=
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4/go.mod h1:KuLNrwYJFaC2AVZ+CVVc12k9NyqwgWsoNNHjwqF6QNk=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 h1:/eE3DogBjYlvlbhd2ssWyeuovWunHLxfgw3s/OJa4GQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.24.15/go.mod h1:2PCJYpi7EKeA5SkStAmZlF6fi0uUABuhtF8ILHjGc3Y=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 h1:M/zwXiL2iXUrHputuXgmO94TVNmcenPHxgLXLutodKE=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14/go.mod h1:RVwIw3y/IqxC2YEXSIkAzRDdEU1iRabDPaYjpGCbCGQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 h1:TzeR06UCMUq+KA3bDkujxK1GVGy+G8qQN/QVYzGLkQE=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.33.14/go.mod h1:dspXf/oYWGWo6DEvj98wpaTeqt5+DMidZD0A9BYTizc=
|
||||
github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ=
|
||||
github.com/aws/smithy-go v1.22.2/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=
|
||||
@@ -67,7 +67,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/containrrr/shoutrrr v0.8.0 h1:mfG2ATzIS7NR2Ec6XL+xyoHzN97H8WPjir8aYzJUSec=
|
||||
github.com/containrrr/shoutrrr v0.8.0/go.mod h1:ioyQAyu1LJY6sILuNyKaQaw+9Ttik5QePU8atnAdO2o=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||
@@ -139,8 +139,8 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-github/v30 v30.1.0 h1:VLDx+UolQICEOKu2m4uAoMti1SxuEBAl7RSEG16L+Oo=
|
||||
github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQFEufcolZ95JfU8=
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
@@ -175,8 +175,8 @@ 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/lufia/plan9stats v0.0.0-20250224150550-a661cff19cfb h1:YU0XAr3+rMpM8fP80KEesn32Qa9qkbquokvuwzWyYuA=
|
||||
github.com/lufia/plan9stats v0.0.0-20250224150550-a661cff19cfb/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
|
||||
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.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
@@ -195,8 +195,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
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.25.9 h1:/PSJcy39vEGv4lsBG4HV0ZFLcFsTdK9oMkJbxVlVJSs=
|
||||
github.com/pocketbase/pocketbase v0.25.9/go.mod h1:gOnPr+g/GS+iqKh5XYXycdRWVGhiHY4c1H4TGjU9DDw=
|
||||
github.com/pocketbase/pocketbase v0.25.0 h1:/4YQq1hd0muvhzbERyUTVNh88N0BCj5diqK0jtLN6k8=
|
||||
github.com/pocketbase/pocketbase v0.25.0/go.mod h1:tOtOv7f3vJhAiyUluIwV9JPuKeknZRQ9F6uJE3W/ntI=
|
||||
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=
|
||||
@@ -207,12 +207,13 @@ 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.25.2 h1:NMscG3l2CqtWFS86kj3vP7soOczqrQYIEhO/pMvvQkk=
|
||||
github.com/shirou/gopsutil/v4 v4.25.2/go.mod h1:34gBYJzyqCDT11b6bMHP0XCvWeU3J61XRT7a2EmCRTA=
|
||||
github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=
|
||||
github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=
|
||||
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
|
||||
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
|
||||
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
|
||||
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
|
||||
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
@@ -239,10 +240,10 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 h1:rgMkmiGfix9vFJDcDi1PK8WEQP4FLQwLDfhp5ZLpFeE=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc=
|
||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
|
||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
|
||||
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
|
||||
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
|
||||
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
|
||||
@@ -258,19 +259,19 @@ 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.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs=
|
||||
golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ=
|
||||
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 h1:aWwlzYV971S4BXRS9AmqwDLAD85ouC6X+pocatKY58c=
|
||||
golang.org/x/exp v0.0.0-20250228200357-dead58393ab7/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ=
|
||||
golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8=
|
||||
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.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
|
||||
golang.org/x/mod v0.23.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=
|
||||
@@ -279,12 +280,12 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
||||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
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.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
|
||||
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
|
||||
golang.org/x/oauth2 v0.26.0 h1:afQXWNNaeC4nvZ0Ed9XvCCzXM6UHJG7iCg0W4fPqSBE=
|
||||
golang.org/x/oauth2 v0.26.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=
|
||||
@@ -311,20 +312,20 @@ 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.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
|
||||
golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
|
||||
golang.org/x/time v0.9.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=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY=
|
||||
golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY=
|
||||
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
|
||||
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
|
||||
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.223.0 h1:JUTaWEriXmEy5AhvdMgksGGPEFsYfUKaPEYXd4c3Wvc=
|
||||
google.golang.org/api v0.223.0/go.mod h1:C+RS7Z+dDwds2b+zoAk5hN/eSfsiCn0UDrYof/M4d2M=
|
||||
google.golang.org/api v0.220.0 h1:3oMI4gdBgB72WFVwE1nerDD8W3HUOS4kypK6rRLbGns=
|
||||
google.golang.org/api v0.220.0/go.mod h1:26ZAlY6aN/8WgpCzjPNy18QpYaz7Zgg1h0qe1GkZEmY=
|
||||
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=
|
||||
@@ -336,8 +337,8 @@ google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 h1:CT2Thj5AuPV9phr
|
||||
google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988/go.mod h1:7uvplUBj4RjHAxIZ//98LzOvrQ04JBkaixRmCMI29hc=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e h1:YA5lmSs3zc/5w+xsRcHqpETkaYyK63ivEPzNTcUUlSA=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489 h1:5bKytslY8ViY0Cj/ewmRtrWHW64bNF03cAatUUFCdFI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
|
||||
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=
|
||||
@@ -354,8 +355,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.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
|
||||
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
|
||||
google.golang.org/protobuf v1.36.4/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=
|
||||
@@ -368,27 +369,27 @@ 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.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0=
|
||||
modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
|
||||
modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo=
|
||||
modernc.org/ccgo/v4 v4.23.16/go.mod h1:nNma8goMTY7aQZQNTyN9AIoJfxav4nvTnvKThAeMDdo=
|
||||
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.19.2 h1:lwQZgvboKD0jBwdaeVCTouxhxAyN6iawF3STraAal8Y=
|
||||
modernc.org/ccgo/v4 v4.19.2/go.mod h1:ysS3mxiMV38XGRTTcgo0DQTeTmAO4oCmJl1nX9VFI3s=
|
||||
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.6.3 h1:aJVhcqAte49LF+mGveZ5KPlsp4tdGdAOT4sipJXADjw=
|
||||
modernc.org/gc/v2 v2.6.3/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
|
||||
modernc.org/libc v1.61.13 h1:3LRd6ZO1ezsFiX1y+bHd1ipyEHIJKvuprv0sLTBwLW8=
|
||||
modernc.org/libc v1.61.13/go.mod h1:8F/uJWL/3nNil0Lgt1Dpz+GgkApWh04N3el3hxJcA6E=
|
||||
modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
|
||||
modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
|
||||
modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U=
|
||||
modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w=
|
||||
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
|
||||
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
|
||||
modernc.org/memory v1.8.2 h1:cL9L4bcoAObu4NkxOlKWBWtNHIsnnACGF/TbqQ6sbcI=
|
||||
modernc.org/memory v1.8.2/go.mod h1:ZbjSvMO5NQ1A2i3bWeDiVMxIorXwdClKE/0SZ+BMotU=
|
||||
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
|
||||
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
|
||||
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
|
||||
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
|
||||
modernc.org/sqlite v1.35.0 h1:yQps4fegMnZFdphtzlfQTCNBWtS0CZv48pRpW3RFHRw=
|
||||
modernc.org/sqlite v1.35.0/go.mod h1:9cr2sicr7jIaWTBKQmAxQLfBv9LL0su4ZTEV+utt3ic=
|
||||
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
|
||||
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
|
||||
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.34.5 h1:Bb6SR13/fjp15jt70CL4f18JIN7p7dnMExd+UFnF15g=
|
||||
modernc.org/sqlite v1.34.5/go.mod h1:YLuNmX9NKs8wRNK2ko1LW1NGYcc9FkBO69JOt1AR9JE=
|
||||
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=
|
||||
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/v4/common"
|
||||
)
|
||||
@@ -28,13 +27,11 @@ type Agent struct {
|
||||
sensorsWhitelist map[string]struct{} // List of sensors to monitor
|
||||
systemInfo system.Info // Host system info
|
||||
gpuManager *GPUManager // Manages GPU data
|
||||
cache *SessionCache // Cache for system stats based on primary session ID
|
||||
}
|
||||
|
||||
func NewAgent() *Agent {
|
||||
agent := &Agent{
|
||||
fsStats: make(map[string]*system.FsStats),
|
||||
cache: NewSessionCache(69 * time.Second),
|
||||
}
|
||||
agent.memCalc, _ = GetEnv("MEM_CALC")
|
||||
|
||||
@@ -66,7 +63,7 @@ func NewAgent() *Agent {
|
||||
// Set sensors whitelist
|
||||
if sensors, exists := GetEnv("SENSORS"); exists {
|
||||
agent.sensorsWhitelist = make(map[string]struct{})
|
||||
for sensor := range strings.SplitSeq(sensors, ",") {
|
||||
for _, sensor := range strings.Split(sensors, ",") {
|
||||
if sensor != "" {
|
||||
agent.sensorsWhitelist[sensor] = struct{}{}
|
||||
}
|
||||
@@ -88,7 +85,7 @@ func NewAgent() *Agent {
|
||||
|
||||
// if debugging, print stats
|
||||
if agent.debug {
|
||||
slog.Debug("Stats", "data", agent.gatherStats(""))
|
||||
slog.Debug("Stats", "data", agent.gatherStats())
|
||||
}
|
||||
|
||||
return agent
|
||||
@@ -103,37 +100,29 @@ func GetEnv(key string) (value string, exists bool) {
|
||||
return os.LookupEnv(key)
|
||||
}
|
||||
|
||||
func (a *Agent) gatherStats(sessionID string) *system.CombinedData {
|
||||
func (a *Agent) gatherStats() system.CombinedData {
|
||||
a.Lock()
|
||||
defer a.Unlock()
|
||||
|
||||
cachedData, ok := a.cache.Get(sessionID)
|
||||
if ok {
|
||||
slog.Debug("Cached stats", "session", sessionID)
|
||||
return cachedData
|
||||
}
|
||||
|
||||
*cachedData = system.CombinedData{
|
||||
slog.Debug("Getting stats")
|
||||
systemData := system.CombinedData{
|
||||
Stats: a.getSystemStats(),
|
||||
Info: a.systemInfo,
|
||||
}
|
||||
slog.Debug("System stats", "data", cachedData)
|
||||
|
||||
slog.Debug("System stats", "data", systemData)
|
||||
// add docker stats
|
||||
if containerStats, err := a.dockerManager.getDockerStats(); err == nil {
|
||||
cachedData.Containers = containerStats
|
||||
slog.Debug("Docker stats", "data", cachedData.Containers)
|
||||
systemData.Containers = containerStats
|
||||
slog.Debug("Docker stats", "data", systemData.Containers)
|
||||
} else {
|
||||
slog.Debug("Docker stats", "err", err)
|
||||
slog.Debug("Error getting docker stats", "err", err)
|
||||
}
|
||||
|
||||
cachedData.Stats.ExtraFs = make(map[string]*system.FsStats)
|
||||
// add extra filesystems
|
||||
systemData.Stats.ExtraFs = make(map[string]*system.FsStats)
|
||||
for name, stats := range a.fsStats {
|
||||
if !stats.Root && stats.DiskTotal > 0 {
|
||||
cachedData.Stats.ExtraFs[name] = stats
|
||||
systemData.Stats.ExtraFs[name] = stats
|
||||
}
|
||||
}
|
||||
slog.Debug("Extra filesystems", "data", cachedData.Stats.ExtraFs)
|
||||
|
||||
a.cache.Set(sessionID, cachedData)
|
||||
return cachedData
|
||||
slog.Debug("Extra filesystems", "data", systemData.Stats.ExtraFs)
|
||||
return systemData
|
||||
}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
package agent
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/system"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Not thread safe since we only access from gatherStats which is already locked
|
||||
type SessionCache struct {
|
||||
data *system.CombinedData
|
||||
lastUpdate time.Time
|
||||
primarySession string
|
||||
leaseTime time.Duration
|
||||
}
|
||||
|
||||
func NewSessionCache(leaseTime time.Duration) *SessionCache {
|
||||
return &SessionCache{
|
||||
leaseTime: leaseTime,
|
||||
data: &system.CombinedData{},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *SessionCache) Get(sessionID string) (stats *system.CombinedData, isCached bool) {
|
||||
if sessionID != c.primarySession && time.Since(c.lastUpdate) < c.leaseTime {
|
||||
return c.data, true
|
||||
}
|
||||
return c.data, false
|
||||
}
|
||||
|
||||
func (c *SessionCache) Set(sessionID string, data *system.CombinedData) {
|
||||
if data != nil {
|
||||
*c.data = *data
|
||||
}
|
||||
c.primarySession = sessionID
|
||||
c.lastUpdate = time.Now()
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
package agent
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/system"
|
||||
"testing"
|
||||
"testing/synctest"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestSessionCache_GetSet(t *testing.T) {
|
||||
synctest.Run(func() {
|
||||
cache := NewSessionCache(69 * time.Second)
|
||||
|
||||
testData := &system.CombinedData{
|
||||
Info: system.Info{
|
||||
Hostname: "test-host",
|
||||
Cores: 4,
|
||||
},
|
||||
Stats: system.Stats{
|
||||
Cpu: 50.0,
|
||||
MemPct: 30.0,
|
||||
DiskPct: 40.0,
|
||||
},
|
||||
}
|
||||
|
||||
// Test initial state - should not be cached
|
||||
data, isCached := cache.Get("session1")
|
||||
assert.False(t, isCached, "Expected no cached data initially")
|
||||
assert.NotNil(t, data, "Expected data to be initialized")
|
||||
// Set data for session1
|
||||
cache.Set("session1", testData)
|
||||
|
||||
time.Sleep(15 * time.Second)
|
||||
|
||||
// Get data for a different session - should be cached
|
||||
data, isCached = cache.Get("session2")
|
||||
assert.True(t, isCached, "Expected data to be cached for non-primary session")
|
||||
require.NotNil(t, data, "Expected cached data to be returned")
|
||||
assert.Equal(t, "test-host", data.Info.Hostname, "Hostname should match test data")
|
||||
assert.Equal(t, 4, data.Info.Cores, "Cores should match test data")
|
||||
assert.Equal(t, 50.0, data.Stats.Cpu, "CPU should match test data")
|
||||
assert.Equal(t, 30.0, data.Stats.MemPct, "Memory percentage should match test data")
|
||||
assert.Equal(t, 40.0, data.Stats.DiskPct, "Disk percentage should match test data")
|
||||
|
||||
time.Sleep(10 * time.Second)
|
||||
|
||||
// Get data for the primary session - should not be cached
|
||||
data, isCached = cache.Get("session1")
|
||||
assert.False(t, isCached, "Expected data not to be cached for primary session")
|
||||
require.NotNil(t, data, "Expected data to be returned even if not cached")
|
||||
assert.Equal(t, "test-host", data.Info.Hostname, "Hostname should match test data")
|
||||
// if not cached, agent will update the data
|
||||
cache.Set("session1", testData)
|
||||
|
||||
time.Sleep(45 * time.Second)
|
||||
|
||||
// Get data for a different session - should still be cached
|
||||
_, isCached = cache.Get("session2")
|
||||
assert.True(t, isCached, "Expected data to be cached for non-primary session")
|
||||
|
||||
// Wait for the lease to expire
|
||||
time.Sleep(30 * time.Second)
|
||||
|
||||
// Get data for session2 - should not be cached
|
||||
_, isCached = cache.Get("session2")
|
||||
assert.False(t, isCached, "Expected data not to be cached after lease expiration")
|
||||
})
|
||||
}
|
||||
|
||||
func TestSessionCache_NilData(t *testing.T) {
|
||||
// Create a new SessionCache
|
||||
cache := NewSessionCache(30 * time.Second)
|
||||
|
||||
// Test setting nil data (should not panic)
|
||||
assert.NotPanics(t, func() {
|
||||
cache.Set("session1", nil)
|
||||
}, "Setting nil data should not panic")
|
||||
|
||||
// Get data - should not be nil even though we set nil
|
||||
data, _ := cache.Get("session2")
|
||||
assert.NotNil(t, data, "Expected data to not be nil after setting nil data")
|
||||
}
|
||||
@@ -22,24 +22,12 @@ type dockerManager struct {
|
||||
wg sync.WaitGroup // WaitGroup to wait for all goroutines to finish
|
||||
sem chan struct{} // Semaphore to limit concurrent container requests
|
||||
containerStatsMutex sync.RWMutex // Mutex to prevent concurrent access to containerStatsMap
|
||||
apiContainerList []*container.ApiInfo // List of containers from Docker API (no pointer)
|
||||
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)
|
||||
}
|
||||
|
||||
// userAgentRoundTripper is a custom http.RoundTripper that adds a User-Agent header to all requests
|
||||
type userAgentRoundTripper struct {
|
||||
rt http.RoundTripper
|
||||
userAgent string
|
||||
}
|
||||
|
||||
// RoundTrip implements the http.RoundTripper interface
|
||||
func (u *userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
req.Header.Set("User-Agent", u.userAgent)
|
||||
return u.rt.RoundTrip(req)
|
||||
}
|
||||
|
||||
// Add goroutine to the queue
|
||||
func (d *dockerManager) queue() {
|
||||
d.wg.Add(1)
|
||||
@@ -64,12 +52,11 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
dm.apiContainerList = dm.apiContainerList[:0]
|
||||
if err := json.NewDecoder(resp.Body).Decode(&dm.apiContainerList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
containersLength := len(dm.apiContainerList)
|
||||
containersLength := len(*dm.apiContainerList)
|
||||
|
||||
// store valid ids to clean up old container ids from map
|
||||
if dm.validIds == nil {
|
||||
@@ -78,10 +65,9 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
clear(dm.validIds)
|
||||
}
|
||||
|
||||
var failedContainers []*container.ApiInfo
|
||||
var failedContainters []container.ApiInfo
|
||||
|
||||
for i := range dm.apiContainerList {
|
||||
ctr := dm.apiContainerList[i]
|
||||
for _, ctr := range *dm.apiContainerList {
|
||||
ctr.IdShort = ctr.Id[:12]
|
||||
dm.validIds[ctr.IdShort] = struct{}{}
|
||||
// check if container is less than 1 minute old (possible restart)
|
||||
@@ -98,7 +84,7 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
if err != nil {
|
||||
dm.containerStatsMutex.Lock()
|
||||
delete(dm.containerStatsMap, ctr.IdShort)
|
||||
failedContainers = append(failedContainers, ctr)
|
||||
failedContainters = append(failedContainters, ctr)
|
||||
dm.containerStatsMutex.Unlock()
|
||||
}
|
||||
}()
|
||||
@@ -107,9 +93,9 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
dm.wg.Wait()
|
||||
|
||||
// retry failed containers separately so we can run them in parallel (docker 24 bug)
|
||||
if len(failedContainers) > 0 {
|
||||
slog.Debug("Retrying failed containers", "count", len(failedContainers))
|
||||
for _, ctr := range failedContainers {
|
||||
if len(failedContainters) > 0 {
|
||||
slog.Debug("Retrying failed containers", "count", len(failedContainters))
|
||||
for _, ctr := range failedContainters {
|
||||
dm.queue()
|
||||
go func() {
|
||||
defer dm.dequeue()
|
||||
@@ -136,7 +122,7 @@ func (dm *dockerManager) getDockerStats() ([]*container.Stats, error) {
|
||||
}
|
||||
|
||||
// Updates stats for individual container
|
||||
func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo) error {
|
||||
func (dm *dockerManager) updateContainerStats(ctr container.ApiInfo) error {
|
||||
name := ctr.Names[0][1:]
|
||||
|
||||
resp, err := dm.client.Get("http://localhost/containers/" + ctr.IdShort + "/stats?stream=0&one-shot=1")
|
||||
@@ -265,27 +251,20 @@ func newDockerManager(a *Agent) *dockerManager {
|
||||
slog.Info("DOCKER_TIMEOUT", "timeout", timeout)
|
||||
}
|
||||
|
||||
// Custom user-agent to avoid docker bug: https://github.com/docker/for-mac/issues/7575
|
||||
userAgentTransport := &userAgentRoundTripper{
|
||||
rt: transport,
|
||||
userAgent: "Docker-Client/",
|
||||
}
|
||||
|
||||
manager := &dockerManager{
|
||||
dockerClient := &dockerManager{
|
||||
client: &http.Client{
|
||||
Timeout: timeout,
|
||||
Transport: userAgentTransport,
|
||||
Transport: transport,
|
||||
},
|
||||
containerStatsMap: make(map[string]*container.Stats),
|
||||
sem: make(chan struct{}, 5),
|
||||
apiContainerList: []*container.ApiInfo{},
|
||||
}
|
||||
|
||||
// If using podman, return client
|
||||
if strings.Contains(dockerHost, "podman") {
|
||||
a.systemInfo.Podman = true
|
||||
manager.goodDockerVersion = true
|
||||
return manager
|
||||
dockerClient.goodDockerVersion = true
|
||||
return dockerClient
|
||||
}
|
||||
|
||||
// Check docker version
|
||||
@@ -293,24 +272,23 @@ func newDockerManager(a *Agent) *dockerManager {
|
||||
var versionInfo struct {
|
||||
Version string `json:"Version"`
|
||||
}
|
||||
resp, err := manager.client.Get("http://localhost/version")
|
||||
resp, err := dockerClient.client.Get("http://localhost/version")
|
||||
if err != nil {
|
||||
return manager
|
||||
return dockerClient
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if err := json.NewDecoder(resp.Body).Decode(&versionInfo); err != nil {
|
||||
return manager
|
||||
return dockerClient
|
||||
}
|
||||
|
||||
// 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 {
|
||||
manager.goodDockerVersion = true
|
||||
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))
|
||||
}
|
||||
|
||||
return manager
|
||||
return dockerClient
|
||||
}
|
||||
|
||||
// Test docker / podman sockets and return if one exists
|
||||
|
||||
@@ -3,7 +3,6 @@ package agent
|
||||
import (
|
||||
"beszel/internal/entities/system"
|
||||
"bufio"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
@@ -76,7 +75,7 @@ func (c *gpuCollector) collect() error {
|
||||
|
||||
scanner := bufio.NewScanner(stdout)
|
||||
if c.buf == nil {
|
||||
c.buf = make([]byte, 0, 10*1024)
|
||||
c.buf = make([]byte, 0, 4*1024)
|
||||
}
|
||||
scanner.Buffer(c.buf, bufio.MaxScanTokenSize)
|
||||
|
||||
@@ -111,26 +110,27 @@ func (gm *GPUManager) getJetsonParser() func(output []byte) bool {
|
||||
if !ok {
|
||||
return true
|
||||
}
|
||||
data := string(output)
|
||||
// Parse RAM usage
|
||||
ramMatches := ramPattern.FindSubmatch(output)
|
||||
ramMatches := ramPattern.FindStringSubmatch(data)
|
||||
if ramMatches != nil {
|
||||
gpuData.MemoryUsed, _ = strconv.ParseFloat(string(ramMatches[1]), 64)
|
||||
gpuData.MemoryTotal, _ = strconv.ParseFloat(string(ramMatches[2]), 64)
|
||||
gpuData.MemoryUsed, _ = strconv.ParseFloat(ramMatches[1], 64)
|
||||
gpuData.MemoryTotal, _ = strconv.ParseFloat(ramMatches[2], 64)
|
||||
}
|
||||
// Parse GR3D (GPU) usage
|
||||
gr3dMatches := gr3dPattern.FindSubmatch(output)
|
||||
gr3dMatches := gr3dPattern.FindStringSubmatch(data)
|
||||
if gr3dMatches != nil {
|
||||
gpuData.Usage, _ = strconv.ParseFloat(string(gr3dMatches[1]), 64)
|
||||
gpuData.Usage, _ = strconv.ParseFloat(gr3dMatches[1], 64)
|
||||
}
|
||||
// Parse temperature
|
||||
tempMatches := tempPattern.FindSubmatch(output)
|
||||
tempMatches := tempPattern.FindStringSubmatch(data)
|
||||
if tempMatches != nil {
|
||||
gpuData.Temperature, _ = strconv.ParseFloat(string(tempMatches[1]), 64)
|
||||
gpuData.Temperature, _ = strconv.ParseFloat(tempMatches[1], 64)
|
||||
}
|
||||
// Parse power usage
|
||||
powerMatches := powerPattern.FindSubmatch(output)
|
||||
powerMatches := powerPattern.FindStringSubmatch(data)
|
||||
if powerMatches != nil {
|
||||
power, _ := strconv.ParseFloat(string(powerMatches[2]), 64)
|
||||
power, _ := strconv.ParseFloat(powerMatches[2], 64)
|
||||
gpuData.Power = power / 1000
|
||||
}
|
||||
gpuData.Count++
|
||||
@@ -142,10 +142,8 @@ func (gm *GPUManager) getJetsonParser() func(output []byte) bool {
|
||||
func (gm *GPUManager) parseNvidiaData(output []byte) bool {
|
||||
gm.Lock()
|
||||
defer gm.Unlock()
|
||||
scanner := bufio.NewScanner(bytes.NewReader(output))
|
||||
var valid bool
|
||||
for scanner.Scan() {
|
||||
line := scanner.Text() // Or use scanner.Bytes() for []byte
|
||||
for line := range strings.Lines(string(output)) {
|
||||
fields := strings.Split(strings.TrimSpace(line), ", ")
|
||||
if len(fields) < 7 {
|
||||
continue
|
||||
|
||||
@@ -61,8 +61,8 @@ func (a *Agent) StartServer(opts ServerOptions) error {
|
||||
}
|
||||
|
||||
func (a *Agent) handleSession(s sshServer.Session) {
|
||||
slog.Debug("New session", "client", s.RemoteAddr())
|
||||
stats := a.gatherStats(s.Context().SessionID())
|
||||
// slog.Debug("connection", "remoteaddr", s.RemoteAddr(), "user", s.User())
|
||||
stats := a.gatherStats()
|
||||
if err := json.NewEncoder(s).Encode(stats); err != nil {
|
||||
slog.Error("Error encoding stats", "err", err, "stats", stats)
|
||||
s.Exit(1)
|
||||
@@ -74,18 +74,24 @@ func (a *Agent) handleSession(s sshServer.Session) {
|
||||
// It returns a slice of ssh.PublicKey and an error if any key fails to parse.
|
||||
func ParseKeys(input string) ([]ssh.PublicKey, error) {
|
||||
var parsedKeys []ssh.PublicKey
|
||||
|
||||
for line := range strings.Lines(input) {
|
||||
line = strings.TrimSpace(line)
|
||||
|
||||
// Skip empty lines or comments
|
||||
if len(line) == 0 || strings.HasPrefix(line, "#") {
|
||||
continue
|
||||
}
|
||||
|
||||
// Parse the key
|
||||
parsedKey, _, _, _, err := ssh.ParseAuthorizedKey([]byte(line))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse key: %s, error: %w", line, err)
|
||||
}
|
||||
|
||||
// Append the parsed key to the list
|
||||
parsedKeys = append(parsedKeys, parsedKey)
|
||||
}
|
||||
|
||||
return parsedKeys, nil
|
||||
}
|
||||
|
||||
@@ -26,7 +26,8 @@ type alertInfo struct {
|
||||
// startWorker is a long-running goroutine that processes alert tasks
|
||||
// every x seconds. It must be running to process status alerts.
|
||||
func (am *AlertManager) startWorker() {
|
||||
tick := time.Tick(15 * time.Second)
|
||||
// no special reason for 13 seconds
|
||||
tick := time.Tick(13 * time.Second)
|
||||
for {
|
||||
select {
|
||||
case <-am.stopChan:
|
||||
@@ -63,12 +64,21 @@ func (am *AlertManager) StopWorker() {
|
||||
}
|
||||
|
||||
// HandleStatusAlerts manages the logic when system status changes.
|
||||
func (am *AlertManager) HandleStatusAlerts(newStatus string, systemRecord *core.Record) error {
|
||||
if newStatus != "up" && newStatus != "down" {
|
||||
func (am *AlertManager) HandleStatusAlerts(newStatus string, oldSystemRecord *core.Record) error {
|
||||
switch newStatus {
|
||||
case "up":
|
||||
if oldSystemRecord.GetString("status") != "down" {
|
||||
return nil
|
||||
}
|
||||
case "down":
|
||||
if oldSystemRecord.GetString("status") != "up" {
|
||||
return nil
|
||||
}
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
alertRecords, err := am.getSystemStatusAlerts(systemRecord.Id)
|
||||
alertRecords, err := am.getSystemStatusAlerts(oldSystemRecord.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -76,7 +86,7 @@ func (am *AlertManager) HandleStatusAlerts(newStatus string, systemRecord *core.
|
||||
return nil
|
||||
}
|
||||
|
||||
systemName := systemRecord.GetString("name")
|
||||
systemName := oldSystemRecord.GetString("name")
|
||||
if newStatus == "down" {
|
||||
am.handleSystemDown(systemName, alertRecords)
|
||||
} else {
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"beszel/internal/entities/system"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"slices"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -14,7 +15,7 @@ import (
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *system.CombinedData) error {
|
||||
func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, systemInfo system.Info, temperatures map[string]float64, extraFs map[string]*system.FsStats) error {
|
||||
alertRecords, err := am.app.FindAllRecords("alerts",
|
||||
dbx.NewExp("system={:system}", dbx.Params{"system": systemRecord.Id}),
|
||||
)
|
||||
@@ -34,15 +35,15 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
|
||||
switch name {
|
||||
case "CPU":
|
||||
val = data.Info.Cpu
|
||||
val = systemInfo.Cpu
|
||||
case "Memory":
|
||||
val = data.Info.MemPct
|
||||
val = systemInfo.MemPct
|
||||
case "Bandwidth":
|
||||
val = data.Info.Bandwidth
|
||||
val = systemInfo.Bandwidth
|
||||
unit = " MB/s"
|
||||
case "Disk":
|
||||
maxUsedPct := data.Info.DiskPct
|
||||
for _, fs := range data.Stats.ExtraFs {
|
||||
maxUsedPct := systemInfo.DiskPct
|
||||
for _, fs := range extraFs {
|
||||
usedPct := fs.DiskUsed / fs.DiskTotal * 100
|
||||
if usedPct > maxUsedPct {
|
||||
maxUsedPct = usedPct
|
||||
@@ -50,10 +51,14 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
}
|
||||
val = maxUsedPct
|
||||
case "Temperature":
|
||||
if data.Info.DashboardTemp < 1 {
|
||||
if temperatures == nil {
|
||||
continue
|
||||
}
|
||||
val = data.Info.DashboardTemp
|
||||
for _, temp := range temperatures {
|
||||
if temp > val {
|
||||
val = temp
|
||||
}
|
||||
}
|
||||
unit = "°C"
|
||||
}
|
||||
|
||||
@@ -69,8 +74,13 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
}
|
||||
|
||||
min := max(1, cast.ToUint8(alertRecord.Get("min")))
|
||||
// add time to alert time to make sure it's slighty after record creation
|
||||
time := now.Add(-time.Duration(min) * time.Minute)
|
||||
if time.Before(oldestTime) {
|
||||
oldestTime = time
|
||||
}
|
||||
|
||||
alert := SystemAlertData{
|
||||
validAlerts = append(validAlerts, SystemAlertData{
|
||||
systemRecord: systemRecord,
|
||||
alertRecord: alertRecord,
|
||||
name: name,
|
||||
@@ -78,22 +88,9 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
val: val,
|
||||
threshold: threshold,
|
||||
triggered: triggered,
|
||||
time: time,
|
||||
min: min,
|
||||
}
|
||||
|
||||
// send alert immediately if min is 1 - no need to sum up values.
|
||||
if min == 1 {
|
||||
alert.triggered = val > threshold
|
||||
go am.sendSystemAlert(alert)
|
||||
continue
|
||||
}
|
||||
|
||||
alert.time = now.Add(-time.Duration(min) * time.Minute)
|
||||
if alert.time.Before(oldestTime) {
|
||||
oldestTime = alert.time
|
||||
}
|
||||
|
||||
validAlerts = append(validAlerts, alert)
|
||||
})
|
||||
}
|
||||
|
||||
systemStats := []struct {
|
||||
@@ -114,7 +111,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
)).
|
||||
OrderBy("created").
|
||||
All(&systemStats)
|
||||
if err != nil || len(systemStats) == 0 {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -122,14 +119,13 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
oldestRecordTime := systemStats[0].Created.Time()
|
||||
// log.Println("oldestRecordTime", oldestRecordTime.String())
|
||||
|
||||
// Filter validAlerts to keep only those with time newer than oldestRecord
|
||||
filteredAlerts := make([]SystemAlertData, 0, len(validAlerts))
|
||||
for _, alert := range validAlerts {
|
||||
if alert.time.After(oldestRecordTime) {
|
||||
filteredAlerts = append(filteredAlerts, alert)
|
||||
// delete from validAlerts if time is older than oldestRecord
|
||||
for i := range validAlerts {
|
||||
if validAlerts[i].time.Before(oldestRecordTime) {
|
||||
// log.Println("deleting alert - time is older than oldestRecord", validAlerts[i].name, oldestRecordTime, validAlerts[i].time)
|
||||
validAlerts = slices.Delete(validAlerts, i, i+1)
|
||||
}
|
||||
}
|
||||
validAlerts = filteredAlerts
|
||||
|
||||
if len(validAlerts) == 0 {
|
||||
// log.Println("no valid alerts found")
|
||||
@@ -167,7 +163,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
alert.val += stats.NetSent + stats.NetRecv
|
||||
case "Disk":
|
||||
if alert.mapSums == nil {
|
||||
alert.mapSums = make(map[string]float32, len(data.Stats.ExtraFs)+1)
|
||||
alert.mapSums = make(map[string]float32, len(extraFs)+1)
|
||||
}
|
||||
// add root disk
|
||||
if _, ok := alert.mapSums["root"]; !ok {
|
||||
@@ -175,7 +171,7 @@ func (am *AlertManager) HandleSystemAlerts(systemRecord *core.Record, data *syst
|
||||
}
|
||||
alert.mapSums["root"] += float32(stats.Disk)
|
||||
// add extra disks
|
||||
for key, fs := range data.Stats.ExtraFs {
|
||||
for key, fs := range extraFs {
|
||||
if _, ok := alert.mapSums[key]; !ok {
|
||||
alert.mapSums[key] = 0.0
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package system
|
||||
|
||||
// TODO: this is confusing, make common package with common/types common/helpers etc
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/container"
|
||||
"time"
|
||||
|
||||
@@ -22,7 +22,7 @@ type Config struct {
|
||||
type SystemConfig struct {
|
||||
Name string `yaml:"name"`
|
||||
Host string `yaml:"host"`
|
||||
Port uint16 `yaml:"port,omitempty"`
|
||||
Port uint16 `yaml:"port"`
|
||||
Users []string `yaml:"users"`
|
||||
}
|
||||
|
||||
|
||||
@@ -4,47 +4,67 @@ package hub
|
||||
import (
|
||||
"beszel"
|
||||
"beszel/internal/alerts"
|
||||
"beszel/internal/hub/systems"
|
||||
"beszel/internal/entities/system"
|
||||
"beszel/internal/records"
|
||||
"beszel/internal/users"
|
||||
"beszel/site"
|
||||
"context"
|
||||
"crypto/ed25519"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/apis"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/plugins/migratecmd"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
type Hub struct {
|
||||
core.App
|
||||
*alerts.AlertManager
|
||||
um *users.UserManager
|
||||
rm *records.RecordManager
|
||||
sm *systems.SystemManager
|
||||
pubKey string
|
||||
appURL string
|
||||
*pocketbase.PocketBase
|
||||
sshClientConfig *ssh.ClientConfig
|
||||
pubKey string
|
||||
am *alerts.AlertManager
|
||||
um *users.UserManager
|
||||
rm *records.RecordManager
|
||||
systemStats *core.Collection
|
||||
containerStats *core.Collection
|
||||
appURL string
|
||||
}
|
||||
|
||||
// NewHub creates a new Hub instance with default configuration
|
||||
func NewHub(app core.App) *Hub {
|
||||
hub := &Hub{}
|
||||
hub.App = app
|
||||
func NewHub() *Hub {
|
||||
var hub Hub
|
||||
hub.PocketBase = pocketbase.NewWithConfig(pocketbase.Config{
|
||||
DefaultDataDir: beszel.AppName + "_data",
|
||||
})
|
||||
|
||||
hub.AlertManager = alerts.NewAlertManager(hub)
|
||||
hub.RootCmd.Version = beszel.Version
|
||||
hub.RootCmd.Use = beszel.AppName
|
||||
hub.RootCmd.Short = ""
|
||||
// add update command
|
||||
hub.RootCmd.AddCommand(&cobra.Command{
|
||||
Use: "update",
|
||||
Short: "Update " + beszel.AppName + " to the latest version",
|
||||
Run: Update,
|
||||
})
|
||||
|
||||
hub.am = alerts.NewAlertManager(hub)
|
||||
hub.um = users.NewUserManager(hub)
|
||||
hub.rm = records.NewRecordManager(hub)
|
||||
hub.sm = systems.NewSystemManager(hub)
|
||||
hub.appURL, _ = GetEnv("APP_URL")
|
||||
return hub
|
||||
return &hub
|
||||
}
|
||||
|
||||
// GetEnv retrieves an environment variable with a "BESZEL_HUB_" prefix, or falls back to the unprefixed key.
|
||||
@@ -56,184 +76,444 @@ func GetEnv(key string) (value string, exists bool) {
|
||||
return os.LookupEnv(key)
|
||||
}
|
||||
|
||||
func (h *Hub) BootstrapHub() (*Hub, error) {
|
||||
if !h.App.IsBootstrapped() {
|
||||
err := h.App.Bootstrap()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
func (h *Hub) Run() {
|
||||
isDev := os.Getenv("ENV") == "dev"
|
||||
|
||||
// enable auto creation of migration files when making collection changes in the Admin UI
|
||||
migratecmd.MustRegister(h, h.RootCmd, migratecmd.Config{
|
||||
// (the isDev check is to enable it only during development)
|
||||
Automigrate: isDev,
|
||||
Dir: "../../migrations",
|
||||
})
|
||||
|
||||
// initial setup
|
||||
if err := h.initialize(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
h.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.Settings()
|
||||
// batch requests (for global alerts)
|
||||
settings.Batch.Enabled = true
|
||||
// set URL if BASE_URL env is set
|
||||
if h.appURL != "" {
|
||||
settings.Meta.AppURL = h.appURL
|
||||
}
|
||||
// set auth settings
|
||||
usersCollection, err := h.FindCollectionByNameOrId("users")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// disable email auth if DISABLE_PASSWORD_AUTH env var is set
|
||||
disablePasswordAuth, _ := GetEnv("DISABLE_PASSWORD_AUTH")
|
||||
usersCollection.PasswordAuth.Enabled = disablePasswordAuth != "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
|
||||
}
|
||||
// allow oauth user creation if USER_CREATION is set
|
||||
if userCreation, _ := GetEnv("USER_CREATION"); userCreation == "true" {
|
||||
cr := "@request.context = 'oauth2'"
|
||||
usersCollection.CreateRule = &cr
|
||||
} else {
|
||||
usersCollection.CreateRule = nil
|
||||
}
|
||||
if err := h.Save(usersCollection); err != nil {
|
||||
return err
|
||||
}
|
||||
// sync systems with config
|
||||
h.syncSystemsWithConfig()
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// serve web ui
|
||||
h.OnServe().BindFunc(h.startServer)
|
||||
// set up scheduled jobs
|
||||
h.OnServe().BindFunc(h.registerCronJobs)
|
||||
h.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
switch isDev {
|
||||
case true:
|
||||
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
|
||||
Scheme: "http",
|
||||
Host: "localhost:5173",
|
||||
})
|
||||
se.Router.GET("/{path...}", func(e *core.RequestEvent) error {
|
||||
proxy.ServeHTTP(e.Response, e.Request)
|
||||
return nil
|
||||
})
|
||||
default:
|
||||
// parse app url
|
||||
parsedURL, err := url.Parse(h.appURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// fix base paths in html if using subpath
|
||||
basePath := strings.TrimSuffix(parsedURL.Path, "/") + "/"
|
||||
indexFile, _ := fs.ReadFile(site.DistDirFS, "index.html")
|
||||
indexContent := strings.ReplaceAll(string(indexFile), "./", basePath)
|
||||
// set up static asset serving
|
||||
staticPaths := [2]string{"/static/", "/assets/"}
|
||||
serveStatic := apis.Static(site.DistDirFS, false)
|
||||
// get CSP configuration
|
||||
csp, cspExists := GetEnv("CSP")
|
||||
// add route
|
||||
se.Router.GET("/{path...}", func(e *core.RequestEvent) error {
|
||||
// serve static assets if path is in staticPaths
|
||||
for i := range staticPaths {
|
||||
if strings.Contains(e.Request.URL.Path, staticPaths[i]) {
|
||||
e.Response.Header().Set("Cache-Control", "public, max-age=2592000")
|
||||
return serveStatic(e)
|
||||
}
|
||||
}
|
||||
if cspExists {
|
||||
e.Response.Header().Del("X-Frame-Options")
|
||||
e.Response.Header().Set("Content-Security-Policy", csp)
|
||||
}
|
||||
return e.HTML(http.StatusOK, indexContent)
|
||||
})
|
||||
}
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// set up scheduled jobs / ticker for system updates
|
||||
h.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
// 15 second ticker for system updates
|
||||
go h.startSystemUpdateTicker()
|
||||
// set up cron jobs
|
||||
// delete old records once every hour
|
||||
h.Cron().MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords)
|
||||
// create longer records every 10 minutes
|
||||
h.Cron().MustAdd("create longer records", "*/10 * * * *", func() {
|
||||
if systemStats, containerStats, err := h.getCollections(); err == nil {
|
||||
h.rm.CreateLongerRecords([]*core.Collection{systemStats, containerStats})
|
||||
}
|
||||
})
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// custom api routes
|
||||
h.OnServe().BindFunc(h.registerApiRoutes)
|
||||
// TODO: move to users package
|
||||
h.OnServe().BindFunc(func(se *core.ServeEvent) error {
|
||||
// returns public key
|
||||
se.Router.GET("/api/beszel/getkey", func(e *core.RequestEvent) error {
|
||||
info, _ := e.RequestInfo()
|
||||
if info.Auth == nil {
|
||||
return apis.NewForbiddenError("Forbidden", nil)
|
||||
}
|
||||
return e.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version})
|
||||
})
|
||||
// check if first time setup on login page
|
||||
se.Router.GET("/api/beszel/first-run", func(e *core.RequestEvent) error {
|
||||
total, err := h.CountRecords("users")
|
||||
return e.JSON(http.StatusOK, map[string]bool{"firstRun": err == nil && total == 0})
|
||||
})
|
||||
// send test notification
|
||||
se.Router.GET("/api/beszel/send-test-notification", h.am.SendTestNotification)
|
||||
// API endpoint to get config.yml content
|
||||
se.Router.GET("/api/beszel/config-yaml", h.getYamlConfig)
|
||||
// create first user endpoint only needed if no users exist
|
||||
if totalUsers, _ := h.CountRecords("users"); totalUsers == 0 {
|
||||
se.Router.POST("/api/beszel/create-user", h.um.CreateFirstUser)
|
||||
}
|
||||
return se.Next()
|
||||
})
|
||||
|
||||
// system creation defaults
|
||||
h.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.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.OnRecordCreate("users").BindFunc(h.um.InitializeUserRole)
|
||||
h.OnRecordCreate("user_settings").BindFunc(h.um.InitializeUserSettings)
|
||||
|
||||
// sync systems with config
|
||||
h.syncSystemsWithConfig()
|
||||
// start system updates
|
||||
h.sm.Initialize()
|
||||
// empty info for systems that are paused
|
||||
h.OnRecordUpdate("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
if e.Record.GetString("status") == "paused" {
|
||||
e.Record.Set("info", system.Info{})
|
||||
}
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
return h, nil
|
||||
// do things after a systems record is updated
|
||||
h.OnRecordAfterUpdateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
newRecord := e.Record.Fresh()
|
||||
oldRecord := newRecord.Original()
|
||||
newStatus := newRecord.GetString("status")
|
||||
|
||||
// if system is not up and connection exists, remove it
|
||||
if newStatus != "up" {
|
||||
h.deleteSystemConnection(newRecord)
|
||||
}
|
||||
|
||||
// if system is set to pending (unpause), try to connect immediately
|
||||
if newStatus == "pending" {
|
||||
go h.updateSystem(newRecord)
|
||||
} else {
|
||||
h.am.HandleStatusAlerts(newStatus, oldRecord)
|
||||
}
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// if system is deleted, close connection
|
||||
h.OnRecordAfterDeleteSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
h.deleteSystemConnection(e.Record)
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
if err := h.Start(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// initialize sets up initial configuration (collections, settings, etc.)
|
||||
func (h *Hub) initialize() error {
|
||||
// set general settings
|
||||
settings := h.Settings()
|
||||
// batch requests (for global alerts)
|
||||
settings.Batch.Enabled = true
|
||||
// set URL if BASE_URL env is set
|
||||
if h.appURL != "" {
|
||||
settings.Meta.AppURL = h.appURL
|
||||
func (h *Hub) startSystemUpdateTicker() {
|
||||
c := time.Tick(15 * time.Second)
|
||||
for range c {
|
||||
h.updateSystems()
|
||||
}
|
||||
// set auth settings
|
||||
usersCollection, err := h.FindCollectionByNameOrId("users")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func (h *Hub) updateSystems() {
|
||||
records, err := h.FindRecordsByFilter(
|
||||
"2hz5ncl8tizk5nx", // systems collection
|
||||
"status != 'paused'", // filter
|
||||
"updated", // sort
|
||||
-1, // limit
|
||||
0, // offset
|
||||
)
|
||||
// log.Println("records", len(records))
|
||||
if err != nil || len(records) == 0 {
|
||||
// h.Logger().Error("Failed to query systems")
|
||||
return
|
||||
}
|
||||
// disable email auth if DISABLE_PASSWORD_AUTH env var is set
|
||||
disablePasswordAuth, _ := GetEnv("DISABLE_PASSWORD_AUTH")
|
||||
usersCollection.PasswordAuth.Enabled = disablePasswordAuth != "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
|
||||
fiftySecondsAgo := time.Now().UTC().Add(-50 * time.Second)
|
||||
batchSize := len(records)/4 + 1
|
||||
done := 0
|
||||
for _, record := range records {
|
||||
// break if batch size reached or if the system was updated less than 50 seconds ago
|
||||
if done >= batchSize || record.GetDateTime("updated").Time().After(fiftySecondsAgo) {
|
||||
break
|
||||
}
|
||||
// don't increment for down systems to avoid them jamming the queue
|
||||
// because they're always first when sorted by least recently updated
|
||||
if record.GetString("status") != "down" {
|
||||
done++
|
||||
}
|
||||
go h.updateSystem(record)
|
||||
}
|
||||
// allow oauth user creation if USER_CREATION is set
|
||||
if userCreation, _ := GetEnv("USER_CREATION"); userCreation == "true" {
|
||||
cr := "@request.context = 'oauth2'"
|
||||
usersCollection.CreateRule = &cr
|
||||
}
|
||||
|
||||
func (h *Hub) updateSystem(record *core.Record) {
|
||||
var client *ssh.Client
|
||||
var err error
|
||||
|
||||
// check if system connection exists
|
||||
if existingClient, ok := h.Store().GetOk(record.Id); ok {
|
||||
client = existingClient.(*ssh.Client)
|
||||
} else {
|
||||
usersCollection.CreateRule = nil
|
||||
// create system connection
|
||||
client, err = h.createSystemConnection(record)
|
||||
if err != nil {
|
||||
if record.GetString("status") != "down" {
|
||||
h.Logger().Error("Failed to connect:", "err", err.Error(), "system", record.GetString("host"), "port", record.GetString("port"))
|
||||
h.updateSystemStatus(record, "down")
|
||||
}
|
||||
return
|
||||
}
|
||||
h.Store().Set(record.Id, client)
|
||||
}
|
||||
if err := h.Save(usersCollection); err != nil {
|
||||
// get system stats from agent
|
||||
var systemData system.CombinedData
|
||||
if err := h.requestJsonFromAgent(client, &systemData); err != nil {
|
||||
if err.Error() == "bad client" {
|
||||
// if previous connection was closed, try again
|
||||
h.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
|
||||
}
|
||||
h.Logger().Error("Failed to get system stats: ", "err", err.Error())
|
||||
h.updateSystemStatus(record, "down")
|
||||
return
|
||||
}
|
||||
// update system record
|
||||
record.Set("status", "up")
|
||||
record.Set("info", systemData.Info)
|
||||
if err := h.SaveNoValidate(record); err != nil {
|
||||
h.Logger().Error("Failed to update record: ", "err", err.Error())
|
||||
}
|
||||
// add system_stats and container_stats records
|
||||
if systemStats, containerStats, err := h.getCollections(); err != nil {
|
||||
h.Logger().Error("Failed to get collections: ", "err", err.Error())
|
||||
} else {
|
||||
// add new system_stats record
|
||||
systemStatsRecord := core.NewRecord(systemStats)
|
||||
systemStatsRecord.Set("system", record.Id)
|
||||
systemStatsRecord.Set("stats", systemData.Stats)
|
||||
systemStatsRecord.Set("type", "1m")
|
||||
if err := h.SaveNoValidate(systemStatsRecord); err != nil {
|
||||
h.Logger().Error("Failed to save record: ", "err", err.Error())
|
||||
}
|
||||
// add new container_stats record
|
||||
if len(systemData.Containers) > 0 {
|
||||
containerStatsRecord := core.NewRecord(containerStats)
|
||||
containerStatsRecord.Set("system", record.Id)
|
||||
containerStatsRecord.Set("stats", systemData.Containers)
|
||||
containerStatsRecord.Set("type", "1m")
|
||||
if err := h.SaveNoValidate(containerStatsRecord); err != nil {
|
||||
h.Logger().Error("Failed to save record: ", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// system info alerts
|
||||
if err := h.am.HandleSystemAlerts(record, systemData.Info, systemData.Stats.Temperatures, systemData.Stats.ExtraFs); err != nil {
|
||||
h.Logger().Error("System alerts error", "err", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// return system_stats and container_stats collections
|
||||
func (h *Hub) getCollections() (*core.Collection, *core.Collection, error) {
|
||||
if h.systemStats == nil {
|
||||
systemStats, err := h.FindCollectionByNameOrId("system_stats")
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
h.systemStats = systemStats
|
||||
}
|
||||
if h.containerStats == nil {
|
||||
containerStats, err := h.FindCollectionByNameOrId("container_stats")
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
h.containerStats = containerStats
|
||||
}
|
||||
return h.systemStats, h.containerStats, nil
|
||||
}
|
||||
|
||||
// set system to specified status and save record
|
||||
func (h *Hub) updateSystemStatus(record *core.Record, status string) {
|
||||
if record.Fresh().GetString("status") != status {
|
||||
record.Set("status", status)
|
||||
if err := h.SaveNoValidate(record); err != nil {
|
||||
h.Logger().Error("Failed to update record: ", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// delete system connection from map and close connection
|
||||
func (h *Hub) deleteSystemConnection(record *core.Record) {
|
||||
if client, ok := h.Store().GetOk(record.Id); ok {
|
||||
if sshClient := client.(*ssh.Client); sshClient != nil {
|
||||
sshClient.Close()
|
||||
}
|
||||
h.Store().Remove(record.Id)
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Hub) createSystemConnection(record *core.Record) (*ssh.Client, error) {
|
||||
network := "tcp"
|
||||
host := record.GetString("host")
|
||||
if strings.HasPrefix(host, "/") {
|
||||
network = "unix"
|
||||
} else {
|
||||
host = net.JoinHostPort(host, record.GetString("port"))
|
||||
}
|
||||
client, err := ssh.Dial(network, host, h.sshClientConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return client, nil
|
||||
}
|
||||
|
||||
func (h *Hub) createSSHClientConfig() error {
|
||||
key, err := h.getSSHKey()
|
||||
if err != nil {
|
||||
h.Logger().Error("Failed to get SSH key: ", "err", err.Error())
|
||||
return err
|
||||
}
|
||||
// allow all users to access systems if SHARE_ALL_SYSTEMS is set
|
||||
systemsCollection, err := h.FindCachedCollectionByNameOrId("systems")
|
||||
|
||||
// Create the Signer for this private key.
|
||||
signer, err := ssh.ParsePrivateKey(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
shareAllSystems, _ := GetEnv("SHARE_ALL_SYSTEMS")
|
||||
systemsReadRule := "@request.auth.id != \"\""
|
||||
if shareAllSystems != "true" {
|
||||
// default is to only show systems that the user id is assigned to
|
||||
systemsReadRule += " && users.id ?= @request.auth.id"
|
||||
}
|
||||
updateDeleteRule := systemsReadRule + " && @request.auth.role != \"readonly\""
|
||||
systemsCollection.ListRule = &systemsReadRule
|
||||
systemsCollection.ViewRule = &systemsReadRule
|
||||
systemsCollection.UpdateRule = &updateDeleteRule
|
||||
systemsCollection.DeleteRule = &updateDeleteRule
|
||||
if err := h.Save(systemsCollection); err != nil {
|
||||
return err
|
||||
|
||||
h.sshClientConfig = &ssh.ClientConfig{
|
||||
User: "u",
|
||||
Auth: []ssh.AuthMethod{
|
||||
ssh.PublicKeys(signer),
|
||||
},
|
||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
||||
Timeout: 4 * time.Second,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Start starts the hub application / server
|
||||
func (h *Hub) Start() error {
|
||||
// Use type assertion to access the Start method
|
||||
if pb, ok := h.App.(*pocketbase.PocketBase); ok {
|
||||
return pb.Start()
|
||||
// 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, 4*time.Second)
|
||||
if err != nil {
|
||||
return fmt.Errorf("bad client")
|
||||
}
|
||||
return fmt.Errorf("unable to start: App is not *pocketbase.PocketBase")
|
||||
defer session.Close()
|
||||
|
||||
stdout, err := session.StdoutPipe()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := session.Shell(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(stdout).Decode(systemData); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// wait for the session to complete
|
||||
if err := session.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *Hub) startServer(se *core.ServeEvent) error {
|
||||
switch h.IsDev() {
|
||||
case true:
|
||||
proxy := httputil.NewSingleHostReverseProxy(&url.URL{
|
||||
Scheme: "http",
|
||||
Host: "localhost:5173",
|
||||
})
|
||||
se.Router.GET("/{path...}", func(e *core.RequestEvent) error {
|
||||
proxy.ServeHTTP(e.Response, e.Request)
|
||||
return nil
|
||||
})
|
||||
default:
|
||||
// parse app url
|
||||
parsedURL, err := url.Parse(h.appURL)
|
||||
if err != nil {
|
||||
return err
|
||||
// Adds timeout to SSH session creation to avoid hanging in case of network issues
|
||||
func newSessionWithTimeout(client *ssh.Client, timeout time.Duration) (*ssh.Session, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||||
defer cancel()
|
||||
|
||||
// use goroutine to create the session
|
||||
sessionChan := make(chan *ssh.Session, 1)
|
||||
errChan := make(chan error, 1)
|
||||
go func() {
|
||||
if session, err := client.NewSession(); err != nil {
|
||||
errChan <- err
|
||||
} else {
|
||||
sessionChan <- session
|
||||
}
|
||||
// fix base paths in html if using subpath
|
||||
basePath := strings.TrimSuffix(parsedURL.Path, "/") + "/"
|
||||
indexFile, _ := fs.ReadFile(site.DistDirFS, "index.html")
|
||||
indexContent := strings.ReplaceAll(string(indexFile), "./", basePath)
|
||||
// set up static asset serving
|
||||
staticPaths := [2]string{"/static/", "/assets/"}
|
||||
serveStatic := apis.Static(site.DistDirFS, false)
|
||||
// get CSP configuration
|
||||
csp, cspExists := GetEnv("CSP")
|
||||
// add route
|
||||
se.Router.GET("/{path...}", func(e *core.RequestEvent) error {
|
||||
// serve static assets if path is in staticPaths
|
||||
for i := range staticPaths {
|
||||
if strings.Contains(e.Request.URL.Path, staticPaths[i]) {
|
||||
e.Response.Header().Set("Cache-Control", "public, max-age=2592000")
|
||||
return serveStatic(e)
|
||||
}
|
||||
}
|
||||
if cspExists {
|
||||
e.Response.Header().Del("X-Frame-Options")
|
||||
e.Response.Header().Set("Content-Security-Policy", csp)
|
||||
}
|
||||
return e.HTML(http.StatusOK, indexContent)
|
||||
})
|
||||
}()
|
||||
|
||||
select {
|
||||
case session := <-sessionChan:
|
||||
return session, nil
|
||||
case err := <-errChan:
|
||||
return nil, err
|
||||
case <-ctx.Done():
|
||||
return nil, fmt.Errorf("session creation timed out")
|
||||
}
|
||||
return se.Next()
|
||||
}
|
||||
|
||||
// registerCronJobs sets up all scheduled tasks
|
||||
func (h *Hub) registerCronJobs(se *core.ServeEvent) error {
|
||||
// delete old records once every hour
|
||||
h.Cron().MustAdd("delete old records", "8 * * * *", h.rm.DeleteOldRecords)
|
||||
// create longer records every 10 minutes
|
||||
h.Cron().MustAdd("create longer records", "*/10 * * * *", h.rm.CreateLongerRecords)
|
||||
return se.Next()
|
||||
}
|
||||
|
||||
// custom api routes
|
||||
func (h *Hub) registerApiRoutes(se *core.ServeEvent) error {
|
||||
// returns public key and version
|
||||
se.Router.GET("/api/beszel/getkey", func(e *core.RequestEvent) error {
|
||||
info, _ := e.RequestInfo()
|
||||
if info.Auth == nil {
|
||||
return apis.NewForbiddenError("Forbidden", nil)
|
||||
}
|
||||
return e.JSON(http.StatusOK, map[string]string{"key": h.pubKey, "v": beszel.Version})
|
||||
})
|
||||
// check if first time setup on login page
|
||||
se.Router.GET("/api/beszel/first-run", func(e *core.RequestEvent) error {
|
||||
total, err := h.CountRecords("users")
|
||||
return e.JSON(http.StatusOK, map[string]bool{"firstRun": err == nil && total == 0})
|
||||
})
|
||||
// send test notification
|
||||
se.Router.GET("/api/beszel/send-test-notification", h.SendTestNotification)
|
||||
// API endpoint to get config.yml content
|
||||
se.Router.GET("/api/beszel/config-yaml", h.getYamlConfig)
|
||||
// create first user endpoint only needed if no users exist
|
||||
if totalUsers, _ := h.CountRecords("users"); totalUsers == 0 {
|
||||
se.Router.POST("/api/beszel/create-user", h.um.CreateFirstUser)
|
||||
}
|
||||
return se.Next()
|
||||
}
|
||||
|
||||
// generates key pair if it doesn't exist and returns private key bytes
|
||||
func (h *Hub) GetSSHKey() ([]byte, error) {
|
||||
func (h *Hub) getSSHKey() ([]byte, error) {
|
||||
dataDir := h.DataDir()
|
||||
// check if the key pair already exists
|
||||
existingKey, err := os.ReadFile(dataDir + "/id_ed25519")
|
||||
|
||||
@@ -1,435 +0,0 @@
|
||||
package systems
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/system"
|
||||
"context"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/tools/store"
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
const (
|
||||
up string = "up"
|
||||
down string = "down"
|
||||
paused string = "paused"
|
||||
pending string = "pending"
|
||||
|
||||
interval int = 60_000
|
||||
|
||||
sessionTimeout = 4 * time.Second
|
||||
)
|
||||
|
||||
type SystemManager struct {
|
||||
hub hubLike
|
||||
systems *store.Store[string, *System]
|
||||
sshConfig *ssh.ClientConfig
|
||||
}
|
||||
|
||||
type System struct {
|
||||
Id string `db:"id"`
|
||||
Host string `db:"host"`
|
||||
Port string `db:"port"`
|
||||
Status string `db:"status"`
|
||||
manager *SystemManager
|
||||
client *ssh.Client
|
||||
data *system.CombinedData
|
||||
ctx context.Context
|
||||
cancel context.CancelFunc
|
||||
}
|
||||
|
||||
type hubLike interface {
|
||||
core.App
|
||||
GetSSHKey() ([]byte, error)
|
||||
HandleSystemAlerts(systemRecord *core.Record, data *system.CombinedData) error
|
||||
HandleStatusAlerts(status string, systemRecord *core.Record) error
|
||||
}
|
||||
|
||||
func NewSystemManager(hub hubLike) *SystemManager {
|
||||
return &SystemManager{
|
||||
systems: store.New(map[string]*System{}),
|
||||
hub: hub,
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize initializes the system manager.
|
||||
// It binds the event hooks and starts updating existing systems.
|
||||
func (sm *SystemManager) Initialize() error {
|
||||
sm.bindEventHooks()
|
||||
// ssh setup
|
||||
key, err := sm.hub.GetSSHKey()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := sm.createSSHClientConfig(key); err != nil {
|
||||
return err
|
||||
}
|
||||
// start updating existing systems
|
||||
var systems []*System
|
||||
err = sm.hub.DB().NewQuery("SELECT id, host, port, status FROM systems WHERE status != 'paused'").All(&systems)
|
||||
if err != nil || len(systems) == 0 {
|
||||
return err
|
||||
}
|
||||
go func() {
|
||||
// time between initial system updates
|
||||
delta := interval / max(1, len(systems))
|
||||
delta = min(delta, 2_000)
|
||||
sleepTime := time.Duration(delta) * time.Millisecond
|
||||
for _, system := range systems {
|
||||
time.Sleep(sleepTime)
|
||||
_ = sm.AddSystem(system)
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sm *SystemManager) bindEventHooks() {
|
||||
sm.hub.OnRecordCreate("systems").BindFunc(sm.onRecordCreate)
|
||||
sm.hub.OnRecordAfterCreateSuccess("systems").BindFunc(sm.onRecordAfterCreateSuccess)
|
||||
sm.hub.OnRecordUpdate("systems").BindFunc(sm.onRecordUpdate)
|
||||
sm.hub.OnRecordAfterUpdateSuccess("systems").BindFunc(sm.onRecordAfterUpdateSuccess)
|
||||
sm.hub.OnRecordAfterDeleteSuccess("systems").BindFunc(sm.onRecordAfterDeleteSuccess)
|
||||
}
|
||||
|
||||
// Runs before the record is committed to the database
|
||||
func (sm *SystemManager) onRecordCreate(e *core.RecordEvent) error {
|
||||
e.Record.Set("info", system.Info{})
|
||||
e.Record.Set("status", pending)
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// Runs after the record is committed to the database
|
||||
func (sm *SystemManager) onRecordAfterCreateSuccess(e *core.RecordEvent) error {
|
||||
if err := sm.AddRecord(e.Record); err != nil {
|
||||
e.App.Logger().Error("Error adding record", "err", err)
|
||||
}
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// Runs before the record is updated
|
||||
func (sm *SystemManager) onRecordUpdate(e *core.RecordEvent) error {
|
||||
if e.Record.GetString("status") == paused {
|
||||
e.Record.Set("info", system.Info{})
|
||||
}
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// Runs after the record is updated
|
||||
func (sm *SystemManager) onRecordAfterUpdateSuccess(e *core.RecordEvent) error {
|
||||
newStatus := e.Record.GetString("status")
|
||||
switch newStatus {
|
||||
case paused:
|
||||
sm.RemoveSystem(e.Record.Id)
|
||||
return e.Next()
|
||||
case pending:
|
||||
if err := sm.AddRecord(e.Record); err != nil {
|
||||
e.App.Logger().Error("Error adding record", "err", err)
|
||||
}
|
||||
return e.Next()
|
||||
}
|
||||
system, ok := sm.systems.GetOk(e.Record.Id)
|
||||
if !ok {
|
||||
return sm.AddRecord(e.Record)
|
||||
}
|
||||
prevStatus := system.Status
|
||||
system.Status = newStatus
|
||||
// system alerts if system is up
|
||||
if system.Status == up {
|
||||
if err := sm.hub.HandleSystemAlerts(e.Record, system.data); err != nil {
|
||||
e.App.Logger().Error("Error handling system alerts", "err", err)
|
||||
}
|
||||
}
|
||||
if (system.Status == down && prevStatus == up) || (system.Status == up && prevStatus == down) {
|
||||
if err := sm.hub.HandleStatusAlerts(system.Status, e.Record); err != nil {
|
||||
e.App.Logger().Error("Error handling status alerts", "err", err)
|
||||
}
|
||||
}
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// Runs after the record is deleted
|
||||
func (sm *SystemManager) onRecordAfterDeleteSuccess(e *core.RecordEvent) error {
|
||||
sm.RemoveSystem(e.Record.Id)
|
||||
return e.Next()
|
||||
}
|
||||
|
||||
// AddSystem adds a system to the manager
|
||||
func (sm *SystemManager) AddSystem(sys *System) error {
|
||||
if sm.systems.Has(sys.Id) {
|
||||
return fmt.Errorf("system exists")
|
||||
}
|
||||
if sys.Id == "" || sys.Host == "" {
|
||||
return fmt.Errorf("system is missing required fields")
|
||||
}
|
||||
sys.manager = sm
|
||||
sys.ctx, sys.cancel = context.WithCancel(context.Background())
|
||||
sys.data = &system.CombinedData{}
|
||||
sm.systems.Set(sys.Id, sys)
|
||||
go sys.StartUpdater()
|
||||
return nil
|
||||
}
|
||||
|
||||
// RemoveSystem removes a system from the manager
|
||||
func (sm *SystemManager) RemoveSystem(systemID string) error {
|
||||
system, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return fmt.Errorf("system not found")
|
||||
}
|
||||
// cancel the context to signal stop
|
||||
if system.cancel != nil {
|
||||
system.cancel()
|
||||
}
|
||||
system.resetSSHClient()
|
||||
sm.systems.Remove(systemID)
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddRecord adds a record to the system manager.
|
||||
// It first removes any existing system with the same ID, then creates a new System
|
||||
// instance from the record data and adds it to the manager.
|
||||
// This function is typically called when a new system is created or when an existing
|
||||
// system's status changes to pending.
|
||||
func (sm *SystemManager) AddRecord(record *core.Record) (err error) {
|
||||
_ = sm.RemoveSystem(record.Id)
|
||||
system := &System{
|
||||
Id: record.Id,
|
||||
Status: record.GetString("status"),
|
||||
Host: record.GetString("host"),
|
||||
Port: record.GetString("port"),
|
||||
}
|
||||
return sm.AddSystem(system)
|
||||
}
|
||||
|
||||
// StartUpdater starts the system updater.
|
||||
// It first fetches the data from the agent then updates the records.
|
||||
// If the data is not found or the system is down, it sets the system down.
|
||||
func (sys *System) StartUpdater() {
|
||||
if sys.data == nil {
|
||||
sys.data = &system.CombinedData{}
|
||||
}
|
||||
if err := sys.update(); err != nil {
|
||||
_ = sys.setDown(err)
|
||||
}
|
||||
|
||||
c := time.Tick(time.Duration(interval) * time.Millisecond)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-sys.ctx.Done():
|
||||
return
|
||||
case <-c:
|
||||
err := sys.update()
|
||||
if err != nil {
|
||||
_ = sys.setDown(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update updates the system data and records.
|
||||
// It first fetches the data from the agent then updates the records.
|
||||
func (sys *System) update() error {
|
||||
_, err := sys.fetchDataFromAgent()
|
||||
if err == nil {
|
||||
_, err = sys.createRecords()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// createRecords updates the system record and adds system_stats and container_stats records
|
||||
func (sys *System) createRecords() (*core.Record, error) {
|
||||
systemRecord, err := sys.getRecord()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
hub := sys.manager.hub
|
||||
// add system_stats and container_stats records
|
||||
systemStats, err := hub.FindCachedCollectionByNameOrId("system_stats")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
systemStatsRecord := core.NewRecord(systemStats)
|
||||
systemStatsRecord.Set("system", systemRecord.Id)
|
||||
systemStatsRecord.Set("stats", sys.data.Stats)
|
||||
systemStatsRecord.Set("type", "1m")
|
||||
if err := hub.SaveNoValidate(systemStatsRecord); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// add new container_stats record
|
||||
if len(sys.data.Containers) > 0 {
|
||||
containerStats, err := hub.FindCachedCollectionByNameOrId("container_stats")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
containerStatsRecord := core.NewRecord(containerStats)
|
||||
containerStatsRecord.Set("system", systemRecord.Id)
|
||||
containerStatsRecord.Set("stats", sys.data.Containers)
|
||||
containerStatsRecord.Set("type", "1m")
|
||||
if err := hub.SaveNoValidate(containerStatsRecord); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// update system record (do this last because it triggers alerts and we need above records to be inserted first)
|
||||
systemRecord.Set("status", up)
|
||||
systemRecord.Set("info", sys.data.Info)
|
||||
if err := hub.SaveNoValidate(systemRecord); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return systemRecord, nil
|
||||
}
|
||||
|
||||
// getRecord retrieves the system record from the database.
|
||||
// If the record is not found or the system is paused, it removes the system from the manager.
|
||||
func (sys *System) getRecord() (*core.Record, error) {
|
||||
record, err := sys.manager.hub.FindRecordById("systems", sys.Id)
|
||||
if err != nil || record == nil {
|
||||
_ = sys.manager.RemoveSystem(sys.Id)
|
||||
return nil, err
|
||||
}
|
||||
return record, nil
|
||||
}
|
||||
|
||||
// setDown marks a system as down in the database.
|
||||
// It takes the original error that caused the system to go down and returns any error
|
||||
// encountered during the process of updating the system status.
|
||||
func (sys *System) setDown(OriginalError error) error {
|
||||
if sys.Status == down {
|
||||
return nil
|
||||
}
|
||||
record, err := sys.getRecord()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sys.manager.hub.Logger().Error("System down", "system", record.GetString("name"), "err", OriginalError)
|
||||
record.Set("status", down)
|
||||
err = sys.manager.hub.SaveNoValidate(record)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// fetchDataFromAgent fetches the data from the agent.
|
||||
// It first creates a new SSH client if it doesn't exist or the system is down.
|
||||
// Then it creates a new SSH session and fetches the data from the agent.
|
||||
// If the data is not found or the system is down, it sets the system down.
|
||||
func (sys *System) fetchDataFromAgent() (*system.CombinedData, error) {
|
||||
maxRetries := 1
|
||||
for attempt := 0; attempt <= maxRetries; attempt++ {
|
||||
if sys.client == nil || sys.Status == down {
|
||||
if err := sys.createSSHClient(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
session, err := sys.createSessionWithTimeout(4 * time.Second)
|
||||
if err != nil {
|
||||
if attempt >= maxRetries {
|
||||
return nil, err
|
||||
}
|
||||
sys.manager.hub.Logger().Warn("Session closed. Retrying...", "host", sys.Host, "port", sys.Port, "err", err)
|
||||
sys.resetSSHClient()
|
||||
continue
|
||||
}
|
||||
defer session.Close()
|
||||
|
||||
stdout, err := session.StdoutPipe()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := session.Shell(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// this is initialized in startUpdater, should never be nil
|
||||
*sys.data = system.CombinedData{}
|
||||
if err := json.NewDecoder(stdout).Decode(sys.data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// wait for the session to complete
|
||||
if err := session.Wait(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return sys.data, nil
|
||||
}
|
||||
|
||||
// this should never be reached due to the return in the loop
|
||||
return nil, fmt.Errorf("failed to fetch data")
|
||||
}
|
||||
|
||||
func (sm *SystemManager) createSSHClientConfig(key []byte) error {
|
||||
signer, err := ssh.ParsePrivateKey(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
sm.sshConfig = &ssh.ClientConfig{
|
||||
User: "u",
|
||||
Auth: []ssh.AuthMethod{
|
||||
ssh.PublicKeys(signer),
|
||||
},
|
||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
||||
Timeout: sessionTimeout,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// createSSHClient creates a new SSH client for the system
|
||||
func (s *System) createSSHClient() error {
|
||||
network := "tcp"
|
||||
host := s.Host
|
||||
if strings.HasPrefix(host, "/") {
|
||||
network = "unix"
|
||||
} else {
|
||||
host = net.JoinHostPort(host, s.Port)
|
||||
}
|
||||
var err error
|
||||
s.client, err = ssh.Dial(network, host, s.manager.sshConfig)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// createSessionWithTimeout creates a new SSH session with a timeout to avoid hanging
|
||||
// in case of network issues
|
||||
func (sys *System) createSessionWithTimeout(timeout time.Duration) (*ssh.Session, error) {
|
||||
if sys.client == nil {
|
||||
return nil, fmt.Errorf("client not initialized")
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(sys.ctx, timeout)
|
||||
defer cancel()
|
||||
|
||||
sessionChan := make(chan *ssh.Session, 1)
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
go func() {
|
||||
if session, err := sys.client.NewSession(); err != nil {
|
||||
errChan <- err
|
||||
} else {
|
||||
sessionChan <- session
|
||||
}
|
||||
}()
|
||||
|
||||
select {
|
||||
case session := <-sessionChan:
|
||||
return session, nil
|
||||
case err := <-errChan:
|
||||
return nil, err
|
||||
case <-ctx.Done():
|
||||
return nil, fmt.Errorf("timeout")
|
||||
}
|
||||
}
|
||||
|
||||
// resetSSHClient closes the SSH connection and resets the client to nil
|
||||
func (sys *System) resetSSHClient() {
|
||||
if sys.client != nil {
|
||||
sys.client.Close()
|
||||
}
|
||||
sys.client = nil
|
||||
}
|
||||
@@ -1,440 +0,0 @@
|
||||
//go:build testing
|
||||
// +build testing
|
||||
|
||||
package systems_test
|
||||
|
||||
import (
|
||||
"beszel/internal/entities/container"
|
||||
"beszel/internal/entities/system"
|
||||
"beszel/internal/hub/systems"
|
||||
"beszel/internal/tests"
|
||||
"fmt"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// createTestSystem creates a test system record with a unique host name
|
||||
// and returns the created record and any error
|
||||
func createTestSystem(t *testing.T, hub *tests.TestHub, options map[string]any) (*core.Record, error) {
|
||||
collection, err := hub.FindCachedCollectionByNameOrId("systems")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// get user record
|
||||
var firstUser *core.Record
|
||||
users, err := hub.FindAllRecords("users", dbx.NewExp("id != ''"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(users) > 0 {
|
||||
firstUser = users[0]
|
||||
}
|
||||
// Generate a unique host name to ensure we're adding a new system
|
||||
uniqueHost := fmt.Sprintf("test-host-%d.example.com", time.Now().UnixNano())
|
||||
|
||||
// Create the record
|
||||
record := core.NewRecord(collection)
|
||||
record.Set("name", uniqueHost)
|
||||
record.Set("host", uniqueHost)
|
||||
record.Set("port", "45876")
|
||||
record.Set("status", "pending")
|
||||
record.Set("users", []string{firstUser.Id})
|
||||
|
||||
// Apply any custom options
|
||||
for key, value := range options {
|
||||
record.Set(key, value)
|
||||
}
|
||||
|
||||
// Save the record to the database
|
||||
err = hub.Save(record)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return record, nil
|
||||
}
|
||||
|
||||
func TestSystemManagerIntegration(t *testing.T) {
|
||||
// Create a test hub
|
||||
hub, err := tests.NewTestHub()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer hub.Cleanup()
|
||||
|
||||
// Create independent system manager
|
||||
sm := systems.NewSystemManager(hub)
|
||||
assert.NotNil(t, sm)
|
||||
|
||||
// Test initialization
|
||||
sm.Initialize()
|
||||
|
||||
// Test collection existence. todo: move to hub package tests
|
||||
t.Run("CollectionExistence", func(t *testing.T) {
|
||||
// Verify that required collections exist
|
||||
systems, err := hub.FindCachedCollectionByNameOrId("systems")
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, systems)
|
||||
|
||||
systemStats, err := hub.FindCachedCollectionByNameOrId("system_stats")
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, systemStats)
|
||||
|
||||
containerStats, err := hub.FindCachedCollectionByNameOrId("container_stats")
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, containerStats)
|
||||
})
|
||||
|
||||
// Test adding a system record
|
||||
t.Run("AddRecord", func(t *testing.T) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(2)
|
||||
|
||||
// Get the count before adding the system
|
||||
countBefore := sm.GetSystemCount()
|
||||
|
||||
// record should be pending on create
|
||||
hub.OnRecordCreate("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
record := e.Record
|
||||
if record.GetString("name") == "welcometoarcoampm" {
|
||||
assert.Equal(t, "pending", e.Record.GetString("status"), "System status should be 'pending'")
|
||||
wg.Done()
|
||||
}
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// record should be down on update
|
||||
hub.OnRecordAfterUpdateSuccess("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
record := e.Record
|
||||
if record.GetString("name") == "welcometoarcoampm" {
|
||||
assert.Equal(t, "down", e.Record.GetString("status"), "System status should be 'pending'")
|
||||
wg.Done()
|
||||
}
|
||||
return e.Next()
|
||||
})
|
||||
// Create a test system with the first user assigned
|
||||
record, err := createTestSystem(t, hub, map[string]any{
|
||||
"name": "welcometoarcoampm",
|
||||
"host": "localhost",
|
||||
"port": "33914",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
// system should be down if grabbed from the store
|
||||
assert.Equal(t, "down", sm.GetSystemStatusFromStore(record.Id), "System status should be 'down'")
|
||||
|
||||
// Check that the system count increased
|
||||
countAfter := sm.GetSystemCount()
|
||||
assert.Equal(t, countBefore+1, countAfter, "System count should increase after adding a system via event hook")
|
||||
|
||||
// Verify the system was added by checking if it exists
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should exist in the store")
|
||||
|
||||
// Verify the system host and port
|
||||
host, port := sm.GetSystemHostPort(record.Id)
|
||||
assert.Equal(t, record.Get("host"), host, "System host should match")
|
||||
assert.Equal(t, record.Get("port"), port, "System port should match")
|
||||
|
||||
// Verify the system is in the list of all system IDs
|
||||
ids := sm.GetAllSystemIDs()
|
||||
assert.Contains(t, ids, record.Id, "System ID should be in the list of all system IDs")
|
||||
|
||||
// Verify the system was added by checking if removing it works
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.NoError(t, err, "System should exist and be removable")
|
||||
|
||||
// Verify the system no longer exists
|
||||
assert.False(t, sm.HasSystem(record.Id), "System should not exist in the store after removal")
|
||||
|
||||
// Verify the system is not in the list of all system IDs
|
||||
newIds := sm.GetAllSystemIDs()
|
||||
assert.NotContains(t, newIds, record.Id, "System ID should not be in the list of all system IDs after removal")
|
||||
|
||||
})
|
||||
|
||||
t.Run("RemoveSystem", func(t *testing.T) {
|
||||
// Get the count before adding the system
|
||||
countBefore := sm.GetSystemCount()
|
||||
|
||||
// Create a test system record
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify the system count increased
|
||||
countAfterAdd := sm.GetSystemCount()
|
||||
assert.Equal(t, countBefore+1, countAfterAdd, "System count should increase after adding a system via event hook")
|
||||
|
||||
// Verify the system exists
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should exist in the store")
|
||||
|
||||
// Remove the system
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Check that the system count decreased
|
||||
countAfterRemove := sm.GetSystemCount()
|
||||
assert.Equal(t, countAfterAdd-1, countAfterRemove, "System count should decrease after removing a system")
|
||||
|
||||
// Verify the system no longer exists
|
||||
assert.False(t, sm.HasSystem(record.Id), "System should not exist in the store after removal")
|
||||
|
||||
// Verify the system is not in the list of all system IDs
|
||||
ids := sm.GetAllSystemIDs()
|
||||
assert.NotContains(t, ids, record.Id, "System ID should not be in the list of all system IDs after removal")
|
||||
|
||||
// Verify the system status is empty
|
||||
status := sm.GetSystemStatusFromStore(record.Id)
|
||||
assert.Equal(t, "", status, "System status should be empty after removal")
|
||||
|
||||
// Try to remove it again - should return an error since it's already removed
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("NewRecordPending", func(t *testing.T) {
|
||||
// Create a test system
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Add the record to the system manager
|
||||
err = sm.AddRecord(record)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test filtering records by status - should be "pending" now
|
||||
filter := "status = 'pending'"
|
||||
pendingSystems, err := hub.FindRecordsByFilter("systems", filter, "-created", 0, 0, nil)
|
||||
require.NoError(t, err)
|
||||
assert.GreaterOrEqual(t, len(pendingSystems), 1)
|
||||
})
|
||||
|
||||
t.Run("SystemStatusUpdate", func(t *testing.T) {
|
||||
// Create a test system record
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Add the record to the system manager
|
||||
err = sm.AddRecord(record)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Test status changes
|
||||
initialStatus := sm.GetSystemStatusFromStore(record.Id)
|
||||
|
||||
// Set a new status
|
||||
sm.SetSystemStatusInDB(record.Id, "up")
|
||||
|
||||
// Verify status was updated
|
||||
newStatus := sm.GetSystemStatusFromStore(record.Id)
|
||||
assert.Equal(t, "up", newStatus, "System status should be updated to 'up'")
|
||||
assert.NotEqual(t, initialStatus, newStatus, "Status should have changed")
|
||||
|
||||
// Verify the database was updated
|
||||
updatedRecord, err := hub.FindRecordById("systems", record.Id)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "up", updatedRecord.Get("status"), "Database status should match")
|
||||
})
|
||||
|
||||
t.Run("HandleSystemData", func(t *testing.T) {
|
||||
// Create a test system record
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create test system data
|
||||
testData := &system.CombinedData{
|
||||
Info: system.Info{
|
||||
Hostname: "data-test.example.com",
|
||||
KernelVersion: "5.15.0-generic",
|
||||
Cores: 4,
|
||||
Threads: 8,
|
||||
CpuModel: "Test CPU",
|
||||
Uptime: 3600,
|
||||
Cpu: 25.5,
|
||||
MemPct: 40.2,
|
||||
DiskPct: 60.0,
|
||||
Bandwidth: 100.0,
|
||||
AgentVersion: "1.0.0",
|
||||
},
|
||||
Stats: system.Stats{
|
||||
Cpu: 25.5,
|
||||
Mem: 16384.0,
|
||||
MemUsed: 6553.6,
|
||||
MemPct: 40.0,
|
||||
DiskTotal: 1024000.0,
|
||||
DiskUsed: 614400.0,
|
||||
DiskPct: 60.0,
|
||||
NetworkSent: 1024.0,
|
||||
NetworkRecv: 2048.0,
|
||||
},
|
||||
Containers: []*container.Stats{},
|
||||
}
|
||||
|
||||
// Test handling system data. todo: move to hub/alerts package tests
|
||||
err = hub.HandleSystemAlerts(record, testData)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("ErrorHandling", func(t *testing.T) {
|
||||
// Try to add a non-existent record
|
||||
nonExistentId := "non_existent_id"
|
||||
err := sm.RemoveSystem(nonExistentId)
|
||||
assert.Error(t, err)
|
||||
|
||||
// Try to add a system with invalid host
|
||||
system := &systems.System{
|
||||
Host: "",
|
||||
}
|
||||
err = sm.AddSystem(system)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("DeleteRecord", func(t *testing.T) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(2)
|
||||
|
||||
runs := 0
|
||||
|
||||
hub.OnRecordUpdate("systems").BindFunc(func(e *core.RecordEvent) error {
|
||||
runs++
|
||||
record := e.Record
|
||||
if record.GetString("name") == "deadflagblues" {
|
||||
if runs == 1 {
|
||||
assert.Equal(t, "up", e.Record.GetString("status"), "System status should be 'up'")
|
||||
wg.Done()
|
||||
} else if runs == 2 {
|
||||
assert.Equal(t, "paused", e.Record.GetString("status"), "System status should be 'paused'")
|
||||
wg.Done()
|
||||
}
|
||||
}
|
||||
return e.Next()
|
||||
})
|
||||
|
||||
// Create a test system record
|
||||
record, err := createTestSystem(t, hub, map[string]any{
|
||||
"name": "deadflagblues",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify the system exists
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should exist in the store")
|
||||
|
||||
// set the status manually to up
|
||||
sm.SetSystemStatusInDB(record.Id, "up")
|
||||
|
||||
// verify the status is up
|
||||
assert.Equal(t, "up", sm.GetSystemStatusFromStore(record.Id), "System status should be 'up'")
|
||||
|
||||
// Set the status to "paused" which should cause it to be deleted from the store
|
||||
sm.SetSystemStatusInDB(record.Id, "paused")
|
||||
|
||||
wg.Wait()
|
||||
|
||||
// Verify the system no longer exists
|
||||
assert.False(t, sm.HasSystem(record.Id), "System should not exist in the store after deletion")
|
||||
})
|
||||
|
||||
t.Run("ConcurrentOperations", func(t *testing.T) {
|
||||
// Create a test system
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Run concurrent operations
|
||||
const goroutines = 5
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(goroutines)
|
||||
|
||||
for i := range goroutines {
|
||||
go func(i int) {
|
||||
defer wg.Done()
|
||||
|
||||
// Alternate between different operations
|
||||
switch i % 3 {
|
||||
case 0:
|
||||
status := fmt.Sprintf("status-%d", i)
|
||||
sm.SetSystemStatusInDB(record.Id, status)
|
||||
case 1:
|
||||
_ = sm.GetSystemStatusFromStore(record.Id)
|
||||
case 2:
|
||||
_, _ = sm.GetSystemHostPort(record.Id)
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
|
||||
// Verify system still exists and is in a valid state
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should still exist after concurrent operations")
|
||||
status := sm.GetSystemStatusFromStore(record.Id)
|
||||
assert.NotEmpty(t, status, "System should have a status after concurrent operations")
|
||||
})
|
||||
|
||||
t.Run("ContextCancellation", func(t *testing.T) {
|
||||
// Create a test system record
|
||||
record, err := createTestSystem(t, hub, map[string]any{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Verify the system exists in the store
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should exist in the store")
|
||||
|
||||
// Store the original context and cancel function
|
||||
originalCtx, originalCancel, err := sm.GetSystemContextFromStore(record.Id)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Ensure the context is not nil
|
||||
assert.NotNil(t, originalCtx, "System context should not be nil")
|
||||
assert.NotNil(t, originalCancel, "System cancel function should not be nil")
|
||||
|
||||
// Cancel the context
|
||||
originalCancel()
|
||||
|
||||
// Wait a short time for cancellation to propagate
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
|
||||
// Verify the context is done
|
||||
select {
|
||||
case <-originalCtx.Done():
|
||||
// Context was properly cancelled
|
||||
default:
|
||||
t.Fatal("Context was not cancelled")
|
||||
}
|
||||
|
||||
// Verify the system is still in the store (cancellation shouldn't remove it)
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should still exist after context cancellation")
|
||||
|
||||
// Explicitly remove the system
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.NoError(t, err, "RemoveSystem should succeed")
|
||||
|
||||
// Verify the system is removed
|
||||
assert.False(t, sm.HasSystem(record.Id), "System should be removed after RemoveSystem")
|
||||
|
||||
// Try to remove it again - should return an error
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.Error(t, err, "RemoveSystem should fail for non-existent system")
|
||||
|
||||
// Add the system back
|
||||
err = sm.AddRecord(record)
|
||||
require.NoError(t, err, "AddRecord should succeed")
|
||||
|
||||
// Verify the system is back in the store
|
||||
assert.True(t, sm.HasSystem(record.Id), "System should exist after re-adding")
|
||||
|
||||
// Verify a new context was created
|
||||
newCtx, newCancel, err := sm.GetSystemContextFromStore(record.Id)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, newCtx, "New system context should not be nil")
|
||||
assert.NotNil(t, newCancel, "New system cancel function should not be nil")
|
||||
assert.NotEqual(t, originalCtx, newCtx, "New context should be different from original")
|
||||
|
||||
// Clean up
|
||||
err = sm.RemoveSystem(record.Id)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
//go:build testing
|
||||
// +build testing
|
||||
|
||||
package systems
|
||||
|
||||
import (
|
||||
entities "beszel/internal/entities/system"
|
||||
"context"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// GetSystemCount returns the number of systems in the store
|
||||
func (sm *SystemManager) GetSystemCount() int {
|
||||
return sm.systems.Length()
|
||||
}
|
||||
|
||||
// HasSystem checks if a system with the given ID exists in the store
|
||||
func (sm *SystemManager) HasSystem(systemID string) bool {
|
||||
return sm.systems.Has(systemID)
|
||||
}
|
||||
|
||||
// GetSystemStatusFromStore returns the status of a system with the given ID
|
||||
// Returns an empty string if the system doesn't exist
|
||||
func (sm *SystemManager) GetSystemStatusFromStore(systemID string) string {
|
||||
sys, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return ""
|
||||
}
|
||||
return sys.Status
|
||||
}
|
||||
|
||||
// GetSystemContextFromStore returns the context and cancel function for a system
|
||||
func (sm *SystemManager) GetSystemContextFromStore(systemID string) (context.Context, context.CancelFunc, error) {
|
||||
sys, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return nil, nil, fmt.Errorf("no system")
|
||||
}
|
||||
return sys.ctx, sys.cancel, nil
|
||||
}
|
||||
|
||||
// GetSystemFromStore returns a store from the system
|
||||
func (sm *SystemManager) GetSystemFromStore(systemID string) (*System, error) {
|
||||
sys, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("no system")
|
||||
}
|
||||
return sys, nil
|
||||
}
|
||||
|
||||
// GetAllSystemIDs returns a slice of all system IDs in the store
|
||||
func (sm *SystemManager) GetAllSystemIDs() []string {
|
||||
data := sm.systems.GetAll()
|
||||
ids := make([]string, 0, len(data))
|
||||
for id := range data {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
// GetSystemData returns the combined data for a system with the given ID
|
||||
// Returns nil if the system doesn't exist
|
||||
// This method is intended for testing
|
||||
func (sm *SystemManager) GetSystemData(systemID string) *entities.CombinedData {
|
||||
sys, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return sys.data
|
||||
}
|
||||
|
||||
// GetSystemHostPort returns the host and port for a system with the given ID
|
||||
// Returns empty strings if the system doesn't exist
|
||||
func (sm *SystemManager) GetSystemHostPort(systemID string) (string, string) {
|
||||
sys, ok := sm.systems.GetOk(systemID)
|
||||
if !ok {
|
||||
return "", ""
|
||||
}
|
||||
return sys.Host, sys.Port
|
||||
}
|
||||
|
||||
// DisableAutoUpdater disables the automatic updater for a system
|
||||
// This is intended for testing
|
||||
// Returns false if the system doesn't exist
|
||||
// func (sm *SystemManager) DisableAutoUpdater(systemID string) bool {
|
||||
// sys, ok := sm.systems.GetOk(systemID)
|
||||
// if !ok {
|
||||
// return false
|
||||
// }
|
||||
// if sys.cancel != nil {
|
||||
// sys.cancel()
|
||||
// sys.cancel = nil
|
||||
// }
|
||||
// return true
|
||||
// }
|
||||
|
||||
// SetSystemStatusInDB sets the status of a system directly and updates the database record
|
||||
// This is intended for testing
|
||||
// Returns false if the system doesn't exist
|
||||
func (sm *SystemManager) SetSystemStatusInDB(systemID string, status string) bool {
|
||||
if !sm.HasSystem(systemID) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Update the database record
|
||||
record, err := sm.hub.FindRecordById("systems", systemID)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
record.Set("status", status)
|
||||
err = sm.hub.Save(record)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -4,15 +4,14 @@ package records
|
||||
import (
|
||||
"beszel/internal/entities/container"
|
||||
"beszel/internal/entities/system"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/goccy/go-json"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/tools/types"
|
||||
)
|
||||
|
||||
type RecordManager struct {
|
||||
@@ -26,6 +25,11 @@ type LongerRecordData struct {
|
||||
minShorterRecords int
|
||||
}
|
||||
|
||||
type RecordDeletionData struct {
|
||||
recordType string
|
||||
retention time.Duration
|
||||
}
|
||||
|
||||
type RecordStats []struct {
|
||||
Stats []byte `db:"stats"`
|
||||
}
|
||||
@@ -35,7 +39,7 @@ func NewRecordManager(app core.App) *RecordManager {
|
||||
}
|
||||
|
||||
// Create longer records by averaging shorter records
|
||||
func (rm *RecordManager) CreateLongerRecords() {
|
||||
func (rm *RecordManager) CreateLongerRecords(collections []*core.Collection) {
|
||||
// start := time.Now()
|
||||
longerRecordData := []LongerRecordData{
|
||||
{
|
||||
@@ -66,24 +70,14 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
}
|
||||
// wrap the operations in a transaction
|
||||
rm.app.RunInTransaction(func(txApp core.App) error {
|
||||
var err error
|
||||
collections := [2]*core.Collection{}
|
||||
collections[0], err = txApp.FindCachedCollectionByNameOrId("system_stats")
|
||||
activeSystems, err := txApp.FindAllRecords("systems", dbx.NewExp("status = 'up'"))
|
||||
if err != nil {
|
||||
log.Println("failed to get active systems", "err", err.Error())
|
||||
return err
|
||||
}
|
||||
collections[1], err = txApp.FindCachedCollectionByNameOrId("container_stats")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var systems []struct {
|
||||
Id string `db:"id"`
|
||||
}
|
||||
|
||||
txApp.DB().NewQuery("SELECT id FROM systems WHERE status='up'").All(&systems)
|
||||
|
||||
// loop through all active systems, time periods, and collections
|
||||
for _, system := range systems {
|
||||
for _, system := range activeSystems {
|
||||
// log.Println("processing system", system.GetString("name"))
|
||||
for i := range longerRecordData {
|
||||
recordData := longerRecordData[i]
|
||||
@@ -98,7 +92,7 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
if recordData.longerType != "10m" {
|
||||
lastLongerRecord, err := txApp.FindFirstRecordByFilter(
|
||||
collection.Id,
|
||||
"system = {:system} && type = {:type} && created > {:created}",
|
||||
"type = {:type} && system = {:system} && created > {:created}",
|
||||
dbx.Params{"type": recordData.longerType, "system": system.Id, "created": longerRecordPeriod},
|
||||
)
|
||||
// continue if longer record exists
|
||||
@@ -114,7 +108,7 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
Select("stats").
|
||||
From(collection.Name).
|
||||
AndWhere(dbx.NewExp(
|
||||
"system={:system} AND type={:type} AND created > {:created}",
|
||||
"type={:type} AND system={:system} AND created > {:created}",
|
||||
dbx.Params{
|
||||
"type": recordData.shorterType,
|
||||
"system": system.Id,
|
||||
@@ -125,6 +119,7 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
|
||||
// continue if not enough shorter records
|
||||
if err != nil || len(stats) < recordData.minShorterRecords {
|
||||
// log.Println("not enough shorter records. continue.", len(allShorterRecords), recordData.expectedShorterRecords)
|
||||
continue
|
||||
}
|
||||
// average the shorter records and create longer record
|
||||
@@ -138,7 +133,7 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
longerRecord.Set("stats", rm.AverageContainerStats(stats))
|
||||
}
|
||||
if err := txApp.SaveNoValidate(longerRecord); err != nil {
|
||||
log.Println("failed to save longer record", "err", err)
|
||||
log.Println("failed to save longer record", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,20 +146,16 @@ func (rm *RecordManager) CreateLongerRecords() {
|
||||
}
|
||||
|
||||
// Calculate the average stats of a list of system_stats records without reflect
|
||||
func (rm *RecordManager) AverageSystemStats(records RecordStats) *system.Stats {
|
||||
sum := &system.Stats{}
|
||||
func (rm *RecordManager) AverageSystemStats(records RecordStats) system.Stats {
|
||||
sum := system.Stats{}
|
||||
count := float64(len(records))
|
||||
// use different counter for temps in case some records don't have them
|
||||
tempCount := float64(0)
|
||||
|
||||
// Temporary struct for unmarshaling
|
||||
stats := &system.Stats{}
|
||||
|
||||
// Accumulate totals
|
||||
var stats system.Stats
|
||||
for i := range records {
|
||||
*stats = system.Stats{} // Reset tempStats for unmarshaling
|
||||
if err := json.Unmarshal(records[i].Stats, stats); err != nil {
|
||||
continue
|
||||
}
|
||||
stats = system.Stats{} // Zero the struct before unmarshalling
|
||||
json.Unmarshal(records[i].Stats, &stats)
|
||||
sum.Cpu += stats.Cpu
|
||||
sum.Mem += stats.Mem
|
||||
sum.MemUsed += stats.MemUsed
|
||||
@@ -180,25 +171,26 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) *system.Stats {
|
||||
sum.DiskWritePs += stats.DiskWritePs
|
||||
sum.NetworkSent += stats.NetworkSent
|
||||
sum.NetworkRecv += stats.NetworkRecv
|
||||
// Set peak values
|
||||
// set peak values
|
||||
sum.MaxCpu = max(sum.MaxCpu, stats.MaxCpu, stats.Cpu)
|
||||
sum.MaxNetworkSent = max(sum.MaxNetworkSent, stats.MaxNetworkSent, stats.NetworkSent)
|
||||
sum.MaxNetworkRecv = max(sum.MaxNetworkRecv, stats.MaxNetworkRecv, stats.NetworkRecv)
|
||||
sum.MaxDiskReadPs = max(sum.MaxDiskReadPs, stats.MaxDiskReadPs, stats.DiskReadPs)
|
||||
sum.MaxDiskWritePs = max(sum.MaxDiskWritePs, stats.MaxDiskWritePs, stats.DiskWritePs)
|
||||
|
||||
// Accumulate temperatures
|
||||
// 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 {
|
||||
sum.Temperatures[key] = 0
|
||||
}
|
||||
sum.Temperatures[key] += value
|
||||
}
|
||||
}
|
||||
|
||||
// Accumulate extra filesystem stats
|
||||
// add extra fs to sum
|
||||
if stats.ExtraFs != nil {
|
||||
if sum.ExtraFs == nil {
|
||||
sum.ExtraFs = make(map[string]*system.FsStats, len(stats.ExtraFs))
|
||||
@@ -207,26 +199,25 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) *system.Stats {
|
||||
if _, ok := sum.ExtraFs[key]; !ok {
|
||||
sum.ExtraFs[key] = &system.FsStats{}
|
||||
}
|
||||
fs := sum.ExtraFs[key]
|
||||
fs.DiskTotal += value.DiskTotal
|
||||
fs.DiskUsed += value.DiskUsed
|
||||
fs.DiskWritePs += value.DiskWritePs
|
||||
fs.DiskReadPs += value.DiskReadPs
|
||||
fs.MaxDiskReadPS = max(fs.MaxDiskReadPS, value.MaxDiskReadPS, value.DiskReadPs)
|
||||
fs.MaxDiskWritePS = max(fs.MaxDiskWritePS, value.MaxDiskWritePS, value.DiskWritePs)
|
||||
sum.ExtraFs[key].DiskTotal += value.DiskTotal
|
||||
sum.ExtraFs[key].DiskUsed += value.DiskUsed
|
||||
sum.ExtraFs[key].DiskWritePs += value.DiskWritePs
|
||||
sum.ExtraFs[key].DiskReadPs += value.DiskReadPs
|
||||
// peak values
|
||||
sum.ExtraFs[key].MaxDiskReadPS = max(sum.ExtraFs[key].MaxDiskReadPS, value.MaxDiskReadPS, value.DiskReadPs)
|
||||
sum.ExtraFs[key].MaxDiskWritePS = max(sum.ExtraFs[key].MaxDiskWritePS, value.MaxDiskWritePS, value.DiskWritePs)
|
||||
}
|
||||
}
|
||||
|
||||
// Accumulate GPU data
|
||||
// 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 {
|
||||
gpu, ok := sum.GPUData[id]
|
||||
if !ok {
|
||||
gpu = system.GPUData{Name: value.Name}
|
||||
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
|
||||
@@ -238,67 +229,76 @@ func (rm *RecordManager) AverageSystemStats(records RecordStats) *system.Stats {
|
||||
}
|
||||
}
|
||||
|
||||
// Compute averages in place
|
||||
if count > 0 {
|
||||
sum.Cpu = twoDecimals(sum.Cpu / count)
|
||||
sum.Mem = twoDecimals(sum.Mem / count)
|
||||
sum.MemUsed = twoDecimals(sum.MemUsed / count)
|
||||
sum.MemPct = twoDecimals(sum.MemPct / count)
|
||||
sum.MemBuffCache = twoDecimals(sum.MemBuffCache / count)
|
||||
sum.MemZfsArc = twoDecimals(sum.MemZfsArc / count)
|
||||
sum.Swap = twoDecimals(sum.Swap / count)
|
||||
sum.SwapUsed = twoDecimals(sum.SwapUsed / count)
|
||||
sum.DiskTotal = twoDecimals(sum.DiskTotal / count)
|
||||
sum.DiskUsed = twoDecimals(sum.DiskUsed / count)
|
||||
sum.DiskPct = twoDecimals(sum.DiskPct / count)
|
||||
sum.DiskReadPs = twoDecimals(sum.DiskReadPs / count)
|
||||
sum.DiskWritePs = twoDecimals(sum.DiskWritePs / count)
|
||||
sum.NetworkSent = twoDecimals(sum.NetworkSent / count)
|
||||
sum.NetworkRecv = twoDecimals(sum.NetworkRecv / count)
|
||||
stats = system.Stats{
|
||||
Cpu: twoDecimals(sum.Cpu / count),
|
||||
Mem: twoDecimals(sum.Mem / count),
|
||||
MemUsed: twoDecimals(sum.MemUsed / count),
|
||||
MemPct: twoDecimals(sum.MemPct / count),
|
||||
MemBuffCache: twoDecimals(sum.MemBuffCache / count),
|
||||
MemZfsArc: twoDecimals(sum.MemZfsArc / count),
|
||||
Swap: twoDecimals(sum.Swap / count),
|
||||
SwapUsed: twoDecimals(sum.SwapUsed / count),
|
||||
DiskTotal: twoDecimals(sum.DiskTotal / count),
|
||||
DiskUsed: twoDecimals(sum.DiskUsed / count),
|
||||
DiskPct: twoDecimals(sum.DiskPct / count),
|
||||
DiskReadPs: twoDecimals(sum.DiskReadPs / count),
|
||||
DiskWritePs: twoDecimals(sum.DiskWritePs / count),
|
||||
NetworkSent: twoDecimals(sum.NetworkSent / count),
|
||||
NetworkRecv: twoDecimals(sum.NetworkRecv / count),
|
||||
MaxCpu: sum.MaxCpu,
|
||||
MaxDiskReadPs: sum.MaxDiskReadPs,
|
||||
MaxDiskWritePs: sum.MaxDiskWritePs,
|
||||
MaxNetworkSent: sum.MaxNetworkSent,
|
||||
MaxNetworkRecv: sum.MaxNetworkRecv,
|
||||
}
|
||||
|
||||
// Average temperatures
|
||||
if sum.Temperatures != nil && tempCount > 0 {
|
||||
for key := range sum.Temperatures {
|
||||
sum.Temperatures[key] = twoDecimals(sum.Temperatures[key] / tempCount)
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
// Average extra filesystem stats
|
||||
if sum.ExtraFs != nil {
|
||||
for key := range sum.ExtraFs {
|
||||
fs := sum.ExtraFs[key]
|
||||
fs.DiskTotal = twoDecimals(fs.DiskTotal / count)
|
||||
fs.DiskUsed = twoDecimals(fs.DiskUsed / count)
|
||||
fs.DiskWritePs = twoDecimals(fs.DiskWritePs / count)
|
||||
fs.DiskReadPs = twoDecimals(fs.DiskReadPs / count)
|
||||
}
|
||||
}
|
||||
|
||||
// Average GPU data
|
||||
if sum.GPUData != nil {
|
||||
for id := range sum.GPUData {
|
||||
gpu := sum.GPUData[id]
|
||||
gpu.Temperature = twoDecimals(gpu.Temperature / count)
|
||||
gpu.MemoryUsed = twoDecimals(gpu.MemoryUsed / count)
|
||||
gpu.MemoryTotal = twoDecimals(gpu.MemoryTotal / count)
|
||||
gpu.Usage = twoDecimals(gpu.Usage / count)
|
||||
gpu.Power = twoDecimals(gpu.Power / count)
|
||||
gpu.Count = twoDecimals(gpu.Count / count)
|
||||
sum.GPUData[id] = gpu
|
||||
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{
|
||||
DiskTotal: twoDecimals(value.DiskTotal / count),
|
||||
DiskUsed: twoDecimals(value.DiskUsed / count),
|
||||
DiskWritePs: twoDecimals(value.DiskWritePs / count),
|
||||
DiskReadPs: twoDecimals(value.DiskReadPs / count),
|
||||
MaxDiskReadPS: value.MaxDiskReadPS,
|
||||
MaxDiskWritePS: value.MaxDiskWritePS,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sum
|
||||
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
|
||||
}
|
||||
|
||||
// Calculate the average stats of a list of container_stats records
|
||||
func (rm *RecordManager) AverageContainerStats(records RecordStats) []container.Stats {
|
||||
sums := make(map[string]*container.Stats)
|
||||
count := float64(len(records))
|
||||
containerStats := make([]container.Stats, 0, 50)
|
||||
|
||||
var containerStats []container.Stats
|
||||
for i := range records {
|
||||
// reset slice
|
||||
// Reset the slice length to 0, but keep the capacity
|
||||
containerStats = containerStats[:0]
|
||||
if err := json.Unmarshal(records[i].Stats, &containerStats); err != nil {
|
||||
return []container.Stats{}
|
||||
@@ -330,45 +330,38 @@ func (rm *RecordManager) AverageContainerStats(records RecordStats) []container.
|
||||
|
||||
// Deletes records older than what is displayed in the UI
|
||||
func (rm *RecordManager) DeleteOldRecords() {
|
||||
// Define the collections to process
|
||||
collections := []string{"system_stats", "container_stats"}
|
||||
|
||||
// Define record types and their retention periods
|
||||
type RecordDeletionData struct {
|
||||
recordType string
|
||||
retention time.Duration
|
||||
}
|
||||
recordData := []RecordDeletionData{
|
||||
{recordType: "1m", retention: time.Hour}, // 1 hour
|
||||
{recordType: "10m", retention: 12 * time.Hour}, // 12 hours
|
||||
{recordType: "20m", retention: 24 * time.Hour}, // 1 day
|
||||
{recordType: "120m", retention: 7 * 24 * time.Hour}, // 7 days
|
||||
{recordType: "480m", retention: 30 * 24 * time.Hour}, // 30 days
|
||||
{
|
||||
recordType: "1m",
|
||||
retention: time.Hour,
|
||||
},
|
||||
{
|
||||
recordType: "10m",
|
||||
retention: 12 * time.Hour,
|
||||
},
|
||||
{
|
||||
recordType: "20m",
|
||||
retention: 24 * time.Hour,
|
||||
},
|
||||
{
|
||||
recordType: "120m",
|
||||
retention: 7 * 24 * time.Hour,
|
||||
},
|
||||
{
|
||||
recordType: "480m",
|
||||
retention: 30 * 24 * time.Hour,
|
||||
},
|
||||
}
|
||||
|
||||
// Process each collection
|
||||
for _, collection := range collections {
|
||||
// Build the WHERE clause dynamically
|
||||
var conditionParts []string
|
||||
var params dbx.Params = make(map[string]any)
|
||||
|
||||
for i, rd := range recordData {
|
||||
// Create parameterized condition for this record type
|
||||
dateParam := fmt.Sprintf("date%d", i)
|
||||
conditionParts = append(conditionParts, fmt.Sprintf("(type = '%s' AND created < {:%s})", rd.recordType, dateParam))
|
||||
params[dateParam] = time.Now().UTC().Add(-rd.retention)
|
||||
}
|
||||
|
||||
// Combine conditions with OR
|
||||
conditionStr := strings.Join(conditionParts, " OR ")
|
||||
|
||||
// Construct the full raw query
|
||||
rawQuery := fmt.Sprintf("DELETE FROM %s WHERE %s", collection, conditionStr)
|
||||
|
||||
// Execute the query with parameters
|
||||
if _, err := rm.app.DB().NewQuery(rawQuery).Bind(params).Execute(); err != nil {
|
||||
// return fmt.Errorf("failed to delete from %s: %v", collection, err)
|
||||
rm.app.Logger().Error("failed to delete", "collection", collection, "error", err)
|
||||
db := rm.app.NonconcurrentDB()
|
||||
for _, recordData := range recordData {
|
||||
for _, collectionSlug := range collections {
|
||||
formattedDate := time.Now().UTC().Add(-recordData.retention).Format(types.DefaultDateLayout)
|
||||
expr := dbx.NewExp("[[created]] < {:date} AND [[type]] = {:type}", dbx.Params{"date": formattedDate, "type": recordData.recordType})
|
||||
_, err := db.Delete(collectionSlug, expr).Execute()
|
||||
if err != nil {
|
||||
rm.app.Logger().Error("Failed to delete records", "err", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
// Package tests provides helpers for testing the application.
|
||||
package tests
|
||||
|
||||
import (
|
||||
"beszel/internal/hub"
|
||||
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
"github.com/pocketbase/pocketbase/tests"
|
||||
|
||||
_ "github.com/pocketbase/pocketbase/migrations"
|
||||
)
|
||||
|
||||
// TestHub is a wrapper hub instance used for testing.
|
||||
type TestHub struct {
|
||||
core.App
|
||||
*tests.TestApp
|
||||
*hub.Hub
|
||||
}
|
||||
|
||||
// NewTestHub creates and initializes a test application instance.
|
||||
//
|
||||
// It is the caller's responsibility to call app.Cleanup() when the app is no longer needed.
|
||||
func NewTestHub(optTestDataDir ...string) (*TestHub, error) {
|
||||
var testDataDir string
|
||||
if len(optTestDataDir) > 0 {
|
||||
testDataDir = optTestDataDir[0]
|
||||
}
|
||||
|
||||
return NewTestHubWithConfig(core.BaseAppConfig{
|
||||
DataDir: testDataDir,
|
||||
EncryptionEnv: "pb_test_env",
|
||||
})
|
||||
}
|
||||
|
||||
// NewTestHubWithConfig creates and initializes a test application instance
|
||||
// from the provided config.
|
||||
//
|
||||
// If config.DataDir is not set it fallbacks to the default internal test data directory.
|
||||
//
|
||||
// config.DataDir is cloned for each new test application instance.
|
||||
//
|
||||
// It is the caller's responsibility to call app.Cleanup() when the app is no longer needed.
|
||||
func NewTestHubWithConfig(config core.BaseAppConfig) (*TestHub, error) {
|
||||
testApp, err := tests.NewTestAppWithConfig(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
hub := hub.NewHub(testApp)
|
||||
|
||||
t := &TestHub{
|
||||
App: testApp,
|
||||
TestApp: testApp,
|
||||
Hub: hub,
|
||||
}
|
||||
|
||||
return t, nil
|
||||
}
|
||||
1258
beszel/migrations/1732489917_collections_snapshot.go
Normal file
1258
beszel/migrations/1732489917_collections_snapshot.go
Normal file
File diff suppressed because it is too large
Load Diff
98
beszel/migrations/1738624382_updated_users.go
Normal file
98
beszel/migrations/1738624382_updated_users.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
m "github.com/pocketbase/pocketbase/migrations"
|
||||
)
|
||||
|
||||
func init() {
|
||||
m.Register(func(app core.App) error {
|
||||
collection, err := app.FindCollectionByNameOrId("_pb_users_auth_")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// update collection data
|
||||
if err := json.Unmarshal([]byte(`{
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__email_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `email` + "`" + `) WHERE ` + "`" + `email` + "`" + ` != ''",
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__tokenKey_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `tokenKey` + "`" + `)"
|
||||
]
|
||||
}`), &collection); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// remove field
|
||||
collection.Fields.RemoveById("text4166911607")
|
||||
|
||||
// update field
|
||||
if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
|
||||
"exceptDomains": null,
|
||||
"hidden": false,
|
||||
"id": "email3885137012",
|
||||
"name": "email",
|
||||
"onlyDomains": null,
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "email"
|
||||
}`)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return app.Save(collection)
|
||||
}, func(app core.App) error {
|
||||
collection, err := app.FindCollectionByNameOrId("_pb_users_auth_")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// update collection data
|
||||
if err := json.Unmarshal([]byte(`{
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__username_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (username COLLATE NOCASE)",
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__email_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `email` + "`" + `) WHERE ` + "`" + `email` + "`" + ` != ''",
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__tokenKey_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `tokenKey` + "`" + `)"
|
||||
]
|
||||
}`), &collection); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// add field
|
||||
if err := collection.Fields.AddMarshaledJSONAt(6, []byte(`{
|
||||
"autogeneratePattern": "users[0-9]{6}",
|
||||
"hidden": false,
|
||||
"id": "text4166911607",
|
||||
"max": 150,
|
||||
"min": 3,
|
||||
"name": "username",
|
||||
"pattern": "^[\\w][\\w\\.\\-]*$",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "text"
|
||||
}`)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// update field
|
||||
if err := collection.Fields.AddMarshaledJSONAt(3, []byte(`{
|
||||
"exceptDomains": null,
|
||||
"hidden": false,
|
||||
"id": "email3885137012",
|
||||
"name": "email",
|
||||
"onlyDomains": null,
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": true,
|
||||
"type": "email"
|
||||
}`)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return app.Save(collection)
|
||||
})
|
||||
}
|
||||
@@ -1,665 +0,0 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"github.com/pocketbase/pocketbase/core"
|
||||
m "github.com/pocketbase/pocketbase/migrations"
|
||||
)
|
||||
|
||||
func init() {
|
||||
m.Register(func(app core.App) error {
|
||||
jsonData := `[
|
||||
{
|
||||
"id": "elngm8x1l60zi2v",
|
||||
"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",
|
||||
"name": "alerts",
|
||||
"type": "base",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"hidden": false,
|
||||
"id": "hn5ly3vi",
|
||||
"maxSelect": 1,
|
||||
"minSelect": 0,
|
||||
"name": "user",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"hidden": false,
|
||||
"id": "g5sl3jdg",
|
||||
"maxSelect": 1,
|
||||
"minSelect": 0,
|
||||
"name": "system",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "zj3ingrv",
|
||||
"maxSelect": 1,
|
||||
"name": "name",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "select",
|
||||
"values": [
|
||||
"Status",
|
||||
"CPU",
|
||||
"Memory",
|
||||
"Disk",
|
||||
"Temperature",
|
||||
"Bandwidth"
|
||||
]
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "o2ablxvn",
|
||||
"max": null,
|
||||
"min": null,
|
||||
"name": "value",
|
||||
"onlyInt": false,
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "fstdehcq",
|
||||
"max": 60,
|
||||
"min": null,
|
||||
"name": "min",
|
||||
"onlyInt": true,
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "6hgdf6hs",
|
||||
"name": "triggered",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE INDEX ` + "`" + `idx_MnhEt21L5r` + "`" + ` ON ` + "`" + `alerts` + "`" + ` (` + "`" + `system` + "`" + `)"
|
||||
],
|
||||
"system": false
|
||||
},
|
||||
{
|
||||
"id": "juohu4jipgc13v7",
|
||||
"listRule": "@request.auth.id != \"\"",
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"name": "container_stats",
|
||||
"type": "base",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"hidden": false,
|
||||
"id": "hutcu6ps",
|
||||
"maxSelect": 1,
|
||||
"minSelect": 0,
|
||||
"name": "system",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "r39hhnil",
|
||||
"maxSize": 2000000,
|
||||
"name": "stats",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "vo7iuj96",
|
||||
"maxSelect": 1,
|
||||
"name": "type",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "select",
|
||||
"values": [
|
||||
"1m",
|
||||
"10m",
|
||||
"20m",
|
||||
"120m",
|
||||
"480m"
|
||||
]
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE INDEX ` + "`" + `idx_d87OiXGZD8` + "`" + ` ON ` + "`" + `container_stats` + "`" + ` (\n ` + "`" + `system` + "`" + `,\n ` + "`" + `type` + "`" + `,\n ` + "`" + `created` + "`" + `\n)"
|
||||
],
|
||||
"system": false
|
||||
},
|
||||
{
|
||||
"id": "ej9oowivz8b2mht",
|
||||
"listRule": "@request.auth.id != \"\"",
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"name": "system_stats",
|
||||
"type": "base",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "2hz5ncl8tizk5nx",
|
||||
"hidden": false,
|
||||
"id": "h9sg148r",
|
||||
"maxSelect": 1,
|
||||
"minSelect": 0,
|
||||
"name": "system",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "azftn0be",
|
||||
"maxSize": 2000000,
|
||||
"name": "stats",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "m1ekhli3",
|
||||
"maxSelect": 1,
|
||||
"name": "type",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "select",
|
||||
"values": [
|
||||
"1m",
|
||||
"10m",
|
||||
"20m",
|
||||
"120m",
|
||||
"480m"
|
||||
]
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE INDEX ` + "`" + `idx_GxIee0j` + "`" + ` ON ` + "`" + `system_stats` + "`" + ` (\n ` + "`" + `system` + "`" + `,\n ` + "`" + `type` + "`" + `,\n ` + "`" + `created` + "`" + `\n)"
|
||||
],
|
||||
"system": false
|
||||
},
|
||||
{
|
||||
"id": "4afacsdnlu8q8r2",
|
||||
"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,
|
||||
"name": "user_settings",
|
||||
"type": "base",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"hidden": false,
|
||||
"id": "d5vztyxa",
|
||||
"maxSelect": 1,
|
||||
"minSelect": 0,
|
||||
"name": "user",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "xcx4qgqq",
|
||||
"maxSize": 2000000,
|
||||
"name": "settings",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX ` + "`" + `idx_30Lwgf2` + "`" + ` ON ` + "`" + `user_settings` + "`" + ` (` + "`" + `user` + "`" + `)"
|
||||
],
|
||||
"system": false
|
||||
},
|
||||
{
|
||||
"id": "2hz5ncl8tizk5nx",
|
||||
"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\"",
|
||||
"name": "systems",
|
||||
"type": "base",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "",
|
||||
"hidden": false,
|
||||
"id": "7xloxkwk",
|
||||
"max": 0,
|
||||
"min": 0,
|
||||
"name": "name",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "waj7seaf",
|
||||
"maxSelect": 1,
|
||||
"name": "status",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "select",
|
||||
"values": [
|
||||
"up",
|
||||
"down",
|
||||
"paused",
|
||||
"pending"
|
||||
]
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "",
|
||||
"hidden": false,
|
||||
"id": "ve781smf",
|
||||
"max": 0,
|
||||
"min": 0,
|
||||
"name": "host",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "",
|
||||
"hidden": false,
|
||||
"id": "pij0k2jk",
|
||||
"max": 0,
|
||||
"min": 0,
|
||||
"name": "port",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "qoq64ntl",
|
||||
"maxSize": 2000000,
|
||||
"name": "info",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "json"
|
||||
},
|
||||
{
|
||||
"cascadeDelete": true,
|
||||
"collectionId": "_pb_users_auth_",
|
||||
"hidden": false,
|
||||
"id": "jcarjnjj",
|
||||
"maxSelect": 2147483647,
|
||||
"minSelect": 0,
|
||||
"name": "users",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": false,
|
||||
"type": "relation"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [],
|
||||
"system": false
|
||||
},
|
||||
{
|
||||
"id": "_pb_users_auth_",
|
||||
"listRule": "id = @request.auth.id",
|
||||
"viewRule": "id = @request.auth.id",
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"name": "users",
|
||||
"type": "auth",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cost": 10,
|
||||
"hidden": true,
|
||||
"id": "password901924565",
|
||||
"max": 0,
|
||||
"min": 8,
|
||||
"name": "password",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "password"
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "[a-zA-Z0-9_]{50}",
|
||||
"hidden": true,
|
||||
"id": "text2504183744",
|
||||
"max": 60,
|
||||
"min": 30,
|
||||
"name": "tokenKey",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"exceptDomains": null,
|
||||
"hidden": false,
|
||||
"id": "email3885137012",
|
||||
"name": "email",
|
||||
"onlyDomains": null,
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "email"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "bool1547992806",
|
||||
"name": "emailVisibility",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": true,
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "bool256245529",
|
||||
"name": "verified",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": true,
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "users[0-9]{6}",
|
||||
"hidden": false,
|
||||
"id": "text4166911607",
|
||||
"max": 150,
|
||||
"min": 3,
|
||||
"name": "username",
|
||||
"pattern": "^[\\w][\\w\\.\\-]*$",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "qkbp58ae",
|
||||
"maxSelect": 1,
|
||||
"name": "role",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": false,
|
||||
"type": "select",
|
||||
"values": [
|
||||
"user",
|
||||
"admin",
|
||||
"readonly"
|
||||
]
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": false,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__username_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (username COLLATE NOCASE)",
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__email_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `email` + "`" + `) WHERE ` + "`" + `email` + "`" + ` != ''",
|
||||
"CREATE UNIQUE INDEX ` + "`" + `__pb_users_auth__tokenKey_idx` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `tokenKey` + "`" + `)"
|
||||
],
|
||||
"system": false,
|
||||
"authRule": "verified=true",
|
||||
"manageRule": null
|
||||
}
|
||||
]`
|
||||
|
||||
return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false)
|
||||
}, func(app core.App) error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Binary file not shown.
2270
beszel/site/package-lock.json
generated
2270
beszel/site/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -31,35 +31,35 @@
|
||||
"@radix-ui/react-tabs": "^1.1.3",
|
||||
"@radix-ui/react-toast": "^1.2.6",
|
||||
"@radix-ui/react-tooltip": "^1.1.8",
|
||||
"@tanstack/react-table": "^8.21.2",
|
||||
"@tanstack/react-table": "^8.20.6",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.0.4",
|
||||
"d3-time": "^3.1.0",
|
||||
"lucide-react": "^0.452.0",
|
||||
"nanostores": "^0.11.4",
|
||||
"pocketbase": "^0.25.2",
|
||||
"nanostores": "^0.11.3",
|
||||
"pocketbase": "^0.25.1",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"recharts": "^2.15.1",
|
||||
"tailwind-merge": "^2.6.0",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"valibot": "^0.42.0"
|
||||
"valibot": "^0.36.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lingui/cli": "^5.2.0",
|
||||
"@lingui/swc-plugin": "^5.4.0",
|
||||
"@lingui/vite-plugin": "^5.2.0",
|
||||
"@types/bun": "^1.2.4",
|
||||
"@types/react": "^18.3.1",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"@vitejs/plugin-react-swc": "^3.8.0",
|
||||
"@lingui/cli": "^4.14.1",
|
||||
"@lingui/swc-plugin": "^4.1.0",
|
||||
"@lingui/vite-plugin": "^4.14.1",
|
||||
"@types/bun": "^1.2.2",
|
||||
"@types/react": "^18.3.18",
|
||||
"@types/react-dom": "^18.3.5",
|
||||
"@vitejs/plugin-react-swc": "^3.7.2",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"postcss": "^8.5.3",
|
||||
"postcss": "^8.5.1",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"tailwindcss-rtl": "^0.9.0",
|
||||
"typescript": "^5.8.2",
|
||||
"vite": "^6.2.0"
|
||||
"typescript": "^5.7.3",
|
||||
"vite": "^5.4.14"
|
||||
},
|
||||
"overrides": {
|
||||
"@nanostores/router": {
|
||||
|
||||
@@ -14,7 +14,7 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/comp
|
||||
import { Input } from "@/components/ui/input"
|
||||
import { Label } from "@/components/ui/label"
|
||||
import { $publicKey, pb } from "@/lib/stores"
|
||||
import { cn, copyToClipboard, isReadOnlyUser, useLocalStorage } from "@/lib/utils"
|
||||
import { cn, copyToClipboard, isReadOnlyUser } from "@/lib/utils"
|
||||
import { i18n } from "@lingui/core"
|
||||
import { t, Trans } from "@lingui/macro"
|
||||
import { useStore } from "@nanostores/react"
|
||||
@@ -61,13 +61,13 @@ function copyDockerCompose(port = "45876", publicKey: string) {
|
||||
# monitor other disks / partitions by mounting a folder in /extra-filesystems
|
||||
# - /mnt/disk/.beszel:/extra-filesystems/sda1:ro
|
||||
environment:
|
||||
LISTEN: ${port}
|
||||
PORT: ${port}
|
||||
KEY: "${publicKey}"`)
|
||||
}
|
||||
|
||||
function copyDockerRun(port = "45876", publicKey: string) {
|
||||
copyToClipboard(
|
||||
`docker run -d --name beszel-agent --network host --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock:ro -e KEY="${publicKey}" -e LISTEN=${port} henrygd/beszel-agent:latest`
|
||||
`docker run -d --name beszel-agent --network host --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock:ro -e KEY="${publicKey}" -e PORT=${port} henrygd/beszel-agent:latest`
|
||||
)
|
||||
}
|
||||
|
||||
@@ -91,7 +91,6 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
|
||||
const port = useRef<HTMLInputElement>(null)
|
||||
const [hostValue, setHostValue] = useState(system?.host ?? "")
|
||||
const isUnixSocket = hostValue.startsWith("/")
|
||||
const [tab, setTab] = useLocalStorage("as-tab", "docker")
|
||||
|
||||
async function handleSubmit(e: SubmitEvent) {
|
||||
e.preventDefault()
|
||||
@@ -119,7 +118,7 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
|
||||
setHostValue(system?.host ?? "")
|
||||
}}
|
||||
>
|
||||
<Tabs defaultValue={tab} onValueChange={setTab}>
|
||||
<Tabs defaultValue="docker">
|
||||
<DialogHeader>
|
||||
<DialogTitle className="mb-2">
|
||||
{system ? `${t`Edit`} ${system?.name}` : <Trans>Add New System</Trans>}
|
||||
@@ -141,7 +140,7 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
|
||||
</DialogDescription>
|
||||
</TabsContent>
|
||||
{/* Binary */}
|
||||
<TabsContent value="binary" tabIndex={-1}>
|
||||
<TabsContent value="binary">
|
||||
<DialogDescription className="mb-4 leading-normal w-0 min-w-full">
|
||||
<Trans>
|
||||
The agent must be running on the system to connect. Copy the installation command for the agent below.
|
||||
@@ -260,12 +259,12 @@ const CopyButton = memo((props: CopyButtonProps) => {
|
||||
<DropdownMenuContent align="end">
|
||||
{props.dropdownUrl ? (
|
||||
<DropdownMenuItem asChild>
|
||||
<a href={props.dropdownUrl} className="cursor-pointer" target="_blank" rel="noopener noreferrer">
|
||||
<a href={props.dropdownUrl} target="_blank" rel="noopener noreferrer">
|
||||
{props.dropdownText}
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
) : (
|
||||
<DropdownMenuItem onClick={props.dropdownOnClick} className="cursor-pointer">{props.dropdownText}</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={props.dropdownOnClick}>{props.dropdownText}</DropdownMenuItem>
|
||||
)}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
|
||||
@@ -229,7 +229,7 @@ function AlertContent({ data }: { data: AlertData }) {
|
||||
)}
|
||||
<Trans>
|
||||
For <strong className="text-foreground">{min}</strong>{" "}
|
||||
<Plural value={min} one="minute" other="minutes" />
|
||||
<Plural value={min} one=" minute" other=" minutes" />
|
||||
</Trans>
|
||||
</p>
|
||||
<div className="flex gap-3">
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
import { useEffect } from "react"
|
||||
import { useStore } from "@nanostores/react"
|
||||
import { $systems } from "@/lib/stores"
|
||||
import { getHostDisplayValue, isAdmin, listen } from "@/lib/utils"
|
||||
import { getHostDisplayValue, isAdmin } from "@/lib/utils"
|
||||
import { $router, basePath, navigate } from "./router"
|
||||
import { Trans, t } from "@lingui/macro"
|
||||
import { getPagePath } from "@nanostores/router"
|
||||
@@ -37,7 +37,9 @@ export default function CommandPalette({ open, setOpen }: { open: boolean; setOp
|
||||
setOpen(!open)
|
||||
}
|
||||
}
|
||||
return listen(document, "keydown", down)
|
||||
|
||||
document.addEventListener("keydown", down)
|
||||
return () => document.removeEventListener("keydown", down)
|
||||
}, [open, setOpen])
|
||||
|
||||
return (
|
||||
|
||||
@@ -135,6 +135,7 @@ export function UserAuthForm({
|
||||
toast({
|
||||
title: t`Error`,
|
||||
description: t`Please enable pop-ups for this site`,
|
||||
variant: "destructive",
|
||||
})
|
||||
return
|
||||
}
|
||||
@@ -155,11 +156,8 @@ export function UserAuthForm({
|
||||
|
||||
useEffect(() => {
|
||||
// auto login if password disabled and only one auth provider
|
||||
if (!passwordEnabled && authProviders.length === 1 && !sessionStorage.getItem("lo")) {
|
||||
// Add a small timeout to ensure browser is ready to handle popups
|
||||
setTimeout(() => {
|
||||
loginWithOauth(authProviders[0], true)
|
||||
}, 300)
|
||||
if (!passwordEnabled && authProviders.length === 1) {
|
||||
loginWithOauth(authProviders[0], true)
|
||||
}
|
||||
}, [])
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import {
|
||||
getHostDisplayValue,
|
||||
getPbTimestamp,
|
||||
getSizeAndUnit,
|
||||
listen,
|
||||
toFixedFloat,
|
||||
useLocalStorage,
|
||||
} from "@/lib/utils"
|
||||
@@ -26,8 +25,6 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from ".
|
||||
import { timeTicks } from "d3-time"
|
||||
import { Plural, Trans, t } from "@lingui/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { $router, navigate } from "../router"
|
||||
import { getPagePath } from "@nanostores/router"
|
||||
|
||||
const AreaChartDefault = lazy(() => import("../charts/area-chart"))
|
||||
const ContainerChart = lazy(() => import("../charts/container-chart"))
|
||||
@@ -115,7 +112,6 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
const [systemStats, setSystemStats] = useState([] as SystemStatsRecord[])
|
||||
const [containerData, setContainerData] = useState([] as ChartData["containerData"])
|
||||
const netCardRef = useRef<HTMLDivElement>(null)
|
||||
const persistChartTime = useRef(false)
|
||||
const [containerFilterBar, setContainerFilterBar] = useState(null as null | JSX.Element)
|
||||
const [bottomSpacing, setBottomSpacing] = useState(0)
|
||||
const [chartLoading, setChartLoading] = useState(true)
|
||||
@@ -124,10 +120,8 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
useEffect(() => {
|
||||
document.title = `${name} / Beszel`
|
||||
return () => {
|
||||
if (!persistChartTime.current) {
|
||||
$chartTime.set($userSettings.get().chartTime)
|
||||
}
|
||||
persistChartTime.current = false
|
||||
// resetCharts()
|
||||
setSystemStats([])
|
||||
setContainerData([])
|
||||
setContainerFilterBar(null)
|
||||
@@ -266,7 +260,7 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
// hide if hostname is same as host or name
|
||||
hide: system.info.h === system.host || system.info.h === system.name,
|
||||
},
|
||||
{ value: uptime, Icon: ClockArrowUp, label: t`Uptime`, hide: !system.info.u },
|
||||
{ value: uptime, Icon: ClockArrowUp, label: t`Uptime` },
|
||||
{ value: system.info.k, Icon: TuxIcon, label: t({ comment: "Linux kernel", message: "Kernel" }) },
|
||||
{
|
||||
value: `${system.info.m} (${system.info.c}c${system.info.t ? `/${system.info.t}t` : ""})`,
|
||||
@@ -294,35 +288,6 @@ export default function SystemDetail({ name }: { name: string }) {
|
||||
const distanceToBottom = wrapperRect.bottom - chartRect.bottom
|
||||
setBottomSpacing(tooltipHeight - distanceToBottom)
|
||||
}, [netCardRef, containerData])
|
||||
|
||||
// keyboard navigation between systems
|
||||
useEffect(() => {
|
||||
if (!systems.length) {
|
||||
return
|
||||
}
|
||||
const handleKeyUp = (e: KeyboardEvent) => {
|
||||
if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {
|
||||
return
|
||||
}
|
||||
const currentIndex = systems.findIndex(s => s.name === name)
|
||||
if (currentIndex === -1 || systems.length <= 1) {
|
||||
return
|
||||
}
|
||||
switch (e.key) {
|
||||
case "ArrowLeft":
|
||||
case "h":
|
||||
const prevIndex = (currentIndex - 1 + systems.length) % systems.length
|
||||
persistChartTime.current = true
|
||||
return navigate(getPagePath($router, "system", { name: systems[prevIndex].name}))
|
||||
case "ArrowRight":
|
||||
case "l":
|
||||
const nextIndex = (currentIndex + 1) % systems.length
|
||||
persistChartTime.current = true
|
||||
return navigate(getPagePath($router, "system", { name: systems[nextIndex].name}))
|
||||
}
|
||||
}
|
||||
return listen(document, "keyup", handleKeyUp)
|
||||
}, [name, systems])
|
||||
|
||||
if (!system.id) {
|
||||
return null
|
||||
|
||||
@@ -135,12 +135,6 @@ export default function SystemsTable() {
|
||||
}, [filter])
|
||||
|
||||
const columns = useMemo(() => {
|
||||
// Create status translations for filtering
|
||||
const statusTranslations = {
|
||||
"up": t`Up`.toLowerCase(),
|
||||
"down": t`Down`.toLowerCase(),
|
||||
"paused": t`Paused`.toLowerCase()
|
||||
};
|
||||
return [
|
||||
{
|
||||
// size: 200,
|
||||
@@ -148,15 +142,6 @@ export default function SystemsTable() {
|
||||
minSize: 0,
|
||||
accessorKey: "name",
|
||||
id: t`System`,
|
||||
filterFn: (row, _, filterVal) => {
|
||||
const filterLower = filterVal.toLowerCase();
|
||||
const { name, status } = row.original;
|
||||
// Check if the filter matches the name or status for this row
|
||||
if (name.toLowerCase().includes(filterLower) || statusTranslations[status as keyof typeof statusTranslations]?.includes(filterLower)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
enableHiding: false,
|
||||
icon: ServerIcon,
|
||||
cell: (info) => (
|
||||
|
||||
@@ -15,16 +15,7 @@ import { prependBasePath } from "@/components/router"
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs))
|
||||
}
|
||||
|
||||
/** Adds event listener to node and returns function that removes the listener */
|
||||
export function listen<T extends Event = Event>(
|
||||
node: Node,
|
||||
event: string,
|
||||
handler: (event: T) => void
|
||||
) {
|
||||
node.addEventListener(event, handler as EventListener)
|
||||
return () => node.removeEventListener(event, handler as EventListener)
|
||||
}
|
||||
// export const cn = clsx
|
||||
|
||||
export async function copyToClipboard(content: string) {
|
||||
const duration = 1500
|
||||
@@ -77,7 +68,6 @@ export const updateSystemList = (() => {
|
||||
|
||||
/** Logs the user out by clearing the auth store and unsubscribing from realtime updates. */
|
||||
export async function logOut() {
|
||||
sessionStorage.setItem("lo", "t")
|
||||
pb.authStore.clear()
|
||||
pb.realtime.unsubscribe()
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ar\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-04-23 17:19\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"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# يوم} other {# أيام}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ساعة} other {# ساعات}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 يومًا"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "إجراءات"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "التنبيهات النشطة"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "إضافة <0>نظام</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "إضافة نظام جديد"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "إضافة نظام"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "إضافة عنوان URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "تعديل خيارات العرض للرسوم البيانية."
|
||||
msgid "Admin"
|
||||
msgstr "مسؤول"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "وكيل"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "التنبيهات"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "جميع الأنظمة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "هل أنت متأكد أنك تريد حذف {name}؟"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "هل أنت متأكد أنك تريد حذف {name}؟"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "النسخ التلقائي يتطلب سياقًا آمنًا."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "متوسط"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "متوسط استخدام وحدة المعالجة المركزية للحاويات"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "المتوسط يتجاوز <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "متوسط استهلاك طاقة GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "متوسط استخدام وحدة المعالجة المركزية على مستوى النظام"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "متوسط استخدام {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "النسخ الاحتياطية"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "عرض النطاق الترددي"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "يدعم Beszel OpenID Connect والعديد من مزودي المصادقة OAuth2."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "يستخدم Beszel <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة."
|
||||
msgstr "يستخدم بيزيل <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة."
|
||||
|
||||
#: src/components/add-system.tsx:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "ثنائي"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "ذاكرة التخزين المؤقت / المخازن المؤقتة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "إلغاء"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "تحذير - فقدان محتمل للبيانات"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "تغيير خيارات التطبيق العامة."
|
||||
msgid "Chart options"
|
||||
msgstr "خيارات الرسم البياني"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "تحقق من {email} للحصول على رابط إعادة التعيين."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "تحقق من السجلات لمزيد من التفاصيل."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "تحقق من خدمة الإشعارات الخاصة بك"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "انقر للنسخ"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "تعليمات سطر الأوامر"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "قم بتكوين كيفية تلقي إشعارات التنبيه."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "تأكيد كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "متابعة"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "متابعة"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "تم النسخ إلى الحافظة"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "نسخ"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "نسخ المضيف"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "نسخ أمر لينكس"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "نسخ أمر لينكس"
|
||||
msgid "Copy text"
|
||||
msgstr "نسخ النص"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "المعالج"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "استخدام وحدة المعالجة المركزية"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "إنشاء حساب"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "داكن"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "لوحة التحكم"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "لوحة التحكم"
|
||||
msgid "Default time period"
|
||||
msgstr "الفترة الزمنية الافتراضية"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "القرص"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "إدخال/إخراج القرص"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "استخدام القرص"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "استخدام القرص لـ {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "استخدام CPU لـ Docker"
|
||||
msgstr "استخدام المعالج لـ Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "استخدام الذاكرة لـ Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "إدخال/إخراج الشبكة لـ Docker"
|
||||
|
||||
@@ -300,55 +297,55 @@ msgstr "التوثيق"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "معطل"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "تعديل"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "البريد الإلكتروني"
|
||||
msgstr "البريد الإشباكي"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "إشعارات البريد الإلكتروني"
|
||||
msgstr "إشعارات البريد الإشباكي"
|
||||
|
||||
#: src/components/login/login.tsx:38
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "أدخل عنوان البريد الإلكتروني لإعادة تعيين كلمة المرور"
|
||||
msgstr "أدخل عنوان البريد الإشباكي لإعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "أدخل عنوان البريد الإلكتروني..."
|
||||
msgstr "أدخل عنوان البريد الإشباكي..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "خطأ"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "يتجاوز {0}{1} في آخر {2, plural, one {# دقيقة} other {# دقائق}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "تصدير التكوين"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "تصدير تكوين الأنظمة الحالية الخاصة بك."
|
||||
|
||||
@@ -356,73 +353,73 @@ msgstr "تصدير تكوين الأنظمة الحالية الخاصة بك."
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "فشل في المصادقة"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "فشل في حفظ الإعدادات"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "فشل في إرسال إشعار الاختبار"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "فشل في تحديث التنبيه"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "تصفية..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "هل نسيت كلمة المرور؟"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "عام"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "استهلاك طاقة GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "شبكة"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "مضيف / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
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:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "عنوان البريد الإلكتروني غير صالح."
|
||||
msgstr "عنوان البريد الإشباكي غير صالح."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "كيرنل"
|
||||
msgstr "النواة"
|
||||
|
||||
#: src/components/routes/settings/general.tsx:45
|
||||
msgid "Language"
|
||||
msgstr "اللغة"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "التخطيط"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "فاتح"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "تسجيل الخروج"
|
||||
msgid "Login"
|
||||
msgstr "تسجيل الدخول"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "فشل محاولة تسجيل الدخول"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "فشل محاولة تسجيل الدخول"
|
||||
msgid "Logs"
|
||||
msgstr "السجلات"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
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
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "إدارة تفضيلات العرض والإشعارات."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "تعليمات الإعداد اليدوي"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "1 دقيقة كحد"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "الذاكرة"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "استخدام الذاكرة"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "استخدام الذاكرة لحاويات Docker"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "الاسم"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "الشبكة"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "حركة مرور الشبكة لحاويات Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "حركة مرور الشبكة للواجهات العامة"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "حركة مرور الشبكة للواجهات العامة"
|
||||
msgid "No results found."
|
||||
msgstr "لم يتم العثور على نتائج."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "لم يتم العثور على أنظمة."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "الإشعارات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "دعم OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "فتح القائمة"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "أو المتابعة باستخدام"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "الكتابة فوق التنبيهات الحالية"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "صفحة"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "الصفحات / الإعدادات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "كلمة المرور"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "كلمة المرور يجب أن تتكون من 8 أحرف على الأقل."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "يجب أن تكون كلمة المرور أقل من 72 بايت."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "تم استلام طلب إعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "إيقاف مؤقت"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "متوقف مؤقتا"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "يرجى <0>تكوين خادم SMTP</0> لضمان تسليم التنبيهات."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "يرجى التحقق من السجلات لمزيد من التفاصيل."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "يرجى التحقق من بيانات الاعتماد الخاصة بك والمحاولة مرة أخرى"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "يرجى التحقق من بيانات الاعتماد الخاصة ب
|
||||
msgid "Please create an admin account"
|
||||
msgstr "يرجى إنشاء حساب مسؤول"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموقع"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "يرجى تمكين النوافذ المنبثقة لهذا الموق
|
||||
msgid "Please log in again"
|
||||
msgstr "يرجى تسجيل الدخول مرة أخرى"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "يرجى الاطلاع على <0>التوثيق</0> للحصول على التعليمات."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "يرجى الاطلاع على <0>التوثيق</0> للحصول على
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "يرجى تسجيل الدخول إلى حسابك"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "المنفذ"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "الاستخدام الدقيق في الوقت المسجل"
|
||||
|
||||
@@ -605,41 +602,41 @@ msgid "Preferred Language"
|
||||
msgstr "اللغة المفضلة"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "المفتاح العام"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "قراءة"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "تم الاستلام"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "إعادة تعيين كلمة المرور"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "استئناف"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "احفظ العنوان باستخدام مفتاح الإدخال أو الفاصلة. اتركه فارغًا لتعطيل إشعارات البريد الإلكتروني."
|
||||
msgstr "احفظ العنوان باستخدام مفتاح الإدخال أو الفاصلة. اتركه فارغًا لتعطيل إشعارات البريد الإشباكي."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "حفظ الإعدادات"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "احفظ النظام"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -649,12 +646,12 @@ msgstr "بحث"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "البحث عن الأنظمة أو الإعدادات..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "تم الإرسال"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "يحدد النطاق الزمني الافتراضي للرسوم ال
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "الإعدادات"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "تم حفظ الإعدادات"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "تسجيل الدخول"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "تسجيل الدخول"
|
||||
msgid "SMTP settings"
|
||||
msgstr "إعدادات SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "الترتيب حسب"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "الترتيب حسب"
|
||||
msgid "Status"
|
||||
msgstr "الحالة"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "مساحة التبديل المستخدمة من قبل النظام"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "استخدام التبديل"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "النظام"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "النظام"
|
||||
msgid "Systems"
|
||||
msgstr "الأنظمة"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "جدول"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "درجة الحرارة"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "درجة الحرارة"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "درجات حرارة مستشعرات النظام"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "اختبار <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "تم إرسال إشعار الاختبار"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "ثم قم بتسجيل الدخول إلى الواجهة الخلفية وأعد تعيين كلمة مرور حساب المستخدم الخاص بك في جدول المستخدمين."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "معدل نقل {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "معدل نقل نظام الملفات الجذر"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "إلى البريد الإلكتروني"
|
||||
msgstr "إلى البريد الإشباكي"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "تبديل الشبكة"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "تبديل السمة"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "يتم التفعيل عندما يتجاوز استخدام أي قرص عتبة معينة"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "قيد التشغيل"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "محدث في الوقت الحقيقي. انقر على نظام لعرض المعلومات."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "مدة التشغيل"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "الاستخدام"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "استخدام القسم الجذر"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "مستخدم"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "مستخدم"
|
||||
msgid "Users"
|
||||
msgstr "المستخدمون"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "عرض"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "الأعمدة الظاهرة"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "في انتظار وجود سجلات كافية للعرض"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "في انتظار وجود سجلات كافية للعرض"
|
||||
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:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "إشعارات Webhook / Push"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "كتابة"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "تكوين YAML"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "تكوين YAML"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "تم تحديث إعدادات المستخدم الخاصة بك."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: bg\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Bulgarian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# ден} other {# дни}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# час} other {# часа}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Сигурен ли си, че искаш да изтриеш {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Автоматичното копиране изисква защитен контескт."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Средно"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Средно използване на процесора на контейнерите"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Средно използване на процесора на конт
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Средната стойност надхвърля <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Средна консумация на ток от графични карти"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Средно използване на процесора на цялата система"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Средно използване на {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Архиви"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandwidth на мрежата"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "Процесор"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Употреба на процесор"
|
||||
@@ -268,29 +268,29 @@ msgstr "Изтрий"
|
||||
msgid "Disk"
|
||||
msgstr "Диск"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Диск I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Използване на диск"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Изполване на диск от {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Използване на процесор от docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Изполване на памет от docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Мрежов I/O използван от docker"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Документация"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Неуспешно обнови тревога"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Филтрирай..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Забравена парола?"
|
||||
msgid "General"
|
||||
msgstr "Общо"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Консумация на ток от графична карта"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Невалиден имейл адрес."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Linux Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Максимум 1 минута"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Памет"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Употреба на паметта"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Използването на памет от docker контейнерите"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Име"
|
||||
msgid "Net"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Мрежов трафик на docker контейнери"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Мрежов трафик на публични интерфейси"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Моля влез в акаунта ти"
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Точно използване в записаното време"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Сортиране по"
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Изполван swap от системата"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Използване на swap"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Температура"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Температири на системни сензори"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "След това влез в backend-а и нулирай парола
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Пропускателна способност на {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Пропускателна способност на root файловата система"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Пропускателна способност на root файлова
|
||||
msgid "To email(s)"
|
||||
msgstr "До имейл(ите)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Превключване на мрежа"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Задейства се, когато употребата на няко
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Актуализира се в реално време. Натисни на система за да видиш информация."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Време на работа"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Употреба"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Употреба на root partition-а"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Изглед"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видими полета"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Изчаква се за достатъчно записи за показване"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML конфигурация"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Настройките за потребителя ти са обновени."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: cs\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-14 00:50\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
@@ -303,12 +303,12 @@ msgstr "Dokumentace"
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "Nefunkční"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Upravit"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
@@ -454,7 +454,7 @@ msgstr "Správa nastavení zobrazení a oznámení."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "Pokyny k manuálnímu nastavení"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
@@ -544,7 +544,7 @@ msgstr "Heslo musí obsahovat alespoň 8 znaků."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "Heslo musí být menší než 72 bytů."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
@@ -556,7 +556,7 @@ msgstr "Pozastavit"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "Pozastaveno"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
@@ -639,7 +639,7 @@ msgstr "Uložit nastavení"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "Uložit systém"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -723,7 +723,7 @@ msgstr "Tabulka"
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "Teplota"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
@@ -807,7 +807,7 @@ msgstr "Spustí se, když využití disku překročí prahovou hodnotu"
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "Funkční"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
@@ -875,3 +875,4 @@ 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: da\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Danish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# day} other {# days}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hour} other {# hours}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Er du sikker på, at du vil slette {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisk kopiering kræver en sikker kontekst."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Gennemsnitlig"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Gennemsnitlig CPU udnyttelse af containere"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Gennemsnitlig CPU udnyttelse af containere"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Gennemsnit overstiger <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Gennemsnitligt strømforbrug for GPU'er"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Gennemsnitlig systembaseret CPU-udnyttelse"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Gennemsnitlig udnyttelse af {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Sikkerhedskopier"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Båndbredde"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU forbrug"
|
||||
@@ -268,29 +268,29 @@ msgstr "Slet"
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Diskforbrug"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Diskforbrug af {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU forbrug"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Hukommelsesforbrug"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Netværk I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentation"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Kunne ikke opdatere alarm"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Glemt adgangskode?"
|
||||
msgid "General"
|
||||
msgstr "Generelt"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Gpu Strøm Træk"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Ugyldig email adresse."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maks. 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Hukommelse"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Hukommelsesforbrug"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Hukommelsesforbrug af dockercontainere"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Navn"
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Netværkstrafik af dockercontainere"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Netværkstrafik af offentlige grænseflader"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Log venligst ind på din konto"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Præcis udnyttelse på det registrerede tidspunkt"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sorter efter"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap plads brugt af systemet"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap forbrug"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatur"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturer i systemsensorer"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Log derefter ind på backend og nulstil adgangskoden til din brugerkonto
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Denne handling kan ikke fortrydes. Dette vil permanent slette alle aktuelle elementer for {name} fra databasen."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Gennemløb af {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Gennemløb af rodfilsystemet"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Gennemløb af rodfilsystemet"
|
||||
msgid "To email(s)"
|
||||
msgstr "Til email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Slå gitter til/fra"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Udløser når brugen af en disk overstiger en tærskel"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Opdateret i realtid. Klik på et system for at se information."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Oppetid"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Forbrug"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Brug af rodpartition"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Vis"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synlige felter"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Venter på nok posteringer til at vise"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML Konfiguration"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Dine brugerindstillinger er opdateret."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# Tag} other {# Tage}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# Stunde} other {# Stunden}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Möchtest du {name} wirklich löschen?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisches Kopieren erfordert einen sicheren Kontext."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Durchschnitt"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Durchschnittliche CPU-Auslastung der Container"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Durchschnittliche CPU-Auslastung der Container"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Durchschnitt überschreitet <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Durchschnittlicher Stromverbrauch der GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Durchschnittliche systemweite CPU-Auslastung"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Durchschnittliche Auslastung von {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandbreite"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU-Auslastung"
|
||||
@@ -268,29 +268,29 @@ msgstr "Löschen"
|
||||
msgid "Disk"
|
||||
msgstr "Festplatte"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Festplatten-I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Festplattennutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Festplattennutzung von {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker-CPU-Auslastung"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker-Arbeitsspeichernutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker-Netzwerk-I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentation"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Warnung konnte nicht aktualisiert werden"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Passwort vergessen?"
|
||||
msgid "General"
|
||||
msgstr "Allgemein"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU-Leistungsaufnahme"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Ungültige E-Mail-Adresse."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 Min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Arbeitsspeicher"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Arbeitsspeichernutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Arbeitsspeichernutzung der Docker-Container"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Name"
|
||||
msgid "Net"
|
||||
msgstr "Netz"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Netzwerkverkehr der Docker-Container"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Netzwerkverkehr der öffentlichen Schnittstellen"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Bitte melde dich bei beinem Konto an"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Genaue Nutzung zum aufgezeichneten Zeitpunkt"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sortieren nach"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Vom System genutzter Swap-Speicher"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap-Nutzung"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatur"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturen der Systemsensoren"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Melde dich dann im Backend an und setze dein Benutzerkontopasswort in de
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Durchsatz von {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Durchsatz des Root-Dateisystems"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Durchsatz des Root-Dateisystems"
|
||||
msgid "To email(s)"
|
||||
msgstr "An E-Mail(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Raster umschalten"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Löst aus, wenn die Nutzung einer Festplatte einen Schwellenwert übersc
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "In Echtzeit aktualisiert. Klicke auf ein System, um Informationen anzuzeigen."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Betriebszeit"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Nutzung"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Nutzung der Root-Partition"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Ansicht"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Sichtbare Spalten"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Warten auf genügend Datensätze zur Anzeige"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML-Konfiguration"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Deine Benutzereinstellungen wurden aktualisiert."
|
||||
|
||||
|
||||
@@ -13,40 +13,39 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:252
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# day} other {# days}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:250
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hour} other {# hours}}"
|
||||
|
||||
#: src/lib/utils.ts:168
|
||||
#: src/lib/utils.ts:158
|
||||
msgid "1 hour"
|
||||
msgstr "1 hour"
|
||||
|
||||
#: src/lib/utils.ts:191
|
||||
#: src/lib/utils.ts:181
|
||||
msgid "1 week"
|
||||
msgstr "1 week"
|
||||
|
||||
#: src/lib/utils.ts:176
|
||||
#: src/lib/utils.ts:166
|
||||
msgid "12 hours"
|
||||
msgstr "12 hours"
|
||||
|
||||
#: src/lib/utils.ts:184
|
||||
#: src/lib/utils.ts:174
|
||||
msgid "24 hours"
|
||||
msgstr "24 hours"
|
||||
|
||||
#: src/lib/utils.ts:199
|
||||
#: src/lib/utils.ts:189
|
||||
msgid "30 days"
|
||||
msgstr "30 days"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:278
|
||||
#: src/components/systems-table/systems-table.tsx:366
|
||||
#: src/components/systems-table/systems-table.tsx:508
|
||||
#: src/components/systems-table/systems-table.tsx:518
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
@@ -58,11 +57,11 @@ msgstr "Active Alerts"
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Add <0>System</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:124
|
||||
msgid "Add New System"
|
||||
msgstr "Add New System"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:230
|
||||
msgid "Add system"
|
||||
msgstr "Add system"
|
||||
|
||||
@@ -74,15 +73,15 @@ msgstr "Add URL"
|
||||
msgid "Adjust display options for charts."
|
||||
msgstr "Adjust display options for charts."
|
||||
|
||||
#: src/components/command-palette.tsx:131
|
||||
#: src/components/command-palette.tsx:144
|
||||
#: src/components/command-palette.tsx:158
|
||||
#: src/components/command-palette.tsx:172
|
||||
#: src/components/command-palette.tsx:187
|
||||
#: 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
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:246
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
@@ -91,12 +90,12 @@ msgstr "Agent"
|
||||
msgid "Alerts"
|
||||
msgstr "Alerts"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:319
|
||||
msgid "All Systems"
|
||||
msgstr "All Systems"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:642
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Are you sure you want to delete {name}?"
|
||||
|
||||
@@ -104,43 +103,41 @@ msgstr "Are you sure you want to delete {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatic copy requires a secure context."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Average"
|
||||
msgstr "Average"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:410
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Average CPU utilization of containers"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Average exceeds <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:511
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Average power consumption of GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:399
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Average system-wide CPU utilization"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:529
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Average utilization of {0}"
|
||||
|
||||
#: src/components/command-palette.tsx:171
|
||||
#: src/components/navbar.tsx:94
|
||||
#: src/components/command-palette.tsx:169
|
||||
msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/lib/utils.ts:327
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandwidth"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:304
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
|
||||
@@ -148,7 +145,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:130
|
||||
#: src/components/add-system.tsx:129
|
||||
msgid "Binary"
|
||||
msgstr "Binary"
|
||||
|
||||
@@ -156,7 +153,7 @@ msgstr "Binary"
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Cancel"
|
||||
msgstr "Cancel"
|
||||
|
||||
@@ -184,7 +181,7 @@ msgstr "Check logs for more details."
|
||||
msgid "Check your notification service"
|
||||
msgstr "Check your notification service"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:203
|
||||
msgid "Click to copy"
|
||||
msgstr "Click to copy"
|
||||
|
||||
@@ -197,29 +194,29 @@ msgstr "Command line instructions"
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configure how you receive alert notifications."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:210
|
||||
#: src/components/login/auth-form.tsx:215
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirm password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:659
|
||||
msgid "Continue"
|
||||
msgstr "Continue"
|
||||
|
||||
#: src/lib/utils.ts:35
|
||||
#: src/lib/utils.ts:26
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copied to clipboard"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:214
|
||||
#: src/components/add-system.tsx:216
|
||||
msgid "Copy"
|
||||
msgstr "Copy"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:624
|
||||
msgid "Copy host"
|
||||
msgstr "Copy host"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:223
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copy Linux command"
|
||||
|
||||
@@ -227,17 +224,17 @@ msgstr "Copy Linux command"
|
||||
msgid "Copy text"
|
||||
msgstr "Copy text"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:165
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:398
|
||||
#: src/lib/utils.ts:309
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU Usage"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:236
|
||||
msgid "Create account"
|
||||
msgstr "Create account"
|
||||
|
||||
@@ -246,7 +243,7 @@ msgstr "Create account"
|
||||
msgid "Dark"
|
||||
msgstr "Dark"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/command-palette.tsx:82
|
||||
#: src/components/routes/home.tsx:35
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
@@ -255,58 +252,57 @@ msgstr "Dashboard"
|
||||
msgid "Default time period"
|
||||
msgstr "Default time period"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:629
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:181
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:438
|
||||
#: src/lib/utils.ts:321
|
||||
msgid "Disk Usage"
|
||||
msgstr "Disk Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:566
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Disk usage of {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:409
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:430
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Memory Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:471
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Network I/O"
|
||||
|
||||
#: src/components/command-palette.tsx:123
|
||||
#: src/components/command-palette.tsx:125
|
||||
msgid "Documentation"
|
||||
msgstr "Documentation"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:309
|
||||
#: src/lib/utils.ts:306
|
||||
msgid "Down"
|
||||
msgstr "Down"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:124
|
||||
#: src/components/systems-table/systems-table.tsx:599
|
||||
msgid "Edit"
|
||||
msgstr "Edit"
|
||||
|
||||
#: src/components/login/auth-form.tsx:173
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
@@ -322,15 +318,12 @@ msgstr "Enter email address to reset password"
|
||||
msgid "Enter email address..."
|
||||
msgstr "Enter email address..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
@@ -347,12 +340,12 @@ msgstr "Export configuration"
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Export your current systems configuration."
|
||||
|
||||
#: src/lib/utils.ts:48
|
||||
#: src/lib/utils.ts:39
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Failed to authenticate"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Failed to save settings"
|
||||
|
||||
@@ -364,8 +357,8 @@ msgstr "Failed to send test notification"
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Failed to update alert"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:606
|
||||
#: src/components/systems-table/systems-table.tsx:326
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
@@ -373,25 +366,25 @@ msgstr "Filter..."
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Forgot password?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:510
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU Power Draw"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:353
|
||||
msgid "Grid"
|
||||
msgstr "Grid"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:157
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
@@ -404,7 +397,7 @@ msgid "Invalid email address."
|
||||
msgstr "Invalid email address."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:264
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -412,7 +405,7 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:339
|
||||
msgid "Layout"
|
||||
msgstr "Layout"
|
||||
|
||||
@@ -429,13 +422,13 @@ msgstr "Log Out"
|
||||
msgid "Login"
|
||||
msgstr "Login"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: 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:155
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
@@ -447,60 +440,60 @@ msgstr "Looking instead for where to create alerts? Click the bell <0/> icons in
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Manage display and notification preferences."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Manual setup instructions"
|
||||
msgstr "Manual setup instructions"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:636
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:173
|
||||
msgid "Memory"
|
||||
msgstr "Memory"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:420
|
||||
#: src/lib/utils.ts:315
|
||||
msgid "Memory Usage"
|
||||
msgstr "Memory Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:431
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Memory usage of docker containers"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:153
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:198
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Network traffic of docker containers"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Network traffic of public interfaces"
|
||||
|
||||
#: src/components/command-palette.tsx:48
|
||||
#: src/components/command-palette.tsx:50
|
||||
msgid "No results found."
|
||||
msgstr "No results found."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:474
|
||||
#: src/components/systems-table/systems-table.tsx:547
|
||||
msgid "No systems found."
|
||||
msgstr "No systems found."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/command-palette.tsx:111
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:299
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC support"
|
||||
|
||||
@@ -508,11 +501,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:600
|
||||
#: src/components/systems-table/systems-table.tsx:585
|
||||
msgid "Open menu"
|
||||
msgstr "Open menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:248
|
||||
msgid "Or continue with"
|
||||
msgstr "Or continue with"
|
||||
|
||||
@@ -520,16 +513,16 @@ msgstr "Or continue with"
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Overwrite existing alerts"
|
||||
|
||||
#: src/components/command-palette.tsx:83
|
||||
#: src/components/command-palette.tsx:85
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
|
||||
#: src/components/command-palette.tsx:70
|
||||
#: src/components/command-palette.tsx:72
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pages / Settings"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:192
|
||||
#: src/components/login/auth-form.tsx:197
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
@@ -545,14 +538,10 @@ msgstr "Password must be less than 72 bytes."
|
||||
msgid "Password reset request received"
|
||||
msgstr "Password reset request received"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:618
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
msgid "Paused"
|
||||
msgstr "Paused"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
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."
|
||||
@@ -561,8 +550,8 @@ msgstr "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Please check logs for more details."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Please check your credentials and try again"
|
||||
|
||||
@@ -574,11 +563,11 @@ msgstr "Please create an admin account"
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Please enable pop-ups for this site"
|
||||
|
||||
#: src/lib/utils.ts:49
|
||||
#: src/lib/utils.ts:40
|
||||
msgid "Please log in again"
|
||||
msgstr "Please log in again"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:307
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Please see <0>the documentation</0> for instructions."
|
||||
|
||||
@@ -586,12 +575,12 @@ msgstr "Please see <0>the documentation</0> for instructions."
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Please sign in to your account"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:169
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Precise utilization at the recorded time"
|
||||
|
||||
@@ -600,7 +589,7 @@ msgid "Preferred Language"
|
||||
msgstr "Preferred Language"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:180
|
||||
msgid "Public Key"
|
||||
msgstr "Public Key"
|
||||
|
||||
@@ -619,7 +608,7 @@ msgstr "Received"
|
||||
msgid "Reset Password"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:613
|
||||
msgid "Resume"
|
||||
msgstr "Resume"
|
||||
|
||||
@@ -627,12 +616,12 @@ msgstr "Resume"
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
msgid "Save Settings"
|
||||
msgstr "Save Settings"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:230
|
||||
msgid "Save system"
|
||||
msgstr "Save system"
|
||||
|
||||
@@ -640,7 +629,7 @@ msgstr "Save system"
|
||||
msgid "Search"
|
||||
msgstr "Search"
|
||||
|
||||
#: src/components/command-palette.tsx:45
|
||||
#: src/components/command-palette.tsx:47
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Search for systems or settings..."
|
||||
|
||||
@@ -657,9 +646,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:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/command-palette.tsx:96
|
||||
#: src/components/command-palette.tsx:99
|
||||
#: src/components/command-palette.tsx:114
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
msgid "Settings"
|
||||
@@ -669,37 +658,37 @@ msgstr "Settings"
|
||||
msgid "Settings saved"
|
||||
msgstr "Settings saved"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:236
|
||||
msgid "Sign in"
|
||||
msgstr "Sign in"
|
||||
|
||||
#: src/components/command-palette.tsx:184
|
||||
#: src/components/command-palette.tsx:186
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP settings"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:361
|
||||
msgid "Sort By"
|
||||
msgstr "Sort By"
|
||||
|
||||
#: src/lib/utils.ts:311
|
||||
#: src/lib/utils.ts:301
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:487
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap space used by the system"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:486
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap Usage"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:144
|
||||
#: src/components/systems-table/systems-table.tsx:518
|
||||
#: src/lib/utils.ts:306
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
@@ -711,21 +700,21 @@ 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/systems-table/systems-table.tsx:364
|
||||
#: src/components/systems-table/systems-table.tsx:349
|
||||
msgid "Table"
|
||||
msgstr "Table"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:218
|
||||
msgid "Temp"
|
||||
msgstr "Temp"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:498
|
||||
#: src/lib/utils.ts:334
|
||||
msgid "Temperature"
|
||||
msgstr "Temperature"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatures of system sensors"
|
||||
|
||||
@@ -737,11 +726,11 @@ msgstr "Test <0>URL</0>"
|
||||
msgid "Test notification sent"
|
||||
msgstr "Test notification sent"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:145
|
||||
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:137
|
||||
#: src/components/add-system.tsx:136
|
||||
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."
|
||||
|
||||
@@ -749,15 +738,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:660
|
||||
#: src/components/systems-table/systems-table.tsx:645
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:578
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Throughput of {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Throughput of root filesystem"
|
||||
|
||||
@@ -765,8 +754,8 @@ msgstr "Throughput of root filesystem"
|
||||
msgid "To email(s)"
|
||||
msgstr "To email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:373
|
||||
#: src/components/routes/system.tsx:386
|
||||
msgid "Toggle grid"
|
||||
msgstr "Toggle grid"
|
||||
|
||||
@@ -774,74 +763,73 @@ msgstr "Toggle grid"
|
||||
msgid "Toggle theme"
|
||||
msgstr "Toggle theme"
|
||||
|
||||
#: src/lib/utils.ts:347
|
||||
#: src/lib/utils.ts:337
|
||||
msgid "Triggers when any sensor exceeds a threshold"
|
||||
msgstr "Triggers when any sensor exceeds a threshold"
|
||||
|
||||
#: src/lib/utils.ts:340
|
||||
#: src/lib/utils.ts:330
|
||||
msgid "Triggers when combined up/down exceeds a threshold"
|
||||
msgstr "Triggers when combined up/down exceeds a threshold"
|
||||
|
||||
#: src/lib/utils.ts:322
|
||||
#: src/lib/utils.ts:312
|
||||
msgid "Triggers when CPU usage exceeds a threshold"
|
||||
msgstr "Triggers when CPU usage exceeds a threshold"
|
||||
|
||||
#: src/lib/utils.ts:328
|
||||
#: src/lib/utils.ts:318
|
||||
msgid "Triggers when memory usage exceeds a threshold"
|
||||
msgstr "Triggers when memory usage exceeds a threshold"
|
||||
|
||||
#: src/lib/utils.ts:314
|
||||
#: src/lib/utils.ts:304
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Triggers when status switches between up and down"
|
||||
|
||||
#: src/lib/utils.ts:334
|
||||
#: src/lib/utils.ts:324
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Triggers when usage of any disk exceeds a threshold"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:307
|
||||
msgid "Up"
|
||||
msgstr "Up"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:322
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:263
|
||||
msgid "Uptime"
|
||||
msgstr "Uptime"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:528
|
||||
#: src/components/routes/system.tsx:565
|
||||
msgid "Usage"
|
||||
msgstr "Usage"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:438
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Usage of root partition"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: 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/command-palette.tsx:143
|
||||
#: src/components/navbar.tsx:70
|
||||
#: src/components/command-palette.tsx:141
|
||||
msgid "Users"
|
||||
msgstr "Users"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:331
|
||||
msgid "View"
|
||||
msgstr "View"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:395
|
||||
msgid "Visible Fields"
|
||||
msgstr "Visible Fields"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Waiting for enough records to display"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-28 17:20\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# día} other {# días}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hora} other {# horas}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "¿Está seguro de que desea eliminar {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copia automática requiere un contexto seguro."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Promedio"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilización promedio de CPU de los contenedores"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Utilización promedio de CPU de los contenedores"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "El promedio excede <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Consumo de energía promedio de GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilización promedio de CPU del sistema"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Uso promedio de {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Copias de Seguridad"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Ancho de banda"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Uso de CPU"
|
||||
@@ -268,29 +268,29 @@ msgstr "Eliminar"
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "E/S de Disco"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Uso de Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Uso de disco de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Uso de CPU de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Uso de Memoria de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "E/S de Red de Docker"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Documentación"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr "Abajo"
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Error al actualizar la alerta"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrar..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "¿Olvidó su contraseña?"
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Consumo de energía de la GPU"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Dirección de correo electrónico no válida."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr "Instrucciones manuales de configuración"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Máx 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Memoria"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Uso de Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Uso de memoria de los contenedores de Docker"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Nombre"
|
||||
msgid "Net"
|
||||
msgstr "Red"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Tráfico de red de los contenedores de Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Tráfico de red de interfaces públicas"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Por favor, inicie sesión en su cuenta"
|
||||
msgid "Port"
|
||||
msgstr "Puerto"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilización precisa en el momento registrado"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Ordenar por"
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espacio de swap utilizado por el sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Uso de Swap"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturas de los sensores del sistema"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Luego inicie sesión en el backend y restablezca la contraseña de su cu
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Rendimiento de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Rendimiento del sistema de archivos raíz"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Rendimiento del sistema de archivos raíz"
|
||||
msgid "To email(s)"
|
||||
msgstr "A correo(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Alternar cuadrícula"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Se activa cuando el uso de cualquier disco supera un umbral"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr "Activo"
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr "Activo"
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Tiempo de actividad"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Uso de la partición raíz"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Vista"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Columnas visibles"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Esperando suficientes registros para mostrar"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "Configuración YAML"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Su configuración de usuario ha sido actualizada."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: fa\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Persian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# روز} other {# روز}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ساعت} other {# ساعت}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "آیا مطمئن هستید که میخواهید {name} را حذف
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "کپی خودکار نیاز به یک زمینه امن دارد."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "میانگین"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "میانگین استفاده از CPU کانتینرها"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "میانگین استفاده از CPU کانتینرها"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "میانگین مصرف برق پردازندههای گرافیکی"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "میانگین استفاده از CPU در کل سیستم"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "میانگین استفاده از {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "پشتیبانگیریها"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "پهنای باند"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "پردازنده"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "میزان استفاده از پردازنده"
|
||||
@@ -268,29 +268,29 @@ msgstr "حذف"
|
||||
msgid "Disk"
|
||||
msgstr "دیسک"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "ورودی/خروجی دیسک"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "میزان استفاده از دیسک"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "میزان استفاده از دیسک {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "میزان استفاده از CPU داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "میزان استفاده از حافظه داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "ورودی/خروجی شبکه داکر"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "مستندات"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "بهروزرسانی هشدار ناموفق بود"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "فیلتر..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "رمز عبور را فراموش کردهاید؟"
|
||||
msgid "General"
|
||||
msgstr "عمومی"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "مصرف برق پردازنده گرافیکی"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "آدرس ایمیل نامعتبر است."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "هسته"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "حداکثر ۱ دقیقه"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "حافظه"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "میزان استفاده از حافظه"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "میزان استفاده از حافظه کانتینرهای داکر"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "نام"
|
||||
msgid "Net"
|
||||
msgstr "شبکه"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "ترافیک شبکه کانتینرهای داکر"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "ترافیک شبکه رابطهای عمومی"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "لطفاً به حساب کاربری خود وارد شوید"
|
||||
msgid "Port"
|
||||
msgstr "پورت"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "میزان دقیق استفاده در زمان ثبت شده"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "مرتبسازی بر اساس"
|
||||
msgid "Status"
|
||||
msgstr "وضعیت"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "فضای Swap استفاده شده توسط سیستم"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "میزان استفاده از Swap"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "دما"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "دمای حسگرهای سیستم"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "سپس وارد بخش پشتیبان شوید و رمز عبور حسا
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "توان عملیاتی {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "توان عملیاتی سیستم فایل ریشه"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "توان عملیاتی سیستم فایل ریشه"
|
||||
msgid "To email(s)"
|
||||
msgstr "به ایمیل(ها)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "تغییر نمایش جدول"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "هنگامی که استفاده از هر دیسکی از یک آستا
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "به صورت لحظهای بهروزرسانی میشود. برای مشاهده اطلاعات، روی یک سیستم کلیک کنید."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "آپتایم"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "میزان استفاده"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "میزان استفاده از پارتیشن ریشه"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "مشاهده"
|
||||
msgid "Visible Fields"
|
||||
msgstr "فیلدهای قابل مشاهده"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "در انتظار رکوردهای کافی برای نمایش"
|
||||
|
||||
@@ -875,3 +875,4 @@ 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: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-28 21:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# jour} other {# jours}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# heure} other {# heures}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 jours"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "Alertes actives"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Ajouter <0>Système</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "Ajouter un nouveau système"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "Ajouter un système"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "Ajouter URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "Ajuster les options d'affichage pour les graphiques."
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "Alertes"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "Tous les systèmes"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copie automatique nécessite un contexte sécurisé."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "Moyenne"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilisation moyenne du CPU des conteneurs"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "La moyenne dépasse <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Consommation d'énergie moyenne des GPUs"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilisation moyenne du CPU à l'échelle du système"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Utilisation moyenne de {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "Sauvegardes"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bande passante"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'authentification OAuth2."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
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:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "Binaire"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Tampons"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Attention - perte de données potentielle"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "Modifier les options générales de l'application."
|
||||
msgid "Chart options"
|
||||
msgstr "Options de graphique"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Vérifiez {email} pour un lien de réinitialisation."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Vérifiez les journaux pour plus de détails."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "Vérifiez votre service de notification"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "Cliquez pour copier"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "Instructions en ligne de commande"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configurez comment vous recevez les notifications d'alerte."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmer le mot de passe"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "Continuer"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "Continuer"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copié dans le presse-papiers"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "Copier l'hôte"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copier la commande Linux"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "Copier la commande Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copier le texte"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "Utilisation du CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "Créer un compte"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "Tableau de bord"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "Tableau de bord"
|
||||
msgid "Default time period"
|
||||
msgstr "Période par défaut"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "Disque"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "Entrée/Sortie disque"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "Utilisation du disque"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Utilisation du disque de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Utilisation du CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Utilisation de la mémoire Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Entrée/Sortie réseau Docker"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "Documentation"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "Injoignable"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Éditer"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "Notifications par email"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "Notifications par email"
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Entrez l'adresse email pour réinitialiser le mot de passe"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "Entrez l'adresse email..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
msgid "Exceeds {0}{1} in last {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
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Les systèmes existants non définis dans <0>config.yml</0> seront supprimés. Veuillez faire des sauvegardes régulières."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "Exporter la configuration"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Exportez la configuration actuelle de vos systèmes."
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "Exportez la configuration actuelle de vos systèmes."
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Échec de l'authentification"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Échec de l'enregistrement des paramètres"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Échec de l'envoi de la notification de test"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Échec de la mise à jour de l'alerte"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrer..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Mot de passe oublié ?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Consommation du GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "Grille"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "Hôte / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Si vous avez perdu le mot de passe de votre compte administrateur, vous pouvez le réinitialiser en utilisant la commande suivante."
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "Adresse email invalide."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "Noyau"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "Noyau"
|
||||
msgid "Language"
|
||||
msgstr "Langue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "Disposition"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "Clair"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "Déconnexion"
|
||||
msgid "Login"
|
||||
msgstr "Connexion"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Échec de la tentative de connexion"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "Échec de la tentative de connexion"
|
||||
msgid "Logs"
|
||||
msgstr "Journaux"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Vous cherchez plutôt où créer des alertes ? Cliquez sur les icônes de cloche <0/> dans le tableau des systèmes."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Gérer les préférences d'affichage et de notification."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "Guide pour une installation manuelle"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "Mémoire"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "Utilisation de la mémoire"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Utilisation de la mémoire des conteneurs Docker"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Trafic réseau des conteneurs Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Trafic réseau des interfaces publiques"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "Trafic réseau des interfaces publiques"
|
||||
msgid "No results found."
|
||||
msgstr "Aucun résultat trouvé."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "Aucun système trouvé."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Support OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "Ouvrir le menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "Ou continuer avec"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Écraser les alertes existantes"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "Page"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pages / Paramètres"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Le mot de passe doit contenir au moins 8 caractères."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "Le mot de passe doit être inférieur à 72 Octets."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "Demande de réinitialisation du mot de passe reçue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "En pause"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
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:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Veuillez vérifier les journaux pour plus de détails."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Veuillez vérifier vos identifiants et réessayer"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "Veuillez vérifier vos identifiants et réessayer"
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Veuillez créer un compte administrateur"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Veuillez activer les pop-ups pour ce site"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "Veuillez activer les pop-ups pour ce site"
|
||||
msgid "Please log in again"
|
||||
msgstr "Veuillez vous reconnecter"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Veuillez consulter <0>la documentation</0> pour les instructions."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "Veuillez consulter <0>la documentation</0> pour les instructions."
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Veuillez vous connecter à votre compte"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilisation précise au moment enregistré"
|
||||
|
||||
@@ -605,41 +602,41 @@ msgid "Preferred Language"
|
||||
msgstr "Langue préférée"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "Clé publique"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "Lecture"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "Reçu"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "Réinitialiser le mot de passe"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "Reprendre"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Enregistrez l'adresse en utilisant la touche Entrée ou la virgule. Laissez vide pour désactiver les notifications par email."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "Enregistrer les paramètres"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "Sauvegarder le système"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -649,12 +646,12 @@ msgstr "Recherche"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Rechercher des systèmes ou des paramètres..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "Envoyé"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "Définit la plage de temps par défaut pour les graphiques lorsqu'un sys
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "Paramètres enregistrés"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "Se connecter"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "Se connecter"
|
||||
msgid "SMTP settings"
|
||||
msgstr "Paramètres SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "Trier par"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "Trier par"
|
||||
msgid "Status"
|
||||
msgstr "Statut"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espace Swap utilisé par le système"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "Utilisation du swap"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "Système"
|
||||
msgid "Systems"
|
||||
msgstr "Systèmes"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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/systems-table/systems-table.tsx:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "Tableau"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "Temp."
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "Température"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Températures des capteurs du système"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Tester <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notification de test envoyée"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
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:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Débit de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Débit du système de fichiers racine"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "Aux email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "Basculer la grille"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "Changer le thème"
|
||||
|
||||
@@ -797,39 +791,39 @@ msgstr "Déclenchement lorsque l'utilisation de la mémoire dépasse un seuil"
|
||||
|
||||
#: src/lib/utils.ts:314
|
||||
msgid "Triggers when status switches between up and down"
|
||||
msgstr "Déclenchement lorsque le statut passe d'opérationnel à indisponible"
|
||||
msgstr "Se déclenche lorsque le statut passe de \"Joignable\" à \"Injoignable\""
|
||||
|
||||
#: src/lib/utils.ts:334
|
||||
msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Déclenchement lorsque l'utilisation de tout disque dépasse un seuil"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "Joignable"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "Temps de fonctionnement"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "Utilisation"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Utilisation de la partition racine"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "Utilisé"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "Utilisé"
|
||||
msgid "Users"
|
||||
msgstr "Utilisateurs"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "Vue"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonnes visibles"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "En attente de suffisamment d'enregistrements à afficher"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "En attente de suffisamment d'enregistrements à afficher"
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Vous voulez nous aider à améliorer nos traductions ? Consultez <0>Crowdin</0> pour plus de détails."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notifications Webhook / Push"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "Écriture"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "Configuration YAML"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "Configuration YAML"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Vos paramètres utilisateur ont été mis à jour."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: hr\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\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"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dan} other {# dani}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# sat} other {# sati}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Jeste li sigurni da želite izbrisati {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatsko kopiranje zahtijeva siguran kontekst."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Prosjek"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Prosječna iskorištenost procesora u spremnicima"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Prosječna iskorištenost procesora u spremnicima"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Prosjek premašuje <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Prosječna iskorištenost procesora na cijelom sustavu"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Sigurnosne kopije"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Propusnost"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "Procesor"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Iskorištenost procesora"
|
||||
@@ -268,29 +268,29 @@ msgstr "Izbriši"
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Iskorištenost Diska"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Iskorištenost diska od {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Iskorištenost Docker Procesora"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Iskorištenost Docker Memorije"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Mrežni I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentacija"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Ažuriranje upozorenja nije uspjelo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Zaboravljena lozinka?"
|
||||
msgid "General"
|
||||
msgstr "Općenito"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Nevažeća adresa e-pošte."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maksimalno 1 minuta"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Memorija"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Upotreba memorije"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Upotreba memorije Docker spremnika"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Ime"
|
||||
msgid "Net"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Mrežni promet Docker spremnika"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Mrežni promet javnih sučelja"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Molimo prijavite se u svoj račun"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Precizno iskorištenje u zabilježenom vremenu"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sortiraj po"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap prostor uzet od strane sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap Iskorištenost"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperature sistemskih senzora"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Zatim se prijavite u backend i resetirajte lozinku korisničkog računa
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Protok {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Protok root datotečnog sustava"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Protok root datotečnog sustava"
|
||||
msgid "To email(s)"
|
||||
msgstr "Primaoci e-pošte"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Uključi/isključi rešetku"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Pokreće se kada iskorištenost bilo kojeg diska premaši prag"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Vrijeme rada"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Iskorištenost"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Iskorištenost root datotečnog sustava"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Prikaz"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Vidljiva polja"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Čeka se na više podataka prije prikaza"
|
||||
|
||||
@@ -875,3 +875,4 @@ 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: hu\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# nap} other {# nap}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# óra} other {# óra}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Biztosan törölni szeretnéd {name}-t?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Az automatikus másolás biztonságos környezetet igényel."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Átlag"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Konténerek átlagos CPU kihasználtsága"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Konténerek átlagos CPU kihasználtsága"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Az átlag meghaladja a <0>{value}{0}</0> értéket"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "GPU-k átlagos energiafogyasztása"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Rendszerszintű CPU átlagos kihasználtság"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "{0} átlagos kihasználtsága"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Biztonsági mentések"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Sávszélesség"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU használat"
|
||||
@@ -268,29 +268,29 @@ msgstr "Törlés"
|
||||
msgid "Disk"
|
||||
msgstr "Lemez"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Lemez I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Lemezhasználat"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Lemezhasználat a {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU használat"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker memória használat"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker hálózat I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentáció"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Nem sikerült frissíteni a riasztást"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Szűrő..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Elfelejtette a jelszavát?"
|
||||
msgid "General"
|
||||
msgstr "Általános"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU áramfelvétele"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Érvénytelen e-mail cím."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maximum 1 perc"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "RAM"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Memóriahasználat"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Docker konténerek memória használata"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Név"
|
||||
msgid "Net"
|
||||
msgstr "Hálózat"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Docker konténerek hálózati forgalma"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Nyilvános interfészek hálózati forgalma"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Kérjük, jelentkezzen be a fiókjába"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Pontos kihasználás a rögzített időpontban"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Rendezés"
|
||||
msgid "Status"
|
||||
msgstr "Állapot"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Rendszer által használt swap terület"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap használat"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Hőmérséklet"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "A rendszer érzékelőinek hőmérséklete"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Ezután jelentkezzen be a backendbe, és állítsa vissza a felhasznál
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Ezt a műveletet nem lehet visszavonni! Véglegesen törli a {name} összes jelenlegi rekordját az adatbázisból!"
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "A {extraFsName} átviteli teljesítménye"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "A gyökér fájlrendszer átviteli teljesítménye"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "A gyökér fájlrendszer átviteli teljesítménye"
|
||||
msgid "To email(s)"
|
||||
msgstr "E-mailben"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Rács ki- és bekapcsolása"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Bekapcsol, ha a lemez érzékelő túllép egy küszöbértéket"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Valós időben frissítve. Kattintson egy rendszerre az információk megtekintéséhez."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Üzemidő"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Használat"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Root partíció kihasználtsága"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Nézet"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Látható mezők"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Elegendő rekordra várva a megjelenítéshez"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML konfiguráció"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "A felhasználói beállítások frissítésre kerültek."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: is\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Icelandic\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dagur} other {# dagar}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# klukkustund} other {# klukkustundir}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Ertu viss um að þú viljir eyða {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Sjálfvisk afritun krefst öruggs samhengis."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Meðal"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Meðal örgjörva notkun container-a."
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Meðal örgjörva notkun container-a."
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Meðaltal er yfir <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Meðal orkunotkun skjákorta"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Meðal nýting örgjörva yfir allt kerfið"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Meðal notkun af {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Öryggisafrit"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Gangnaflutningsgeta"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "Örgjörvi"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Örgjörva notkun"
|
||||
@@ -268,29 +268,29 @@ msgstr "Eyða"
|
||||
msgid "Disk"
|
||||
msgstr "Diskur"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Diskanotkun"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Diska notkun af {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU notkun"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Minnisnotkun Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr ""
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Skjal"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Mistókst að uppfæra tilkynningu"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Sía..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Gleymt lykilorð?"
|
||||
msgid "General"
|
||||
msgstr "Almennt"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Skjákorts rafmagnsnotkun"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Ógilt netfang."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr ""
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Mest 1 mínúta"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Minni"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Minnisnotkun"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Minnisnotkun docker kerfa"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Nafn"
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Net traffík docker kerfa"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr ""
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Vinsamlegast skráðu þig inn á aðganginn þinn"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr ""
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Raða eftir"
|
||||
msgid "Status"
|
||||
msgstr "Staða"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Skipti minni"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Hitastig"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Hitastig kerfa skynjara"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Skráðu þig þá inní bakendann og endurstilltu lykilorðið þitt in
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Þessi aðgerð er óafturkvæmanleg. Þetta mun eyða gögnum fyrir {name} varanlega úr gagnagrunninum."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr ""
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr ""
|
||||
msgid "To email(s)"
|
||||
msgstr "Til tölvupósta"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr ""
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Virkjast þegar diska notkun fer yfir þröskuld"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Uppfærist í rauntíma. Veldu kerfi til að skoða upplýsingar."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr ""
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Skoða"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Sjáanlegir reitir"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Bíður eftir nægum upplýsingum til að sýna"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr ""
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Notenda stillingar vistaðar."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: it\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-22 15:29\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Italian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# giorno} other {# giorni}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ora} other {# ore}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 giorni"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "Azioni"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "Avvisi Attivi"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Aggiungi <0>Sistema</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "Aggiungi Nuovo Sistema"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "Aggiungi sistema"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "Aggiungi URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "Regola le opzioni di visualizzazione per i grafici."
|
||||
msgid "Admin"
|
||||
msgstr "Amministratore"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "Agente"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "Avvisi"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "Tutti i Sistemi"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Sei sicuro di voler eliminare {name}?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "Sei sicuro di voler eliminare {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "La copia automatica richiede un contesto sicuro."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "Media"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilizzo medio della CPU dei container"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "La media supera <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Consumo energetico medio delle GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilizzo medio della CPU a livello di sistema"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Utilizzo medio di {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "Backup"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "Larghezza di banda"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
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:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "Binario"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Attenzione - possibile perdita di dati"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "Modifica le opzioni generali dell'applicazione."
|
||||
msgid "Chart options"
|
||||
msgstr "Opzioni del grafico"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Controlla {email} per un link di reset."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Controlla i log per maggiori dettagli."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "Controlla il tuo servizio di notifica"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "Clicca per copiare"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "Istruzioni da riga di comando"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configura come ricevere le notifiche di avviso."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "Conferma password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "Continua"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "Continua"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Copiato negli appunti"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "Copia"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "Copia host"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Copia comando Linux"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "Copia comando Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Copia testo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "Utilizzo CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "Crea account"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "Scuro"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "Cruscotto"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "Cruscotto"
|
||||
msgid "Default time period"
|
||||
msgstr "Periodo di tempo predefinito"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "I/O Disco"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "Utilizzo Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Utilizzo del disco di {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Utilizzo CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Utilizzo Memoria Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "I/O di Rete Docker"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "Documentazione"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "Offline"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Modifica"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "Notifiche email"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "Notifiche email"
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Inserisci l'indirizzo email per reimpostare la password"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "Inserisci l'indirizzo email..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Supera {0}{1} negli ultimi {2, plural, one {# minuto} other {# minuti}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "I sistemi esistenti non definiti in <0>config.yml</0> verranno eliminati. Si prega di effettuare backup regolari."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "Esporta configurazione"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Esporta la configurazione attuale dei tuoi sistemi."
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "Esporta la configurazione attuale dei tuoi sistemi."
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Autenticazione fallita"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Salvataggio delle impostazioni fallito"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Invio della notifica di test fallito"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Aggiornamento dell'avviso fallito"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "Filtra..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Password dimenticata?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "Generale"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Consumo della GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "Griglia"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Se hai perso la password del tuo account amministratore, puoi reimpostarla utilizzando il seguente comando."
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "Indirizzo email non valido."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Lingua"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "Aspetto"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "Chiaro"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "Disconnetti"
|
||||
msgid "Login"
|
||||
msgstr "Accedi"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Tentativo di accesso fallito"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "Tentativo di accesso fallito"
|
||||
msgid "Logs"
|
||||
msgstr "Log"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Cerchi invece dove creare avvisi? Clicca sulle icone della campana <0/> nella tabella dei sistemi."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Gestisci le preferenze di visualizzazione e notifica."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "Istruzioni di configurazione manuale"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "Memoria"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "Utilizzo Memoria"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Utilizzo della memoria dei container Docker"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "Rete"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Traffico di rete dei container Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Traffico di rete delle interfacce pubbliche"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "Traffico di rete delle interfacce pubbliche"
|
||||
msgid "No results found."
|
||||
msgstr "Nessun risultato trovato."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "Nessun sistema trovato."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "Notifiche"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Supporto OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "Apri menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "Oppure continua con"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Sovrascrivi avvisi esistenti"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "Pagina"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pagine / Impostazioni"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "La password deve contenere almeno 8 caratteri."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "La password deve essere inferiore a 72 byte."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "Richiesta di reimpostazione password ricevuta"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "Pausa"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "In pausa"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
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:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Si prega di controllare i log per maggiori dettagli."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Si prega di controllare le credenziali e riprovare"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "Si prega di controllare le credenziali e riprovare"
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Si prega di creare un account amministratore"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Si prega di abilitare i pop-up per questo sito"
|
||||
|
||||
@@ -583,7 +580,7 @@ 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:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Si prega di consultare <0>la documentazione</0> per le istruzioni."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "Si prega di consultare <0>la documentazione</0> per le istruzioni."
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Si prega di accedere al proprio account"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilizzo preciso al momento registrato"
|
||||
|
||||
@@ -605,41 +602,41 @@ msgid "Preferred Language"
|
||||
msgstr "Lingua Preferita"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "Chiave Pub"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "Lettura"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "Ricevuto"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "Reimposta Password"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "Riprendi"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Salva l'indirizzo usando il tasto invio o la virgola. Lascia vuoto per disabilitare le notifiche email."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "Salva sistema"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -649,12 +646,12 @@ msgstr "Cerca"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Cerca sistemi o impostazioni..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "Inviato"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "Imposta l'intervallo di tempo predefinito per i grafici quando viene vis
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "Impostazioni salvate"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "Accedi"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "Accedi"
|
||||
msgid "SMTP settings"
|
||||
msgstr "Impostazioni SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "Ordina per"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "Ordina per"
|
||||
msgid "Status"
|
||||
msgstr "Stato"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Spazio di swap utilizzato dal sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "Utilizzo Swap"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "Sistema"
|
||||
msgid "Systems"
|
||||
msgstr "Sistemi"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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/systems-table/systems-table.tsx:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "Tabella"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperature dei sensori di sistema"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "Notifica di test inviata"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
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:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Throughput di {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Throughput del filesystem root"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "A email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "Attiva/disattiva griglia"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "Attiva/disattiva tema"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Attiva quando l'utilizzo di un disco supera una soglia"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "Attivo"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "Tempo di attività"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "Utilizzo"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Utilizzo della partizione root"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "Utilizzato"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "Utilizzato"
|
||||
msgid "Users"
|
||||
msgstr "Utenti"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "Vista"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "Colonne visibili"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "In attesa di abbastanza record da visualizzare"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "In attesa di abbastanza record da visualizzare"
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Vuoi aiutarci a migliorare ulteriormente le nostre traduzioni? Dai un'occhiata a <0>Crowdin</0> per maggiori dettagli."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Notifiche Webhook / Push"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "Scrittura"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "Configurazione YAML"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "Configurazione YAML"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Le impostazioni utente sono state aggiornate."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ja\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-13 10:13\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -303,7 +303,7 @@ msgstr "ドキュメント"
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "停止"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
@@ -454,7 +454,7 @@ msgstr "表示と通知の設定を管理します。"
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "手動セットアップの手順"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
@@ -556,7 +556,7 @@ msgstr "一時停止"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "一時停止中"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
@@ -807,7 +807,7 @@ msgstr "ディスクの使用量がしきい値を超えたときにトリガー
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "正常"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML設定"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "ユーザー設定が更新されました。"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ko\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-07 10:06\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Korean\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -303,12 +303,12 @@ msgstr "문서"
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "오프라인"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "수정"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
@@ -454,7 +454,7 @@ msgstr "디스플레이 및 알림 설정"
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "수동 설정 방법"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
@@ -544,7 +544,7 @@ msgstr "비밀번호는 최소 8자 이상이어야 합니다."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "비밀번호는 72 바이트 이하여야 합니다."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
msgid "Password reset request received"
|
||||
@@ -556,7 +556,7 @@ msgstr "일시 중지"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "일시 정지됨"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
@@ -639,7 +639,7 @@ msgstr "설정 저장"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "시스템 저장"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -723,7 +723,7 @@ msgstr "표"
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "온도"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
@@ -807,7 +807,7 @@ msgstr "디스크 사용량이 임계값을 초과할 때 트리거됩니다."
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "온라인"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML 구성"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "사용자 설정이 업데이트되었습니다."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: nl\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-04-14 13:04\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dag} other {# dagen}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# uur} other {# uren}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 dagen"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "Acties"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "Actieve waarschuwingen"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Voeg <0>Systeem</0> toe"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "Nieuw systeem toevoegen"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "Voeg systeem toe"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "Voeg URL toe"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "Weergaveopties voor grafieken aanpassen."
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "Waarschuwingen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "Alle systemen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Weet je zeker dat je {name} wilt verwijderen?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "Weet je zeker dat je {name} wilt verwijderen?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisch kopiëren vereist een veilige context."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "Gemiddelde"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Gemiddeld CPU-gebruik van containers"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Gemiddelde overschrijdt <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Gemiddeld stroomverbruik van GPU's"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Gemiddeld systeembrede CPU-gebruik"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Gemiddeld gebruik van {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "Back-ups"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandbreedte"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
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:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
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:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "Binair"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Opgelet - potentieel gegevensverlies"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "Wijzig algemene applicatie opties."
|
||||
msgid "Chart options"
|
||||
msgstr "Grafiekopties"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Controleer {email} op een reset link."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Controleer de logs voor meer details."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "Controleer je meldingsservice"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
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
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "Instructies voor de opdrachtregel"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Configureer hoe je waarschuwingsmeldingen ontvangt."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "Bevestig wachtwoord"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "Volgende"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "Volgende"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Gekopieerd naar het klembord"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "Kopieer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "Kopieer host"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopieer Linux-opdracht"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "Kopieer Linux-opdracht"
|
||||
msgid "Copy text"
|
||||
msgstr "Kopieer tekst"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "Processorgebruik"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "Account aanmaken"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "Donker"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashboard"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "Dashboard"
|
||||
msgid "Default time period"
|
||||
msgstr "Standaard tijdsduur"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "Schijf"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "Schijf I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "Schijfgebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Schijfgebruik van {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU-gebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker geheugengebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker netwerk I/O"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "Documentatie"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "Offline"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Bewerken"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "E-mail"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "E-mailnotificaties"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "E-mailnotificaties"
|
||||
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:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "Voer een e-mailadres in..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "Configuratie exporteren"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Exporteer je huidige systeemconfiguratie."
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "Exporteer je huidige systeemconfiguratie."
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Authenticatie mislukt"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Instellingen opslaan mislukt"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Versturen test notificatie mislukt"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Bijwerken waarschuwing mislukt"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Wachtwoord vergeten?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "Algemeen"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU stroomverbruik"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "Raster"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "Host / IP-adres"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
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:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "Ongeldig e-mailadres."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "Kernel"
|
||||
msgid "Language"
|
||||
msgstr "Taal"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "Indeling"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "Licht"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "Afmelden"
|
||||
msgid "Login"
|
||||
msgstr "Aanmelden"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Aanmelding mislukt"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "Aanmelding mislukt"
|
||||
msgid "Logs"
|
||||
msgstr "Logs"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
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
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Weergave- en notificatievoorkeuren beheren."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
msgstr "Handmatige installatie-instructies"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "Geheugen"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "Geheugengebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Geheugengebruik van docker containers"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "Naam"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "Net"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Netwerkverkeer van docker containers"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Netwerkverkeer van publieke interfaces"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "Netwerkverkeer van publieke interfaces"
|
||||
msgid "No results found."
|
||||
msgstr "Geen resultaten gevonden."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "Geen systemen gevonden."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "Meldingen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC ondersteuning"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "Open menu"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "Of ga verder met"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Overschrijf bestaande waarschuwingen"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "Pagina"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Pagina's / Instellingen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "Wachtwoord"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Het wachtwoord moet minimaal 8 tekens bevatten."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr ""
|
||||
msgstr "Het wachtwoord moet minder zijn dat 72 bytes."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "Wachtwoord reset aanvraag ontvangen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "Pauze"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "Gepauzeerd"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
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
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Controleer de logs voor meer details."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Controleer je aanmeldgegevens en probeer het opnieuw"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "Controleer je aanmeldgegevens en probeer het opnieuw"
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Maak een beheerdersaccount aan"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Activeer pop-ups voor deze website"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "Activeer pop-ups voor deze website"
|
||||
msgid "Please log in again"
|
||||
msgstr "Meld je opnieuw aan"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Bekijk <0>de documentatie</0> voor instructies."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "Bekijk <0>de documentatie</0> voor instructies."
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Meld je aan bij je account"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "Poort"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Nauwkeurig gebruik op de opgenomen tijd"
|
||||
|
||||
@@ -605,41 +602,41 @@ msgid "Preferred Language"
|
||||
msgstr "Voorkeurstaal"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "Publieke sleutel"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "Lezen"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "Ontvangen"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "Wachtwoord resetten"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "Hervatten"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
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/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "Instellingen opslaan"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "Systeem bewaren"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -649,12 +646,12 @@ msgstr "Zoeken"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Zoek naar systemen of instellingen..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "Verzonden"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "Stelt het standaard tijdsbereik voor grafieken in wanneer een systeem wo
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "Instellingen opgeslagen"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "Aanmelden"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "Aanmelden"
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP-instellingen"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "Sorteren op"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "Sorteren op"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap ruimte gebruikt door het systeem"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap gebruik"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "Systeem"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "Systeem"
|
||||
msgid "Systems"
|
||||
msgstr "Systemen"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "Tabel"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "Temperatuur"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatuur"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatuur van systeem sensoren"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "Testmelding verzonden"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
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:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Doorvoer van {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Doorvoer van het root bestandssysteem"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "Naar e-mail(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "Schakel raster"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "Schakel thema"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Triggert wanneer het gebruik van een schijf een drempelwaarde overschrijdt"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "Online"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "Actief"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "Gebruik"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Gebruik van root-partitie"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "Gebruikt"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "Gebruikt"
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "Weergave"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "Zichtbare kolommen"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Wachtend op genoeg records om weer te geven"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "Wachtend op genoeg records om weer te geven"
|
||||
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:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Pushmeldingen"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "Schrijven"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML Configuratie"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML Configuratie"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Je gebruikersinstellingen zijn bijgewerkt."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: no\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-03-05 20:49\n"
|
||||
"PO-Revision-Date: 2025-03-17 13:40\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Norwegian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dag} other {# dager}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# time} other {# timer}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 dager"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "Handlinger"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "Aktive Alarmer"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Legg til <0>System</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "Legg Til Nytt System"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "Legg til system"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "Legg Til URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "Juster visningsalternativer for diagrammer."
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "Agent"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "Alarmer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "Alle Systemer"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Er du sikker på at du vil slette {name}?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "Er du sikker på at du vil slette {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisk kopiering krever en sikker kontekst."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "Gjennomsnitt"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Gjennomsnittlig CPU-utnyttelse av konteinere"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Gjennomsnittet overstiger <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Gjennomsnittlig strømforbruk for GPU-er"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Gjennomsnittlig CPU-utnyttelse for hele systemet"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Gjennomsnittlig utnyttelse av {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "Sikkerhetskopier"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "Båndbredde"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel støtter OpenID Connect og mange OAuth2 autentiserings-tilbydere."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel bruker <0>Shoutrrr</0> for integrering mot populære meldingstjenester."
|
||||
|
||||
#: src/components/add-system.tsx:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "Binær"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Cache / Buffere"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Advarsel - potensielt tap av data"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "Endre generelle program-innstillinger."
|
||||
msgid "Chart options"
|
||||
msgstr "Diagraminnstillinger"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Sjekk {email} for en nullstillings-link."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Sjekk loggene for flere detaljer."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "Sjekk din meldingstjeneste"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "Klikk for å kopiere"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "Kommandolinje-instrukser"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Konfigurer hvordan du vil motta alarmvarsler."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "Bekreft passord"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "Fortsett"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "Fortsett"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Kopiert til utklippstavlen"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "Kopier"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "Kopier vert"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Kopier Linux-kommando"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "Kopier Linux-kommando"
|
||||
msgid "Copy text"
|
||||
msgstr "Kopier tekst"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU-bruk"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "Opprett konto"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "Mørkt"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "Dashbord"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "Dashbord"
|
||||
msgid "Default time period"
|
||||
msgstr "Standard tidsperiode"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "Diskbruk"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Diskbruk av {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU-bruk"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Minnebruk"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Nettverks-I/O"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "Dokumentasjon"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr "Nede"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr "Rediger"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "E-post"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "E-postvarslinger"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "E-postvarslinger"
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Skriv inn e-postadresse for å nullstille passordet"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "Skriv inn e-postadresse..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "Feil"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Overstiger {0}{1} {2, plural, one {det siste minuttet} other {de siste # minuttene}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
msgid "Existing systems not defined in <0>config.yml</0> will be deleted. Please make regular backups."
|
||||
msgstr "Eksisterende systemer som ikke er er definert i <0>config.yml</0> vil bli slettet. Vennligst ta jevnlige sikkerhetskopier."
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:93
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "Eksporter konfigurasjon"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Eksporter din nåværende systemkonfigurasjon"
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "Eksporter din nåværende systemkonfigurasjon"
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Autentisering mislyktes"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Kunne ikke lagre innstillingene"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Kunne ikke sende test-varsling"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Kunne ikke oppdatere alarm"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
|
||||
msgstr "I <0>{min}</0> {min, plural, one {minutt} other {minutter}}"
|
||||
|
||||
#: src/components/login/auth-form.tsx:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Glemt passord?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "Generelt"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU Effektforbruk"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "Rutenett"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "Vert / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
msgid "If you've lost the password to your admin account, you may reset it using the following command."
|
||||
msgstr "Dersom du har mistet passordet til admin-kontoen kan du nullstille det med følgende kommando."
|
||||
|
||||
#: src/components/login/auth-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "Ugyldig e-postadresse."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "Kjerne"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "Kjerne"
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "Layout"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "Lyst"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "Logg Ut"
|
||||
msgid "Login"
|
||||
msgstr "Logg Inn"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Innlogging mislyktes"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "Innlogging mislyktes"
|
||||
msgid "Logs"
|
||||
msgstr "Logger"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
|
||||
msgstr "Ser du etter hvor du kan opprette alarmer? Klikk på bjelle-ikonene <0/> i systemtabellen."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:85
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Endre visnings- og varslingsinnstillinger."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr "Instruks for Manuell Installasjon"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maks 1 min"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "Minne"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "Minnebruk"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Minnebruk av docker-konteinere"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "Navn"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "Nett"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Nettverkstrafikk av docker-konteinere"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Nettverkstrafikk av eksterne nettverksgrensesnitt"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "Nettverkstrafikk av eksterne nettverksgrensesnitt"
|
||||
msgid "No results found."
|
||||
msgstr "Ingen resultater funnet."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "Ingen systemer funnet."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "Varslinger"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "OAuth 2 / OIDC-støtte"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
msgid "On each restart, systems in the database will be updated to match the systems defined in the file."
|
||||
msgstr "Ved hver omstart vil systemer i databasen bli oppdatert til å matche systemene definert i fila."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "Åpne meny"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "Eller fortsett med"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Overskriv eksisterende alarmer"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "Side"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Sider / Innstillinger"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "Passord"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Passord må bestå av minst 8 tegn."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr "Passord må være mindre enn 72 byte."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "Mottatt forespørsel om å nullstille passord"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "Pause"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "Satt på Pause"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Vennligst <0>konfigurer en SMTP-server</0> for å forsikre deg om at varsler blir levert."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Vennligst sjekk loggene for mer informasjon."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Vennligst kontroller dine innloggingsopplysninger og prøv igjen"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "Vennligst kontroller dine innloggingsopplysninger og prøv igjen"
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Vennligst opprett en admin-konto"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Vennligst aktiver pop-ups for nettsiden"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "Vennligst aktiver pop-ups for nettsiden"
|
||||
msgid "Please log in again"
|
||||
msgstr "Vennligst logg inn på nytt"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Vennligst se <0>dokumentasjonen</0> for instrukser."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "Vennligst se <0>dokumentasjonen</0> for instrukser."
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Vennligst logg inn på kontoen din"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Nøyaktig utnyttelse på registrert tidspunkt"
|
||||
|
||||
@@ -605,39 +602,39 @@ msgid "Preferred Language"
|
||||
msgstr "Foretrukket Språk"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "Offentlig Nøkkel"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "Lesing"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "Mottatt"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "Nullstill Passord"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "Gjenoppta"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Lagre adressen med Enter-tasten eller komma. La feltet være tomt for å deaktivere e-postvarsler."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "Lagre Innstillinger"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr "Lagre system"
|
||||
|
||||
@@ -649,12 +646,12 @@ msgstr "Søk"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Søk etter systemer eller innstillinger..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
msgid "See <0>notification settings</0> to configure how you receive alerts."
|
||||
msgstr "Se <0>varslingsinnstillingene</0> for å konfigurere hvordan du vil motta varsler."
|
||||
|
||||
#. Network bytes sent (upload)
|
||||
#: src/components/charts/area-chart.tsx:64
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "Sendt"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "Angir standard tidsperiode for diagrammer når et system vises."
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "Innstillinger lagret"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "Logg inn"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "Logg inn"
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP-innstillinger"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "Sorter Etter"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "Sorter Etter"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap-plass i bruk av systemet"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap-bruk"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "System"
|
||||
msgid "Systems"
|
||||
msgstr "Systemer"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
msgid "Systems may be managed in a <0>config.yml</0> file inside your data directory."
|
||||
msgstr "Systemer kan håndteres i en <0>config.yml</0>-fil i din data-katalog."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "Tabell"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr "Temp"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatur"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturer på system-sensorer"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Test <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "Test-varsling sendt"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
msgid "The agent must be running on the system to connect. Copy the installation command for the agent below."
|
||||
msgstr "Agenten må kjøre på systemet du vil koble til. Kopier installasjons-kommandoen for agenten under."
|
||||
|
||||
#: src/components/add-system.tsx:137
|
||||
#: src/components/add-system.tsx:138
|
||||
msgid "The agent must be running on the system to connect. Copy the<0>docker-compose.yml</0> for the agent below."
|
||||
msgstr "Agenten må kjøre på systemet du vil koble til. Kopier <0>docker-compose.yml</0> for agenten under."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:98
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Logg deretter inn i backend og nullstill passordet på din konto i users-tabellen."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Denne handlingen kan ikke omgjøres. Dette vil slette alle poster for {name} permanent fra databasen."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Gjennomstrømning av {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Gjennomstrømning av rot-filsystemet"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "Til e-postadresse(r)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "Rutenett av/på"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "Tema av/på"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Slår inn når forbruk av hvilken som helst disk overstiger en grenseverdi"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr "Oppe"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Oppdatert i sanntid. Klikk på et system for å se mer informasjon."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "Oppetid"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "Forbruk"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Forbruk av rot-partisjon"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "Brukt"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "Brukt"
|
||||
msgid "Users"
|
||||
msgstr "Brukere"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "Visning"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synlige Felter"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Venter på nok registreringer til å vise"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "Venter på nok registreringer til å vise"
|
||||
msgid "Want to help us make our translations even better? Check out <0>Crowdin</0> for more details."
|
||||
msgstr "Vil du hjelpe oss med å gjøre oversettelsene enda bedre? Ta en titt på <0>Crowdin</0> for mer informasjon."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push-varslinger"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "Skriving"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML Oppsett"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML Konfigurasjon"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Dine brukerinnstillinger har blitt oppdatert."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: pl\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\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"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dzień} few {# dni} many {# dni} other {# dni}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {godzinę} few {# godziny} many {# godzin} other {# godziny}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Czy na pewno chcesz usunąć {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatyczne kopiowanie wymaga bezpiecznego kontekstu."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Średnia"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Średnie wykorzystanie procesora przez kontenery"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Średnie wykorzystanie procesora przez kontenery"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Średnia przekracza <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Średnie zużycie energii przez GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Średnie wykorzystanie procesora w całym systemie"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Średnie użycie {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Kopie"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Przepustowość"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "Procesor"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Użycie procesora"
|
||||
@@ -268,29 +268,29 @@ msgstr "Usuń"
|
||||
msgid "Disk"
|
||||
msgstr "Dysk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Dysk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Użycie dysku"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Wykorzystanie dysku {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Wykorzystanie procesora przez Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Wykorzystanie pamięci przez Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Sieć Docker I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentacja"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Nie udało się zaktualizować powiadomienia"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filtruj..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Zapomniałeś hasła?"
|
||||
msgid "General"
|
||||
msgstr "Ogólne"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Moc GPU"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Nieprawidłowy adres e-mail."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Jądro"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maks. 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Pamięć"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Wykorzystanie pamięci"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Użycie pamięci przez kontenery Docker."
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Nazwa"
|
||||
msgid "Net"
|
||||
msgstr "Sieć"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Ruch sieciowy kontenerów Docker."
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Ruch sieciowy interfejsów publicznych"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Zaloguj się na swoje konto"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Dokładne wykorzystanie w zarejestrowanym czasie"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sortuj według"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Pamięć wymiany używana przez system"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Użycie pamięci wymiany"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperatury czujników systemowych."
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Następnie zaloguj się do panelu administracyjnego i zresetuj hasło d
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Przepustowość {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Przepustowość głównego systemu plików"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Przepustowość głównego systemu plików"
|
||||
msgid "To email(s)"
|
||||
msgstr "Do e-mail(ów)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Przełącz siatkę"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Wyzwalane, gdy wykorzystanie któregokolwiek dysku przekroczy ustalony p
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Czas pracy"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Wykorzystanie"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Użycie partycji głównej"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Widok"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Widoczne kolumny"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Oczekiwanie na wystarczającą liczbę rekordów do wyświetlenia"
|
||||
|
||||
@@ -875,3 +875,4 @@ 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: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dia} other {# dias}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# hora} other {# horas}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Tem certeza de que deseja excluir {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "A cópia automática requer um contexto seguro."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Média"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Utilização média de CPU dos contêineres"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Utilização média de CPU dos contêineres"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "A média excede <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Consumo médio de energia pelas GPU's"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Utilização média de CPU em todo o sistema"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Utilização média de {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Backups"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Largura de Banda"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Uso de CPU"
|
||||
@@ -268,29 +268,29 @@ msgstr "Excluir"
|
||||
msgid "Disk"
|
||||
msgstr "Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "E/S de Disco"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Uso de Disco"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Uso de disco de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Uso de CPU do Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Uso de Memória do Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "E/S de Rede do Docker"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Documentação"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Falha ao atualizar alerta"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrar..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Esqueceu a senha?"
|
||||
msgid "General"
|
||||
msgstr "Geral"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Consumo de Energia da GPU"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Endereço de email inválido."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Máx 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Memória"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Uso de Memória"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Uso de memória dos contêineres Docker"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Nome"
|
||||
msgid "Net"
|
||||
msgstr "Rede"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Tráfego de rede dos contêineres Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Tráfego de rede das interfaces públicas"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Por favor, entre na sua conta"
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Utilização precisa no momento registrado"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Ordenar Por"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Espaço de swap usado pelo sistema"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Uso de Swap"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr "Temp"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturas dos sensores do sistema"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Em seguida, faça login no backend e redefina a senha da sua conta de us
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Taxa de transferência de {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Taxa de transferência do sistema de arquivos raiz"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Taxa de transferência do sistema de arquivos raiz"
|
||||
msgid "To email(s)"
|
||||
msgstr "Para email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Alternar grade"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Dispara quando o uso de qualquer disco excede um limite"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
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:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Tempo de Atividade"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Uso"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Uso da partição raiz"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Visual"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Campos Visíveis"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Aguardando registros suficientes para exibir"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "Configuração YAML"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "As configurações do seu usuário foram atualizadas."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: ru\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-03-01 18:24\n"
|
||||
"PO-Revision-Date: 2025-03-25 08:32\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"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# день} other {# дней}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# час} other {# часов}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30 дней"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "Действия"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "Активные оповещения"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "Добавить <0>Систему</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "Добавить новую систему"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "Добавить систему"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "Добавить URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "Настроить параметры отображения для гр
|
||||
msgid "Admin"
|
||||
msgstr "Администратор"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "Агент"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "Оповещения"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "Все системы"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "Вы уверены, что хотите удалить {name}?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "Вы уверены, что хотите удалить {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Автоматическое копирование требует безопасного контекста."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "Среднее"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Среднее использование CPU контейнерами"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Среднее превышает <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Среднее потребление мощности всеми GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Среднее использование CPU по всей системе"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Среднее использование {0}"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "Резервные копии"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "Пропускная способность"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel поддерживает OpenID Connect и множество поставщиков аутентификации OAuth2."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel использует <0>Shoutrrr</0> для интеграции с популярными сервисами уведомлений."
|
||||
|
||||
#: src/components/add-system.tsx:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "Двоичный"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "Кэш / Буферы"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "Внимание - возможная потеря данных"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "Изменить общие параметры приложения."
|
||||
msgid "Chart options"
|
||||
msgstr "Параметры графиков"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "Проверьте {email} для получения ссылки на сброс."
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "Проверьте журналы для получения более подробной информации."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "Проверьте ваш сервис уведомлений"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "Нажмите, чтобы скопировать"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "Инструкции командной строки"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "Настройте, как вы получаете уведомления об оповещениях."
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "Подтвердите пароль"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "Продолжить"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "Продолжить"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "Скопировано в буфер обмена"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "Копировать"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "Копировать хост"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "Копировать команду Linux"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "Копировать команду Linux"
|
||||
msgid "Copy text"
|
||||
msgstr "Копировать текст"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "Использование CPU"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "Создать аккаунт"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "Темная"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "Панель управления"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "Панель управления"
|
||||
msgid "Default time period"
|
||||
msgstr "Период по умолчанию"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "Диск"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "Дисковый ввод/вывод"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "Использование диска"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Использование диска {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Использование CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Использование памяти Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Сетевой ввод/вывод Docker"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "Документация"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "Не в сети"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Редактировать"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "Электронная почта"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "Уведомления по электронной почте"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "Уведомления по электронной почте"
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "Введите адрес электронной почты для сброса пароля"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "Введите адрес электронной почты..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
msgid "Exceeds {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
|
||||
msgstr "Превышает {0}{1} за последние {2, plural, one {# минуту} other {# минут}}"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:72
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "Экспорт конфигурации"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "Экспортируйте текущую конфигурацию систем."
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "Экспортируйте текущую конфигурацию си
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "Не удалось аутентифицировать"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "Не удалось сохранить настройки"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "Не удалось отправить тестовое уведомление"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "Не удалось обновить оповещение"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "Фильтр..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "Забыли пароль?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "Общие"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "Потребляемая мощность GPU"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "Сетка"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "Хост / IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
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:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "Неверный адрес электронной почты."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "Ядро"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "Ядро"
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "Макет"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "Светлая"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "Выйти"
|
||||
msgid "Login"
|
||||
msgstr "Вход"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "Попытка входа не удалась"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "Попытка входа не удалась"
|
||||
msgid "Logs"
|
||||
msgstr "Журналы"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
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
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "Управляйте предпочтениями отображения и уведомлений."
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr "Инструкции по ручной настройке"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "Макс 1 мин"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "Память"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "Использование памяти"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Использование памяти контейнерами Docker"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "Имя"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "Сеть"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Сетевой трафик контейнеров Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Сетевой трафик публичных интерфейсов"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "Сетевой трафик публичных интерфейсов"
|
||||
msgid "No results found."
|
||||
msgstr "Результаты не найдены."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "Системы не найдены."
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "Уведомления"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "Поддержка OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "Открыть меню"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "Или продолжить с"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "Перезаписать существующие оповещения"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "Страница"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "Страницы / Настройки"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "Пароль должен содержать не менее 8 символов."
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr "Пароль должен быть меньше 72 символов."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "Запрос на сброс пароля получен"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "Пауза"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "Пауза"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "Пожалуйста, <0>настройте SMTP-сервер</0>, чтобы гарантировать доставку оповещений."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "Пожалуйста, проверьте журналы для получения более подробной информации."
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "Пожалуйста, проверьте свои учетные данные и попробуйте снова"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "Пожалуйста, проверьте свои учетные дан
|
||||
msgid "Please create an admin account"
|
||||
msgstr "Пожалуйста, создайте учетную запись администратора"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "Пожалуйста, включите всплывающие окна для этого сайта"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "Пожалуйста, включите всплывающие окна
|
||||
msgid "Please log in again"
|
||||
msgstr "Пожалуйста, войдите снова"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "Пожалуйста, смотрите <0>документацию</0> для получения инструкций."
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "Пожалуйста, смотрите <0>документацию</0>
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "Пожалуйста, войдите в свою учетную запись"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Точное использование в записанное время"
|
||||
|
||||
@@ -605,41 +602,41 @@ msgid "Preferred Language"
|
||||
msgstr "Предпочтительный язык"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "Ключ"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "Чтение"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "Получено"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "Сбросить пароль"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "Возобновить"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "Сохраните адрес, используя клавишу ввода или запятую. Оставьте пустым, чтобы отключить уведомления по электронной почте."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "Сохранить настройки"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr ""
|
||||
msgstr "Сохранить систему"
|
||||
|
||||
#: src/components/navbar.tsx:134
|
||||
msgid "Search"
|
||||
@@ -649,12 +646,12 @@ msgstr "Поиск"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "Поиск систем или настроек..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "Отправлено"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "Устанавливает диапазон времени по умол
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "Настройки сохранены"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "Войти"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "Войти"
|
||||
msgid "SMTP settings"
|
||||
msgstr "Настройки SMTP"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "Сортировать по"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "Сортировать по"
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Используемое системой пространство подкачки"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "Использование подкачки"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "Система"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "Система"
|
||||
msgid "Systems"
|
||||
msgstr "Системы"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "Таблица"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr ""
|
||||
msgstr "Темп"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "Температура"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Температуры датчиков системы"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "Тест <0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "Тестовое уведомление отправлено"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "Затем войдите в бэкенд и сбросьте пароль вашей учетной записи в таблице пользователей."
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Пропускная способность {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Пропускная способность корневой файловой системы"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "На электронную почту"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "Переключить сетку"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "Переключить тему"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "Срабатывает, когда использование любого диска превышает порог"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "В сети"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Обновляется в реальном времени. Нажмите на систему, чтобы просмотреть информацию."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "Время работы"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "Использование"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Использование корневого раздела"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "Использовано"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "Использовано"
|
||||
msgid "Users"
|
||||
msgstr "Пользователи"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "Вид"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "Видимые столбцы"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Ожидание достаточного количества записей для отображения"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "Ожидание достаточного количества запи
|
||||
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:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / Push уведомления"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "Запись"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML конфигурация"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML конфигурация"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Ваши настройки пользователя были обновлены."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: sl\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Slovenian\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dan} two {# dneva} few {# dni} other {# dni}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# ura} two {# uri} few {# ur} other {# ur}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Ali ste prepričani, da želite izbrisati {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Za samodejno kopiranje je potreben varen kontekst."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Povprečno"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Povprečna izkoriščenost procesorja kontejnerjev"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Povprečna izkoriščenost procesorja kontejnerjev"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Povprečje presega <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Povprečna poraba energije GPU"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Povprečna CPU izkoriščenost v celotnem sistemu"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Povprečna poraba {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Varnostne kopije"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Pasovna širina"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU poraba"
|
||||
@@ -268,29 +268,29 @@ msgstr "Izbriši"
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Poraba diska"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Poraba diska za {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU poraba"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker poraba spomina"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker I/O mreže"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentacija"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Opozorila ni bilo mogoče posodobiti"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filter..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Pozabljeno geslo?"
|
||||
msgid "General"
|
||||
msgstr "Splošno"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU poraba moči"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Napačen e-poštni naslov."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Jedro"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Največ 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Pomnilnik"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Poraba pomnilnika"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Poraba pomnilnika docker kontejnerjev"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Naziv"
|
||||
msgid "Net"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Omrežni promet docker kontejnerjev"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Omrežni promet javnih vmesnikov"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Prijavite se v svoj račun"
|
||||
msgid "Port"
|
||||
msgstr "Vrata"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Natančna poraba v zabeleženem času"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Razvrsti po"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap prostor, ki ga uporablja sistem"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap uporaba"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatura"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperature sistemskih senzorjev"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Nato se prijavite v zaledni sistem in ponastavite geslo svojega uporabni
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Tega dejanja ni mogoče razveljaviti. To bo trajno izbrisalo vse trenutne zapise za {name} iz zbirke podatkov."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Prepustnost {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Prepustnost korenskega datotečnega sistema"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Prepustnost korenskega datotečnega sistema"
|
||||
msgid "To email(s)"
|
||||
msgstr "E-pošta za"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Preklopi način mreže"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Sproži se, ko uporaba katerega koli diska preseže prag"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Posodobljeno v realnem času. Za ogled informacij kliknite na sistem."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Čas delovanja"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Uporaba"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Uporaba korenske particije"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Pogled"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Vidna polja"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Čakam na dovolj zapisov za prikaz"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML nastavitev"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Vaše uporabniške nastavitve so posodobljene."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: sv\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Swedish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# dag} other {# dagar}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# timme} other {# timmar}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Är du säker på att du vill ta bort {name}?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Automatisk kopiering kräver en säker kontext."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Genomsnitt"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Genomsnittlig CPU-användning för containrar"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Genomsnittlig CPU-användning för containrar"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Genomsnittet överskrider <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "Genomsnittlig strömförbrukning för GPU:er"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Genomsnittlig systemomfattande CPU-användning"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "Genomsnittlig användning av {0}"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Säkerhetskopior"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bandbredd"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU-användning"
|
||||
@@ -268,29 +268,29 @@ msgstr "Ta bort"
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Diskanvändning"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Diskanvändning av {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU-användning"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Minnesanvändning"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Nätverks-I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokumentation"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Kunde inte uppdatera larm"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrera..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Glömt lösenordet?"
|
||||
msgid "General"
|
||||
msgstr "Allmänt"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU-strömförbrukning"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Ogiltig e-postadress."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kärna"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Max 1 min"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Minne"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Minnesanvändning"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Minnesanvändning för dockercontainrar"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Namn"
|
||||
msgid "Net"
|
||||
msgstr "Nät"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Nätverkstrafik för dockercontainrar"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Nätverkstrafik för publika gränssnitt"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Vänligen logga in på ditt konto"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Exakt användning vid den registrerade tidpunkten"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sortera efter"
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Swap-utrymme som används av systemet"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Swap-användning"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Temperatur"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Temperaturer för systemsensorer"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Logga sedan in på backend och återställ ditt användarkontos lösenor
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Den här åtgärden kan inte ångras. Detta kommer permanent att ta bort alla aktuella poster för {name} från databasen."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Genomströmning av {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Genomströmning av rotfilsystemet"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Genomströmning av rotfilsystemet"
|
||||
msgid "To email(s)"
|
||||
msgstr "Till e-postadress(er)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Växla rutnät"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Utlöses när användningen av någon disk överskrider ett tröskelvär
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Uppdateras i realtid. Klicka på ett system för att visa information."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Drifttid"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Användning"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Användning av rotpartitionen"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Visa"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Synliga fält"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Väntar på tillräckligt med poster att visa"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML-konfiguration"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Dina användarinställningar har uppdaterats."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: tr\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# gün} other {# gün}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# saat} other {# saat}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "{name} silmek istediğinizden emin misiniz?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Otomatik kopyalama güvenli bir bağlam gerektirir."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Ortalama"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Konteynerlerin ortalama CPU kullanımı"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Konteynerlerin ortalama CPU kullanımı"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Ortalama <0>{value}{0}</0> aşıyor"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "GPU ların ortalama güç tüketimi"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Sistem genelinde ortalama CPU kullanımı"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "{0} ortalama kullanımı"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Yedekler"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Bant Genişliği"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU Kullanımı"
|
||||
@@ -268,29 +268,29 @@ msgstr "Sil"
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Disk G/Ç"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Disk Kullanımı"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName} disk kullanımı"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU Kullanımı"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker Bellek Kullanımı"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker Ağ G/Ç"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Dokümantasyon"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Uyarı güncellenemedi"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Filtrele..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Şifrenizi mi unuttunuz?"
|
||||
msgid "General"
|
||||
msgstr "Genel"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU Güç Çekimi"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Geçersiz e-posta adresi."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Çekirdek"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Maks 1 dk"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Bellek"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Bellek Kullanımı"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Docker konteynerlerinin bellek kullanımı"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Ad"
|
||||
msgid "Net"
|
||||
msgstr "Ağ"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Docker konteynerlerinin ağ trafiği"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Genel arayüzlerin ağ trafiği"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Lütfen hesabınıza giriş yapın"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Kayıtlı zamanda kesin kullanım"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sıralama Ölçütü"
|
||||
msgid "Status"
|
||||
msgstr "Durum"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Sistem tarafından kullanılan takas alanı"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Takas Kullanımı"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Sıcaklık"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Sistem sensörlerinin sıcaklıkları"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Ardından arka uca giriş yapın ve kullanıcılar tablosunda kullanıc
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Bu işlem geri alınamaz. Bu, veritabanından {name} için tüm mevcut kayıtları kalıcı olarak silecektir."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName} verimliliği"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Kök dosya sisteminin verimliliği"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Kök dosya sisteminin verimliliği"
|
||||
msgid "To email(s)"
|
||||
msgstr "E-posta(lar)a"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Izgarayı değiştir"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Herhangi bir diskin kullanımı bir eşiği aştığında tetiklenir"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Gerçek zamanlı olarak güncellenir. Bilgileri görüntülemek için bir sisteme tıklayın."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Çalışma Süresi"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Kullanım"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Kök bölümün kullanımı"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Görüntüle"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Görünür Alanlar"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Görüntülemek için yeterli kayıt bekleniyor"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML Yapılandırması"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Kullanıcı ayarlarınız güncellendi."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: uk\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-03-01 13:20\n"
|
||||
"PO-Revision-Date: 2025-03-15 04:14\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Ukrainian\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"
|
||||
@@ -552,11 +552,11 @@ msgstr "Запит на скидання пароля отримано"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
msgid "Pause"
|
||||
msgstr "Пауза"
|
||||
msgstr "Призупинити"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "Призупинено"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
@@ -626,7 +626,7 @@ msgstr "Скинути пароль"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
msgid "Resume"
|
||||
msgstr "Продовжити"
|
||||
msgstr "Відновити"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
@@ -875,3 +875,4 @@ msgstr "Конфігурація YAML"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Ваші налаштування користувача були оновлені."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: vi\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-24 02:49\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Vietnamese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# ngày} other {# ngày}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# giờ} other {# giờ}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "Bạn có chắc chắn muốn xóa {name} không?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "Sao chép tự động yêu cầu một ngữ cảnh an toàn."
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "Trung bình"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "Sử dụng CPU trung bình của các container"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "Sử dụng CPU trung bình của các container"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "Trung bình vượt quá <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "Sử dụng CPU trung bình toàn hệ thống"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr ""
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "Sao lưu"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "Băng thông"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "Sử dụng CPU"
|
||||
@@ -268,29 +268,29 @@ msgstr "Xóa"
|
||||
msgid "Disk"
|
||||
msgstr "Đĩa"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "Đĩa I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "Sử dụng Đĩa"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "Sử dụng đĩa của {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Sử dụng CPU Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Sử dụng Bộ nhớ Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Mạng I/O Docker"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "Tài liệu"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "Cập nhật cảnh báo thất bại"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "Lọc..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "Quên mật khẩu?"
|
||||
msgid "General"
|
||||
msgstr "Chung"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr ""
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "Địa chỉ email không hợp lệ."
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Nhân"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr ""
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "Tối đa 1 phút"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "Bộ nhớ"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "Sử dụng Bộ nhớ"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Sử dụng bộ nhớ của các container Docker"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "Tên"
|
||||
msgid "Net"
|
||||
msgstr "Mạng"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Lưu lượng mạng của các container Docker"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "Lưu lượng mạng của các giao diện công cộng"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "Vui lòng đăng nhập vào tài khoản của bạn"
|
||||
msgid "Port"
|
||||
msgstr "Cổng"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "Sử dụng chính xác tại thời điểm ghi nhận"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "Sắp xếp theo"
|
||||
msgid "Status"
|
||||
msgstr "Trạng thái"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "Không gian hoán đổi được sử dụng bởi hệ thống"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "Sử dụng Hoán đổi"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "Nhiệt độ"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "Nhiệt độ của các cảm biến hệ thống"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "Sau đó đăng nhập vào backend và đặt lại mật khẩu tài k
|
||||
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
|
||||
msgstr "Hành động này không thể hoàn tác. Điều này sẽ xóa vĩnh viễn tất cả các bản ghi hiện tại cho {name} khỏi cơ sở dữ liệu."
|
||||
|
||||
#: src/components/routes/system.tsx:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "Thông lượng của {extraFsName}"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Thông lượng của hệ thống tệp gốc"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Thông lượng của hệ thống tệp gốc"
|
||||
msgid "To email(s)"
|
||||
msgstr "Đến email(s)"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "Chuyển đổi lưới"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "Kích hoạt khi sử dụng bất kỳ đĩa nào vượt quá ngưỡn
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "Cập nhật theo thời gian thực. Nhấp vào một hệ thống để xem thông tin."
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "Thời gian hoạt động"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "Sử dụng"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Sử dụng phân vùng gốc"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "Xem"
|
||||
msgid "Visible Fields"
|
||||
msgstr "Các cột hiển thị"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "Đang chờ đủ bản ghi để hiển thị"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "Cấu hình YAML"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "Cài đặt người dùng của bạn đã được cập nhật."
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-27 05:46\n"
|
||||
"PO-Revision-Date: 2025-03-15 08:13\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:259
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# 天} other {# 天}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:257
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# 小时} other {# 小时}}"
|
||||
|
||||
@@ -48,30 +48,27 @@ msgid "30 days"
|
||||
msgstr "30天"
|
||||
|
||||
#. Table column
|
||||
#: src/components/systems-table/systems-table.tsx:293
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
#: src/components/systems-table/systems-table.tsx:523
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/systems-table/systems-table.tsx:304
|
||||
msgid "Actions"
|
||||
msgstr "操作"
|
||||
|
||||
#: src/components/routes/home.tsx:62
|
||||
#: src/components/routes/home.tsx:94
|
||||
msgid "Active Alerts"
|
||||
msgstr "启用的警报"
|
||||
|
||||
#: src/components/add-system.tsx:42
|
||||
#: src/components/add-system.tsx:43
|
||||
msgid "Add <0>System</0>"
|
||||
msgstr "添加<0>客户端</0>"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/add-system.tsx:126
|
||||
msgid "Add New System"
|
||||
msgstr "添加新客户端"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Add system"
|
||||
msgstr "添加客户端"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:157
|
||||
#: src/components/routes/settings/notifications.tsx:158
|
||||
msgid "Add URL"
|
||||
msgstr "添加URL"
|
||||
|
||||
@@ -87,21 +84,21 @@ msgstr "调整图表的显示选项。"
|
||||
msgid "Admin"
|
||||
msgstr "管理员"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:261
|
||||
#: src/components/systems-table/systems-table.tsx:270
|
||||
msgid "Agent"
|
||||
msgstr "客户端"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:32
|
||||
#: src/components/alerts/alert-button.tsx:68
|
||||
#: src/components/alerts/alert-button.tsx:33
|
||||
#: src/components/alerts/alert-button.tsx:79
|
||||
msgid "Alerts"
|
||||
msgstr "警报"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:334
|
||||
#: src/components/alerts/alert-button.tsx:88
|
||||
#: src/components/systems-table/systems-table.tsx:347
|
||||
#: src/components/alerts/alert-button.tsx:99
|
||||
msgid "All Systems"
|
||||
msgstr "所有客户端"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:657
|
||||
#: src/components/systems-table/systems-table.tsx:696
|
||||
msgid "Are you sure you want to delete {name}?"
|
||||
msgstr "您确定要删除{name}吗?"
|
||||
|
||||
@@ -109,29 +106,29 @@ msgstr "您确定要删除{name}吗?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "自动复制所需的安全上下文。"
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:670
|
||||
msgid "Average"
|
||||
msgstr "平均"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:446
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "容器的平均 CPU 使用率"
|
||||
|
||||
#. placeholder {0}: data.alert.unit
|
||||
#: src/components/alerts/alerts-system.tsx:205
|
||||
#: src/components/alerts/alerts-system.tsx:253
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "平均值超过<0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:547
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "GPU 平均能耗"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:435
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "系统范围内的平均 CPU 使用率"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:569
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "{0} 平均利用率"
|
||||
|
||||
@@ -141,31 +138,31 @@ msgid "Backups"
|
||||
msgstr "备份"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:491
|
||||
msgid "Bandwidth"
|
||||
msgstr "带宽"
|
||||
|
||||
#: src/components/login/auth-form.tsx:306
|
||||
#: src/components/login/auth-form.tsx:305
|
||||
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
|
||||
msgstr "Beszel支持OpenID Connect和其他OAuth2认证方式。"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:128
|
||||
#: src/components/routes/settings/notifications.tsx:129
|
||||
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
|
||||
msgstr "Beszel使用<0>Shoutrrr</0>以实现与常见的通知服务集成。"
|
||||
|
||||
#: src/components/add-system.tsx:130
|
||||
#: src/components/add-system.tsx:131
|
||||
msgid "Binary"
|
||||
msgstr "二进制"
|
||||
|
||||
#: src/components/charts/mem-chart.tsx:89
|
||||
#: src/components/charts/mem-chart.tsx:87
|
||||
msgid "Cache / Buffers"
|
||||
msgstr "缓存/缓冲区"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:668
|
||||
#: src/components/systems-table/systems-table.tsx:707
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:68
|
||||
#: src/components/routes/settings/config-yaml.tsx:69
|
||||
msgid "Caution - potential data loss"
|
||||
msgstr "注意 - 数据可能已经丢失"
|
||||
|
||||
@@ -177,37 +174,37 @@ msgstr "更改常规应用程序选项。"
|
||||
msgid "Chart options"
|
||||
msgstr "图表选项"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
#: src/components/login/forgot-pass-form.tsx:35
|
||||
msgid "Check {email} for a reset link."
|
||||
msgstr "检查 {email} 以获取重置链接。"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
#: src/components/routes/settings/layout.tsx:41
|
||||
msgid "Check logs for more details."
|
||||
msgstr "检查日志以获取更多详细信息。"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
#: src/components/routes/settings/notifications.tsx:185
|
||||
msgid "Check your notification service"
|
||||
msgstr "检查您的通知服务"
|
||||
|
||||
#: src/components/add-system.tsx:204
|
||||
#: src/components/add-system.tsx:205
|
||||
msgid "Click to copy"
|
||||
msgstr "点击复制"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:83
|
||||
#: src/components/login/forgot-pass-form.tsx:89
|
||||
#: src/components/login/forgot-pass-form.tsx:84
|
||||
#: src/components/login/forgot-pass-form.tsx:90
|
||||
msgid "Command line instructions"
|
||||
msgstr "命令行说明"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:78
|
||||
#: src/components/routes/settings/notifications.tsx:79
|
||||
msgid "Configure how you receive alert notifications."
|
||||
msgstr "配置您接收警报通知的方式。"
|
||||
|
||||
#: src/components/login/auth-form.tsx:212
|
||||
#: src/components/login/auth-form.tsx:217
|
||||
#: src/components/login/auth-form.tsx:213
|
||||
#: src/components/login/auth-form.tsx:218
|
||||
msgid "Confirm password"
|
||||
msgstr "确认密码"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:674
|
||||
#: src/components/systems-table/systems-table.tsx:713
|
||||
msgid "Continue"
|
||||
msgstr "继续"
|
||||
|
||||
@@ -215,16 +212,16 @@ msgstr "继续"
|
||||
msgid "Copied to clipboard"
|
||||
msgstr "已复制到剪贴板"
|
||||
|
||||
#: src/components/add-system.tsx:215
|
||||
#: src/components/add-system.tsx:217
|
||||
#: src/components/add-system.tsx:216
|
||||
#: src/components/add-system.tsx:218
|
||||
msgid "Copy"
|
||||
msgstr "复制"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
#: src/components/systems-table/systems-table.tsx:678
|
||||
msgid "Copy host"
|
||||
msgstr "复制主机名"
|
||||
|
||||
#: src/components/add-system.tsx:224
|
||||
#: src/components/add-system.tsx:225
|
||||
msgid "Copy Linux command"
|
||||
msgstr "复制 Linux 安装命令"
|
||||
|
||||
@@ -232,27 +229,27 @@ msgstr "复制 Linux 安装命令"
|
||||
msgid "Copy text"
|
||||
msgstr "复制文本"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:180
|
||||
#: src/components/systems-table/systems-table.tsx:186
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/charts/area-chart.tsx:58
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU使用率"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Create account"
|
||||
msgstr "创建账户"
|
||||
|
||||
#. Dark theme
|
||||
#: src/components/mode-toggle.tsx:21
|
||||
#: src/components/mode-toggle.tsx:22
|
||||
msgid "Dark"
|
||||
msgstr "深色模式"
|
||||
|
||||
#: src/components/command-palette.tsx:80
|
||||
#: src/components/routes/home.tsx:35
|
||||
#: src/components/routes/home.tsx:36
|
||||
msgid "Dashboard"
|
||||
msgstr "仪表板"
|
||||
|
||||
@@ -260,37 +257,37 @@ msgstr "仪表板"
|
||||
msgid "Default time period"
|
||||
msgstr "默认时间段"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:644
|
||||
#: src/components/systems-table/systems-table.tsx:683
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:196
|
||||
#: src/components/systems-table/systems-table.tsx:204
|
||||
msgid "Disk"
|
||||
msgstr "磁盘"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:481
|
||||
msgid "Disk I/O"
|
||||
msgstr "磁盘I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
#: src/components/routes/system.tsx:474
|
||||
#: src/components/charts/disk-chart.tsx:77
|
||||
msgid "Disk Usage"
|
||||
msgstr "磁盘使用"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:603
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName}的磁盘使用"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:445
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU使用"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:466
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker内存使用"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:507
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker网络I/O"
|
||||
|
||||
@@ -300,22 +297,22 @@ msgstr "文档"
|
||||
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/routes/system.tsx:345
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
msgstr "停止"
|
||||
|
||||
#: src/components/add-system.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:614
|
||||
#: src/components/add-system.tsx:126
|
||||
#: src/components/systems-table/systems-table.tsx:653
|
||||
msgid "Edit"
|
||||
msgstr "编辑"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:53
|
||||
#: src/components/login/auth-form.tsx:175
|
||||
#: src/components/login/forgot-pass-form.tsx:54
|
||||
#: src/components/login/auth-form.tsx:176
|
||||
msgid "Email"
|
||||
msgstr "电子邮件"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:92
|
||||
#: src/components/routes/settings/notifications.tsx:93
|
||||
msgid "Email notifications"
|
||||
msgstr "电子邮件通知"
|
||||
|
||||
@@ -323,32 +320,32 @@ msgstr "电子邮件通知"
|
||||
msgid "Enter email address to reset password"
|
||||
msgstr "输入电子邮件地址以重置密码"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:112
|
||||
#: src/components/routes/settings/notifications.tsx:113
|
||||
msgid "Enter email address..."
|
||||
msgstr "输入电子邮件地址..."
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:188
|
||||
#: src/components/routes/settings/config-yaml.tsx:28
|
||||
#: src/components/login/auth-form.tsx:136
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/config-yaml.tsx:29
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#. placeholder {0}: alert.value
|
||||
#. placeholder {1}: info.unit
|
||||
#. placeholder {2}: alert.min
|
||||
#: src/components/routes/home.tsx:81
|
||||
#: src/components/routes/home.tsx:113
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:73
|
||||
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
|
||||
#: src/components/routes/settings/config-yaml.tsx:94
|
||||
msgid "Export configuration"
|
||||
msgstr "导出配置"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:48
|
||||
#: src/components/routes/settings/config-yaml.tsx:49
|
||||
msgid "Export your current systems configuration."
|
||||
msgstr "导出您当前的系统配置。"
|
||||
|
||||
@@ -356,60 +353,60 @@ msgstr "导出您当前的系统配置。"
|
||||
msgid "Failed to authenticate"
|
||||
msgstr "认证失败"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:63
|
||||
#: src/components/routes/settings/layout.tsx:39
|
||||
#: src/components/routes/settings/notifications.tsx:64
|
||||
#: src/components/routes/settings/layout.tsx:40
|
||||
msgid "Failed to save settings"
|
||||
msgstr "保存设置失败"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:189
|
||||
#: src/components/routes/settings/notifications.tsx:190
|
||||
msgid "Failed to send test notification"
|
||||
msgstr "发送测试通知失败"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:24
|
||||
#: src/components/alerts/alerts-system.tsx:26
|
||||
msgid "Failed to update alert"
|
||||
msgstr "更新警报失败"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/routes/system.tsx:643
|
||||
msgid "Filter..."
|
||||
msgstr "过滤..."
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:230
|
||||
#: src/components/alerts/alerts-system.tsx:285
|
||||
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:330
|
||||
#: src/components/login/auth-form.tsx:328
|
||||
msgid "Forgot password?"
|
||||
msgstr "忘记密码?"
|
||||
|
||||
#. Context: General settings
|
||||
#: src/components/routes/settings/layout.tsx:51
|
||||
#: src/components/routes/settings/layout.tsx:52
|
||||
#: src/components/routes/settings/general.tsx:33
|
||||
msgid "General"
|
||||
msgstr "常规"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:546
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU 功耗"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:368
|
||||
#: src/components/systems-table/systems-table.tsx:381
|
||||
msgid "Grid"
|
||||
msgstr "网格"
|
||||
|
||||
#: src/components/add-system.tsx:158
|
||||
#: src/components/add-system.tsx:159
|
||||
msgid "Host / IP"
|
||||
msgstr "主机/IP"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:93
|
||||
#: src/components/login/forgot-pass-form.tsx:94
|
||||
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:17
|
||||
#: src/components/login/auth-form.tsx:18
|
||||
msgid "Invalid email address."
|
||||
msgstr "无效的电子邮件地址。"
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:271
|
||||
msgid "Kernel"
|
||||
msgstr "内核"
|
||||
|
||||
@@ -417,12 +414,12 @@ msgstr "内核"
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:354
|
||||
#: src/components/systems-table/systems-table.tsx:367
|
||||
msgid "Layout"
|
||||
msgstr "布局"
|
||||
|
||||
#. Light theme
|
||||
#: src/components/mode-toggle.tsx:16
|
||||
#: src/components/mode-toggle.tsx:17
|
||||
msgid "Light"
|
||||
msgstr "浅色模式"
|
||||
|
||||
@@ -434,8 +431,8 @@ msgstr "登出"
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:15
|
||||
#: src/components/login/auth-form.tsx:39
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
msgid "Login attempt failed"
|
||||
msgstr "登录尝试失败"
|
||||
|
||||
@@ -444,49 +441,49 @@ msgstr "登录尝试失败"
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:81
|
||||
#: src/components/routes/settings/notifications.tsx:82
|
||||
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
|
||||
#: src/components/routes/settings/layout.tsx:86
|
||||
msgid "Manage display and notification preferences."
|
||||
msgstr "管理显示和通知偏好。"
|
||||
|
||||
#: src/components/add-system.tsx:226
|
||||
#: src/components/add-system.tsx:227
|
||||
msgid "Manual setup instructions"
|
||||
msgstr "手动设置说明"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:673
|
||||
msgid "Max 1 min"
|
||||
msgstr "1分钟内最大值"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:188
|
||||
#: src/components/systems-table/systems-table.tsx:195
|
||||
msgid "Memory"
|
||||
msgstr "内存"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:456
|
||||
msgid "Memory Usage"
|
||||
msgstr "内存使用"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:467
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Docker 容器的内存使用"
|
||||
|
||||
#: src/components/add-system.tsx:154
|
||||
#: src/components/add-system.tsx:155
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:213
|
||||
#: src/components/systems-table/systems-table.tsx:223
|
||||
msgid "Net"
|
||||
msgstr "网络"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:508
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Docker 容器的网络流量"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:493
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "公共接口的网络流量"
|
||||
|
||||
@@ -494,34 +491,34 @@ msgstr "公共接口的网络流量"
|
||||
msgid "No results found."
|
||||
msgstr "未找到结果。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:489
|
||||
#: src/components/systems-table/systems-table.tsx:562
|
||||
#: src/components/systems-table/systems-table.tsx:472
|
||||
#: src/components/systems-table/systems-table.tsx:495
|
||||
msgid "No systems found."
|
||||
msgstr "未找到系统。"
|
||||
|
||||
#: src/components/command-palette.tsx:109
|
||||
#: src/components/routes/settings/notifications.tsx:75
|
||||
#: src/components/routes/settings/layout.tsx:56
|
||||
#: src/components/routes/settings/notifications.tsx:76
|
||||
#: src/components/routes/settings/layout.tsx:57
|
||||
msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
#: src/components/login/auth-form.tsx:301
|
||||
#: src/components/login/auth-form.tsx:300
|
||||
msgid "OAuth 2 / OIDC support"
|
||||
msgstr "支持 OAuth 2 / OIDC"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:61
|
||||
#: src/components/routes/settings/config-yaml.tsx:62
|
||||
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:600
|
||||
#: src/components/systems-table/systems-table.tsx:639
|
||||
msgid "Open menu"
|
||||
msgstr "打开菜单"
|
||||
|
||||
#: src/components/login/auth-form.tsx:250
|
||||
#: src/components/login/auth-form.tsx:251
|
||||
msgid "Or continue with"
|
||||
msgstr "或使用以下方式登录"
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:109
|
||||
#: src/components/alerts/alert-button.tsx:120
|
||||
msgid "Overwrite existing alerts"
|
||||
msgstr "覆盖现有警报"
|
||||
|
||||
@@ -533,41 +530,41 @@ msgstr "页面"
|
||||
msgid "Pages / Settings"
|
||||
msgstr "页面/设置"
|
||||
|
||||
#: src/components/login/auth-form.tsx:194
|
||||
#: src/components/login/auth-form.tsx:199
|
||||
#: src/components/login/auth-form.tsx:195
|
||||
#: src/components/login/auth-form.tsx:200
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: src/components/login/auth-form.tsx:20
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
msgid "Password must be at least 8 characters."
|
||||
msgstr "密码必须至少包含 8 个字符。"
|
||||
|
||||
#: src/components/login/auth-form.tsx:21
|
||||
#: src/components/login/auth-form.tsx:22
|
||||
msgid "Password must be less than 72 bytes."
|
||||
msgstr "密码必须小于 72 字节。"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:33
|
||||
#: src/components/login/forgot-pass-form.tsx:34
|
||||
msgid "Password reset request received"
|
||||
msgstr "已收到密码重置请求"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:633
|
||||
#: src/components/systems-table/systems-table.tsx:672
|
||||
msgid "Pause"
|
||||
msgstr "暂停"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:142
|
||||
#: src/components/systems-table/systems-table.tsx:143
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
msgstr "已暂停"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:96
|
||||
#: src/components/routes/settings/notifications.tsx:97
|
||||
msgid "Please <0>configure an SMTP server</0> to ensure alerts are delivered."
|
||||
msgstr "请<0>配置SMTP服务器</0>以确保警报被传递。"
|
||||
|
||||
#: src/components/alerts/alerts-system.tsx:25
|
||||
#: src/components/alerts/alerts-system.tsx:27
|
||||
msgid "Please check logs for more details."
|
||||
msgstr "请检查日志以获取更多详细信息。"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:16
|
||||
#: src/components/login/auth-form.tsx:40
|
||||
#: src/components/login/forgot-pass-form.tsx:17
|
||||
#: src/components/login/auth-form.tsx:41
|
||||
msgid "Please check your credentials and try again"
|
||||
msgstr "请检查您的凭据并重试"
|
||||
|
||||
@@ -575,7 +572,7 @@ msgstr "请检查您的凭据并重试"
|
||||
msgid "Please create an admin account"
|
||||
msgstr "请创建一个管理员账户"
|
||||
|
||||
#: src/components/login/auth-form.tsx:137
|
||||
#: src/components/login/auth-form.tsx:138
|
||||
msgid "Please enable pop-ups for this site"
|
||||
msgstr "请为此网站启用弹出窗口"
|
||||
|
||||
@@ -583,7 +580,7 @@ msgstr "请为此网站启用弹出窗口"
|
||||
msgid "Please log in again"
|
||||
msgstr "请重新登录"
|
||||
|
||||
#: src/components/login/auth-form.tsx:309
|
||||
#: src/components/login/auth-form.tsx:308
|
||||
msgid "Please see <0>the documentation</0> for instructions."
|
||||
msgstr "请参阅<0>文档</0>以获取说明。"
|
||||
|
||||
@@ -591,12 +588,12 @@ msgstr "请参阅<0>文档</0>以获取说明。"
|
||||
msgid "Please sign in to your account"
|
||||
msgstr "请登录您的账户"
|
||||
|
||||
#: src/components/add-system.tsx:170
|
||||
#: src/components/add-system.tsx:171
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:457
|
||||
#: src/components/routes/system.tsx:577
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "采集时间下的精确内存使用率"
|
||||
|
||||
@@ -605,39 +602,39 @@ msgid "Preferred Language"
|
||||
msgstr "首选语言"
|
||||
|
||||
#. Use 'Key' if your language requires many more characters
|
||||
#: src/components/add-system.tsx:181
|
||||
#: src/components/add-system.tsx:182
|
||||
msgid "Public Key"
|
||||
msgstr "公钥"
|
||||
|
||||
#. Disk read
|
||||
#: src/components/charts/area-chart.tsx:60
|
||||
#: src/components/charts/area-chart.tsx:70
|
||||
#: src/components/charts/area-chart.tsx:62
|
||||
#: src/components/charts/area-chart.tsx:72
|
||||
msgid "Read"
|
||||
msgstr "读取"
|
||||
|
||||
#. Network bytes received (download)
|
||||
#: src/components/charts/area-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:67
|
||||
msgid "Received"
|
||||
msgstr "接收"
|
||||
|
||||
#: src/components/login/forgot-pass-form.tsx:76
|
||||
#: src/components/login/forgot-pass-form.tsx:77
|
||||
msgid "Reset Password"
|
||||
msgstr "重置密码"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:628
|
||||
#: src/components/systems-table/systems-table.tsx:667
|
||||
msgid "Resume"
|
||||
msgstr "恢复"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:118
|
||||
#: src/components/routes/settings/notifications.tsx:119
|
||||
msgid "Save address using enter key or comma. Leave blank to disable email notifications."
|
||||
msgstr "使用回车键或逗号保存地址。留空以禁用电子邮件通知。"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:168
|
||||
#: src/components/routes/settings/notifications.tsx:169
|
||||
#: src/components/routes/settings/general.tsx:106
|
||||
msgid "Save Settings"
|
||||
msgstr "保存设置"
|
||||
|
||||
#: src/components/add-system.tsx:231
|
||||
#: src/components/add-system.tsx:232
|
||||
msgid "Save system"
|
||||
msgstr "保存系统"
|
||||
|
||||
@@ -649,12 +646,12 @@ msgstr "搜索"
|
||||
msgid "Search for systems or settings..."
|
||||
msgstr "搜索系统或设置..."
|
||||
|
||||
#: src/components/alerts/alert-button.tsx:71
|
||||
#: src/components/alerts/alert-button.tsx:82
|
||||
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
|
||||
#: src/components/charts/area-chart.tsx:66
|
||||
msgid "Sent"
|
||||
msgstr "发送"
|
||||
|
||||
@@ -665,16 +662,16 @@ msgstr "设置查看系统时图表的默认时间范围。"
|
||||
#: src/components/command-palette.tsx:94
|
||||
#: src/components/command-palette.tsx:97
|
||||
#: src/components/command-palette.tsx:112
|
||||
#: src/components/routes/settings/layout.tsx:71
|
||||
#: src/components/routes/settings/layout.tsx:82
|
||||
#: src/components/routes/settings/layout.tsx:72
|
||||
#: src/components/routes/settings/layout.tsx:83
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:33
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Settings saved"
|
||||
msgstr "设置已保存"
|
||||
|
||||
#: src/components/login/auth-form.tsx:238
|
||||
#: src/components/login/auth-form.tsx:239
|
||||
msgid "Sign in"
|
||||
msgstr "登录"
|
||||
|
||||
@@ -682,7 +679,7 @@ msgstr "登录"
|
||||
msgid "SMTP settings"
|
||||
msgstr "SMTP设置"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:376
|
||||
#: src/components/systems-table/systems-table.tsx:389
|
||||
msgid "Sort By"
|
||||
msgstr "排序依据"
|
||||
|
||||
@@ -690,21 +687,18 @@ msgstr "排序依据"
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:523
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "系统使用的 SWAP 空间"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:522
|
||||
msgid "Swap Usage"
|
||||
msgstr "SWAP 使用"
|
||||
|
||||
#. System theme
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/mode-toggle.tsx:26
|
||||
#: src/components/systems-table/systems-table.tsx:125
|
||||
#: src/components/systems-table/systems-table.tsx:133
|
||||
#: src/components/systems-table/systems-table.tsx:150
|
||||
#: src/components/systems-table/systems-table.tsx:533
|
||||
#: src/components/mode-toggle.tsx:27
|
||||
#: src/components/systems-table/systems-table.tsx:152
|
||||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
@@ -712,70 +706,70 @@ msgstr "系统"
|
||||
msgid "Systems"
|
||||
msgstr "系统"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:55
|
||||
#: src/components/routes/settings/config-yaml.tsx:56
|
||||
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:364
|
||||
#: src/components/systems-table/systems-table.tsx:377
|
||||
msgid "Table"
|
||||
msgstr "表格"
|
||||
|
||||
#. Temperature label in systems table
|
||||
#: src/components/systems-table/systems-table.tsx:233
|
||||
#: src/components/systems-table/systems-table.tsx:244
|
||||
msgid "Temp"
|
||||
msgstr "温度"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:534
|
||||
msgid "Temperature"
|
||||
msgstr "温度"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:535
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "系统传感器的温度"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:212
|
||||
#: src/components/routes/settings/notifications.tsx:213
|
||||
msgid "Test <0>URL</0>"
|
||||
msgstr "测试<0>URL</0>"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:183
|
||||
#: src/components/routes/settings/notifications.tsx:184
|
||||
msgid "Test notification sent"
|
||||
msgstr "测试通知已发送"
|
||||
|
||||
#: src/components/add-system.tsx:146
|
||||
#: src/components/add-system.tsx:147
|
||||
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:137
|
||||
#: src/components/add-system.tsx:138
|
||||
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
|
||||
#: src/components/login/forgot-pass-form.tsx:99
|
||||
msgid "Then log into the backend and reset your user account password in the users table."
|
||||
msgstr "然后登录到后台并在用户表中重置您的用户账户密码。"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:660
|
||||
#: src/components/systems-table/systems-table.tsx:699
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:615
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName}的吞吐量"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "根文件系统的吞吐量"
|
||||
|
||||
#: src/components/routes/settings/notifications.tsx:107
|
||||
#: src/components/routes/settings/notifications.tsx:108
|
||||
msgid "To email(s)"
|
||||
msgstr "发送到电子邮件"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:409
|
||||
#: src/components/routes/system.tsx:422
|
||||
msgid "Toggle grid"
|
||||
msgstr "切换网格"
|
||||
|
||||
#: src/components/mode-toggle.tsx:33
|
||||
#: src/components/mode-toggle.tsx:34
|
||||
msgid "Toggle theme"
|
||||
msgstr "切换主题"
|
||||
|
||||
@@ -804,32 +798,32 @@ msgid "Triggers when usage of any disk exceeds a threshold"
|
||||
msgstr "当任何磁盘的使用率超过阈值时触发"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:343
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
msgstr "启动"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:337
|
||||
#: src/components/systems-table/systems-table.tsx:350
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "实时更新。点击系统查看信息。"
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:270
|
||||
msgid "Uptime"
|
||||
msgstr "正常运行时间"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/routes/system.tsx:568
|
||||
#: src/components/routes/system.tsx:602
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Usage"
|
||||
msgstr "使用"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:474
|
||||
msgid "Usage of root partition"
|
||||
msgstr "根分区的使用"
|
||||
|
||||
#: src/components/charts/swap-chart.tsx:56
|
||||
#: src/components/charts/mem-chart.tsx:65
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
#: src/components/charts/mem-chart.tsx:63
|
||||
#: src/components/charts/area-chart.tsx:75
|
||||
msgid "Used"
|
||||
msgstr "已用"
|
||||
|
||||
@@ -838,15 +832,15 @@ msgstr "已用"
|
||||
msgid "Users"
|
||||
msgstr "用户"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:346
|
||||
#: src/components/systems-table/systems-table.tsx:359
|
||||
msgid "View"
|
||||
msgstr "视图"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:410
|
||||
#: src/components/systems-table/systems-table.tsx:424
|
||||
msgid "Visible Fields"
|
||||
msgstr "可见列"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:707
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "正在收集足够的数据来显示"
|
||||
|
||||
@@ -854,24 +848,25 @@ msgstr "正在收集足够的数据来显示"
|
||||
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:125
|
||||
#: src/components/routes/settings/notifications.tsx:126
|
||||
msgid "Webhook / Push notifications"
|
||||
msgstr "Webhook / 推送通知"
|
||||
|
||||
#. Disk write
|
||||
#: src/components/charts/area-chart.tsx:59
|
||||
#: src/components/charts/area-chart.tsx:69
|
||||
#: src/components/charts/area-chart.tsx:61
|
||||
#: src/components/charts/area-chart.tsx:71
|
||||
msgid "Write"
|
||||
msgstr "写入"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:61
|
||||
#: src/components/routes/settings/layout.tsx:62
|
||||
msgid "YAML Config"
|
||||
msgstr "YAML配置"
|
||||
|
||||
#: src/components/routes/settings/config-yaml.tsx:45
|
||||
#: src/components/routes/settings/config-yaml.tsx:46
|
||||
msgid "YAML Configuration"
|
||||
msgstr "YAML配置"
|
||||
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
#: src/components/routes/settings/layout.tsx:35
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "您的用户设置已更新。"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-27 05:46\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Traditional, Hong Kong\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# 天} other {# 天}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# 小時} other {# 小時}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "您確定要刪除 {name} 嗎?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "自動複製需要安全的上下文。"
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "平均"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "容器的平均 CPU 使用率"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "容器的平均 CPU 使用率"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "平均值超過 <0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "GPU 的平均功耗"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "系統的平均 CPU 使用率"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "{0} 的平均使用率"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "備份"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "帶寬"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU 使用率"
|
||||
@@ -268,29 +268,29 @@ msgstr "刪除"
|
||||
msgid "Disk"
|
||||
msgstr "磁碟"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "磁碟 I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "磁碟使用"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName} 的磁碟使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU 使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker 記憶體使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker 網絡 I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "文件"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "更新警報失敗"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "篩選..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "忘記密碼?"
|
||||
msgid "General"
|
||||
msgstr "一般"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU 功耗"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "無效的電子郵件地址。"
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr "手動設定說明"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "一分鐘內最大值"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "記憶體"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "記憶體使用"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Docker 容器的記憶體使用量"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "名稱"
|
||||
msgid "Net"
|
||||
msgstr "網絡"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Docker 容器的網絡流量"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "公共接口的網絡流量"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "請登入您的帳號"
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "記錄時間的精確使用率"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "排序依據"
|
||||
msgid "Status"
|
||||
msgstr "狀態"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "系統使用的交換空間"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "交換使用"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr "溫度"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "溫度"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "系統傳感器的溫度"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "然後登錄到後端並在用戶表中重置您的用戶帳戶密碼。
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName}的吞吐量"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "根文件系統的吞吐量"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "根文件系統的吞吐量"
|
||||
msgid "To email(s)"
|
||||
msgstr "發送到電子郵件"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "切換網格"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "當任何磁碟的使用超過閾值時觸發"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "實時更新。點擊系統查看信息。"
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "正常運行時間"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "使用"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "根分區的使用"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "檢視"
|
||||
msgid "Visible Fields"
|
||||
msgstr "可見欄位"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "等待足夠的記錄以顯示"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML配置"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "您的用戶設置已更新。"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: beszel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-02-27 05:46\n"
|
||||
"PO-Revision-Date: 2025-03-06 07:27\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Traditional\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@@ -19,11 +19,11 @@ msgstr ""
|
||||
"X-Crowdin-File-ID: 16\n"
|
||||
|
||||
#. placeholder {0}: Math.trunc(system.info?.u / 86400)
|
||||
#: src/components/routes/system.tsx:258
|
||||
#: src/components/routes/system.tsx:255
|
||||
msgid "{0, plural, one {# day} other {# days}}"
|
||||
msgstr "{0, plural, one {# 天} other {# 天}}"
|
||||
|
||||
#: src/components/routes/system.tsx:256
|
||||
#: src/components/routes/system.tsx:253
|
||||
msgid "{hours, plural, one {# hour} other {# hours}}"
|
||||
msgstr "{hours, plural, one {# 小時} other {# 小時}}"
|
||||
|
||||
@@ -109,11 +109,11 @@ msgstr "您確定要刪除 {name} 嗎?"
|
||||
msgid "Automatic copy requires a secure context."
|
||||
msgstr "只有在受保護的環境才能自動複製。"
|
||||
|
||||
#: src/components/routes/system.tsx:668
|
||||
#: src/components/routes/system.tsx:660
|
||||
msgid "Average"
|
||||
msgstr "平均"
|
||||
|
||||
#: src/components/routes/system.tsx:445
|
||||
#: src/components/routes/system.tsx:437
|
||||
msgid "Average CPU utilization of containers"
|
||||
msgstr "容器的平均 CPU 使用率"
|
||||
|
||||
@@ -122,16 +122,16 @@ msgstr "容器的平均 CPU 使用率"
|
||||
msgid "Average exceeds <0>{value}{0}</0>"
|
||||
msgstr "平均值超過<0>{value}{0}</0>"
|
||||
|
||||
#: src/components/routes/system.tsx:546
|
||||
#: src/components/routes/system.tsx:538
|
||||
msgid "Average power consumption of GPUs"
|
||||
msgstr "GPU 的平均功耗"
|
||||
|
||||
#: src/components/routes/system.tsx:434
|
||||
#: src/components/routes/system.tsx:426
|
||||
msgid "Average system-wide CPU utilization"
|
||||
msgstr "系統的平均 CPU 使用率"
|
||||
|
||||
#. placeholder {0}: gpu.n
|
||||
#: src/components/routes/system.tsx:564
|
||||
#: src/components/routes/system.tsx:556
|
||||
msgid "Average utilization of {0}"
|
||||
msgstr "{0} 的平均使用率"
|
||||
|
||||
@@ -141,7 +141,7 @@ msgid "Backups"
|
||||
msgstr "備份"
|
||||
|
||||
#: src/lib/utils.ts:337
|
||||
#: src/components/routes/system.tsx:490
|
||||
#: src/components/routes/system.tsx:482
|
||||
msgid "Bandwidth"
|
||||
msgstr "網路流量"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
#: src/lib/utils.ts:319
|
||||
#: src/components/routes/system.tsx:433
|
||||
#: src/components/routes/system.tsx:425
|
||||
#: src/components/charts/area-chart.tsx:56
|
||||
msgid "CPU Usage"
|
||||
msgstr "CPU 使用率"
|
||||
@@ -268,29 +268,29 @@ msgstr "刪除"
|
||||
msgid "Disk"
|
||||
msgstr "磁碟"
|
||||
|
||||
#: src/components/routes/system.tsx:480
|
||||
#: src/components/routes/system.tsx:472
|
||||
msgid "Disk I/O"
|
||||
msgstr "磁碟 I/O"
|
||||
|
||||
#: src/lib/utils.ts:331
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/charts/disk-chart.tsx:79
|
||||
msgid "Disk Usage"
|
||||
msgstr "磁碟使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:601
|
||||
#: src/components/routes/system.tsx:593
|
||||
msgid "Disk usage of {extraFsName}"
|
||||
msgstr "{extraFsName}的磁碟使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:444
|
||||
#: src/components/routes/system.tsx:436
|
||||
msgid "Docker CPU Usage"
|
||||
msgstr "Docker CPU 使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:465
|
||||
#: src/components/routes/system.tsx:457
|
||||
msgid "Docker Memory Usage"
|
||||
msgstr "Docker 記憶體使用率"
|
||||
|
||||
#: src/components/routes/system.tsx:506
|
||||
#: src/components/routes/system.tsx:498
|
||||
msgid "Docker Network I/O"
|
||||
msgstr "Docker 網路 I/O"
|
||||
|
||||
@@ -301,7 +301,7 @@ msgstr "文件"
|
||||
#. Context: System is down
|
||||
#: src/lib/utils.ts:316
|
||||
#: src/components/systems-table/systems-table.tsx:141
|
||||
#: src/components/routes/system.tsx:344
|
||||
#: src/components/routes/system.tsx:336
|
||||
msgid "Down"
|
||||
msgstr ""
|
||||
|
||||
@@ -370,7 +370,7 @@ msgid "Failed to update alert"
|
||||
msgstr "更新警報失敗"
|
||||
|
||||
#: src/components/systems-table/systems-table.tsx:341
|
||||
#: src/components/routes/system.tsx:641
|
||||
#: src/components/routes/system.tsx:633
|
||||
msgid "Filter..."
|
||||
msgstr "篩選..."
|
||||
|
||||
@@ -388,7 +388,7 @@ msgstr "忘記密碼?"
|
||||
msgid "General"
|
||||
msgstr "一般"
|
||||
|
||||
#: src/components/routes/system.tsx:545
|
||||
#: src/components/routes/system.tsx:537
|
||||
msgid "GPU Power Draw"
|
||||
msgstr "GPU 功耗"
|
||||
|
||||
@@ -409,7 +409,7 @@ msgid "Invalid email address."
|
||||
msgstr "無效的電子郵件地址。"
|
||||
|
||||
#. Linux kernel
|
||||
#: src/components/routes/system.tsx:270
|
||||
#: src/components/routes/system.tsx:267
|
||||
msgid "Kernel"
|
||||
msgstr "Kernel"
|
||||
|
||||
@@ -457,7 +457,7 @@ msgid "Manual setup instructions"
|
||||
msgstr "手動設定說明"
|
||||
|
||||
#. Chart select field. Please try to keep this short.
|
||||
#: src/components/routes/system.tsx:671
|
||||
#: src/components/routes/system.tsx:663
|
||||
msgid "Max 1 min"
|
||||
msgstr "最多1分鐘"
|
||||
|
||||
@@ -466,11 +466,11 @@ msgid "Memory"
|
||||
msgstr "記憶體"
|
||||
|
||||
#: src/lib/utils.ts:325
|
||||
#: src/components/routes/system.tsx:455
|
||||
#: src/components/routes/system.tsx:447
|
||||
msgid "Memory Usage"
|
||||
msgstr "記憶體使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:466
|
||||
#: src/components/routes/system.tsx:458
|
||||
msgid "Memory usage of docker containers"
|
||||
msgstr "Docker 容器的記憶體使用量"
|
||||
|
||||
@@ -482,11 +482,11 @@ msgstr "名稱"
|
||||
msgid "Net"
|
||||
msgstr "網路"
|
||||
|
||||
#: src/components/routes/system.tsx:507
|
||||
#: src/components/routes/system.tsx:499
|
||||
msgid "Network traffic of docker containers"
|
||||
msgstr "Docker 容器的網路流量"
|
||||
|
||||
#: src/components/routes/system.tsx:492
|
||||
#: src/components/routes/system.tsx:484
|
||||
msgid "Network traffic of public interfaces"
|
||||
msgstr "公開介面的網路流量"
|
||||
|
||||
@@ -595,8 +595,8 @@ msgstr "請登入您的帳號"
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: src/components/routes/system.tsx:456
|
||||
#: src/components/routes/system.tsx:572
|
||||
#: src/components/routes/system.tsx:448
|
||||
#: src/components/routes/system.tsx:564
|
||||
msgid "Precise utilization at the recorded time"
|
||||
msgstr "紀錄時間內的精確使用量"
|
||||
|
||||
@@ -690,11 +690,11 @@ msgstr "排序"
|
||||
msgid "Status"
|
||||
msgstr "狀態"
|
||||
|
||||
#: src/components/routes/system.tsx:522
|
||||
#: src/components/routes/system.tsx:514
|
||||
msgid "Swap space used by the system"
|
||||
msgstr "系統的虛擬記憶體使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:521
|
||||
#: src/components/routes/system.tsx:513
|
||||
msgid "Swap Usage"
|
||||
msgstr "虛擬記憶體使用量"
|
||||
|
||||
@@ -726,11 +726,11 @@ msgid "Temp"
|
||||
msgstr "溫度"
|
||||
|
||||
#: src/lib/utils.ts:344
|
||||
#: src/components/routes/system.tsx:533
|
||||
#: src/components/routes/system.tsx:525
|
||||
msgid "Temperature"
|
||||
msgstr "溫度"
|
||||
|
||||
#: src/components/routes/system.tsx:534
|
||||
#: src/components/routes/system.tsx:526
|
||||
msgid "Temperatures of system sensors"
|
||||
msgstr "系統感應器的溫度"
|
||||
|
||||
@@ -758,11 +758,11 @@ msgstr "然後登入後台並在使用者列表中重設您的帳號密碼。"
|
||||
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:613
|
||||
#: src/components/routes/system.tsx:605
|
||||
msgid "Throughput of {extraFsName}"
|
||||
msgstr "{extraFsName}的傳輸速率"
|
||||
|
||||
#: src/components/routes/system.tsx:481
|
||||
#: src/components/routes/system.tsx:473
|
||||
msgid "Throughput of root filesystem"
|
||||
msgstr "Root文件系統的傳輸速率"
|
||||
|
||||
@@ -770,8 +770,8 @@ msgstr "Root文件系統的傳輸速率"
|
||||
msgid "To email(s)"
|
||||
msgstr "發送到電子郵件"
|
||||
|
||||
#: src/components/routes/system.tsx:408
|
||||
#: src/components/routes/system.tsx:421
|
||||
#: src/components/routes/system.tsx:400
|
||||
#: src/components/routes/system.tsx:413
|
||||
msgid "Toggle grid"
|
||||
msgstr "切換網格"
|
||||
|
||||
@@ -805,7 +805,7 @@ msgstr "當任何磁碟使用率超過閾值時觸發"
|
||||
|
||||
#. Context: System is up
|
||||
#: src/components/systems-table/systems-table.tsx:140
|
||||
#: src/components/routes/system.tsx:342
|
||||
#: src/components/routes/system.tsx:334
|
||||
msgid "Up"
|
||||
msgstr ""
|
||||
|
||||
@@ -813,17 +813,17 @@ msgstr ""
|
||||
msgid "Updated in real time. Click on a system to view information."
|
||||
msgstr "實時更新。點擊系統顯示資訊。"
|
||||
|
||||
#: src/components/routes/system.tsx:269
|
||||
#: src/components/routes/system.tsx:266
|
||||
msgid "Uptime"
|
||||
msgstr "運行時間"
|
||||
|
||||
#: src/components/routes/system.tsx:563
|
||||
#: src/components/routes/system.tsx:600
|
||||
#: src/components/routes/system.tsx:555
|
||||
#: src/components/routes/system.tsx:592
|
||||
#: src/components/charts/area-chart.tsx:73
|
||||
msgid "Usage"
|
||||
msgstr "使用量"
|
||||
|
||||
#: src/components/routes/system.tsx:473
|
||||
#: src/components/routes/system.tsx:465
|
||||
msgid "Usage of root partition"
|
||||
msgstr "Root 分區的使用量"
|
||||
|
||||
@@ -846,7 +846,7 @@ msgstr "檢視"
|
||||
msgid "Visible Fields"
|
||||
msgstr "顯示欄位"
|
||||
|
||||
#: src/components/routes/system.tsx:705
|
||||
#: src/components/routes/system.tsx:697
|
||||
msgid "Waiting for enough records to display"
|
||||
msgstr "等待足夠的記錄以顯示"
|
||||
|
||||
@@ -875,3 +875,4 @@ msgstr "YAML 設定檔"
|
||||
#: src/components/routes/settings/layout.tsx:34
|
||||
msgid "Your user settings have been updated."
|
||||
msgstr "已更新您的使用者設定"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package beszel
|
||||
|
||||
const (
|
||||
Version = "0.10.0"
|
||||
Version = "0.9.1"
|
||||
AppName = "beszel"
|
||||
)
|
||||
|
||||
@@ -21,6 +21,7 @@ ProtectClock=yes
|
||||
ProtectHome=read-only
|
||||
ProtectHostname=yes
|
||||
ProtectKernelLogs=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectSystem=strict
|
||||
RemoveIPC=yes
|
||||
RestrictSUIDSGID=true
|
||||
|
||||
@@ -483,6 +483,7 @@ ProtectClock=yes
|
||||
ProtectHome=read-only
|
||||
ProtectHostname=yes
|
||||
ProtectKernelLogs=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectSystem=strict
|
||||
RemoveIPC=yes
|
||||
RestrictSUIDSGID=true
|
||||
|
||||
Reference in New Issue
Block a user