Compare commits

..

37 Commits

Author SHA1 Message Date
hank
b5e4276c8e New translations en.po (Chinese Traditional)
[ci skip]
2026-08-18 10:01:29 -04:00
hank
533c183fd2 New translations en.po (Ukrainian)
[ci skip]
2026-08-18 10:01:27 -04:00
hank
2c1b4dd15d New translations en.po (Chinese Simplified)
[ci skip]
2026-08-18 07:51:35 -04:00
hank
a67c5e1f8b New translations en.po (Russian)
[ci skip]
2026-08-17 17:43:35 -04:00
hank
43d39a5317 New translations en.po (Chinese Traditional, Hong Kong)
[ci skip]
2026-08-17 16:46:42 -04:00
hank
ae016ebfe7 New translations en.po (Uyghur)
[ci skip]
2026-08-17 16:46:41 -04:00
hank
a6163e0809 New translations en.po (Croatian)
[ci skip]
2026-08-17 16:46:40 -04:00
hank
532e391398 New translations en.po (Thai)
[ci skip]
2026-08-17 16:46:38 -04:00
hank
1d2e714360 New translations en.po (Persian)
[ci skip]
2026-08-17 16:46:37 -04:00
hank
318f2328ef New translations en.po (Indonesian)
[ci skip]
2026-08-17 16:46:36 -04:00
hank
9731a74185 New translations en.po (Vietnamese)
[ci skip]
2026-08-17 16:46:34 -04:00
hank
b1d3d6c7c4 New translations en.po (Chinese Traditional)
[ci skip]
2026-08-17 16:46:33 -04:00
hank
08fc578dec New translations en.po (Chinese Simplified)
[ci skip]
2026-08-17 16:46:32 -04:00
hank
b189aab61b New translations en.po (Ukrainian)
[ci skip]
2026-08-17 16:46:31 -04:00
hank
5a70767bfe New translations en.po (Turkish)
[ci skip]
2026-08-17 16:46:29 -04:00
hank
6072dd6071 New translations en.po (Swedish)
[ci skip]
2026-08-17 16:46:28 -04:00
hank
001ed54d77 New translations en.po (Serbian (Cyrillic))
[ci skip]
2026-08-17 16:46:27 -04:00
hank
58c58072f7 New translations en.po (Slovenian)
[ci skip]
2026-08-17 16:46:25 -04:00
hank
1df49845ed New translations en.po (Polish)
[ci skip]
2026-08-17 16:46:24 -04:00
hank
965f313393 New translations en.po (Norwegian)
[ci skip]
2026-08-17 16:46:23 -04:00
hank
5790e00c2c New translations en.po (Dutch)
[ci skip]
2026-08-17 16:46:22 -04:00
hank
30a57fcd3f New translations en.po (Korean)
[ci skip]
2026-08-17 16:46:20 -04:00
hank
b6c67a1b46 New translations en.po (Japanese)
[ci skip]
2026-08-17 16:46:19 -04:00
hank
8b0b667559 New translations en.po (Italian)
[ci skip]
2026-08-17 16:46:18 -04:00
hank
5502112054 New translations en.po (Hungarian)
[ci skip]
2026-08-17 16:46:16 -04:00
hank
43faf7c5ea New translations en.po (Hebrew)
[ci skip]
2026-08-17 16:46:15 -04:00
hank
e31fd0ebe9 New translations en.po (Greek)
[ci skip]
2026-08-17 16:46:14 -04:00
hank
20a1f36ce5 New translations en.po (German)
[ci skip]
2026-08-17 16:46:12 -04:00
hank
fd2b0ba897 New translations en.po (Danish)
[ci skip]
2026-08-17 16:46:11 -04:00
hank
d6eddcc117 New translations en.po (Czech)
[ci skip]
2026-08-17 16:46:10 -04:00
hank
9578664bd4 New translations en.po (Bulgarian)
[ci skip]
2026-08-17 16:46:08 -04:00
hank
6f3d77fb2e New translations en.po (Arabic)
[ci skip]
2026-08-17 16:46:07 -04:00
hank
a8fdc2ca34 New translations en.po (Spanish)
[ci skip]
2026-08-17 16:46:06 -04:00
hank
1ba9b46b85 New translations en.po (French)
[ci skip]
2026-08-17 16:46:04 -04:00
hank
2d30fd6ada New translations en.po (Romanian)
[ci skip]
2026-08-17 16:46:03 -04:00
hank
b4ac1eef12 New translations en.po (Russian)
[ci skip]
2026-08-17 16:46:02 -04:00
hank
ebde392591 New translations en.po (Portuguese)
[ci skip]
2026-08-17 16:46:00 -04:00
40 changed files with 189 additions and 320 deletions

