Compare commits

..

74 Commits

Author SHA1 Message Date
hank
c01bfd9332 New translations en.po (Arabic) 2025-04-23 13:19:56 -04:00
hank
209e82aed2 New translations en.po (Dutch) 2025-04-14 09:04:03 -04:00
hank
c66e740d52 New translations en.po (Arabic) 2025-04-05 21:52:03 -04:00
hank
551ae49c2e New translations en.po (French) 2025-03-28 17:04:47 -04:00
hank
906daa6f2a New translations en.po (French) 2025-03-26 06:03:01 -04:00
hank
49e55943c1 New translations en.po (Russian) 2025-03-25 04:32:17 -04:00
hank
9e75cbc1ef New translations en.po (Italian) 2025-03-22 11:29:03 -04:00
hank
79190a2c51 New translations en.po (Norwegian) 2025-03-17 09:40:03 -04:00
hank
32960c7c35 New translations en.po (Chinese Simplified) 2025-03-15 04:13:35 -04:00
hank
cdff974a8a New translations en.po (Ukrainian) 2025-03-15 00:14:37 -04:00
hank
20a6ef129c New translations en.po (Czech) 2025-03-13 20:50:03 -04:00
hank
d1e5310f83 New translations en.po (Japanese) 2025-03-13 06:13:10 -04:00
hank
152173eab5 New translations en.po (Korean) 2025-03-07 05:06:11 -05:00
hank
c2aec69638 New translations en.po (Ukrainian) 2025-03-06 07:37:37 -05:00
hank
16c97fe77b New translations en.po (Chinese Traditional, Hong Kong) 2025-03-06 02:27:48 -05:00
hank
bed5bc2791 New translations en.po (Croatian) 2025-03-06 02:27:47 -05:00
hank
424c7aceff New translations en.po (Persian) 2025-03-06 02:27:46 -05:00
hank
8eb101e714 New translations en.po (Vietnamese) 2025-03-06 02:27:45 -05:00
hank
f2e69e2a80 New translations en.po (Chinese Traditional) 2025-03-06 02:27:44 -05:00
hank
41b4dbce98 New translations en.po (Chinese Simplified) 2025-03-06 02:27:43 -05:00
hank
c3432fc7b5 New translations en.po (Ukrainian) 2025-03-06 02:27:42 -05:00
hank
b167244e28 New translations en.po (Turkish) 2025-03-06 02:27:40 -05:00
hank
bcca6a5a9d New translations en.po (Swedish) 2025-03-06 02:27:39 -05:00
hank
6b661b4878 New translations en.po (Slovenian) 2025-03-06 02:27:37 -05:00
hank
bc537edb73 New translations en.po (Russian) 2025-03-06 02:27:36 -05:00
hank
561a3e8aaf New translations en.po (Polish) 2025-03-06 02:27:34 -05:00
hank
f173ea37da New translations en.po (Norwegian) 2025-03-06 02:27:33 -05:00
hank
0d9f2ba06a New translations en.po (Dutch) 2025-03-06 02:27:32 -05:00
hank
4e772e6008 New translations en.po (Korean) 2025-03-06 02:27:31 -05:00
hank
b959d97502 New translations en.po (Italian) 2025-03-06 02:27:30 -05:00
hank
735cbe2cf0 New translations en.po (German) 2025-03-06 02:27:29 -05:00
hank
0f5a470495 New translations en.po (Danish) 2025-03-06 02:27:28 -05:00
hank
a42e99370e New translations en.po (Czech) 2025-03-06 02:27:27 -05:00
hank
abfae78af1 New translations en.po (Bulgarian) 2025-03-06 02:27:26 -05:00
hank
e36c40c4a9 New translations en.po (Arabic) 2025-03-06 02:27:25 -05:00
hank
bf7b2ae598 New translations en.po (Spanish) 2025-03-06 02:27:24 -05:00
hank
f71ee4b058 New translations en.po (French) 2025-03-06 02:27:23 -05:00
hank
f2466eb37d New translations en.po (Hungarian) 2025-03-06 02:27:22 -05:00
hank
7244c7130b New translations en.po (Japanese) 2025-03-06 02:27:21 -05:00
hank
f2e84a9d3e New translations en.po (Portuguese) 2025-03-06 02:27:20 -05:00
hank
04a1ee5e4e New translations en.po (Icelandic) 2025-03-06 02:27:19 -05:00
hank
9b83088897 New translations en.po (Norwegian) 2025-03-05 15:49:42 -05:00
hank
13b30aa255 New translations en.po (Russian) 2025-03-01 13:24:35 -05:00
hank
2bd25e9e8d New translations en.po (Ukrainian) 2025-03-01 08:20:09 -05:00
hank
4fe192bf28 New translations en.po (Ukrainian) 2025-03-01 07:11:52 -05:00
hank
2056ae285f New translations en.po (Spanish) 2025-02-28 12:20:35 -05:00
hank
a02e7a0a69 New translations en.po (Spanish) 2025-02-28 11:07:32 -05:00
hank
b1a9e90034 New translations en.po (Chinese Traditional, Hong Kong) 2025-02-27 17:31:32 -05:00
hank
20916fab3e New translations en.po (Croatian) 2025-02-27 17:31:31 -05:00
hank
0c777cca72 New translations en.po (Persian) 2025-02-27 17:31:31 -05:00
hank
44e30ad429 New translations en.po (Vietnamese) 2025-02-27 17:31:30 -05:00
hank
9e30786dda New translations en.po (Chinese Traditional) 2025-02-27 17:31:29 -05:00
hank
1f677773e7 New translations en.po (Chinese Simplified) 2025-02-27 17:31:28 -05:00
hank
882289da91 New translations en.po (Ukrainian) 2025-02-27 17:31:26 -05:00
hank
fbbc4eff27 New translations en.po (Turkish) 2025-02-27 17:31:25 -05:00
hank
b78231f677 New translations en.po (Swedish) 2025-02-27 17:31:24 -05:00
hank
332e2d14a9 New translations en.po (Slovenian) 2025-02-27 17:31:23 -05:00
hank
e088b88c84 New translations en.po (Russian) 2025-02-27 17:31:22 -05:00
hank
09840f95d9 New translations en.po (Polish) 2025-02-27 17:31:21 -05:00
hank
de03bb658a New translations en.po (Norwegian) 2025-02-27 17:31:19 -05:00
hank
bcadfeb729 New translations en.po (Dutch) 2025-02-27 17:31:18 -05:00
hank
ec582a9171 New translations en.po (Korean) 2025-02-27 17:31:17 -05:00
hank
0c3eaefc90 New translations en.po (Italian) 2025-02-27 17:31:16 -05:00
hank
d6b5866f90 New translations en.po (German) 2025-02-27 17:31:15 -05:00
hank
2ba629e4b4 New translations en.po (Danish) 2025-02-27 17:31:14 -05:00
hank
6e9341b7ff New translations en.po (Czech) 2025-02-27 17:31:13 -05:00
hank
89499a341b New translations en.po (Bulgarian) 2025-02-27 17:31:12 -05:00
hank
9c88845798 New translations en.po (Arabic) 2025-02-27 17:31:10 -05:00
hank
c9f65f63e6 New translations en.po (Spanish) 2025-02-27 17:31:09 -05:00
hank
996620c8e0 New translations en.po (French) 2025-02-27 17:31:08 -05:00
hank
626c1358d9 New translations en.po (Hungarian) 2025-02-27 17:31:07 -05:00
hank
19dd39b7db New translations en.po (Japanese) 2025-02-27 17:31:06 -05:00
hank
d482b50e31 New translations en.po (Portuguese) 2025-02-27 17:31:05 -05:00
hank
f61ec49c76 New translations en.po (Icelandic) 2025-02-27 17:31:03 -05:00
67 changed files with 5442 additions and 5997 deletions