View File

@@ -22,6 +22,9 @@ builds:
- amd64
- arm64
- arm
goarm:
- "6"
- "7"
ignore:
- goos: windows
goarch: arm64
@@ -39,8 +42,6 @@ builds:
main: internal/cmd/agent/agent.go
env:
- CGO_ENABLED=0
ldflags:
- -s -w -X github.com/henrygd/beszel/internal/ghupdate.buildGOARM={{ .Arm }}
goos:
- linux
- darwin
@@ -107,7 +108,6 @@ archives:
{{ .Binary }}_
{{- .Os }}_
{{- .Arch }}
{{- if ne .Arm "6" }}{{ with .Arm }}v{{ . }}{{ end }}{{ end }}
format_overrides:
- goos: windows
formats: [zip]

View File

@@ -544,18 +544,11 @@ func (dm *dockerManager) updateContainerStats(ctr *container.ApiInfo, cacheTimeM
// Get previous CPU values
prevCpuContainer, prevCpuSystem := dm.getCpuPreviousValues(cacheTimeMs, ctr.IdShort)
// Calculate CPU percentage based on platform.
// Podman reports system_cpu_usage from cgroup cpu.stat (not /proc/stat), so it reflects
// only cgroup-tracked activity rather than total host capacity. Use a time-based method
// instead so the result is comparable to host CPU utilization. See:
// https://github.com/henrygd/beszel/issues/2049
// Calculate CPU percentage based on platform
var cpuPct float64
if dm.isWindows {
prevRead := dm.lastCpuReadTime[cacheTimeMs][ctr.IdShort]
cpuPct = res.CalculateCpuPercentWindows(prevCpuContainer, prevRead)
} else if dm.usingPodman && res.CPUStats.OnlineCPUs > 0 {
prevRead := dm.lastCpuReadTime[cacheTimeMs][ctr.IdShort]
cpuPct = res.CalculateCpuPercentPodman(prevCpuContainer, prevRead)
} else {
cpuPct = res.CalculateCpuPercentLinux(prevCpuContainer, prevCpuSystem)
}

View File

@@ -1059,162 +1059,6 @@ func TestCpuPercentageWindowsHandlesCounterRollback(t *testing.T) {
assert.Greater(t, stats.CalculateCpuPercentWindows(500_000, prevRead), 0.0)
}
func TestCalculateCpuPercentPodman(t *testing.T) {
baseTime := time.Date(2026, 3, 15, 12, 0, 0, 0, time.UTC)
tests := []struct {
name string
prevCpuContainer uint64
prevRead time.Time
currentUsage uint64
currentRead time.Time
onlineCPUs uint32
expectedPct float64
}{
{
name: "normal calculation",
// container used 2ms of CPU over 1s with 2 CPUs → 0.1%
prevCpuContainer: 1_000_000_000,
prevRead: baseTime,
currentUsage: 1_002_000_000, // +2ms CPU time
currentRead: baseTime.Add(time.Second),
onlineCPUs: 2,
expectedPct: 0.1, // 2e6 / (1e9 * 2) * 100
},
{
name: "first run returns zero",
prevCpuContainer: 0,
prevRead: baseTime,
currentUsage: 5_000_000,
currentRead: baseTime.Add(time.Second),
onlineCPUs: 4,
expectedPct: 0.0,
},
{
name: "zero online cpus returns zero",
prevCpuContainer: 1_000_000_000,
prevRead: baseTime,
currentUsage: 1_010_000_000,
currentRead: baseTime.Add(time.Second),
onlineCPUs: 0,
expectedPct: 0.0,
},
{
name: "same read time returns zero",
prevCpuContainer: 1_000_000_000,
prevRead: baseTime,
currentUsage: 1_010_000_000,
currentRead: baseTime, // no elapsed time
onlineCPUs: 2,
expectedPct: 0.0,
},
{
name: "counter rollback returns zero",
prevCpuContainer: 2_000_000_000,
prevRead: baseTime,
currentUsage: 1_000_000_000,
currentRead: baseTime.Add(time.Second),
onlineCPUs: 2,
expectedPct: 0.0,
},
{
name: "100% single cpu",
// container consumed a full CPU-second over 1s on a 1-CPU host → 100%
prevCpuContainer: 1_000_000_000,
prevRead: baseTime,
currentUsage: 2_000_000_000, // +1s CPU time
currentRead: baseTime.Add(time.Second),
onlineCPUs: 1,
expectedPct: 100.0, // 1e9 / (1e9 * 1) * 100
},
{
name: "high utilization on multi-cpu host",
// container used 800ms on a 4-CPU host over 1s → 20%
prevCpuContainer: 10_000_000_000,
prevRead: baseTime,
currentUsage: 10_800_000_000,
currentRead: baseTime.Add(time.Second),
onlineCPUs: 4,
expectedPct: 20.0, // 800e6 / (1e9 * 4) * 100
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := &container.ApiStats{
Read: tt.currentRead,
CPUStats: container.CPUStats{
CPUUsage: container.CPUUsage{TotalUsage: tt.currentUsage},
OnlineCPUs: tt.onlineCPUs,
},
}
got := s.CalculateCpuPercentPodman(tt.prevCpuContainer, tt.prevRead)
assert.InDelta(t, tt.expectedPct, got, 0.001, "test %q", tt.name)
})
}
}
func TestUpdateContainerStatsPodmanCpuCalculation(t *testing.T) {
// Verify that Podman containers use the time-based CPU calculation
// when online_cpus is provided in the stats response.
// container used 20ms CPU over 1s with 2 CPUs → 1%
prevReadTime := time.Date(2026, 3, 15, 21, 26, 58, 0, time.UTC) // 1 second before stats read
const prevCpuUsage = uint64(5_000_000_000)
dm := &dockerManager{
client: &http.Client{Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
switch req.URL.EscapedPath() {
case "/containers/0123456789ab/stats":
return &http.Response{
StatusCode: http.StatusOK,
Status: "200 OK",
Header: make(http.Header),
Body: io.NopCloser(strings.NewReader(`{
"read":"2026-03-15T21:26:59Z",
"cpu_stats":{"cpu_usage":{"total_usage":5020000000},"system_cpu_usage":9999999,"online_cpus":2},
"memory_stats":{"usage":1048576,"stats":{"inactive_file":262144}},
"networks":{"eth0":{"rx_bytes":0,"tx_bytes":0}}
}`)),
Request: req,
}, nil
default:
return nil, fmt.Errorf("unexpected path: %s", req.URL.EscapedPath())
}
})},
containerStatsMap: make(map[string]*container.Stats),
apiStats: &container.ApiStats{},
usingPodman: true,
lastCpuContainer: map[uint16]map[string]uint64{
defaultCacheTimeMs: {"0123456789ab": prevCpuUsage},
},
lastCpuSystem: map[uint16]map[string]uint64{
defaultCacheTimeMs: {"0123456789ab": 1}, // intentionally tiny — should NOT be used
},
lastCpuReadTime: map[uint16]map[string]time.Time{
defaultCacheTimeMs: {"0123456789ab": prevReadTime},
},
networkSentTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
networkRecvTrackers: make(map[uint16]*deltatracker.DeltaTracker[string, uint64]),
lastNetworkReadTime: make(map[uint16]map[string]time.Time),
}
ctr := &container.ApiInfo{
IdShort: "0123456789ab",
Names: []string{"/myapp"},
Status: "Up 5 minutes",
Image: "myapp:latest",
}
err := dm.updateContainerStats(ctr, defaultCacheTimeMs)
require.NoError(t, err)
// cpu delta = 5020000000 - 5000000000 = 20000000 ns (20ms)
// elapsed = 1s = 1000000000 ns, online_cpus = 2
// expected = 20000000 / (1000000000 * 2) * 100 = 1.0%
expectedCpu := 1.0
assert.InDelta(t, expectedCpu, dm.containerStatsMap[ctr.IdShort].Cpu, 0.01)
}
func TestNetworkStatsCalculationWithRealData(t *testing.T) {
// Create synthetic test data to avoid timing issues
apiStats1 := &container.ApiStats{

View File

@@ -74,30 +74,6 @@ func (s *ApiStats) CalculateCpuPercentLinux(prevCpuContainer uint64, prevCpuSyst
return float64(cpuDelta) / float64(systemDelta) * 100.0
}
// CalculateCpuPercentPodman calculates CPU percentage for Podman containers.
// Podman populates system_cpu_usage from cgroup cpu.stat rather than /proc/stat, so it
// represents only cgroup-accounted activity, not total host CPU capacity. Using it as
// a denominator inflates the result. Instead we use elapsed wall-clock time × online_cpus,
// matching the approach used for Windows and recommended in:
// https://github.com/henrygd/beszel/issues/2049
func (s *ApiStats) CalculateCpuPercentPodman(prevCpuContainer uint64, prevRead time.Time) float64 {
if prevCpuContainer == 0 || s.CPUStats.OnlineCPUs == 0 {
return 0.0
}
// Treat a reset or out-of-order counter as a new baseline instead of
// allowing unsigned subtraction to wrap to an enormous percentage.
if s.CPUStats.CPUUsage.TotalUsage < prevCpuContainer {
return 0.0
}
cpuDelta := s.CPUStats.CPUUsage.TotalUsage - prevCpuContainer
elapsedNs := uint64(s.Read.Sub(prevRead).Nanoseconds())
systemCapacity := elapsedNs * uint64(s.CPUStats.OnlineCPUs)
if systemCapacity == 0 {
return 0.0
}
return float64(cpuDelta) / float64(systemCapacity) * 100.0
}
// from: https://github.com/docker/cli/blob/master/cli/command/container/stats_helpers.go#L185
func (s *ApiStats) CalculateCpuPercentWindows(prevCpuUsage uint64, prevRead time.Time) float64 {
// Max number of 100ns intervals between the previous time read and now
@@ -122,10 +98,8 @@ func (s *ApiStats) CalculateCpuPercentWindows(prevCpuUsage uint64, prevRead time
type CPUStats struct {
// CPU Usage. Linux and Windows.
CPUUsage CPUUsage `json:"cpu_usage"`
// System Usage. Linux only. Populated from /proc/stat on Docker; from cgroup cpu.stat on Podman.
// System Usage. Linux only.
SystemUsage uint64 `json:"system_cpu_usage,omitempty"`
// Number of online CPUs. Linux only. Used by Podman for time-based CPU calculation.
OnlineCPUs uint32 `json:"online_cpus,omitempty"`
}
type CPUUsage struct {

View File

@@ -30,10 +30,6 @@ const (
colorGray = "\033[90m"
)
// buildGOARM is set by GoReleaser for agent builds. An empty value identifies
// legacy builds, which used GoReleaser's default GOARM value (ARMv6).
var buildGOARM string
func ColorPrint(color, text string) {
fmt.Println(color + text + colorReset)
}
@@ -133,7 +129,7 @@ func (p *updater) update() (updated bool, err error) {
return false, nil
}
suffix := archiveSuffix(p.config.ArchiveExecutable, runtime.GOOS, runtime.GOARCH, buildGOARM)
suffix := archiveSuffix(p.config.ArchiveExecutable, runtime.GOOS, runtime.GOARCH)
asset, err := latest.findAssetBySuffix(suffix)
if err != nil {
return false, err
@@ -350,7 +346,7 @@ func copyFile(src, dst string) error {
return destFile.Chmod(sourceInfo.Mode())
}
func archiveSuffix(binaryName, goos, goarch, goarm string) string {
func archiveSuffix(binaryName, goos, goarch string) string {
if goos == "windows" {
return fmt.Sprintf("%s_%s_%s.zip", binaryName, goos, goarch)
}
@@ -358,11 +354,7 @@ func archiveSuffix(binaryName, goos, goarch, goarm string) string {
if binaryName == "beszel-agent" && goos == "linux" && goarch == "amd64" && isGlibc() {
return fmt.Sprintf("%s_%s_%s_glibc.tar.gz", binaryName, goos, goarch)
}
armSuffix := ""
if binaryName == "beszel-agent" && goarch == "arm" && (goarm == "5" || goarm == "7") {
armSuffix = "v" + goarm
}
return fmt.Sprintf("%s_%s_%s%s.tar.gz", binaryName, goos, goarch, armSuffix)
return fmt.Sprintf("%s_%s_%s.tar.gz", binaryName, goos, goarch)
}
func isGlibc() bool {

View File

@@ -8,31 +8,6 @@ import (
"testing"
)
func TestArchiveSuffix(t *testing.T) {
tests := []struct {
name string
binary, goos, goarch string
goarm, want string
}{
{"armv5 agent", "beszel-agent", "linux", "arm", "5", "beszel-agent_linux_armv5.tar.gz"},
{"armv6 keeps legacy name", "beszel-agent", "linux", "arm", "6", "beszel-agent_linux_arm.tar.gz"},
{"hub keeps legacy arm name", "beszel", "linux", "arm", "6", "beszel_linux_arm.tar.gz"},
{"armv7 agent", "beszel-agent", "linux", "arm", "7", "beszel-agent_linux_armv7.tar.gz"},
{"newer arm keeps legacy name", "beszel-agent", "linux", "arm", "8", "beszel-agent_linux_arm.tar.gz"},
{"unknown arm keeps legacy name", "beszel-agent", "linux", "arm", "", "beszel-agent_linux_arm.tar.gz"},
{"amd64 hub", "beszel", "linux", "amd64", "", "beszel_linux_amd64.tar.gz"},
{"windows", "beszel-agent", "windows", "amd64", "", "beszel-agent_windows_amd64.zip"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := archiveSuffix(tt.binary, tt.goos, tt.goarch, tt.goarm); got != tt.want {
t.Errorf("archiveSuffix() = %q, want %q", got, tt.want)
}
})
}
}
func TestReleaseFindAssetBySuffix(t *testing.T) {
r := release{
Assets: []*releaseAsset{

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ar\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-06-03 00:49\n"
"PO-Revision-Date: 2026-08-17 20:46\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"
@@ -1948,3 +1948,4 @@ msgstr "نعم"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Да"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@@ -1948,3 +1948,4 @@ msgstr "Ano"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Ja"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Ja"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Deine Benutzereinstellungen wurden aktualisiert."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: el\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Greek\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -250,6 +250,7 @@ msgstr ""
msgid "Bat"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -471,6 +472,10 @@ msgstr ""
msgid "Copy name"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr ""
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr ""
#. Context: Battery state
#. Context: Battery state
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Current state"
msgstr ""
@@ -717,7 +724,6 @@ msgstr ""
msgid "Ephemeral"
msgstr ""
#: src/components/login/auth-form.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/config-yaml.tsx
#: src/components/routes/settings/heartbeat.tsx
@@ -809,6 +815,10 @@ msgstr ""
msgid "Failed: {0}"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system/chart-card.tsx
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr ""
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr ""
@@ -1311,6 +1320,10 @@ msgstr ""
msgid "Process started"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
msgid "Public Key"
@@ -1550,6 +1563,11 @@ msgstr ""
msgid "Swap Usage"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
#: src/components/containers-table/containers-table-columns.tsx
@@ -1565,6 +1583,10 @@ msgstr ""
msgid "System"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
msgstr ""
@@ -1657,11 +1679,6 @@ msgstr ""
msgid "To email(s)"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: es\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Sí"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Tu 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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Persian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "بله"
#: src/components/routes/settings/layout.tsx
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: 2026-06-08 15:20\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Oui"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Vos paramètres utilisateur ont été mis à jour."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: he\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Hebrew\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
@@ -1948,3 +1948,4 @@ msgstr "כן"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "הגדרות המשתמש שלך עודכנו."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: hr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\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"
@@ -1948,3 +1948,4 @@ msgstr "Da"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Igen"
#: src/components/routes/settings/layout.tsx
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: id\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Indonesian\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1948,3 +1948,4 @@ msgstr "Ya"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Pengaturan pengguna anda telah diperbarui."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: it\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-17 09:26\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -893,7 +893,7 @@ msgstr "Stato"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr "Hearthbeat"
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -1948,3 +1948,4 @@ msgstr "Sì"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1948,3 +1948,4 @@ msgstr "はい"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Korean\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1948,3 +1948,4 @@ msgstr "예"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Ja"
#: src/components/routes/settings/layout.tsx
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: 2026-04-26 23:25\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Ja"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\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"
@@ -1948,3 +1948,4 @@ msgstr "Tak"
#: src/components/routes/settings/layout.tsx
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: 2026-08-04 18:12\n"
"PO-Revision-Date: 2026-08-17 20:45\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Sim"
#: src/components/routes/settings/layout.tsx
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: ro\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-07-19 13:06\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Romanian\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
@@ -250,6 +250,7 @@ msgstr "Trafic"
msgid "Bat"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -471,6 +472,10 @@ msgstr ""
msgid "Copy name"
msgstr "Copiază nume"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copiază text"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr ""
#. Context: Battery state
#. Context: Battery state
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Current state"
msgstr ""
@@ -717,7 +724,6 @@ msgstr ""
msgid "Ephemeral"
msgstr ""
#: src/components/login/auth-form.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/config-yaml.tsx
#: src/components/routes/settings/heartbeat.tsx
@@ -809,6 +815,10 @@ msgstr ""
msgid "Failed: {0}"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system/chart-card.tsx
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr ""
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Limbă"
@@ -1311,6 +1320,10 @@ msgstr ""
msgid "Process started"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
msgid "Public Key"
@@ -1550,6 +1563,11 @@ msgstr ""
msgid "Swap Usage"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
#: src/components/containers-table/containers-table-columns.tsx
@@ -1565,6 +1583,10 @@ msgstr ""
msgid "System"
msgstr "Sistem"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
msgstr ""
@@ -1657,11 +1679,6 @@ msgstr ""
msgid "To email(s)"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ru\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 21:43\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"
@@ -474,7 +474,7 @@ msgstr "Копировать имя"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
msgstr "Копировать открытый ключ"
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
@@ -817,7 +817,7 @@ msgstr "Неудачно: {0}"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
msgstr "Вентиляторы"
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -1322,7 +1322,7 @@ msgstr "Процесс запущен"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
msgstr "Открытый ключ"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
@@ -1566,7 +1566,7 @@ msgstr "Использование подкачки"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
msgstr "Переключить тему"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1585,7 +1585,7 @@ msgstr "Система"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
msgstr "Скорость вращения системных вентиляторов (об/мин)"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
@@ -1948,3 +1948,4 @@ msgstr "Да"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\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"
@@ -1948,3 +1948,4 @@ msgstr "Da"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Vaše uporabniške nastavitve so posodobljene."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-22 14:14\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Serbian (Cyrillic)\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"
@@ -1948,3 +1948,4 @@ msgstr "Да"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Ваша корисничка подешавања су ажурирана."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sv\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Ja"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Dina användarinställningar har uppdaterats."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: th\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Thai\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -250,6 +250,7 @@ msgstr ""
msgid "Bat"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -471,6 +472,10 @@ msgstr ""
msgid "Copy name"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr ""
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr ""
#. Context: Battery state
#. Context: Battery state
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Current state"
msgstr ""
@@ -717,7 +724,6 @@ msgstr ""
msgid "Ephemeral"
msgstr ""
#: src/components/login/auth-form.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/config-yaml.tsx
#: src/components/routes/settings/heartbeat.tsx
@@ -809,6 +815,10 @@ msgstr ""
msgid "Failed: {0}"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system/chart-card.tsx
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr ""
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr ""
@@ -1311,6 +1320,10 @@ msgstr ""
msgid "Process started"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
msgid "Public Key"
@@ -1550,6 +1563,11 @@ msgstr ""
msgid "Swap Usage"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
#: src/components/containers-table/containers-table-columns.tsx
@@ -1565,6 +1583,10 @@ msgstr ""
msgid "System"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
msgstr ""
@@ -1657,11 +1679,6 @@ msgstr ""
msgid "To email(s)"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: tr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-05-30 22:33\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -1948,3 +1948,4 @@ msgstr "Evet"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "Kullanıcı ayarlarınız güncellendi."

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ug\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Uyghur\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -250,6 +250,7 @@ msgstr ""
msgid "Bat"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -471,6 +472,10 @@ msgstr ""
msgid "Copy name"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr ""
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr ""
#. Context: Battery state
#. Context: Battery state
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Current state"
msgstr ""
@@ -717,7 +724,6 @@ msgstr ""
msgid "Ephemeral"
msgstr ""
#: src/components/login/auth-form.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/config-yaml.tsx
#: src/components/routes/settings/heartbeat.tsx
@@ -809,6 +815,10 @@ msgstr ""
msgid "Failed: {0}"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system/chart-card.tsx
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr ""
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr ""
@@ -1311,6 +1320,10 @@ msgstr ""
msgid "Process started"
msgstr ""
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
msgid "Public Key"
@@ -1550,6 +1563,11 @@ msgstr ""
msgid "Swap Usage"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
#: src/components/containers-table/containers-table-columns.tsx
@@ -1565,6 +1583,10 @@ msgstr ""
msgid "System"
msgstr ""
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
msgstr ""
@@ -1657,11 +1679,6 @@ msgstr ""
msgid "To email(s)"
msgstr ""
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr ""
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: uk\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-05-08 11:22\n"
"PO-Revision-Date: 2026-08-18 14:01\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"
@@ -474,7 +474,7 @@ msgstr "Копіювати імʼя"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
msgstr "Копіювати відкритий ключ"
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
@@ -817,7 +817,7 @@ msgstr "Невдало: {0}"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
msgstr "Вентилятори"
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -1322,7 +1322,7 @@ msgstr "Процес запущено"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
msgstr "Відкритий ключ"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
@@ -1566,7 +1566,7 @@ msgstr "Використання підкачки"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
msgstr "Змінити тему"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1585,7 +1585,7 @@ msgstr "Система"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
msgstr "Швидкість обертання вентиляторів (об/хв)"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
@@ -1948,3 +1948,4 @@ msgstr "Так"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1948,3 +1948,4 @@ msgstr "Có"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-18 11:51\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -474,7 +474,7 @@ msgstr "复制名称"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
msgstr "复制公钥"
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
@@ -817,7 +817,7 @@ msgstr "失败: {0}"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
msgstr "风扇"
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -1322,7 +1322,7 @@ msgstr "进程启动"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
msgstr "公钥"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
@@ -1566,7 +1566,7 @@ msgstr "SWAP 使用率"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
msgstr "切换主题"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1585,7 +1585,7 @@ msgstr "系统"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
msgstr "系统风扇速度RPM"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
@@ -1948,3 +1948,4 @@ msgstr "是"
#: src/components/routes/settings/layout.tsx
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: 2026-08-17 19:22\n"
"PO-Revision-Date: 2026-08-17 20:46\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional, Hong Kong\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -1948,3 +1948,4 @@ msgstr "是"
#: src/components/routes/settings/layout.tsx
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: 2026-06-29 04:59\n"
"PO-Revision-Date: 2026-08-18 14:01\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -474,7 +474,7 @@ msgstr "複製名稱"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
msgstr "複製公鑰"
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
@@ -817,7 +817,7 @@ msgstr "失敗:{0}"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr ""
msgstr "風扇"
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -1322,7 +1322,7 @@ msgstr "進程啟動"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr ""
msgstr "公鑰"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
@@ -1566,7 +1566,7 @@ msgstr "交換空間使用量"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr ""
msgstr "切換主題"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1585,7 +1585,7 @@ msgstr "系統"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
msgstr "系統風扇速度RPM"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
@@ -1714,7 +1714,7 @@ msgstr "每個介面的總傳送資料量"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "讀寫總耗時(可能超過 100%"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
@@ -1948,3 +1948,4 @@ msgstr "是"
#: src/components/routes/settings/layout.tsx
msgid "Your user settings have been updated."
msgstr "已更新您的使用者設定"

View File

@@ -215,15 +215,9 @@ detect_architecture() {
x86_64)
arch="amd64"
;;
armv5*)
arch="armv5"
;;
armv6l)
armv6l|armv7l)
arch="arm"
;;
armv7l)
arch="armv7"
;;
aarch64)
arch="arm64"
;;