3
.gitignore vendored
View File

@@ -15,5 +15,4 @@ beszel/build
*timestamp*
.swc
beszel/site/src/locales/**/*.ts
*.bak
__debug_*
*.bak

View File

@@ -14,10 +14,6 @@ clean:
lint:
golangci-lint run
test: export GOEXPERIMENT=synctest
test:
go test -tags=testing ./...
tidy:
go mod tidy

View File

@@ -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()

View File

@@ -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",
},
},
}

View File

@@ -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()
}

View File

@@ -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
)

View File

@@ -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=

View File

@@ -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
}

View File

@@ -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()
}

View File

@@ -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")
}

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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"

View File

@@ -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"`
}

View File

@@ -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")

View File

@@ -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
}

View File

@@ -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)
})
}

View File

@@ -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
}

View File

@@ -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())
}
}
}
}

View File

@@ -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
}

File diff suppressed because it is too large Load Diff

View 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)
})
}

View File

@@ -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.

File diff suppressed because it is too large Load Diff

View File

@@ -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": {

View File

@@ -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>

View File

@@ -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">

View File

@@ -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 (

View File

@@ -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)
}
}, [])

View File

@@ -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

View File

@@ -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) => (

View File

@@ -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()
}

View File

@@ -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 "تم تحديث إعدادات المستخدم الخاصة بك."

View File

@@ -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 "Настройките за потребителя ти са обновени."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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"

View File

@@ -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."

View File

@@ -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 "تنظیمات کاربری شما به‌روزرسانی شد."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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 "ユーザー設定が更新されました。"

View File

@@ -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 "사용자 설정이 업데이트되었습니다."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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 "Ваши настройки пользователя были обновлены."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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."

View File

@@ -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 "Ваші налаштування користувача були оновлені."

View File

@@ -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."

View File

@@ -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 "您的用户设置已更新。"

View File

@@ -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 "您的用戶設置已更新。"

View File

@@ -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 "已更新您的使用者設定"

View File

@@ -1,6 +1,6 @@
package beszel
const (
Version = "0.10.0"
Version = "0.9.1"
AppName = "beszel"
)

View File

@@ -21,6 +21,7 @@ ProtectClock=yes
ProtectHome=read-only
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelTunables=yes
ProtectSystem=strict
RemoveIPC=yes
RestrictSUIDSGID=true

View File

@@ -483,6 +483,7 @@ ProtectClock=yes
ProtectHome=read-only
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelTunables=yes
ProtectSystem=strict
RemoveIPC=yes
RestrictSUIDSGID=true