Compare commits

...

18 Commits

Author SHA1 Message Date
Pavel Artsishevsky
2df1f722e4 fix(agent): use time-based CPU calc for Podman containers (#2131) 2026-08-17 17:08:57 -04:00
henrygd
2054b276a7 fix(release): avoid duplicate ARM archives (#1884) 2026-08-17 16:49:59 -04:00
henrygd
19f250c7de ci: change release flow actions/setup-go to use go-version: stable 2026-08-17 16:11:00 -04:00
henrygd
e07f91b920 release 0.18.8 2026-08-17 16:01:51 -04:00
henrygd
218aa8478a update translations 2026-08-17 15:38:22 -04:00
henrygd
90b789aa72 update changelog 2026-08-17 15:33:32 -04:00
hank
2d01d71f46 New Crowdin updates (#1930) 2026-08-17 15:33:16 -04:00
henrygd
f894d188cf ci(helm): update chart versions on new beszel release 2026-08-17 14:52:31 -04:00
henrygd
46cc602d37 ci(helm): publish charts to GHCR instead of creating releases 2026-08-17 14:33:40 -04:00
henrygd
89ad51d4ce fix(agent): distinguish SMART devices sharing the same path
Co-authored-by: Digital <github@crni.xyz>
2026-08-17 13:55:27 -04:00
dependabot[bot]
d5f41af3a6 chore(deps): bump docker/setup-buildx-action from 3 to 4 (#2221)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 13:03:15 -04:00
henrygd
1074503af1 deps: update go packages 2026-08-17 12:57:55 -04:00
henrygd
90f1bdef1e remove language toggle from navbar 2026-08-17 12:54:55 -04:00
henrygd
5f383c0eb1 fix(tests): stop system updaters on app termination 2026-08-17 12:32:34 -04:00
henrygd
ae037b278e agent: simplify FreeBSD temperature sensor names 2026-08-16 21:16:12 -04:00
QuantumFlux21
9f1128933f feat: Add support for reading CPU (dev.cpu.*.temperature) and ACPI thermal zone (hw.acpi.thermal.tz*) temperature sensors on FreeBSD systems. (#2227)
Co-authored-by: roib <roib@elsec.us>
2026-08-16 20:58:41 -04:00
henrygd
dbe10e3a8f ci: update vulncheck workflow to run only on pushes to main, not PRs 2026-08-16 20:33:38 -04:00
hank
7e7bcb3b35 chore: release main 2026-08-16 20:28:39 -04:00
75 changed files with 6106 additions and 1029 deletions

View File

@@ -193,7 +193,7 @@ jobs:
uses: docker/setup-qemu-action@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4
- name: Docker metadata
id: metadata

109
.github/workflows/helm-charts.yml vendored Normal file
View File

@@ -0,0 +1,109 @@
name: Helm charts
on:
pull_request:
paths:
- "supplemental/helm/**"
push:
branches:
- main
paths:
- "supplemental/helm/**"
permissions:
contents: read
packages: write
env:
OCI_REGISTRY: ghcr.io/henrygd/beszel-charts
jobs:
changes:
name: Detect changed charts
runs-on: ubuntu-latest
outputs:
charts: ${{ steps.changes.outputs.charts }}
steps:
- name: Checkout repository
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Detect changed charts
id: changes
env:
BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
run: |
charts=()
for name in beszel-agent beszel-hub; do
path="supplemental/helm/$name"
if ! git diff --quiet "$BASE_SHA" "$GITHUB_SHA" -- "$path"; then
charts+=("$name|$path")
fi
done
printf '%s\n' "${charts[@]}" \
| jq -Rsc 'split("\n") | map(select(length > 0) | split("|") | {name: .[0], path: .[1]})' \
| xargs -0 printf 'charts=%s\n' >> "$GITHUB_OUTPUT"
validate-and-publish:
name: ${{ github.event_name == 'push' && 'Publish' || 'Validate' }} ${{ matrix.chart.name }}
needs: changes
if: needs.changes.outputs.charts != '[]'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
chart: ${{ fromJSON(needs.changes.outputs.charts) }}
steps:
- name: Checkout repository
uses: actions/checkout@v7
- name: Set up Helm
uses: azure/setup-helm@v4
- name: Lint chart
run: helm lint "${{ matrix.chart.path }}" --set env.KEY=ci-placeholder
- name: Render chart
run: helm template "${{ matrix.chart.name }}" "${{ matrix.chart.path }}" --set env.KEY=ci-placeholder > /dev/null
- name: Package chart
id: package
env:
CHART_NAME: ${{ matrix.chart.name }}
CHART_PATH: ${{ matrix.chart.path }}
run: |
version=$(awk '/^version:/ { print $2 }' "$CHART_PATH/Chart.yaml")
test -n "$version"
mkdir -p .helm-packages
helm package "$CHART_PATH" --destination .helm-packages
package=".helm-packages/${CHART_NAME}-${version}.tgz"
test -f "$package"
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "package=$package" >> "$GITHUB_OUTPUT"
- name: Log in to GHCR
env:
GITHUB_TOKEN: ${{ github.token }}
run: echo "$GITHUB_TOKEN" | helm registry login ghcr.io --username "$GITHUB_ACTOR" --password-stdin
- name: Check chart version is unpublished
env:
CHART_NAME: ${{ matrix.chart.name }}
CHART_VERSION: ${{ steps.package.outputs.version }}
run: |
chart="oci://${OCI_REGISTRY}/${CHART_NAME}"
if helm show chart "$chart" --version "$CHART_VERSION" > /dev/null 2>&1; then
echo "${CHART_NAME} ${CHART_VERSION} is already published. Bump version in Chart.yaml." >&2
exit 1
fi
- name: Publish chart
if: github.event_name == 'push'
run: helm push "${{ steps.package.outputs.package }}" "oci://${OCI_REGISTRY}"

View File

@@ -1,152 +0,0 @@
on:
push:
branches:
- main
paths:
- ".github/workflows/release-please.yml"
- "release-please-config.json"
- ".release-please-manifest.json"
- "supplemental/helm/**"
permissions:
contents: write
issues: write
pull-requests: write
env:
PUBLISHABLE_ITEMS: '["supplemental/helm/beszel-agent", "supplemental/helm/beszel-hub"]'
name: helm-release
concurrency:
group: helm-release
cancel-in-progress: false
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: googleapis/release-please-action@v4
name: Prepare release
id: release-please
with:
token: ${{ secrets.CR_TOKEN }}
- name: Dump Release Please Output
env:
RELEASE_PLEASE_OUTPUT: ${{ toJson(steps.release-please.outputs) }}
run: |
echo "$RELEASE_PLEASE_OUTPUT"
- name: Determine what should be published
uses: actions/github-script@v8
id: items-to-publish
env:
CHANGED_ITEMS: "${{ steps.release-please.outputs.paths_released }}"
with:
script: |
const changedItems = JSON.parse(process.env.CHANGED_ITEMS || '[]');
console.log("changed items", changedItems);
const eligibleItems = JSON.parse(process.env.PUBLISHABLE_ITEMS || '[]');
console.log("eligible items", eligibleItems);
const itemsToPublish = changedItems.filter(i => eligibleItems.includes(i));
console.log("items to publish", itemsToPublish);
return itemsToPublish;
outputs:
items_to_publish: ${{ steps.items-to-publish.outputs.result }}
releases: ${{ toJson(steps.release-please.outputs) }}
release-charts:
name: Release Charts
needs: release
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.items_to_publish != '' && toJson(fromJson(needs.release.outputs.items_to_publish)) != '[]' }}
strategy:
fail-fast: false
max-parallel: 1
matrix:
path: ${{ fromJSON(needs.release.outputs.items_to_publish) }}
env:
TAG: ${{ fromJson(needs.release.outputs.releases)[format('{0}--tag_name', matrix.path)] }}
VERSION: ${{ fromJson(needs.release.outputs.releases)[format('{0}--version', matrix.path)] }}
RELEASE_ID: ${{ fromJson(needs.release.outputs.releases)[format('{0}--id', matrix.path)] }}
steps:
- name: Debug
run: |
echo ${{ env.TAG }}
echo ${{ env.VERSION }}
echo ${{ matrix.path }}
- name: ✨ Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Configure Git
run: |
echo ${{ needs.release.outputs.items_to_publish }}
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Install Chart Releaser
run: |
version=v1.6.0
mkdir .tmp
install_dir=.tmp
echo "Installing chart-releaser on $install_dir..."
curl -sSLo cr.tar.gz "https://github.com/helm/chart-releaser/releases/download/$version/chart-releaser_${version#v}_linux_amd64.tar.gz"
tar -xzf cr.tar.gz -C "$install_dir"
rm -f cr.tar.gz
- name: Package chart
run: |
.tmp/cr package ${{ matrix.path }}
ls -la .cr-release-packages/
- name: Upload chart package to draft release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload "$TAG" .cr-release-packages/*.tgz --clobber
- name: Publish chart release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CHART_PATH: ${{ matrix.path }}
run: |
chart_name="${CHART_PATH##*/}"
gh api --method PATCH "repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}" \
-f "name=Helm chart: ${chart_name} v${VERSION}" \
-F draft=false \
-f make_latest=false
- name: Update index
run: |
owner=$(cut -d '/' -f 1 <<< "$GITHUB_REPOSITORY")
repo=$(cut -d '/' -f 2 <<< "$GITHUB_REPOSITORY")
# Create the local output directory for the generated index
mkdir -p docs
# Generate index.yaml for GitHub Pages
args=(-o "$owner" -r "$repo" --push -t "${{ secrets.CR_TOKEN }}" --index-path docs/index.yaml --release-name-template '{{ .Name }}-v{{ .Version }}')
.tmp/cr index "${args[@]}"
- name: Restore application release as latest
if: ${{ always() }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
release_id=$(gh api "repos/${GITHUB_REPOSITORY}/releases?per_page=100" \
--jq 'map(select(.draft == false and .prerelease == false and (.tag_name | test("^v[0-9]"))))[0].id')
test -n "$release_id"
gh api --method PATCH "repos/${GITHUB_REPOSITORY}/releases/${release_id}" \
-f make_latest=true

View File

@@ -29,7 +29,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v7
with:
go-version: "^1.22.1"
go-version: stable
- name: Set up .NET
uses: actions/setup-dotnet@v6
@@ -52,51 +52,3 @@ jobs:
GITHUB_TOKEN: ${{ secrets.TOKEN || secrets.GITHUB_TOKEN }}
WINGET_TOKEN: ${{ secrets.WINGET_TOKEN }}
IS_FORK: ${{ github.repository_owner != 'henrygd' }}
update-helm-app-version:
name: Update Helm app version
needs: goreleaser
if: ${{ github.repository_owner == 'henrygd' }}
runs-on: ubuntu-latest
steps:
- name: Checkout main
uses: actions/checkout@v7
with:
ref: main
token: ${{ secrets.CR_TOKEN }}
- name: Update chart app versions
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
version="${RELEASE_TAG#v}"
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.-]+)?$ ]]; then
echo "Invalid release version: $version" >&2
exit 1
fi
for chart in supplemental/helm/beszel-agent supplemental/helm/beszel-hub; do
current_version=$(awk -F '"' '/^appVersion:/ { print $2 }' "$chart/Chart.yaml")
NEW_VERSION="$version" perl -pi -e 's/^appVersion:.*$/appVersion: "$ENV{NEW_VERSION}"/' "$chart/Chart.yaml"
OLD_VERSION="$current_version" NEW_VERSION="$version" \
perl -pi -e 's/\Q$ENV{OLD_VERSION}\E/$ENV{NEW_VERSION}/g' "$chart/README.md"
done
- name: Commit app version update
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
if git diff --quiet -- supplemental/helm; then
echo "Helm charts already use ${RELEASE_TAG#v}"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add supplemental/helm/beszel-agent/Chart.yaml \
supplemental/helm/beszel-agent/README.md \
supplemental/helm/beszel-hub/Chart.yaml \
supplemental/helm/beszel-hub/README.md
git commit -m "fix(helm): update app version to ${RELEASE_TAG#v}"
git push origin HEAD:main

101
.github/workflows/update-helm-charts.yml vendored Normal file
View File

@@ -0,0 +1,101 @@
name: Update Helm charts
on:
release:
types:
- published
permissions:
contents: write
pull-requests: write
concurrency:
group: update-helm-charts
cancel-in-progress: false
jobs:
update:
name: Propose chart update
if: ${{ github.repository_owner == 'henrygd' && startsWith(github.event.release.tag_name, 'v') && !github.event.release.prerelease }}
runs-on: ubuntu-latest
env:
BRANCH: automation/update-helm-app-version
RELEASE_TAG: ${{ github.event.release.tag_name }}
AUTOMATION_TOKEN: ${{ secrets.CR_TOKEN || github.token }}
steps:
- name: Checkout main
uses: actions/checkout@v7
with:
ref: main
token: ${{ env.AUTOMATION_TOKEN }}
- name: Update chart versions
id: update
run: |
version="${RELEASE_TAG#v}"
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Unsupported software release version: $version" >&2
exit 1
fi
changed=false
for chart in supplemental/helm/beszel-agent supplemental/helm/beszel-hub; do
current_app_version=$(awk -F '"' '/^appVersion:/ { print $2 }' "$chart/Chart.yaml")
if [[ "$current_app_version" == "$version" ]]; then
echo "$chart already uses appVersion $version"
continue
fi
newest_version=$(printf '%s\n' "$current_app_version" "$version" | sort -V | tail -n 1)
if [[ "$newest_version" != "$version" ]]; then
echo "Skipping stale update of $chart from $current_app_version to $version"
continue
fi
chart_version=$(awk '/^version:/ { print $2 }' "$chart/Chart.yaml")
if [[ ! "$chart_version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
echo "Unsupported chart version in $chart/Chart.yaml: $chart_version" >&2
exit 1
fi
next_chart_version="${BASH_REMATCH[1]}.${BASH_REMATCH[2]}.$((BASH_REMATCH[3] + 1))"
NEW_APP_VERSION="$version" NEW_CHART_VERSION="$next_chart_version" \
perl -pi -e 's/^appVersion:.*$/appVersion: "$ENV{NEW_APP_VERSION}"/; s/^version:.*$/version: $ENV{NEW_CHART_VERSION}/' \
"$chart/Chart.yaml"
OLD_APP_VERSION="$current_app_version" NEW_APP_VERSION="$version" \
perl -pi -e 's/\Q$ENV{OLD_APP_VERSION}\E/$ENV{NEW_APP_VERSION}/g' "$chart/README.md"
echo "$chart: appVersion $current_app_version -> $version, chart $chart_version -> $next_chart_version"
changed=true
done
echo "changed=$changed" >> "$GITHUB_OUTPUT"
- name: Open or update pull request
if: steps.update.outputs.changed == 'true'
env:
GH_TOKEN: ${{ env.AUTOMATION_TOKEN }}
run: |
version="${RELEASE_TAG#v}"
title="chore(helm): update app version to ${version}"
body="Updates the Helm charts for [Beszel ${version}](${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${RELEASE_TAG}) and bumps their chart patch versions. Merging this pull request publishes the updated charts to GHCR."
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git checkout -B "$BRANCH"
git add supplemental/helm/beszel-agent/Chart.yaml \
supplemental/helm/beszel-agent/README.md \
supplemental/helm/beszel-hub/Chart.yaml \
supplemental/helm/beszel-hub/README.md
git commit -m "$title"
git fetch origin "$BRANCH" || true
git push --force-with-lease origin "HEAD:refs/heads/${BRANCH}"
pr_number=$(gh pr list --head "$BRANCH" --base main --state open --json number --jq '.[0].number')
if [[ -n "$pr_number" ]]; then
gh pr edit "$pr_number" --title "$title" --body "$body"
else
gh pr create --base main --head "$BRANCH" --title "$title" --body "$body"
fi

View File

@@ -2,10 +2,6 @@
name: VulnCheck
on:
pull_request:
branches:
- main
push:
branches:
- main

View File

@@ -22,9 +22,6 @@ builds:
- amd64
- arm64
- arm
goarm:
- "6"
- "7"
ignore:
- goos: windows
goarch: arm64
@@ -42,6 +39,8 @@ 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
@@ -108,6 +107,7 @@ archives:
{{ .Binary }}_
{{- .Os }}_
{{- .Arch }}
{{- if ne .Arm "6" }}{{ with .Arm }}v{{ . }}{{ end }}{{ end }}
format_overrides:
- goos: windows
formats: [zip]

View File

@@ -1,4 +0,0 @@
{
"supplemental/helm/beszel-agent": "0.1.3",
"supplemental/helm/beszel-hub": "0.1.3"
}

View File

@@ -544,11 +544,18 @@ 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
// 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
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,6 +1059,162 @@ 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

@@ -1,4 +1,4 @@
//go:build !windows
//go:build !windows && !freebsd
package agent

14
agent/sensors_freebsd.go Normal file
View File

@@ -0,0 +1,14 @@
//go:build freebsd
package agent
import (
"context"
"github.com/shirou/gopsutil/v4/sensors"
"golang.org/x/sys/unix"
)
var getSensorTemps = func(ctx context.Context) ([]sensors.TemperatureStat, error) {
return getFreeBSDSensorTemps(ctx, unix.SysctlUint32)
}

View File

@@ -0,0 +1,81 @@
//go:build freebsd || testing
package agent
import (
"context"
"fmt"
"github.com/shirou/gopsutil/v4/sensors"
)
const (
freebsdZeroCelsiusDeciKelvin = 2731
freebsdAcpiThermalZoneCount = 16
)
type freebsdSysctlUintReader func(name string) (uint32, error)
func getFreeBSDSensorTemps(ctx context.Context, readSysctl freebsdSysctlUintReader) ([]sensors.TemperatureStat, error) {
cpuCount, err := readSysctl("hw.ncpu")
if err != nil {
return nil, err
}
temps := make([]sensors.TemperatureStat, 0, int(cpuCount)+freebsdAcpiThermalZoneCount)
for cpu := range cpuCount {
select {
case <-ctx.Done():
return temps, ctx.Err()
default:
}
sysctlName := fmt.Sprintf("dev.cpu.%d.temperature", cpu)
value, err := readSysctl(sysctlName)
if err != nil {
continue
}
temp, ok := freebsdDeciKelvinToCelsius(value)
if !ok {
continue
}
temps = append(temps, sensors.TemperatureStat{
SensorKey: fmt.Sprintf("cpu.%d", cpu),
Temperature: temp,
})
}
for zone := 0; zone < freebsdAcpiThermalZoneCount; zone++ {
select {
case <-ctx.Done():
return temps, ctx.Err()
default:
}
sysctlName := fmt.Sprintf("hw.acpi.thermal.tz%d.temperature", zone)
value, err := readSysctl(sysctlName)
if err != nil {
continue
}
temp, ok := freebsdDeciKelvinToCelsius(value)
if !ok {
continue
}
temps = append(temps, sensors.TemperatureStat{
SensorKey: fmt.Sprintf("acpi.thermal.tz%d", zone),
Temperature: temp,
})
}
return temps, nil
}
func freebsdDeciKelvinToCelsius(value uint32) (float64, bool) {
if value <= freebsdZeroCelsiusDeciKelvin {
return 0, false
}
temp := float64(int64(value)-freebsdZeroCelsiusDeciKelvin) / 10
if temp <= 0 || temp >= 200 {
return 0, false
}
return temp, true
}

View File

@@ -0,0 +1,167 @@
//go:build testing
package agent
import (
"context"
"errors"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var errFakeFreeBSDSysctlNotFound = errors.New("sysctl not found")
type fakeFreeBSDSysctls struct {
values map[string]uint32
errs map[string]error
}
func (f fakeFreeBSDSysctls) read(name string) (uint32, error) {
if err, ok := f.errs[name]; ok {
return 0, err
}
if value, ok := f.values[name]; ok {
return value, nil
}
return 0, errFakeFreeBSDSysctlNotFound
}
func TestFreeBSDDeciKelvinToCelsius(t *testing.T) {
tests := []struct {
name string
value uint32
expected float64
ok bool
}{
{
name: "45 Celsius",
value: 3181,
expected: 45,
ok: true,
},
{
name: "fractional Celsius",
value: 3186,
expected: 45.5,
ok: true,
},
{
name: "zero deci-Kelvin",
value: 0,
ok: false,
},
{
name: "zero Celsius",
value: freebsdZeroCelsiusDeciKelvin,
ok: false,
},
{
name: "below zero Celsius",
value: freebsdZeroCelsiusDeciKelvin - 1,
ok: false,
},
{
name: "invalid signed integer",
value: 1<<32 - 1,
ok: false,
},
{
name: "unreasonably high Celsius",
value: freebsdZeroCelsiusDeciKelvin + 2000,
ok: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, ok := freebsdDeciKelvinToCelsius(tt.value)
assert.Equal(t, tt.ok, ok)
assert.InDelta(t, tt.expected, result, 0.001)
})
}
}
func TestGetFreeBSDSensorTemps(t *testing.T) {
reader := fakeFreeBSDSysctls{
values: map[string]uint32{
"hw.ncpu": 4,
"dev.cpu.0.temperature": 3231,
"dev.cpu.1.temperature": 3242,
"dev.cpu.3.temperature": freebsdZeroCelsiusDeciKelvin,
"hw.acpi.thermal.tz0.temperature": 3101,
"hw.acpi.thermal.tz2.temperature": 3116,
"hw.acpi.thermal.tz3.temperature": freebsdZeroCelsiusDeciKelvin,
"unrelated.sensor.value": 9999,
"dev.cpu.99.temperature": 9999,
"dev.amdtemp.0.core0.foo": 9999,
},
}
temps, err := getFreeBSDSensorTemps(context.Background(), reader.read)
require.NoError(t, err)
require.Len(t, temps, 4)
assert.Equal(t, "cpu.0", temps[0].SensorKey)
assert.InDelta(t, 50.0, temps[0].Temperature, 0.001)
assert.Equal(t, "cpu.1", temps[1].SensorKey)
assert.InDelta(t, 51.1, temps[1].Temperature, 0.001)
assert.Equal(t, "acpi.thermal.tz0", temps[2].SensorKey)
assert.InDelta(t, 37.0, temps[2].Temperature, 0.001)
assert.Equal(t, "acpi.thermal.tz2", temps[3].SensorKey)
assert.InDelta(t, 38.5, temps[3].Temperature, 0.001)
}
func TestGetFreeBSDSensorTempsCpuCountError(t *testing.T) {
reader := fakeFreeBSDSysctls{
errs: map[string]error{
"hw.ncpu": errors.New("permission denied"),
},
}
temps, err := getFreeBSDSensorTemps(context.Background(), reader.read)
assert.Nil(t, temps)
assert.EqualError(t, err, "permission denied")
}
func TestGetFreeBSDSensorTempsNoTemperatureSysctls(t *testing.T) {
reader := fakeFreeBSDSysctls{
values: map[string]uint32{"hw.ncpu": 2},
}
temps, err := getFreeBSDSensorTemps(context.Background(), reader.read)
require.NoError(t, err)
assert.Empty(t, temps)
}
func TestGetFreeBSDSensorTempsAcpiOnly(t *testing.T) {
reader := fakeFreeBSDSysctls{
values: map[string]uint32{
"hw.ncpu": 0,
"hw.acpi.thermal.tz0.temperature": 3081,
},
}
temps, err := getFreeBSDSensorTemps(context.Background(), reader.read)
require.NoError(t, err)
require.Len(t, temps, 1)
assert.Equal(t, "acpi.thermal.tz0", temps[0].SensorKey)
assert.InDelta(t, 35.0, temps[0].Temperature, 0.001)
}
func TestGetFreeBSDSensorTempsContextCancelled(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel()
reader := fakeFreeBSDSysctls{
values: map[string]uint32{"hw.ncpu": 2},
}
temps, err := getFreeBSDSensorTemps(ctx, reader.read)
assert.Empty(t, temps)
assert.ErrorIs(t, err, context.Canceled)
}

View File

@@ -375,9 +375,15 @@ func (sm *SmartManager) parseSmartOutput(deviceInfo *DeviceInfo, output []byte)
Type string
Parse func([]byte) (bool, int)
}{
{Type: "nvme", Parse: sm.parseSmartForNvme},
{Type: "sat", Parse: sm.parseSmartForSata},
{Type: "scsi", Parse: sm.parseSmartForScsi},
{Type: "nvme", Parse: func(output []byte) (bool, int) {
return sm.parseSmartForNvme(output, deviceInfo.Type)
}},
{Type: "sat", Parse: func(output []byte) (bool, int) {
return sm.parseSmartForSata(output, deviceInfo.Type)
}},
{Type: "scsi", Parse: func(output []byte) (bool, int) {
return sm.parseSmartForScsi(output, deviceInfo.Type)
}},
}
deviceType := normalizeParserType(deviceInfo.parserType)
@@ -486,10 +492,11 @@ func (sm *SmartManager) CollectSmart(deviceInfo *DeviceInfo) error {
return errNoValidSmartData
}
// slog.Info("collecting SMART data", "device", deviceInfo.Name, "type", deviceInfo.Type, "has_existing_data", sm.hasDataForDevice(deviceInfo.Name))
// slog.Info("collecting SMART data", "device", deviceInfo.Name, "type", deviceInfo.Type, "has_existing_data", sm.hasDataForDevice(deviceInfo))
// Check if we have any existing data for this device
hasExistingData := sm.hasDataForDevice(deviceInfo.Name)
// Check if we have existing data for this exact device identity. Multiple
// bridge slots can share a path, so a name-only match is not sufficient.
hasExistingData := sm.hasDataForDevice(deviceInfo)
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
@@ -592,14 +599,18 @@ func (sm *SmartManager) smartctlArgs(deviceInfo *DeviceInfo, includeStandby bool
return args
}
// hasDataForDevice checks if we have cached SMART data for a specific device
func (sm *SmartManager) hasDataForDevice(deviceName string) bool {
// hasDataForDevice checks if we have cached SMART data for a specific device identity.
func (sm *SmartManager) hasDataForDevice(deviceInfo *DeviceInfo) bool {
if deviceInfo == nil {
return false
}
sm.Lock()
defer sm.Unlock()
// Check if any cached data has this device name
deviceKey := makeDeviceKey(deviceInfo.Name, deviceInfo.Type)
for _, data := range sm.SmartDataMap {
if data != nil && data.DiskName == deviceName {
if data != nil && makeDeviceKey(data.DiskName, data.DiskType) == deviceKey {
return true
}
}
@@ -747,7 +758,14 @@ func mergeDeviceLists(existing, scanned, configured []*DeviceInfo) []*DeviceInfo
continue
}
if existingDev := deviceIndexByName[configuredDevice.Name]; existingDev != nil {
oldKey := makeDeviceKey(existingDev.Name, existingDev.Type)
if prev := existingIndex[key]; prev != nil {
preserveVerifiedType(existingDev, prev)
}
applyConfiguredMetadata(existingDev, configuredDevice)
delete(deviceIndex, oldKey)
deviceIndex[makeDeviceKey(existingDev.Name, existingDev.Type)] = existingDev
delete(deviceIndexByName, configuredDevice.Name)
continue
}
@@ -851,9 +869,11 @@ func (sm *SmartManager) isVirtualDeviceFromStrings(fields ...string) bool {
return false
}
// parseSmartForSata parses the output of smartctl --all -j for SATA/ATA devices and updates the SmartDataMap
// parseSmartForSata parses the output of smartctl --all -j for SATA/ATA devices and updates the SmartDataMap.
// deviceType is the exact type used to identify and query the device; when set,
// it takes precedence over the generic type reported by smartctl.
// Returns hasValidData and exitStatus
func (sm *SmartManager) parseSmartForSata(output []byte) (bool, int) {
func (sm *SmartManager) parseSmartForSata(output []byte, deviceType string) (bool, int) {
var data smart.SmartInfoForSata
if err := json.Unmarshal(output, &data); err != nil {
@@ -892,6 +912,9 @@ func (sm *SmartManager) parseSmartForSata(output []byte) (bool, int) {
smartData.SmartStatus = getSmartStatus(smartData.Temperature, data.SmartStatus.Passed)
smartData.DiskName = data.Device.Name
smartData.DiskType = data.Device.Type
if deviceType != "" {
smartData.DiskType = deviceType
}
// get values from ata_device_statistics if necessary
var ataDeviceStats smart.AtaDeviceStatistics
@@ -965,7 +988,7 @@ func findAtaDeviceStatisticsValue(data *smart.SmartInfoForSata, ataDeviceStats *
return nil
}
func (sm *SmartManager) parseSmartForScsi(output []byte) (bool, int) {
func (sm *SmartManager) parseSmartForScsi(output []byte, deviceType string) (bool, int) {
var data smart.SmartInfoForScsi
if err := json.Unmarshal(output, &data); err != nil {
@@ -1000,6 +1023,9 @@ func (sm *SmartManager) parseSmartForScsi(output []byte) (bool, int) {
smartData.SmartStatus = getSmartStatus(smartData.Temperature, data.SmartStatus.Passed)
smartData.DiskName = data.Device.Name
smartData.DiskType = data.Device.Type
if deviceType != "" {
smartData.DiskType = deviceType
}
attributes := make([]*smart.SmartAttribute, 0, 10)
attributes = append(attributes, &smart.SmartAttribute{Name: "PowerOnHours", RawValue: data.PowerOnTime.Hours})
@@ -1097,9 +1123,11 @@ func (sm *SmartManager) lookupDarwinNvmeCapacity(serial string) uint64 {
return sm.darwinNvmeCapacity[serial]
}
// parseSmartForNvme parses the output of smartctl --all -j /dev/nvmeX and updates the SmartDataMap
// parseSmartForNvme parses the output of smartctl --all -j /dev/nvmeX and updates the SmartDataMap.
// deviceType is the exact type used to identify and query the device; when set,
// it takes precedence over the generic type reported by smartctl.
// Returns hasValidData and exitStatus
func (sm *SmartManager) parseSmartForNvme(output []byte) (bool, int) {
func (sm *SmartManager) parseSmartForNvme(output []byte, deviceType string) (bool, int) {
data := &smart.SmartInfoForNvme{}
if err := json.Unmarshal(output, &data); err != nil {
@@ -1143,6 +1171,9 @@ func (sm *SmartManager) parseSmartForNvme(output []byte) (bool, int) {
smartData.SmartStatus = getSmartStatus(smartData.Temperature, data.SmartStatus.Passed)
smartData.DiskName = data.Device.Name
smartData.DiskType = data.Device.Type
if deviceType != "" {
smartData.DiskType = deviceType
}
// nvme attributes does not follow the same format as ata attributes,
// so we manually map each field to SmartAttributes

View File

@@ -24,7 +24,7 @@ func TestParseSmartForScsi(t *testing.T) {
SmartDataMap: make(map[string]*smart.SmartData),
}
hasData, exitStatus := sm.parseSmartForScsi(data)
hasData, exitStatus := sm.parseSmartForScsi(data, "")
if !hasData {
t.Fatalf("expected SCSI data to parse successfully")
}
@@ -69,7 +69,7 @@ func TestParseSmartForSata(t *testing.T) {
SmartDataMap: make(map[string]*smart.SmartData),
}
hasData, exitStatus := sm.parseSmartForSata(data)
hasData, exitStatus := sm.parseSmartForSata(data, "")
require.True(t, hasData)
assert.Equal(t, 64, exitStatus)
@@ -112,7 +112,7 @@ func TestParseSmartForSataDeviceStatisticsTemperature(t *testing.T) {
}`)
sm := &SmartManager{SmartDataMap: make(map[string]*smart.SmartData)}
hasData, exitStatus := sm.parseSmartForSata(jsonPayload)
hasData, exitStatus := sm.parseSmartForSata(jsonPayload, "")
require.True(t, hasData)
assert.Equal(t, 0, exitStatus)
@@ -147,7 +147,7 @@ func TestParseSmartForSataAtaDeviceStatistics(t *testing.T) {
}`)
sm := &SmartManager{SmartDataMap: make(map[string]*smart.SmartData)}
hasData, exitStatus := sm.parseSmartForSata(jsonPayload)
hasData, exitStatus := sm.parseSmartForSata(jsonPayload, "")
require.True(t, hasData)
assert.Equal(t, 0, exitStatus)
@@ -184,7 +184,7 @@ func TestParseSmartForSataNegativeDeviceStatistics(t *testing.T) {
}`)
sm := &SmartManager{SmartDataMap: make(map[string]*smart.SmartData)}
hasData, exitStatus := sm.parseSmartForSata(jsonPayload)
hasData, exitStatus := sm.parseSmartForSata(jsonPayload, "")
require.True(t, hasData)
assert.Equal(t, 0, exitStatus)
@@ -223,7 +223,7 @@ func TestParseSmartForSataParentheticalRawValue(t *testing.T) {
sm := &SmartManager{SmartDataMap: make(map[string]*smart.SmartData)}
hasData, exitStatus := sm.parseSmartForSata(jsonPayload)
hasData, exitStatus := sm.parseSmartForSata(jsonPayload, "")
require.True(t, hasData)
assert.Equal(t, 0, exitStatus)
@@ -245,7 +245,7 @@ func TestParseSmartForNvme(t *testing.T) {
SmartDataMap: make(map[string]*smart.SmartData),
}
hasData, exitStatus := sm.parseSmartForNvme(data)
hasData, exitStatus := sm.parseSmartForNvme(data, "")
require.True(t, hasData)
assert.Equal(t, 0, exitStatus)
@@ -268,13 +268,15 @@ func TestParseSmartForNvme(t *testing.T) {
func TestHasDataForDevice(t *testing.T) {
sm := &SmartManager{
SmartDataMap: map[string]*smart.SmartData{
"serial-1": {DiskName: "/dev/sda"},
"serial-1": {DiskName: "/dev/sda", DiskType: "jms56x,0"},
"serial-2": nil,
},
}
assert.True(t, sm.hasDataForDevice("/dev/sda"))
assert.False(t, sm.hasDataForDevice("/dev/sdb"))
assert.True(t, sm.hasDataForDevice(&DeviceInfo{Name: "/dev/sda", Type: "jms56x,0"}))
assert.False(t, sm.hasDataForDevice(&DeviceInfo{Name: "/dev/sda", Type: "jms56x,1"}))
assert.False(t, sm.hasDataForDevice(&DeviceInfo{Name: "/dev/sdb", Type: "jms56x,0"}))
assert.False(t, sm.hasDataForDevice(nil))
}
func TestDevicesSnapshotReturnsCopy(t *testing.T) {
@@ -609,6 +611,74 @@ func TestMergeDeviceListsPrefersConfigured(t *testing.T) {
assert.Equal(t, "sat", byName["/dev/sdb"].Type)
}
func TestMergeDeviceListsExpandsConfiguredDevicesWithSamePath(t *testing.T) {
scanned := []*DeviceInfo{
{Name: "/dev/sdb", Type: "sat", InfoName: "scan-info", Protocol: "ATA"},
}
configured := []*DeviceInfo{
{Name: "/dev/sdb", Type: "jms56x,0", explicitType: true},
{Name: "/dev/sdb", Type: "jms56x,1", explicitType: true},
}
merged := mergeDeviceLists(nil, scanned, configured)
require.Len(t, merged, 2)
byKey := make(map[deviceKey]*DeviceInfo, len(merged))
for _, device := range merged {
byKey[makeDeviceKey(device.Name, device.Type)] = device
}
first := byKey[makeDeviceKey("/dev/sdb", "jms56x,0")]
require.NotNil(t, first)
assert.Equal(t, "scan-info", first.InfoName)
assert.Equal(t, "ATA", first.Protocol)
assert.True(t, first.explicitType)
second := byKey[makeDeviceKey("/dev/sdb", "jms56x,1")]
require.NotNil(t, second)
assert.True(t, second.explicitType)
assert.NotContains(t, byKey, makeDeviceKey("/dev/sdb", "sat"))
}
func TestMergeDeviceListsPreservesSamePathVerificationAcrossRescan(t *testing.T) {
existing := []*DeviceInfo{
{Name: "/dev/sdb", Type: "jms56x,0", parserType: "sat", typeVerified: true, explicitType: true},
{Name: "/dev/sdb", Type: "jms56x,1", parserType: "sat", typeVerified: true, explicitType: true},
}
scanned := []*DeviceInfo{
{Name: "/dev/sdb", Type: "sat", Protocol: "ATA"},
}
configured := []*DeviceInfo{
{Name: "/dev/sdb", Type: "jms56x,0", explicitType: true},
{Name: "/dev/sdb", Type: "jms56x,1", explicitType: true},
}
merged := mergeDeviceLists(existing, scanned, configured)
require.Len(t, merged, 2)
byKey := make(map[deviceKey]*DeviceInfo, len(merged))
for _, device := range merged {
byKey[makeDeviceKey(device.Name, device.Type)] = device
assert.True(t, device.typeVerified, device.Type)
assert.Equal(t, "sat", device.parserType, device.Type)
assert.True(t, device.explicitType, device.Type)
}
assert.Contains(t, byKey, makeDeviceKey("/dev/sdb", "jms56x,0"))
assert.Contains(t, byKey, makeDeviceKey("/dev/sdb", "jms56x,1"))
}
func TestMergeDeviceListsDeduplicatesConfiguredIdentityAfterRekey(t *testing.T) {
scanned := []*DeviceInfo{{Name: "/dev/sdb", Type: "sat"}}
configured := []*DeviceInfo{
{Name: "/dev/sdb", Type: "jms56x,0", explicitType: true},
{Name: "/dev/sdb", Type: "jms56x,0", explicitType: true},
}
merged := mergeDeviceLists(nil, scanned, configured)
require.Len(t, merged, 1)
assert.Equal(t, "/dev/sdb", merged[0].Name)
assert.Equal(t, "jms56x,0", merged[0].Type)
}
func TestMergeDeviceListsPreservesVerification(t *testing.T) {
existing := []*DeviceInfo{
{Name: "/dev/sda", Type: "sat+megaraid", parserType: "sat", typeVerified: true},
@@ -753,6 +823,20 @@ func TestParseSmartOutputKeepsCustomType(t *testing.T) {
assert.Equal(t, "sat+megaraid", device.Type)
assert.Equal(t, "sat", device.parserType)
assert.True(t, device.typeVerified)
assert.Equal(t, "sat+megaraid", sm.SmartDataMap["9C40918040082"].DiskType)
}
func TestParseSmartOutputDoesNotNormalizeDeviceIdentity(t *testing.T) {
fixturePath := filepath.Join("test-data", "smart", "sda.json")
data, err := os.ReadFile(fixturePath)
require.NoError(t, err)
sm := &SmartManager{SmartDataMap: make(map[string]*smart.SmartData)}
device := &DeviceInfo{Name: "/dev/sda", Type: "ata", explicitType: true}
require.True(t, sm.parseSmartOutput(device, data))
assert.Equal(t, "sat", device.parserType)
assert.Equal(t, "ata", sm.SmartDataMap["9C40918040082"].DiskType)
}
func TestParseSmartOutputResetsVerificationOnFailure(t *testing.T) {
@@ -1300,7 +1384,7 @@ func TestParseSmartForNvmeAppleSSD(t *testing.T) {
darwinNvmeProvider: fakeProvider,
}
hasData, _ := sm.parseSmartForNvme(data)
hasData, _ := sm.parseSmartForNvme(data, "")
require.True(t, hasData)
deviceData, ok := sm.SmartDataMap["0ba0147940253c15"]
@@ -1312,7 +1396,7 @@ func TestParseSmartForNvmeAppleSSD(t *testing.T) {
assert.Equal(t, 1, providerCalls, "system_profiler should be called once")
// Second parse: provider should NOT be called again (cache hit)
_, _ = sm.parseSmartForNvme(data)
_, _ = sm.parseSmartForNvme(data, "")
assert.Equal(t, 1, providerCalls, "system_profiler should not be called again after caching")
}

View File

@@ -6,7 +6,7 @@ import "github.com/blang/semver"
const (
// Version is the current version of the application.
Version = "0.18.7"
Version = "0.18.8"
// AppName is the name of the application.
AppName = "beszel"
)

View File

@@ -1,3 +0,0 @@
apiVersion: v1
entries: {}
generated: "2026-03-05T00:00:00Z"

10
go.mod
View File

@@ -12,15 +12,15 @@ require (
github.com/lxzan/gws v1.10.1
github.com/nicholas-fedor/shoutrrr v0.17.0
github.com/pocketbase/dbx v1.12.0
github.com/pocketbase/pocketbase v0.39.10
github.com/pocketbase/pocketbase v0.39.11
github.com/shirou/gopsutil/v4 v4.26.7
github.com/spf13/cast v1.10.0
github.com/spf13/cobra v1.10.2
github.com/spf13/pflag v1.0.10
github.com/stretchr/testify v1.11.1
github.com/stretchr/testify v1.12.0
golang.org/x/crypto v0.55.0
golang.org/x/exp v0.0.0-20260811152304-ee035b5b010f
golang.org/x/net v0.57.0
golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297
golang.org/x/net v0.58.0
golang.org/x/sys v0.47.0
gopkg.in/yaml.v3 v3.0.1
howett.net/plist v1.0.1
@@ -29,7 +29,6 @@ require (
require (
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/disintegration/imaging v1.6.2 // indirect
github.com/domodwyer/mailyak/v3 v3.6.2 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
@@ -49,7 +48,6 @@ require (
github.com/mattn/go-colorable v0.1.15 // indirect
github.com/mattn/go-isatty v0.0.24 // indirect
github.com/ncruces/go-strftime v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/pocketbase/ozzo-validation/v4 v4.3.0 // indirect
github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect

28
go.sum
View File

@@ -13,8 +13,6 @@ github.com/coreos/go-systemd/v22 v22.7.0 h1:LAEzFkke61DFROc7zNLX/WA2i5J8gYqe0rSj
github.com/coreos/go-systemd/v22 v22.7.0/go.mod h1:xNUYtjHu2EDXbsxz1i41wouACIwT7Ybq9o0BQhMwD0w=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCOBXMn8=
@@ -92,14 +90,12 @@ github.com/onsi/ginkgo/v2 v2.32.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU
github.com/onsi/gomega v1.42.1 h1:iN1rCUX+44NZ1Dc97MPoeFYbFR0vh8zxoxMFwKdyZ6I=
github.com/onsi/gomega v1.42.1/go.mod h1:REff/hsDsodHoKlWsP2mAPhu1+5/6hVYNf9rIEBpeSg=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pocketbase/dbx v1.12.0 h1:/oLErM+A0b4xI0PWTGPqSDVjzix48PqI/bng2l0PzoA=
github.com/pocketbase/dbx v1.12.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs=
github.com/pocketbase/ozzo-validation/v4 v4.3.0 h1:uKBDVma7bZqgR2a6AwE+k9hkuDFfiZMpBHQdZ1z3iQs=
github.com/pocketbase/ozzo-validation/v4 v4.3.0/go.mod h1:6XNjSTw/Jb2F8LOkKO3oyzIWExbrGiYoS4uVxVwz90g=
github.com/pocketbase/pocketbase v0.39.10 h1:2j8TDJRuo3aAC8Y8F9WFux0SwYcxeDCgEYQxxdWkwGE=
github.com/pocketbase/pocketbase v0.39.10/go.mod h1:tSX3anHQ7Ul6dPV9WhlEc6No1DtklGF69iwnVNW3BEE=
github.com/pocketbase/pocketbase v0.39.11 h1:cl/Kh13ukof/4BAEku3OozYrLl85M5/bmH62Ny4szFc=
github.com/pocketbase/pocketbase v0.39.11/go.mod h1:5CaCvp/52fZJ5/qyYsqpCGyVue/kjez889cQAATD2cY=
github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6 h1:jL3a8soXdzuTCcRnKhOmtcsVOObdDTFf4O2B403HPRU=
github.com/power-devops/perfstat v0.0.0-20260805114148-88456608a4f6/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
@@ -120,8 +116,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/stretchr/testify v1.12.0 h1:K6Mr6jO9JICuend/5xzTM03ydSV3vdNRYAdPSukj8uI=
github.com/stretchr/testify v1.12.0/go.mod h1:bOYBZb5qJ00vPzWfIqBUZPaxK8jWiXc6d3ErP4Ca9Gw=
github.com/tklauser/go-sysconf v0.4.0 h1:7H0uAN+7RkwWRaxhYXDLqa5V3LPrJeV8wmD9dRUgPQU=
github.com/tklauser/go-sysconf v0.4.0/go.mod h1:8mTNWyog7H+MpKijp4VmKJAd2bbYQ2zuUwkYRbUArPI=
github.com/tklauser/numcpus v0.12.0 h1:NR85qdvHA9pFse3x3weVZ0r0ST8R6l5RHbZrlRaqob4=
@@ -138,16 +134,16 @@ go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.55.0 h1:+KWHjbgOaAQ66dh/YlkZKHlz9ZUlq61AFirAR9ntP8M=
golang.org/x/crypto v0.55.0/go.mod h1:uq0V9dE/fzQuJtbnL+2EhWOE63vo164FY8xqEnV9xis=
golang.org/x/exp v0.0.0-20260811152304-ee035b5b010f h1:iXpLj9sdDH/RLYsnOMpbETK6KWtrHwvegcc4psWJHV8=
golang.org/x/exp v0.0.0-20260811152304-ee035b5b010f/go.mod h1:EdfpwwqSu+0Li0mzskwHU6FWDV3t9Q+RZDo3QMUtL3Q=
golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297 h1:YXnL44eJ77R+ji4/ooy8UsXIhz+lbi2Qgdlc8iRN0gY=
golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297/go.mod h1:Mkmymgv+uMpSQ/XxJ/7GpdrdYoqm3u72jEbpCLiJmNk=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/image v0.45.0 h1:FMb1nTbH5H9vF55SriQHgFw5GnNL9Jg6L25BwXKzhB0=
golang.org/x/image v0.45.0/go.mod h1:n62x/7RqlwXDvGsSU4u6IUTUf6KghUZ9Bt7cG/T9Fx4=
golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk=
golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40=
golang.org/x/mod v0.40.0 h1:hUv+3cXcdRHz08UmSiOob7sadHig73uo5bkXxQ/tvUs=
golang.org/x/mod v0.40.0/go.mod h1:0/weTWkPWGBikyTWAX3dkjVztMmBA5hM0DH6BElSupE=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
golang.org/x/net v0.58.0 h1:ynWG7rqYi4ccpTEuPZ2QGWHktVEM9DMCj9yzDE0Q7To=
golang.org/x/net v0.58.0/go.mod h1:YwCddHnFlT7eLQqVprV19OnhLGtc5xOKgE0RyqgfWAU=
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek=
@@ -165,8 +161,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8=
golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE=
golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk=
golang.org/x/tools v0.49.0 h1:3NI7VXzL9+1WZD52Dx2ttoPwD5DWrFGpl9mFZDlmisI=
golang.org/x/tools v0.49.0/go.mod h1:SJNXV9DBKT0UbdttsQjbfJlAE/q+y36++zo3uL3N0Oo=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=

View File

@@ -74,6 +74,30 @@ 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
@@ -98,8 +122,10 @@ 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.
// System Usage. Linux only. Populated from /proc/stat on Docker; from cgroup cpu.stat on Podman.
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,6 +30,10 @@ 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)
}
@@ -129,7 +133,7 @@ func (p *updater) update() (updated bool, err error) {
return false, nil
}
suffix := archiveSuffix(p.config.ArchiveExecutable, runtime.GOOS, runtime.GOARCH)
suffix := archiveSuffix(p.config.ArchiveExecutable, runtime.GOOS, runtime.GOARCH, buildGOARM)
asset, err := latest.findAssetBySuffix(suffix)
if err != nil {
return false, err
@@ -346,7 +350,7 @@ func copyFile(src, dst string) error {
return destFile.Chmod(sourceInfo.Mode())
}
func archiveSuffix(binaryName, goos, goarch string) string {
func archiveSuffix(binaryName, goos, goarch, goarm string) string {
if goos == "windows" {
return fmt.Sprintf("%s_%s_%s.zip", binaryName, goos, goarch)
}
@@ -354,7 +358,11 @@ func archiveSuffix(binaryName, goos, goarch string) string {
if binaryName == "beszel-agent" && goos == "linux" && goarch == "amd64" && isGlibc() {
return fmt.Sprintf("%s_%s_%s_glibc.tar.gz", binaryName, goos, goarch)
}
return fmt.Sprintf("%s_%s_%s.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)
}
func isGlibc() bool {

View File

@@ -8,6 +8,31 @@ 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

@@ -56,7 +56,7 @@ func (sm *SystemManager) NewSystem(systemId string) *System {
Id: systemId,
data: &system.CombinedData{},
}
system.ctx, system.cancel = system.getContext()
system.ctx, system.cancel = system.getContext(sm.ctx)
return system
}
@@ -79,7 +79,10 @@ func (sys *System) StartUpdater() {
} else {
// if the system does not have a websocket connection, wait before updating
// to allow the agent to connect via websocket (makes sure fingerprint is set).
time.Sleep(11 * time.Second)
if !waitForContext(sys.ctx, 11*time.Second) {
return
}
}
// update immediately if system is not paused (only for ws connections)
@@ -402,9 +405,9 @@ func (sys *System) setDown(originalError error) error {
return sys.manager.hub.SaveNoValidate(record)
}
func (sys *System) getContext() (context.Context, context.CancelFunc) {
func (sys *System) getContext(ctx context.Context) (context.Context, context.CancelFunc) {
if sys.ctx == nil {
sys.ctx, sys.cancel = context.WithCancel(context.Background())
sys.ctx, sys.cancel = context.WithCancel(ctx)
}
return sys.ctx, sys.cancel
}

View File

@@ -1,6 +1,7 @@
package systems
import (
"context"
"errors"
"fmt"
"time"
@@ -45,6 +46,8 @@ type SystemManager struct {
systems *store.Store[string, *System] // Thread-safe store of active systems
sshConfig *ssh.ClientConfig // SSH client configuration for system connections
smartFetchMap *expirymap.ExpiryMap[smartFetchState] // Stores last SMART fetch time/result; TTL is only for cleanup
ctx context.Context // Cancelled when the app terminates
cancel context.CancelFunc // Cancels ctx and all child system contexts
}
// hubLike defines the interface requirements for the hub dependency.
@@ -60,11 +63,13 @@ type hubLike interface {
// NewSystemManager creates a new SystemManager instance with the provided hub.
// The hub must implement the hubLike interface to provide database and alert functionality.
func NewSystemManager(hub hubLike) *SystemManager {
return &SystemManager{
sm := &SystemManager{
systems: store.New(map[string]*System{}),
hub: hub,
smartFetchMap: expirymap.New[smartFetchState](time.Hour),
}
sm.ctx, sm.cancel = context.WithCancel(context.Background())
return sm
}
// GetSystem returns a system by ID from the store
@@ -103,7 +108,9 @@ func (sm *SystemManager) Initialize() error {
sleepTime := time.Duration(delta) * time.Millisecond
for _, system := range systems {
time.Sleep(sleepTime)
if !waitForContext(sm.ctx, sleepTime) {
return
}
_ = sm.AddSystem(system)
}
}()
@@ -121,6 +128,13 @@ func (sm *SystemManager) bindEventHooks() {
sm.hub.OnRecordAfterUpdateSuccess("fingerprints").BindFunc(sm.onTokenRotated)
sm.hub.OnRealtimeSubscribeRequest().BindFunc(sm.onRealtimeSubscribeRequest)
sm.hub.OnRealtimeConnectRequest().BindFunc(sm.onRealtimeConnectRequest)
sm.hub.OnTerminate().BindFunc(sm.onTerminate)
}
// onTerminate cancels SystemManager context on app shutdown
func (sm *SystemManager) onTerminate(e *core.TerminateEvent) error {
sm.cancel()
return e.Next()
}
// onTokenRotated handles fingerprint token rotation events.
@@ -247,7 +261,7 @@ func (sm *SystemManager) AddSystem(sys *System) error {
// Initialize system for monitoring
sys.manager = sm
sys.ctx, sys.cancel = sys.getContext()
sys.ctx, sys.cancel = sys.getContext(sm.ctx)
sys.data = &system.CombinedData{}
sm.systems.Set(sys.Id, sys)
@@ -372,3 +386,15 @@ func deactivateAlerts(app core.App, systemID string) error {
}
return nil
}
// waitForContext waits for delay or returns early when ctx is cancelled.
func waitForContext(ctx context.Context, delay time.Duration) bool {
timer := time.NewTimer(delay)
defer timer.Stop()
select {
case <-ctx.Done():
return false
case <-timer.C:
return true
}
}

View File

@@ -30,6 +30,7 @@ func TestSystemManagerNew(t *testing.T) {
require.NoError(t, err)
synctest.Test(t, func(t *testing.T) {
sm.ResetContextForTesting()
sm.Initialize()
record, err := tests.CreateRecord(hub, "systems", map[string]any{
@@ -112,6 +113,8 @@ func TestSystemManagerNew(t *testing.T) {
assert.False(t, sm.HasSystem(record.Id), "System should not exist in the store after deletion")
})
// The following subtests run outside the synctest bubble.
sm.ResetContextForTesting()
testOld(t, hub)
synctest.Test(t, func(t *testing.T) {

View File

@@ -117,6 +117,11 @@ func (sm *SystemManager) RemoveAllSystems() {
sm.smartFetchMap.StopCleaner()
}
// ResetContextForTesting replaces the manager context for a new synctest bubble.
func (sm *SystemManager) ResetContextForTesting() {
sm.ctx, sm.cancel = context.WithCancel(context.Background())
}
func (s *System) StopUpdater() {
s.cancel()
}

View File

@@ -1,7 +1,7 @@
{
"name": "beszel",
"private": true,
"version": "0.18.7",
"version": "0.18.8",
"type": "module",
"scripts": {
"dev": "vite --host",

View File

@@ -1,42 +0,0 @@
import { Trans, useLingui } from "@lingui/react/macro"
import { LanguagesIcon } from "lucide-react"
import { buttonVariants } from "@/components/ui/button"
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
import { dynamicActivate } from "@/lib/i18n"
import languages from "@/lib/languages"
import { cn } from "@/lib/utils"
import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip"
export function LangToggle() {
const { i18n } = useLingui()
const LangTrans = <Trans>Language</Trans>
return (
<DropdownMenu>
<Tooltip>
<TooltipTrigger asChild>
<DropdownMenuTrigger className={cn(buttonVariants({ variant: "ghost", size: "icon" }))}>
<LanguagesIcon className="absolute h-[1.2rem] w-[1.2rem] light:opacity-85" />
<span className="sr-only">{LangTrans}</span>
<TooltipContent>{LangTrans}</TooltipContent>
</DropdownMenuTrigger>
</TooltipTrigger>
<DropdownMenuContent className="grid grid-cols-3">
{languages.map(([lang, label, e]) => (
<DropdownMenuItem
key={lang}
className={cn("px-2.5 flex gap-2.5 cursor-pointer", lang === i18n.locale && "bg-accent/70 font-medium")}
onClick={() => dynamicActivate(lang)}
>
<span>
{e || <code className="font-mono bg-muted text-[.65em] w-5 h-4 grid place-items-center">{lang}</code>}
</span>{" "}
{label}
</DropdownMenuItem>
))}
</DropdownMenuContent>
</Tooltip>
</DropdownMenu>
)
}

View File

@@ -32,7 +32,6 @@ import {
import { isAdmin, isReadOnlyUser, logOut, pb } from "@/lib/api"
import { cn, runOnce } from "@/lib/utils"
import { AddSystemDialog } from "./add-system"
import { LangToggle } from "./lang-toggle"
import { Logo } from "./logo"
import { ModeToggle } from "./mode-toggle"
import { $router, basePath, Link, navigate, prependBasePath } from "./router"
@@ -180,7 +179,6 @@ export default function Navbar() {
</TooltipTrigger>
<TooltipContent>S.M.A.R.T.</TooltipContent>
</Tooltip>
<LangToggle />
<ModeToggle />
<Tooltip>
<TooltipTrigger asChild>

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ar\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-06-03 00:49\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"
@@ -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"
@@ -425,7 +426,7 @@ msgstr "الاتصال مقطوع"
#: src/components/routes/system.tsx
msgid "Containers"
msgstr "الحاويات"
msgstr "حاويات"
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
@@ -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 "الحالة الحالية"
@@ -699,7 +706,7 @@ msgstr "عنوان URL للنقطة النهائية"
#: src/components/routes/settings/heartbeat.tsx
msgid "Endpoint URL to ping (required)"
msgstr "عنوان URL للنقطة النهائية لل ping (مطلوب)"
msgstr "رابط نقطة النهاية إلى ping (مطلوب)"
#: src/components/login/login.tsx
msgid "Enter email address to reset password"
@@ -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 "فشل: {0}"
#: 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"
@@ -1697,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

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: bg\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-03-28 09:32\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Bulgarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -250,6 +250,7 @@ msgstr "Bandwidth на мрежата"
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 "Копирай linux командата"
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 "Неуспешни: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Глобален"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Здраве"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -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 "Изполван swap от системата"
msgid "Swap Usage"
msgstr "Използване на swap"
#: 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 "Използване на swap"
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: cs\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Czech\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
@@ -57,7 +57,7 @@ msgstr "1 hodina"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 hodin"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dní"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -149,7 +149,7 @@ msgstr "Po nastavení proměnných prostředí restartujte hub Beszel, aby se zm
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Přenos"
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 "Kopírovat příkaz Linux"
msgid "Copy name"
msgstr "Kopírovat název"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopírovat text"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativní odeslání"
#. 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 "Aktuální stav"
@@ -587,7 +594,7 @@ msgstr "Popis"
#: src/components/containers-table/containers-table.tsx
msgid "Detail"
msgstr ""
msgstr "Detail"
#: src/components/routes/system/smart-table.tsx
msgid "Device"
@@ -717,7 +724,6 @@ msgstr "Zadejte Vaše jednorázové heslo."
msgid "Ephemeral"
msgstr "Efemérní"
#: 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 "Nepodařilo se aktualizovat upozornění"
msgid "Failed: {0}"
msgstr "Neúspěšné: {0}"
#: 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 "Neplatná e-mailová adresa."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Jazyk"
@@ -1311,6 +1320,10 @@ msgstr "Upřednostňovaný jazyk"
msgid "Process started"
msgstr "Proces spuštěn"
#: 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 "Swap prostor využívaný systémem"
msgid "Swap Usage"
msgstr "Swap využití"
#: 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 "Swap využití"
msgid "System"
msgstr "Systém"
#: 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 "Průměry zatížení systému v průběhu času"
@@ -1657,11 +1679,6 @@ msgstr "Formát času"
msgid "To email(s)"
msgstr "Na email(y)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Přepnout motiv"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: da\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Danish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -149,7 +149,7 @@ msgstr "Efter indstilling af miljøvariablerne skal du genstarte din Beszel-hub
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Båndbredde"
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"
@@ -289,7 +290,7 @@ msgstr "Binær"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,7 +299,7 @@ msgstr "Opstartstilstand"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
@@ -336,7 +337,7 @@ msgstr "Forsigtig - muligt tab af data"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Kopier Linux kommando"
msgid "Copy name"
msgstr "Kopier navn"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopier tekst"
@@ -496,7 +501,7 @@ msgstr "Kerne"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -504,7 +509,7 @@ msgstr "CPU-kerner"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "CPU Peak"
msgstr ""
msgstr "CPU Peak"
#: src/components/systemd-table/systemd-table.tsx
msgid "CPU time"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativ upload"
#. 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 "Nuværende tilstand"
@@ -601,11 +608,11 @@ msgstr "Aflader"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Disk"
msgstr ""
msgstr "Disk"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk I/O"
msgstr ""
msgstr "Disk I/O"
#: src/components/routes/settings/general.tsx
msgid "Disk unit"
@@ -677,7 +684,7 @@ msgstr "Rediger {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Indtast din engangsadgangskode."
msgid "Ephemeral"
msgstr "Efemer"
#: 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
@@ -772,7 +778,7 @@ msgstr "Eksporter din nuværende systemkonfiguration."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Kunne ikke opdatere alarm"
msgid "Failed: {0}"
msgstr "Mislykkedes: {0}"
#: 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
@@ -816,7 +826,7 @@ msgstr "Mislykkedes: {0}"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "Filter..."
msgstr ""
msgstr "Filter..."
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint"
@@ -824,7 +834,7 @@ msgstr "Fingeraftryk"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -854,7 +864,7 @@ msgstr "Generelt"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr "Ugyldig email adresse."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Sprog"
@@ -1021,7 +1030,7 @@ msgstr "Loginforsøg mislykkedes"
#: src/components/containers-table/containers-table.tsx
#: src/components/navbar.tsx
msgid "Logs"
msgstr ""
msgstr "Logs"
#: src/components/routes/settings/notifications.tsx
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
@@ -1074,7 +1083,7 @@ msgstr "Hukommelsesforbrug af dockercontainere"
#. Device model
#: src/components/routes/system/smart-table.tsx
msgid "Model"
msgstr ""
msgstr "Model"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1087,7 +1096,7 @@ msgstr "Navn"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Net"
msgstr ""
msgstr "Net"
#: src/components/routes/system/charts/network-charts.tsx
msgid "Network traffic of docker containers"
@@ -1216,7 +1225,7 @@ msgstr "Tidligere"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Pause"
msgstr ""
msgstr "Pause"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Paused"
@@ -1286,7 +1295,7 @@ msgstr "Log venligst ind på din konto"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Foretrukket sprog"
msgid "Process started"
msgstr "Proces startet"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Genoptag"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1536,7 +1549,7 @@ msgstr "Tilstand"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Swap plads brugt af systemet"
msgid "Swap Usage"
msgstr "Swap forbrug"
#: 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
@@ -1563,6 +1581,10 @@ msgstr "Swap forbrug"
#: src/components/systems-table/systems-table-columns.tsx
#: src/lib/alerts.ts
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
@@ -1571,7 +1593,7 @@ msgstr "Gennemsnitlig system belastning over tid"
#: src/components/systemd-table/systemd-table.tsx
msgid "Systemd Services"
msgstr ""
msgstr "Systemd Services"
#: src/components/navbar.tsx
msgid "Systems"
@@ -1615,7 +1637,7 @@ msgstr "Temperaturer i systemsensorer"
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
@@ -1657,11 +1679,6 @@ msgstr "Tidsformat"
msgid "To email(s)"
msgstr "Til email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Skift tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
@@ -1760,7 +1777,7 @@ msgstr "Udløser når brugen af en disk overstiger en tærskel"
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/system/smart-table.tsx
msgid "Type"
msgstr ""
msgstr "Type"
#: src/components/systemd-table/systemd-table.tsx
msgid "Unit file"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -137,7 +137,7 @@ msgstr "Breite des Hauptlayouts anpassen"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Starten Sie nach dem Festlegen der Umgebungsvariablen Ihren Beszel-Hub n
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -238,7 +238,7 @@ msgstr "Durchschnittliche Auslastung der GPU-Engines"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Backups"
msgstr ""
msgstr "Backups"
#: src/components/routes/system/charts/network-charts.tsx
#: src/lib/alerts.ts
@@ -250,6 +250,7 @@ msgstr "Bandbreite"
msgid "Bat"
msgstr "Batt"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -289,7 +290,7 @@ msgstr "Binär"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,7 +299,7 @@ msgstr "Boot-Zustand"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
@@ -336,7 +337,7 @@ msgstr "Vorsicht - potenzieller Datenverlust"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Linux-Befehl kopieren"
msgid "Copy name"
msgstr "Name kopieren"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Text kopieren"
@@ -496,7 +501,7 @@ msgstr "Kern"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativer Upload"
#. 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 "Aktueller Zustand"
@@ -717,7 +724,6 @@ msgstr "Geben Sie Ihr Einmalpasswort ein."
msgid "Ephemeral"
msgstr "Flüchtig"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exportiere die aktuelle Systemkonfiguration."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Warnung konnte nicht aktualisiert werden"
msgid "Failed: {0}"
msgstr "Fehlgeschlagen: {0}"
#: 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
@@ -816,7 +826,7 @@ msgstr "Fehlgeschlagen: {0}"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "Filter..."
msgstr ""
msgstr "Filter..."
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint"
@@ -854,7 +864,7 @@ msgstr "Allgemein"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
@@ -883,7 +893,7 @@ msgstr "Gesundheit"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -901,7 +911,7 @@ msgstr "Homebrew-Befehl"
#: src/components/add-system.tsx
msgid "Host / IP"
msgstr ""
msgstr "Host / IP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP Method"
@@ -938,7 +948,7 @@ msgstr "Wenn du das Passwort für dein Administratorkonto verloren hast, kannst
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Docker image"
msgid "Image"
msgstr ""
msgstr "Image"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Inactive"
@@ -952,7 +962,6 @@ msgstr "Intervall"
msgid "Invalid email address."
msgstr "Ungültige E-Mail-Adresse."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Sprache"
@@ -1082,7 +1091,7 @@ msgstr "Modell"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "Name"
msgstr ""
msgstr "Name"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
@@ -1216,7 +1225,7 @@ msgstr "Vergangen"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Pause"
msgstr ""
msgstr "Pause"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Paused"
@@ -1286,7 +1295,7 @@ msgstr "Bitte melde dich bei deinem Konto an"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Bevorzugte Sprache"
msgid "Process started"
msgstr "Prozess gestartet"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Fortsetzen"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1536,7 +1549,7 @@ msgstr "Status"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Vom System genutzter Swap-Speicher"
msgid "Swap Usage"
msgstr "Swap-Nutzung"
#: 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
@@ -1563,6 +1581,10 @@ msgstr "Swap-Nutzung"
#: src/components/systems-table/systems-table-columns.tsx
#: src/lib/alerts.ts
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
@@ -1615,7 +1637,7 @@ msgstr "Temperaturen der Systemsensoren"
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
@@ -1657,15 +1679,10 @@ msgstr "Zeitformat"
msgid "To email(s)"
msgstr "An E-Mail(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Darstellung umschalten"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx

File diff suppressed because it is too large Load Diff

View File

@@ -245,6 +245,7 @@ msgstr "Bandwidth"
msgid "Bat"
msgstr "Bat"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -466,6 +467,10 @@ msgstr "Copy Linux command"
msgid "Copy name"
msgstr "Copy name"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr "Copy public key"
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copy text"
@@ -542,6 +547,8 @@ msgid "Cumulative Upload"
msgstr "Cumulative Upload"
#. 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 "Current state"
@@ -712,7 +719,6 @@ msgstr "Enter your one-time password."
msgid "Ephemeral"
msgstr "Ephemeral"
#: 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
@@ -804,6 +810,10 @@ msgstr "Failed to update alert"
msgid "Failed: {0}"
msgstr "Failed: {0}"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Fans"
msgstr "Fans"
#: src/components/containers-table/containers-table.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/system/chart-card.tsx
@@ -947,7 +957,6 @@ msgstr "Interval"
msgid "Invalid email address."
msgstr "Invalid email address."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Language"
@@ -1306,6 +1315,10 @@ msgstr "Preferred Language"
msgid "Process started"
msgstr "Process started"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Public key"
msgstr "Public key"
#. Use 'Key' if your language requires many more characters
#: src/components/add-system.tsx
msgid "Public Key"
@@ -1545,6 +1558,11 @@ msgstr "Swap space used by the system"
msgid "Swap Usage"
msgstr "Swap Usage"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Switch theme"
msgstr "Switch theme"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
#: src/components/containers-table/containers-table-columns.tsx
@@ -1560,6 +1578,10 @@ msgstr "Swap Usage"
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr "System fan speeds (RPM)"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "System load averages over time"
msgstr "System load averages over time"
@@ -1652,11 +1674,6 @@ msgstr "Time format"
msgid "To email(s)"
msgstr "To email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Toggle theme"
#: 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-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -57,7 +57,7 @@ msgstr "1 hora"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 horas"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 días"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -248,8 +248,9 @@ msgstr "Ancho de banda"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr ""
msgstr "Bat"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -336,7 +337,7 @@ msgstr "Precaución - posible pérdida de datos"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Copiar comando de Linux"
msgid "Copy name"
msgstr "Copiar nombre"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copiar texto"
@@ -496,7 +501,7 @@ msgstr "Núcleo"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Carga acumulada"
#. 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 "Estado actual"
@@ -717,7 +724,6 @@ msgstr "Ingrese su contraseña de un solo uso."
msgid "Ephemeral"
msgstr "Efímero"
#: 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
@@ -729,7 +735,7 @@ msgstr "Efímero"
#: src/components/routes/settings/tokens-fingerprints.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "Error"
msgstr ""
msgstr "Error"
#: src/components/routes/settings/heartbeat.tsx
msgid "Example:"
@@ -772,7 +778,7 @@ msgstr "Exporta la configuración actual de sus sistemas."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Error al actualizar la alerta"
msgid "Failed: {0}"
msgstr "Fallidos: {0}"
#: 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
@@ -824,7 +834,7 @@ msgstr "Huella dactilar"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -850,11 +860,11 @@ msgstr "Llena"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/layout.tsx
msgid "General"
msgstr ""
msgstr "General"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
@@ -952,7 +962,6 @@ msgstr "Intervalo"
msgid "Invalid email address."
msgstr "Dirección de correo electrónico no válida."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Idioma"
@@ -1109,7 +1118,7 @@ msgstr "Unidad de red"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "No"
msgstr ""
msgstr "No"
#: src/components/command-palette.tsx
#: src/components/systemd-table/systemd-table.tsx
@@ -1311,6 +1320,10 @@ msgstr "Idioma preferido"
msgid "Process started"
msgstr "Proceso iniciado"
#: 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 "Espacio de swap utilizado por el sistema"
msgid "Swap Usage"
msgstr "Uso de swap"
#: 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 "Uso de swap"
msgid "System"
msgstr "Sistema"
#: 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 "Promedios de carga del sistema a lo largo del tiempo"
@@ -1657,15 +1679,10 @@ msgstr "Formato de hora"
msgid "To email(s)"
msgstr "A correo(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Alternar tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1684,7 +1701,7 @@ msgstr "Los tokens y las huellas digitales se utilizan para autenticar las conex
#: src/components/ui/chart.tsx
#: src/components/ui/chart.tsx
msgid "Total"
msgstr ""
msgstr "Total"
#: src/components/routes/system/network-sheet.tsx
msgid "Total data received for each interface"
@@ -1702,7 +1719,7 @@ msgstr ""
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
msgid "Total: {0}"
msgstr ""
msgstr "Total: {0}"
#: src/components/systemd-table/systemd-table.tsx
msgid "Triggered by"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: fa\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Persian\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 "ناموفق: {0}"
#: 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 "فضای Swap استفاده شده توسط سیستم"
msgid "Swap Usage"
msgstr "میزان استفاده از Swap"
#: 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 "میزان استفاده از Swap"
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: fr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-06-08 15:20\n"
"Last-Translator: \n"
"Language-Team: French\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
@@ -48,7 +48,7 @@ msgstr "{count, plural, one {{countString} minute} other {{countString} minutes}
#: src/components/routes/system/info-bar.tsx
msgid "{threads, plural, one {# thread} other {# threads}}"
msgstr "{threads, plural, one {# fil} other {# fils}}"
msgstr "{threads, plural, one {# thread} other {# threads}}"
#: src/lib/utils.ts
msgid "1 hour"
@@ -57,11 +57,11 @@ msgstr "1 heure"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
msgstr ""
msgstr "1 minute"
#: src/lib/utils.ts
msgid "1 week"
@@ -74,7 +74,7 @@ msgstr "12 heures"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 jours"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -95,14 +95,14 @@ msgstr ""
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Actions"
msgstr ""
msgstr "Actions"
#: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/heartbeat.tsx
#: src/components/routes/settings/quiet-hours.tsx
msgid "Active"
msgstr ""
msgstr "Active"
#: src/components/active-alerts.tsx
msgid "Active Alerts"
@@ -137,7 +137,7 @@ msgstr "Ajuster la largeur de la mise en page principale"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Après avoir défini les variables d'environnement, redémarrez votre hu
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -248,8 +248,9 @@ msgstr "Bande passante"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr ""
msgstr "Bat"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -289,7 +290,7 @@ msgstr "Binaire"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,7 +299,7 @@ msgstr "État de démarrage"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
@@ -336,7 +337,7 @@ msgstr "Attention - perte de données potentielle"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -348,7 +349,7 @@ msgstr "Modifier les options générales de l'application."
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "Charge"
msgstr ""
msgstr "Charge"
#. Context: Battery state
#: src/lib/i18n.ts
@@ -471,6 +472,10 @@ msgstr "Copier la commande Linux"
msgid "Copy name"
msgstr "Copier le nom"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copier le texte"
@@ -496,7 +501,7 @@ msgstr "Cœur"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Téléversement cumulatif"
#. 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 "État actuel"
@@ -554,7 +561,7 @@ msgstr "État actuel"
#. Power Cycles
#: src/components/routes/system/smart-table.tsx
msgid "Cycles"
msgstr ""
msgstr "Cycles"
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/settings/quiet-hours.tsx
@@ -583,7 +590,7 @@ msgstr "Supprimer l'empreinte"
#: src/components/systemd-table/systemd-table.tsx
msgid "Description"
msgstr ""
msgstr "Description"
#: src/components/containers-table/containers-table.tsx
msgid "Detail"
@@ -641,7 +648,7 @@ msgstr "Entrée/Sortie réseau Docker"
#: src/components/command-palette.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "Documentation"
msgstr ""
msgstr "Documentation"
#. Context: System is down
#: src/components/alerts-history-columns.tsx
@@ -677,7 +684,7 @@ msgstr "Modifier {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Entrez votre mot de passe à usage unique."
msgid "Ephemeral"
msgstr "Éphémère"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exportez la configuration actuelle de vos systèmes."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Échec de la mise à jour de l'alerte"
msgid "Failed: {0}"
msgstr "Échec : {0}"
#: 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
@@ -854,11 +864,11 @@ msgstr "Général"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -938,7 +948,7 @@ msgstr "Si vous avez perdu le mot de passe de votre compte administrateur, vous
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Docker image"
msgid "Image"
msgstr ""
msgstr "Image"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Inactive"
@@ -952,7 +962,6 @@ msgstr "Intervalle"
msgid "Invalid email address."
msgstr "Adresse email invalide."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Langue"
@@ -1043,7 +1052,7 @@ msgstr "Guide pour une installation manuelle"
#. Chart select field. Please try to keep this short.
#: src/components/routes/system/chart-card.tsx
msgid "Max 1 min"
msgstr ""
msgstr "Max 1 min"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/info-bar.tsx
@@ -1138,7 +1147,7 @@ msgstr "Aucun système trouvé."
#: src/components/routes/settings/layout.tsx
#: src/components/routes/settings/notifications.tsx
msgid "Notifications"
msgstr ""
msgstr "Notifications"
#: src/components/login/auth-form.tsx
msgid "OAuth 2 / OIDC support"
@@ -1181,7 +1190,7 @@ msgstr "Écraser les alertes existantes"
#: src/components/command-palette.tsx
#: src/components/command-palette.tsx
msgid "Page"
msgstr ""
msgstr "Page"
#. placeholder {0}: table.getState().pagination.pageIndex + 1
#. placeholder {1}: table.getPageCount()
@@ -1216,7 +1225,7 @@ msgstr "Passé"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Pause"
msgstr ""
msgstr "Pause"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Paused"
@@ -1245,7 +1254,7 @@ msgstr "Pourcentage de temps passé dans chaque état"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Permanent"
msgstr ""
msgstr "Permanent"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Persistence"
@@ -1286,12 +1295,12 @@ msgstr "Veuillez vous connecter à votre compte"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
msgid "Ports"
msgstr ""
msgstr "Ports"
#. Power On Time
#: src/components/routes/system/smart-table.tsx
@@ -1311,6 +1320,10 @@ msgstr "Langue préférée"
msgid "Process started"
msgstr "Processus démarré"
#: 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"
@@ -1482,7 +1495,7 @@ msgstr "Détails du service"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Services"
msgstr ""
msgstr "Services"
#: src/components/routes/settings/general.tsx
msgid "Set percentage thresholds for meter colors."
@@ -1550,6 +1563,11 @@ msgstr "Espace Swap utilisé par le système"
msgid "Swap Usage"
msgstr "Utilisation du swap"
#: 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 "Utilisation du swap"
msgid "System"
msgstr "Système"
#: 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 "Charges moyennes du système dans le temps"
@@ -1657,15 +1679,10 @@ msgstr "Format d'heure"
msgid "To email(s)"
msgstr "Aux email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Changer le thème"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1684,7 +1701,7 @@ msgstr "Les tokens et les empreintes sont utilisés pour authentifier les connex
#: src/components/ui/chart.tsx
#: src/components/ui/chart.tsx
msgid "Total"
msgstr ""
msgstr "Total"
#: src/components/routes/system/network-sheet.tsx
msgid "Total data received for each interface"
@@ -1697,7 +1714,7 @@ msgstr "Données totales envoyées pour chaque interface"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "Temps total passé en lecture/écriture (peut dépasser 100%)"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
@@ -1760,7 +1777,7 @@ msgstr "Déclenchement lorsque l'utilisation de tout disque dépasse un seuil"
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/system/smart-table.tsx
msgid "Type"
msgstr ""
msgstr "Type"
#: src/components/systemd-table/systemd-table.tsx
msgid "Unit file"
@@ -1898,7 +1915,7 @@ msgstr "Lorsqu'il est activé, ce jeton permet aux agents de s'enregistrer autom
#: src/components/routes/settings/heartbeat.tsx
msgid "When using POST, each heartbeat includes a JSON payload with system status summary, list of down systems, and triggered alerts."
msgstr "En utilisant POST, chaque heartbeat inclut une charge utile JSON avec un résumé de l'état du sistema, la liste des systèmes en panne et les alertes déclenchées."
msgstr "En utilisant POST, chaque heartbeat inclut une charge utile JSON avec un résumé de l'état du système, la liste des systèmes en panne et les alertes déclenchées."
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: he\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\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"
@@ -69,12 +69,12 @@ msgstr "שבוע אחד"
#: src/lib/utils.ts
msgid "12 hours"
msgstr "12 שעות"
msgstr "12 שע׳"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr "15 דק'"
msgstr "15 דק׳"
#: src/lib/utils.ts
msgid "24 hours"
@@ -145,7 +145,7 @@ msgstr "אחרי"
#: src/components/routes/settings/heartbeat.tsx
msgid "After setting the environment variables, restart your Beszel hub for changes to take effect."
msgstr "לאחר הגדרת משתני הסביבה, הפעל מחדש את ה-Beszel hub שלך כדי שהשינויים ייכנסו לתוקף."
msgstr "לאחר הגדרת משתני הסביבה, יש להפעיל את ה־Beszel hub שלך מחדש כדי שהשינויים ייכנסו לתוקף."
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
@@ -202,7 +202,7 @@ msgstr "ניצול ממוצע של CPU בקונטיינרים"
#. placeholder {0}: alertData.unit
#: src/components/alerts/alerts-sheet.tsx
msgid "Average drops below <0>{value}{0}</0>"
msgstr "הממוצע יורד מתחת ל-<0>{value}{0}</0>"
msgstr "הממוצע יורד מתחת ל־<0>{value}{0}</0>"
#. placeholder {0}: alertData.unit
#: src/components/alerts/alerts-sheet.tsx
@@ -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"
@@ -272,7 +273,7 @@ msgstr "לפני"
#. placeholder {2}: alert.min
#: src/components/active-alerts.tsx
msgid "Below {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "מתחת ל-{0}{1} ב-{2, plural, one {דקה האחרונה} other {-# הדקות האחרונות}}"
msgstr "מתחת ל־{0}{1} ב{2, plural, one {דקה האחרונה} other {־# הדקות האחרונות}}"
#: src/components/login/auth-form.tsx
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
@@ -456,7 +457,7 @@ msgstr "העתק env"
#: src/components/alerts/alerts-sheet.tsx
msgctxt "Copy alerts from another system"
msgid "Copy from"
msgstr "העתק מ-"
msgstr "העתקה מ־"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Copy host"
@@ -471,6 +472,10 @@ msgstr "העתק פקודת Linux"
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 "העתק טקסט"
@@ -496,7 +501,7 @@ msgstr "ליבה"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -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 "מצב נוכחי"
@@ -695,11 +702,11 @@ msgstr "זמן סיום"
#: src/components/routes/settings/heartbeat.tsx
msgid "Endpoint URL"
msgstr "URL של נקודת קצה"
msgstr "כתובת נקודת קצה"
#: src/components/routes/settings/heartbeat.tsx
msgid "Endpoint URL to ping (required)"
msgstr "URL של נקודת קצה לפינג (חובה)"
msgstr "כתובת נקודת קצה לפינג (חובה)"
#: src/components/login/login.tsx
msgid "Enter email address to reset password"
@@ -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
@@ -756,7 +762,7 @@ msgstr "יצא פעיל"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Expires after one hour or on hub restart."
msgstr "פג תוקף לאחר שעה או בהפעלה מחדש של ה-hub."
msgstr "התוקף פג לאחר שעה או לאחר הפעלת ה־hub מחדש."
#: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Export"
@@ -794,7 +800,7 @@ msgstr "שמירת הגדרות נכשלה"
#: src/components/routes/settings/heartbeat.tsx
msgid "Failed to send heartbeat"
msgstr "שליחת פעימת הלב נכשלה"
msgstr "שליחת הדופק נכשלה"
#: src/components/routes/settings/notifications.tsx
msgid "Failed to send test notification"
@@ -809,6 +815,10 @@ msgstr "עדכון התראה נכשל"
msgid "Failed: {0}"
msgstr "נכשל: {0}"
#: 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
@@ -883,15 +893,15 @@ msgstr "בריאות"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr "פעימת לב"
msgstr "דופק"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
msgstr "ניטור פעימות לב"
msgstr "ניטור דופק"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat sent successfully"
msgstr "פעימת הלב נשלחה בהצלחה"
msgstr "הדופק נשלח בהצלחה"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
@@ -909,7 +919,7 @@ msgstr "שיטת HTTP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP method: POST, GET, or HEAD (default: POST)"
msgstr "שיטת HTTP: POST, GET, או HEAD (ברירת מחדל: POST)"
msgstr "שיטת HTTP: POST, GET, או HEAD (ברירת מחדל: POST)"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
@@ -952,7 +962,6 @@ msgstr "מרווח"
msgid "Invalid email address."
msgstr "כתובת אימייל לא תקינה."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "שפה"
@@ -1228,7 +1237,7 @@ msgstr "מושהה ({pausedSystemsLength})"
#: src/components/routes/settings/heartbeat.tsx
msgid "Payload format"
msgstr "פורמט מטען (Payload)"
msgstr "תבנית מטען (Payload)"
#: src/components/routes/system/cpu-sheet.tsx
#: src/components/routes/system/cpu-sheet.tsx
@@ -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"
@@ -1465,7 +1478,7 @@ msgstr "שלח פינגים יוצאים תקופתיים לשירות ניטו
#: src/components/routes/settings/heartbeat.tsx
msgid "Send test heartbeat"
msgstr "שלח פעימת לב לבדיקה"
msgstr "שליחת דופק לבדיקה"
#: src/components/routes/system/charts/network-charts.tsx
msgid "Sent"
@@ -1550,6 +1563,11 @@ msgstr "שטח swap בשימוש על ידי המערכת"
msgid "Swap Usage"
msgstr "שימוש ב-Swap"
#: 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 "שימוש ב-Swap"
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 "ממוצעי עומס מערכת לאורך זמן"
@@ -1619,7 +1641,7 @@ msgstr "בדוק <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
msgstr "בדוק פעימת לב"
msgstr "בדיקת דופק"
#: src/components/routes/settings/notifications.tsx
msgid "Test notification sent"
@@ -1657,15 +1679,10 @@ 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"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1697,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

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: hr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\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"
@@ -137,7 +137,7 @@ msgstr "Prilagodite širinu glavnog rasporeda"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Nakon postavljanja varijabli okruženja, ponovno pokrenite svoj Beszel h
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Mrežna Propusnost"
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"
@@ -336,7 +337,7 @@ msgstr "Oprez - mogući gubitak podataka"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Kopiraj Linux komandu"
msgid "Copy name"
msgstr "Kopiraj naziv"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopiraj tekst"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativno otpremanje"
#. 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 "Trenutno stanje"
@@ -601,11 +608,11 @@ msgstr "Prazni se"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Disk"
msgstr ""
msgstr "Disk"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk I/O"
msgstr ""
msgstr "Disk I/O"
#: src/components/routes/settings/general.tsx
msgid "Disk unit"
@@ -677,7 +684,7 @@ msgstr "Uredi {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Unesite jednokratnu lozinku."
msgid "Ephemeral"
msgstr "Efemeran"
#: 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 "Neuspješno ažuriranje upozorenja"
msgid "Failed: {0}"
msgstr "Neuspjelo: {0}"
#: 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
@@ -901,7 +911,7 @@ msgstr "Homebrew naredba"
#: src/components/add-system.tsx
msgid "Host / IP"
msgstr ""
msgstr "Host / IP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP Method"
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr "Nevažeća email adresa."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Jezik"
@@ -1286,7 +1295,7 @@ msgstr "Molimo prijavite se u svoj račun"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Preferirani jezik"
msgid "Process started"
msgstr "Proces pokrenut"
#: 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"
@@ -1536,7 +1549,7 @@ msgstr "Stanje"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Swap prostor kojeg je zauzeo sustav"
msgid "Swap Usage"
msgstr "Swap Iskorištenost"
#: 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 "Swap Iskorištenost"
msgid "System"
msgstr "Sustav"
#: 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 "Prosječno opterećenje sustava kroz vrijeme"
@@ -1598,7 +1620,7 @@ msgstr "Zadaci"
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Temp"
msgstr ""
msgstr "Temp"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
@@ -1657,15 +1679,10 @@ msgstr "Format vremena"
msgid "To email(s)"
msgstr "Primaoci emaila"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Uključi/isključi temu"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: hu\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Hungarian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -250,6 +250,7 @@ msgstr "Sávszélesség"
msgid "Bat"
msgstr "Akku"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -336,7 +337,7 @@ msgstr "Figyelem - potenciális adatvesztés"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Linux parancs másolása"
msgid "Copy name"
msgstr "Név másolása"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Szöveg másolása"
@@ -496,7 +501,7 @@ msgstr "Mag"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulatív feltöltés"
#. 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 "Jelenlegi állapot"
@@ -677,7 +684,7 @@ msgstr "Szerkesztés {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Adja meg az egyszeri jelszavát."
msgid "Ephemeral"
msgstr "Ideiglenes"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exportálja a jelenlegi rendszerkonfigurációt."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Nem sikerült frissíteni a riasztást"
msgid "Failed: {0}"
msgstr "Sikertelen: {0}"
#: 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
@@ -824,7 +834,7 @@ msgstr "Ujjlenyomat"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -952,7 +962,6 @@ msgstr "Intervallum"
msgid "Invalid email address."
msgstr "Érvénytelen e-mail cím."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Nyelv"
@@ -1286,7 +1295,7 @@ msgstr "Kérjük, jelentkezzen be a fiókjába"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Preferált nyelv"
msgid "Process started"
msgstr "Folyamat elindítva"
#: 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 "Rendszer által használt swap terület"
msgid "Swap Usage"
msgstr "Swap használat"
#: 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 "Swap használat"
msgid "System"
msgstr "Rendszer"
#: 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 "Rendszer terhelési átlaga"
@@ -1657,15 +1679,10 @@ msgstr "Időformátum"
msgid "To email(s)"
msgstr "E-mailben"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Téma váltása"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: id\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Indonesian\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -137,7 +137,7 @@ msgstr "Sesuaikan lebar layar utama"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -250,6 +250,7 @@ msgstr "Bandwith"
msgid "Bat"
msgstr "Baterai"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -302,7 +303,7 @@ msgstr "Byte (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
msgstr ""
msgstr "Cache / Buffers"
#: src/components/systemd-table/systemd-table.tsx
msgid "Can reload"
@@ -336,7 +337,7 @@ msgstr "Perhatian - potensi kehilangan data"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Salin perintah Linux"
msgid "Copy name"
msgstr "Salin nama"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Salin teks"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Akumulasi Upload"
#. 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 "Status saat ini"
@@ -717,7 +724,6 @@ msgstr "Masukkan otp anda."
msgid "Ephemeral"
msgstr "Sementara"
#: 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 "Gagal memperbarui peringatan"
msgid "Failed: {0}"
msgstr "Gagal: {0}"
#: 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 "Alamat email tidak valid."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Bahasa"
@@ -1311,6 +1320,10 @@ msgstr "Pilihan Bahasa"
msgid "Process started"
msgstr "Proses dimulai"
#: 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 "Ruang swap yang digunakan oleh sistem"
msgid "Swap Usage"
msgstr "Penggunaan Swap"
#: 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 "Penggunaan Swap"
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 "Rata-rata beban sistem dari waktu ke waktu"
@@ -1657,11 +1679,6 @@ msgstr "Format waktu"
msgid "To email(s)"
msgstr "Ke email"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Ganti tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

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-05 18:27\n"
"PO-Revision-Date: 2026-04-17 09:26\n"
"Last-Translator: \n"
"Language-Team: Italian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -57,7 +57,7 @@ msgstr "1 ora"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 ore"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 giorni"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -248,8 +248,9 @@ msgstr "Larghezza di banda"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr ""
msgstr "Batt"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -336,7 +337,7 @@ msgstr "Attenzione - possibile perdita di dati"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Copia comando Linux"
msgid "Copy name"
msgstr "Copia nome"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copia testo"
@@ -490,13 +495,13 @@ msgstr "Copia YAML"
#: src/components/routes/system.tsx
msgctxt "Core system metrics"
msgid "Core"
msgstr ""
msgstr "Interne"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Upload cumulativo"
#. 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 "Stato attuale"
@@ -624,7 +631,7 @@ msgstr "Utilizzo del disco di {extraFsName}"
#: src/components/routes/system/info-bar.tsx
msgctxt "Layout display options"
msgid "Display"
msgstr ""
msgstr "Display"
#: src/components/routes/system/charts/cpu-charts.tsx
msgid "Docker CPU Usage"
@@ -677,7 +684,7 @@ msgstr "Modifica {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Inserisci la tua password monouso."
msgid "Ephemeral"
msgstr "Effimero"
#: 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
@@ -772,7 +778,7 @@ msgstr "Esporta la configurazione attuale dei tuoi sistemi."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Aggiornamento dell'avviso fallito"
msgid "Failed: {0}"
msgstr "Fallito: {0}"
#: 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
@@ -824,7 +834,7 @@ msgstr "Impronta digitale"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -858,7 +868,7 @@ msgstr "Globale"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Stato"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Hearthbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -901,7 +911,7 @@ msgstr "Comando Homebrew"
#: src/components/add-system.tsx
msgid "Host / IP"
msgstr ""
msgstr "Host / IP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP Method"
@@ -952,7 +962,6 @@ msgstr "Intervallo"
msgid "Invalid email address."
msgstr "Indirizzo email non valido."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Lingua"
@@ -1043,7 +1052,7 @@ msgstr "Istruzioni di configurazione manuale"
#. Chart select field. Please try to keep this short.
#: src/components/routes/system/chart-card.tsx
msgid "Max 1 min"
msgstr ""
msgstr "Max 1 min"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/info-bar.tsx
@@ -1109,7 +1118,7 @@ msgstr "Unità rete"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "No"
msgstr ""
msgstr "No"
#: src/components/command-palette.tsx
#: src/components/systemd-table/systemd-table.tsx
@@ -1196,7 +1205,7 @@ msgstr "Pagine / Impostazioni"
#: src/components/login/auth-form.tsx
#: src/components/login/auth-form.tsx
msgid "Password"
msgstr ""
msgstr "Password"
#: src/components/login/auth-form.tsx
msgid "Password must be at least 8 characters."
@@ -1311,6 +1320,10 @@ msgstr "Lingua Preferita"
msgid "Process started"
msgstr "Processo avviato"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Riprendi"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1550,6 +1563,11 @@ msgstr "Spazio di swap utilizzato dal sistema"
msgid "Swap Usage"
msgstr "Utilizzo Swap"
#: 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 "Utilizzo Swap"
msgid "System"
msgstr "Sistema"
#: 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 "Medie di carico del sistema nel tempo"
@@ -1615,11 +1637,11 @@ msgstr "Temperature dei sensori di sistema"
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
msgstr ""
msgstr "Test Heartbeat"
#: src/components/routes/settings/notifications.tsx
msgid "Test notification sent"
@@ -1657,15 +1679,10 @@ msgstr "Formato orario"
msgid "To email(s)"
msgstr "A email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Attiva/disattiva tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ja\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Japanese\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 "Linuxコマンドをコピー"
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 "失敗: {0}"
#: 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: ko\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Korean\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 "텍스트 복사"
@@ -496,7 +501,7 @@ msgstr "코어"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -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 "OTP를 입력하세요."
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 "실패: {0}"
#: 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"
@@ -1817,7 +1834,7 @@ msgstr "업로드"
#: src/components/routes/system/info-bar.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Uptime"
msgstr "가동 시간"
msgstr "가동시간"
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: nl\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Dutch\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -48,7 +48,7 @@ msgstr "{count, plural, one {{countString} minuut} other {{countString} minuten}
#: src/components/routes/system/info-bar.tsx
msgid "{threads, plural, one {# thread} other {# threads}}"
msgstr ""
msgstr "{threads, plural, one {# thread} other {# threads}}"
#: src/lib/utils.ts
msgid "1 hour"
@@ -149,7 +149,7 @@ msgstr "Start na het instellen van de omgevingsvariabelen je Beszel-hub opnieuw
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -248,8 +248,9 @@ msgstr "Bandbreedte"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr ""
msgstr "Bat"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -289,7 +290,7 @@ msgstr "Binair"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,11 +299,11 @@ msgstr "Opstartstatus"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
msgstr ""
msgstr "Cache / Buffers"
#: src/components/systemd-table/systemd-table.tsx
msgid "Can reload"
@@ -336,7 +337,7 @@ msgstr "Opgelet - potentieel gegevensverlies"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Kopieer Linux-opdracht"
msgid "Copy name"
msgstr "Kopieer naam"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopieer tekst"
@@ -496,7 +501,7 @@ msgstr "Kern"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Cumulatieve upload"
#. 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 "Huidige status"
@@ -717,7 +724,6 @@ msgstr "Voer uw eenmalig wachtwoord in."
msgid "Ephemeral"
msgstr "Tijdelijk"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exporteer je huidige systeemconfiguratie."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Bijwerken waarschuwing mislukt"
msgid "Failed: {0}"
msgstr "Mislukt: {0}"
#: 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
@@ -824,7 +834,7 @@ msgstr "Vingerafdruk"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -938,7 +948,7 @@ msgstr "Als je het wachtwoord voor je beheerdersaccount bent kwijtgeraakt, kan j
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Docker image"
msgid "Image"
msgstr ""
msgstr "Image"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Inactive"
@@ -952,7 +962,6 @@ msgstr ""
msgid "Invalid email address."
msgstr "Ongeldig e-mailadres."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Taal"
@@ -1043,7 +1052,7 @@ msgstr "Handmatige installatie-instructies"
#. Chart select field. Please try to keep this short.
#: src/components/routes/system/chart-card.tsx
msgid "Max 1 min"
msgstr ""
msgstr "Max 1 min"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/info-bar.tsx
@@ -1074,7 +1083,7 @@ msgstr "Geheugengebruik van docker containers"
#. Device model
#: src/components/routes/system/smart-table.tsx
msgid "Model"
msgstr ""
msgstr "Model"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1311,6 +1320,10 @@ msgstr "Voorkeurstaal"
msgid "Process started"
msgstr "Proces gestart"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Hervatten"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1482,7 +1495,7 @@ msgstr "Servicedetails"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Services"
msgstr ""
msgstr "Services"
#: src/components/routes/settings/general.tsx
msgid "Set percentage thresholds for meter colors."
@@ -1536,7 +1549,7 @@ msgstr "Status"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Swap ruimte gebruikt door het systeem"
msgid "Swap Usage"
msgstr "Swap gebruik"
#: 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 "Swap gebruik"
msgid "System"
msgstr "Systeem"
#: 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 "Gemiddelde systeembelasting na verloop van tijd"
@@ -1615,7 +1637,7 @@ msgstr "Temperatuur van systeem sensoren"
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
@@ -1657,15 +1679,10 @@ msgstr "Tijdnotatie"
msgid "To email(s)"
msgstr "Naar e-mail(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Schakel thema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1710,7 +1727,7 @@ msgstr "Geactiveerd door"
#: src/components/systemd-table/systemd-table.tsx
msgid "Triggers"
msgstr ""
msgstr "Triggers"
#: src/lib/alerts.ts
msgid "Triggers when 1 minute load average exceeds a threshold"
@@ -1760,7 +1777,7 @@ msgstr "Triggert wanneer het gebruik van een schijf een drempelwaarde overschrij
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/system/smart-table.tsx
msgid "Type"
msgstr ""
msgstr "Type"
#: src/components/systemd-table/systemd-table.tsx
msgid "Unit file"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: no\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-03-31 07:42\n"
"PO-Revision-Date: 2026-04-26 23:25\n"
"Last-Translator: \n"
"Language-Team: Norwegian\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -57,7 +57,7 @@ msgstr "1 time"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 timer"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dager"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -137,7 +137,7 @@ msgstr "Juster bredden på hovedlayouten"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Etter å ha angitt miljøvariablene, start Beszel-huben på nytt for at
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Båndbredde"
msgid "Bat"
msgstr "Batteri"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -289,7 +290,7 @@ msgstr "Binær"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,7 +299,7 @@ msgstr "Oppstartstilstand"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
@@ -336,7 +337,7 @@ msgstr "Advarsel - potensielt tap av data"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -361,7 +362,7 @@ msgstr "Diagraminnstillinger"
#: src/components/routes/system/info-bar.tsx
msgid "Chart width"
msgstr "Grafbredde"
msgstr "Diagrambredde"
#: src/components/login/forgot-pass-form.tsx
msgid "Check {email} for a reset link."
@@ -471,6 +472,10 @@ msgstr "Kopier Linux-kommando"
msgid "Copy name"
msgstr "Kopier navn"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopier tekst"
@@ -496,7 +501,7 @@ msgstr "Kjerne"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativ opplasting"
#. 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 "Nåværende tilstand"
@@ -601,11 +608,11 @@ msgstr "Lader ut"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Disk"
msgstr ""
msgstr "Disk"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk I/O"
msgstr ""
msgstr "Disk I/O"
#: src/components/routes/settings/general.tsx
msgid "Disk unit"
@@ -715,9 +722,8 @@ msgstr "Skriv inn ditt engangspassord."
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Ephemeral"
msgstr "Flyktig"
msgstr "Midlertidig"
#: 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
@@ -772,7 +778,7 @@ msgstr "Eksporter din nåværende systemkonfigurasjon"
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -794,7 +800,7 @@ msgstr "Kunne ikke lagre innstillingene"
#: src/components/routes/settings/heartbeat.tsx
msgid "Failed to send heartbeat"
msgstr "Kunne ikke sende heartbeat"
msgstr "Kunne ikke sende hjerteslag"
#: src/components/routes/settings/notifications.tsx
msgid "Failed to send test notification"
@@ -809,6 +815,10 @@ msgstr "Kunne ikke oppdatere alarm"
msgid "Failed: {0}"
msgstr "Mislyktes: {0}"
#: 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
@@ -816,7 +826,7 @@ msgstr "Mislyktes: {0}"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "Filter..."
msgstr ""
msgstr "Filter..."
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint"
@@ -854,11 +864,11 @@ msgstr "Generelt"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -887,11 +897,11 @@ msgstr "Hjerteslag"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
msgstr "Heartbeat-overvåking"
msgstr "Hjerteslagsovervåking"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat sent successfully"
msgstr "Heartbeat sendt"
msgstr "Hjerteslag sendt vellykket"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
@@ -938,7 +948,7 @@ msgstr "Dersom du har mistet passordet til admin-kontoen kan du nullstille det m
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Docker image"
msgid "Image"
msgstr ""
msgstr "Image"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Inactive"
@@ -952,7 +962,6 @@ msgstr "Intervall"
msgid "Invalid email address."
msgstr "Ugyldig e-postadresse."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Språk"
@@ -1216,7 +1225,7 @@ msgstr "Fortid"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Pause"
msgstr ""
msgstr "Pause"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Paused"
@@ -1228,7 +1237,7 @@ msgstr "Pauset ({pausedSystemsLength})"
#: src/components/routes/settings/heartbeat.tsx
msgid "Payload format"
msgstr "Nyttelastformat"
msgstr "Lastformat"
#: src/components/routes/system/cpu-sheet.tsx
#: src/components/routes/system/cpu-sheet.tsx
@@ -1245,7 +1254,7 @@ msgstr "Prosentandel av tid brukt i hver tilstand"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Permanent"
msgstr ""
msgstr "Permanent"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Persistence"
@@ -1286,7 +1295,7 @@ msgstr "Vennligst logg inn på kontoen din"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Foretrukket Språk"
msgid "Process started"
msgstr "Prosess startet"
#: 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"
@@ -1457,7 +1470,7 @@ msgstr "Velg {foo}"
#: src/components/routes/settings/heartbeat.tsx
msgid "Send a single heartbeat ping to verify your endpoint is working."
msgstr "Send en enkelt heartbeat-ping for å bekrefte at endepunktet fungerer."
msgstr "Send en enkelt hjerteslag-ping for å verifisere at endepunktet ditt fungerer."
#: src/components/routes/settings/heartbeat.tsx
msgid "Send periodic outbound pings to an external monitoring service so you can monitor Beszel without exposing it to the internet."
@@ -1465,7 +1478,7 @@ msgstr "Send periodiske utgående pinger til en ekstern overvåkingstjeneste sli
#: src/components/routes/settings/heartbeat.tsx
msgid "Send test heartbeat"
msgstr "Send test-heartbeat"
msgstr "Send test-hjerteslag"
#: src/components/routes/system/charts/network-charts.tsx
msgid "Sent"
@@ -1490,7 +1503,7 @@ msgstr "Angi prosentvise terskler for målerfarger."
#: src/components/routes/settings/heartbeat.tsx
msgid "Set the following environment variables on your Beszel hub to enable heartbeat monitoring:"
msgstr "Angi følgende miljøvariabler på Beszel-huben din for å aktivere heartbeat-overvåking:"
msgstr "Sett følgende miljøvariabler på Beszel-huben din for å aktivere hjerteslagsovervåking:"
#: src/components/command-palette.tsx
#: src/components/command-palette.tsx
@@ -1536,7 +1549,7 @@ msgstr "Tilstand"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Swap-plass i bruk av systemet"
msgid "Swap Usage"
msgstr "Swap-bruk"
#: 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
@@ -1563,6 +1581,10 @@ msgstr "Swap-bruk"
#: src/components/systems-table/systems-table-columns.tsx
#: src/lib/alerts.ts
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
@@ -1598,7 +1620,7 @@ msgstr "Oppgaver"
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Temp"
msgstr ""
msgstr "Temp"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
@@ -1615,11 +1637,11 @@ msgstr "Temperaturer på system-sensorer"
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
msgstr "Test-heartbeat"
msgstr "Test-hjerteslag"
#: src/components/routes/settings/notifications.tsx
msgid "Test notification sent"
@@ -1657,15 +1679,10 @@ msgstr "Tidsformat"
msgid "To email(s)"
msgstr "Til e-postadresse(r)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Tema av/på"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1697,7 +1714,7 @@ msgstr "Totalt sendt data for hvert grensesnitt"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "Total tid brukt på lesing/skriving (kan overstige 100 %)"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
@@ -1760,7 +1777,7 @@ msgstr "Slår inn når forbruk av hvilken som helst disk overstiger en grensever
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/system/smart-table.tsx
msgid "Type"
msgstr ""
msgstr "Type"
#: src/components/systemd-table/systemd-table.tsx
msgid "Unit file"
@@ -1774,7 +1791,7 @@ msgstr "Enhetspreferanser"
#: src/components/command-palette.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Universal token"
msgstr ""
msgstr "Universal token"
#. Context: Battery state
#: src/lib/i18n.ts
@@ -1898,7 +1915,7 @@ msgstr "Når aktivert, tillater denne tokenen agenter å registrere seg selv ute
#: src/components/routes/settings/heartbeat.tsx
msgid "When using POST, each heartbeat includes a JSON payload with system status summary, list of down systems, and triggered alerts."
msgstr "Ved bruk av POST inkluderer hver heartbeat en JSON-nyttelast med systemstatussammendrag, liste over nede systemer og utløste varsler."
msgstr "Ved bruk av POST inkluderer hver hjerteslag en JSON-nyttelast med systemstatussammendrag, liste over nede systemer og utløste varsler."
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\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"
@@ -57,7 +57,7 @@ msgstr "1 godzina"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 godzin"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dni"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -137,7 +137,7 @@ msgstr "Dostosuj szerokość widoku"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Po ustawieniu zmiennych środowiskowych zrestartuj Beszel hub, aby zmian
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Przepustowość"
msgid "Bat"
msgstr "Bateria"
#: 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 "Kopiuj polecenie Linux"
msgid "Copy name"
msgstr "Kopiuj nazwę"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopiuj tekst"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Wysyłanie łącznie"
#. 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 "Aktualny stan"
@@ -717,7 +724,6 @@ msgstr "Wprowadź swoje jednorazowe hasło."
msgid "Ephemeral"
msgstr "Tymczasowy"
#: 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
@@ -772,7 +778,7 @@ msgstr "Eksportuj aktualną konfigurację systemów."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Nie udało się zaktualizować powiadomienia"
msgid "Failed: {0}"
msgstr "Nieudane: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Globalny"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Kondycja"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -952,7 +962,6 @@ msgstr "Interwał"
msgid "Invalid email address."
msgstr "Nieprawidłowy adres e-mail."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Język"
@@ -972,7 +981,7 @@ msgstr "Cykl życia"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systemd-table/systemd-table.tsx
msgid "limit"
msgstr ""
msgstr "limit"
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "Load Average"
@@ -1074,7 +1083,7 @@ msgstr "Użycie pamięci przez kontenery Docker."
#. Device model
#: src/components/routes/system/smart-table.tsx
msgid "Model"
msgstr ""
msgstr "Model"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1286,7 +1295,7 @@ msgstr "Zaloguj się na swoje konto"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Preferowany język"
msgid "Process started"
msgstr "Proces uruchomiony"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Wznów"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1536,7 +1549,7 @@ msgstr "Stan"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Pamięć wymiany używana przez system"
msgid "Swap Usage"
msgstr "Użycie pamięci wymiany"
#: 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
@@ -1563,6 +1581,10 @@ msgstr "Użycie pamięci wymiany"
#: src/components/systems-table/systems-table-columns.tsx
#: src/lib/alerts.ts
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
@@ -1615,7 +1637,7 @@ msgstr "Temperatury czujników systemowych."
#: src/components/routes/settings/notifications.tsx
msgid "Test <0>URL</0>"
msgstr ""
msgstr "Test <0>URL</0>"
#: src/components/routes/settings/heartbeat.tsx
msgid "Test heartbeat"
@@ -1657,15 +1679,10 @@ msgstr "Format czasu"
msgid "To email(s)"
msgstr "Do e-mail(ów)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Zmień motyw"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1697,7 +1714,7 @@ msgstr "Całkowita ilość danych wysłanych dla każdego interfejsu"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "Łączny czas operacji odczytu/zapisu (może przekraczać 100%)"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: pt\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-04 18:12\n"
"Last-Translator: \n"
"Language-Team: Portuguese\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -48,7 +48,7 @@ msgstr "{count, plural, one {{countString} minuto} other {{countString} minutos}
#: src/components/routes/system/info-bar.tsx
msgid "{threads, plural, one {# thread} other {# threads}}"
msgstr ""
msgstr "{threads, plural, one {# thread} other {# threads}}"
#: src/lib/utils.ts
msgid "1 hour"
@@ -57,7 +57,7 @@ msgstr "1 hora"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 horas"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dias"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -137,7 +137,7 @@ msgstr "Ajustar a largura do layout principal"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -248,8 +248,9 @@ msgstr "Largura de Banda"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr ""
msgstr "Bat"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -289,7 +290,7 @@ msgstr "Binário"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bits (Kbps, Mbps, Gbps)"
msgstr ""
msgstr "Bits (Kbps, Mbps, Gbps)"
#: src/components/systemd-table/systemd-table.tsx
msgid "Boot state"
@@ -298,11 +299,11 @@ msgstr "Estado de inicialização"
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/general.tsx
msgid "Bytes (KB/s, MB/s, GB/s)"
msgstr ""
msgstr "Bytes (KB/s, MB/s, GB/s)"
#: src/components/routes/system/charts/memory-charts.tsx
msgid "Cache / Buffers"
msgstr ""
msgstr "Cache / Buffers"
#: src/components/systemd-table/systemd-table.tsx
msgid "Can reload"
@@ -336,7 +337,7 @@ msgstr "Cuidado - possível perda de dados"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Copiar comando Linux"
msgid "Copy name"
msgstr "Copiar nome"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Copiar texto"
@@ -490,13 +495,13 @@ msgstr "Copiar YAML"
#: src/components/routes/system.tsx
msgctxt "Core system metrics"
msgid "Core"
msgstr ""
msgstr "Núcleos"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Upload cumulativo"
#. 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 "Estado atual"
@@ -677,7 +684,7 @@ msgstr "Editar {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -717,7 +724,6 @@ msgstr "Insira a sua senha de uso único."
msgid "Ephemeral"
msgstr "Efêmero"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exporte a configuração atual dos seus sistemas."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Falha ao atualizar alerta"
msgid "Failed: {0}"
msgstr "Falhou: {0}"
#: 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
@@ -824,7 +834,7 @@ msgstr "Impressão digital"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
msgstr ""
msgstr "Firmware"
#: src/components/alerts/alerts-sheet.tsx
msgid "For <0>{min}</0> {min, plural, one {minute} other {minutes}}"
@@ -854,11 +864,11 @@ msgstr "Geral"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Saúde"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Pulso"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -901,7 +911,7 @@ msgstr "Comando Homebrew"
#: src/components/add-system.tsx
msgid "Host / IP"
msgstr ""
msgstr "Host / IP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP Method"
@@ -952,7 +962,6 @@ msgstr "Intervalo"
msgid "Invalid email address."
msgstr "Endereço de email inválido."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Idioma"
@@ -1021,7 +1030,7 @@ msgstr "Tentativa de login falhou"
#: src/components/containers-table/containers-table.tsx
#: src/components/navbar.tsx
msgid "Logs"
msgstr ""
msgstr "Logs"
#: src/components/routes/settings/notifications.tsx
msgid "Looking instead for where to create alerts? Click the bell <0/> icons in the systems table."
@@ -1311,6 +1320,10 @@ msgstr "Idioma Preferido"
msgid "Process started"
msgstr "Processo iniciado"
#: 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"
@@ -1384,7 +1397,7 @@ msgstr "Retomar"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Raiz"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1550,6 +1563,11 @@ msgstr "Espaço de swap usado pelo sistema"
msgid "Swap Usage"
msgstr "Uso de Swap"
#: 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 "Uso de Swap"
msgid "System"
msgstr "Sistema"
#: 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 "Médias de carga do sistema ao longo do tempo"
@@ -1598,7 +1620,7 @@ msgstr "Tarefas"
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Temp"
msgstr ""
msgstr "Temp"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
@@ -1657,15 +1679,10 @@ msgstr "Formato de hora"
msgid "To email(s)"
msgstr "Para email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Alternar tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx
@@ -1684,7 +1701,7 @@ msgstr "Tokens e impressões digitais são usados para autenticar conexões WebS
#: src/components/ui/chart.tsx
#: src/components/ui/chart.tsx
msgid "Total"
msgstr ""
msgstr "Total"
#: src/components/routes/system/network-sheet.tsx
msgid "Total data received for each interface"
@@ -1697,12 +1714,12 @@ msgstr "Dados totais enviados para cada interface"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "Tempo total gasto em leitura/escrita (pode exceder 100%)"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
msgid "Total: {0}"
msgstr ""
msgstr "Total: {0}"
#: src/components/systemd-table/systemd-table.tsx
msgid "Triggered by"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ro\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-07-19 13:06\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"
@@ -57,7 +57,7 @@ msgstr "1 oră"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 ore"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 zile"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -110,7 +110,7 @@ msgstr "Alerte Active"
#: src/components/systemd-table/systemd-table.tsx
msgid "Active state"
msgstr ""
msgstr "Stare activă"
#: src/components/add-system.tsx
#: src/components/add-system.tsx
@@ -119,11 +119,11 @@ msgstr ""
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/settings/quiet-hours.tsx
msgid "Add {foo}"
msgstr ""
msgstr "Adaugă {foo}"
#: src/components/routes/settings/notifications.tsx
msgid "Add URL"
msgstr ""
msgstr "Adaugă URL"
#: src/components/routes/settings/general.tsx
msgid "Adjust display options for charts."
@@ -131,25 +131,25 @@ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Adjust the width of the main layout"
msgstr ""
msgstr "Reglaţi lăţimea aspectului principal"
#: src/components/command-palette.tsx
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
msgstr ""
msgstr "După"
#: src/components/routes/settings/heartbeat.tsx
msgid "After setting the environment variables, restart your Beszel hub for changes to take effect."
msgstr ""
msgstr "După setarea variabilelor de mediu, reporniţi centrul Beszel pentru ca modificările să aibă efect."
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -168,7 +168,7 @@ msgstr "Alerte"
#: src/components/navbar.tsx
#: src/components/routes/containers.tsx
msgid "All Containers"
msgstr ""
msgstr "Toate Containerele"
#: src/components/alerts/alerts-sheet.tsx
#: src/components/command-palette.tsx
@@ -177,11 +177,11 @@ msgstr ""
#: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems"
msgstr ""
msgstr "Toate sistemele"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?"
msgstr ""
msgstr "Sigur vrei să ștergi {name}?"
#: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Are you sure?"
@@ -189,11 +189,11 @@ msgstr "Ești sigur?"
#: src/components/copy-to-clipboard.tsx
msgid "Automatic copy requires a secure context."
msgstr ""
msgstr "Copierea automată necesită un context securizat."
#: src/components/routes/system/chart-card.tsx
msgid "Average"
msgstr ""
msgstr "Medie"
#: src/components/routes/system/charts/cpu-charts.tsx
msgid "Average CPU utilization of containers"
@@ -209,10 +209,19 @@ msgstr ""
msgid "Average exceeds <0>{value}{0}</0>"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Average number of I/O operations waiting to be serviced"
msgstr ""
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
msgid "Average queue to completion time per operation"
msgstr ""
#: src/components/routes/system/charts/cpu-charts.tsx
msgid "Average system-wide CPU utilization"
msgstr ""
@@ -327,7 +336,7 @@ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -444,6 +453,11 @@ msgctxt "Environment variables"
msgid "Copy env"
msgstr ""
#: src/components/alerts/alerts-sheet.tsx
msgctxt "Copy alerts from another system"
msgid "Copy from"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx
msgid "Copy host"
msgstr ""
@@ -482,7 +496,7 @@ msgstr ""
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -599,12 +613,11 @@ msgstr "Unitate disc"
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/lib/alerts.ts
msgid "Disk Usage"
msgstr "Utilizare Disc"
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk usage of {extraFsName}"
msgstr ""
@@ -664,7 +677,7 @@ msgstr "Editează {foo}"
#: src/components/login/forgot-pass-form.tsx
#: src/components/login/otp-forms.tsx
msgid "Email"
msgstr ""
msgstr "Email"
#: src/components/routes/settings/notifications.tsx
msgid "Email notifications"
@@ -841,7 +854,7 @@ msgstr ""
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
@@ -898,6 +911,21 @@ msgstr ""
msgid "HTTP method: POST, GET, or HEAD (default: POST)"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
msgid "I/O Await"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O total time spent on read/write"
msgid "I/O Time"
msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
msgctxt "Percent of time the disk is busy with I/O"
msgid "I/O Utilization"
msgstr ""
#. Context: Battery state
#: src/lib/i18n.ts
msgid "Idle"
@@ -1046,7 +1074,7 @@ msgstr ""
#. Device model
#: src/components/routes/system/smart-table.tsx
msgid "Model"
msgstr ""
msgstr "Model"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1207,6 +1235,10 @@ msgstr ""
msgid "Per-core average utilization"
msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Percent of time the disk is busy with I/O"
msgstr ""
#: src/components/routes/system/cpu-sheet.tsx
msgid "Percentage of time spent in each state"
msgstr ""
@@ -1254,7 +1286,7 @@ msgstr ""
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1284,13 +1316,20 @@ msgstr ""
msgid "Public Key"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average queue depth"
msgid "Queue Depth"
msgstr ""
#: src/components/routes/settings/quiet-hours.tsx
msgid "Quiet Hours"
msgstr ""
#. Disk read
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Read"
msgstr "Citit"
@@ -1602,7 +1641,7 @@ msgstr ""
msgid "This will permanently delete all selected records from the database."
msgstr ""
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Throughput of {extraFsName}"
msgstr ""
@@ -1645,7 +1684,7 @@ msgstr ""
#: src/components/ui/chart.tsx
#: src/components/ui/chart.tsx
msgid "Total"
msgstr ""
msgstr "Total"
#: src/components/routes/system/network-sheet.tsx
msgid "Total data received for each interface"
@@ -1655,10 +1694,15 @@ msgstr ""
msgid "Total data sent for each interface"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
msgid "Total: {0}"
msgstr ""
msgstr "Total: {0}"
#: src/components/systemd-table/systemd-table.tsx
msgid "Triggered by"
@@ -1775,7 +1819,7 @@ msgstr ""
msgid "Uptime"
msgstr ""
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
@@ -1797,6 +1841,11 @@ msgstr "Utilizat"
msgid "Users"
msgstr "Utilizatori"
#: src/components/routes/system/charts/disk-charts.tsx
msgctxt "Disk I/O utilization"
msgid "Utilization"
msgstr ""
#: src/components/alerts-history-columns.tsx
msgid "Value"
msgstr ""
@@ -1806,6 +1855,7 @@ msgid "View"
msgstr ""
#: src/components/routes/system/cpu-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/network-sheet.tsx
msgid "View more"
msgstr ""
@@ -1858,7 +1908,9 @@ msgstr ""
#. Disk write
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Write"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: ru\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-03-27 22:12\n"
"PO-Revision-Date: 2026-08-17 19:22\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"
@@ -211,7 +211,7 @@ msgstr "Среднее превышает <0>{value}{0}</0>"
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Average number of I/O operations waiting to be serviced"
msgstr "Среднее количество операций ввода-вывода, ожидающих обслуживания"
msgstr "Среднее количество операций ввода/вывода, ожидающих обслуживания"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "Average power consumption of GPUs"
@@ -233,7 +233,7 @@ msgstr "Среднее использование {0}"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "Average utilization of GPU engines"
msgstr "Средняя загрузка GPU движков"
msgstr "Средняя загрузка ядер GPU"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
@@ -248,8 +248,9 @@ msgstr "Пропускная способность"
#. Battery label in systems table header
#: src/components/systems-table/systems-table-columns.tsx
msgid "Bat"
msgstr "Батарея"
msgstr "Бтр"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
msgid "Battery"
@@ -272,7 +273,7 @@ msgstr "До"
#. placeholder {2}: alert.min
#: src/components/active-alerts.tsx
msgid "Below {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "Ниже {0}{1} за последние {2, plural, one {# минуту} other {# минут}}"
msgstr "Менее {0}{1} за {2, plural, one {# минуту} other {# минут}}"
#: src/components/login/auth-form.tsx
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
@@ -340,7 +341,7 @@ msgstr "Цельсий (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
msgstr "Изменить единицы измерения для метрик."
msgstr "Изменить единицы измерения метрик."
#: src/components/routes/settings/general.tsx
msgid "Change general application options."
@@ -365,11 +366,11 @@ msgstr "Ширина графика"
#: src/components/login/forgot-pass-form.tsx
msgid "Check {email} for a reset link."
msgstr "Проверьте {email} для получения ссылки на сброс."
msgstr "Проверьте {email} для получения ссылки сброса."
#: src/components/routes/settings/layout.tsx
msgid "Check logs for more details."
msgstr "Проверьте журналы для получения более подробной информации."
msgstr "Проверьте журналы для получения подробной информации."
#: src/components/routes/settings/heartbeat.tsx
msgid "Check your monitoring service"
@@ -387,7 +388,7 @@ msgstr "Очистить"
#: src/components/containers-table/containers-table.tsx
msgid "Click on a container to view more information."
msgstr "Нажмите на контейнер, чтобы просмотреть дополнительную информацию."
msgstr "Нажмите на контейнер для просмотра дополнительной информации."
#: src/components/routes/system/smart-table.tsx
msgid "Click on a device to view more information."
@@ -408,7 +409,7 @@ msgstr "Инструкции командной строки"
#: src/components/routes/settings/notifications.tsx
msgid "Configure how you receive alert notifications."
msgstr "Настройте, как вы получаете уведомления об оповещениях."
msgstr "Настройте способ получения уведомления об оповещениях."
#: src/components/login/auth-form.tsx
#: src/components/login/auth-form.tsx
@@ -440,18 +441,18 @@ msgstr "Скопировано в буфер обмена"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker compose file content"
msgid "Copy docker compose"
msgstr "Скопировать docker compose"
msgstr "Копировать docker compose"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Button to copy docker run command"
msgid "Copy docker run"
msgstr "Скопировать docker run"
msgstr "Копировать docker run"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgctxt "Environment variables"
msgid "Copy env"
msgstr "Скопировать env"
msgstr "Копировать env"
#: src/components/alerts/alerts-sheet.tsx
msgctxt "Copy alerts from another system"
@@ -469,7 +470,11 @@ msgstr "Копировать команду Linux"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Copy name"
msgstr "Скопировать имя"
msgstr "Копировать имя"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
@@ -485,7 +490,7 @@ msgstr "Скопируйте содержимое <0>docker-compose.yml</0> дл
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy YAML"
msgstr "Скопировать YAML"
msgstr "Копировать YAML"
#: src/components/routes/system.tsx
msgctxt "Core system metrics"
@@ -500,7 +505,7 @@ msgstr "ЦП"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
msgstr "Ядра ЦП"
msgstr "Ядра CPU"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "CPU Peak"
@@ -512,7 +517,7 @@ msgstr "Время CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Time Breakdown"
msgstr "Распределение времени ЦП"
msgstr "Распределение времени CPU"
#: src/components/routes/system/charts/cpu-charts.tsx
#: src/components/routes/system/charts/cpu-charts.tsx
@@ -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 "Неудачно: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Глобально"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Здоровье"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -914,17 +924,17 @@ msgstr "HTTP-метод: POST, GET или HEAD (по умолчанию: POST)"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
msgid "I/O Await"
msgstr "Ожидание ввода-вывода"
msgstr "Ожидание ввода/вывода"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O total time spent on read/write"
msgid "I/O Time"
msgstr "Время ввода-вывода"
msgstr "Время ввода/вывода"
#: src/components/routes/system/charts/disk-charts.tsx
msgctxt "Percent of time the disk is busy with I/O"
msgid "I/O Utilization"
msgstr "Использование ввода-вывода"
msgstr "Использование ввода/вывода"
#. Context: Battery state
#: src/lib/i18n.ts
@@ -933,7 +943,7 @@ msgstr "Неактивная"
#: src/components/login/forgot-pass-form.tsx
msgid "If you've lost the password to your admin account, you may reset it using the following command."
msgstr "Если вы потеряли пароль от своей учетной записи администратора, вы можете сбросить его, используя следующую команду."
msgstr "Если вы потеряли пароль от учетной записи администратора, вы можете сбросить его, используя следующую команду."
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Docker image"
@@ -952,7 +962,6 @@ msgstr "Интервал"
msgid "Invalid email address."
msgstr "Неверный адрес электронной почты."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Язык"
@@ -1038,7 +1047,7 @@ msgstr "Управляйте предпочтениями отображения
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Manual setup instructions"
msgstr "Инструкции по ручной настройке"
msgstr "Инструкции по ручной установке"
#. Chart select field. Please try to keep this short.
#: src/components/routes/system/chart-card.tsx
@@ -1204,7 +1213,7 @@ msgstr "Пароль должен содержать не менее 8 симв
#: src/components/login/auth-form.tsx
msgid "Password must be less than 72 bytes."
msgstr "Пароль должен быть меньше 72 символов."
msgstr "Пароль должен быть короче 72 символов."
#: src/components/login/forgot-pass-form.tsx
msgid "Password reset request received"
@@ -1237,7 +1246,7 @@ msgstr "Среднее использование на ядро"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Percent of time the disk is busy with I/O"
msgstr "Процент времени, в течение которого диск занят вводом-выводом"
msgstr "Процент времени, в течение которого диск занят вводом/выводом"
#: src/components/routes/system/cpu-sheet.tsx
msgid "Percentage of time spent in each state"
@@ -1311,10 +1320,14 @@ 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"
msgstr "Ключ"
msgstr "Публичный ключ"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average queue depth"
@@ -1388,7 +1401,7 @@ msgstr "Корневой"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
msgstr "Обновить токен"
msgstr "Сменить токен"
#: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Rows per page"
@@ -1404,7 +1417,7 @@ msgstr "Детали S.M.A.R.T."
#: src/components/routes/system/smart-table.tsx
msgid "S.M.A.R.T. Self-Test"
msgstr "Самотестирование S.M.A.R.T."
msgstr "Запуск теста S.M.A.R.T."
#: src/components/add-system.tsx
msgid "Save {foo}"
@@ -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 "Средняя загрузка системы за время"
@@ -1635,7 +1657,7 @@ msgstr "Затем войдите в бэкенд и сбросьте парол
#: src/components/systems-table/systems-table-columns.tsx
msgid "This action cannot be undone. This will permanently delete all current records for {name} from the database."
msgstr "Это действие не может быть отменено. Это навсегда удалит все текущие записи для {name} из базы данных."
msgstr "Это действие не может быть отменено. Оно навсегда удалит все текущие записи для {name} из базы данных."
#: src/components/routes/settings/alerts-history-data-table.tsx
msgid "This will permanently delete all selected records from the database."
@@ -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"
@@ -1697,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
@@ -1738,11 +1755,11 @@ msgstr "Срабатывает, когда комбинированный вхо
#: src/lib/alerts.ts
msgid "Triggers when CPU usage exceeds a threshold"
msgstr "Срабатывает, когда использование CPU превышает порог"
msgstr "Срабатывает, когда нагрузка на CPU превышает порог"
#: src/lib/alerts.ts
msgid "Triggers when GPU usage exceeds a threshold"
msgstr "Срабатывает, когда использование GPU превышает порог"
msgstr "Срабатывает, когда нагрузка на GPU превышает порог"
#: src/lib/alerts.ts
msgid "Triggers when memory usage exceeds a threshold"
@@ -1754,7 +1771,7 @@ msgstr "Срабатывает, когда статус переключаетс
#: src/lib/alerts.ts
msgid "Triggers when usage of any disk exceeds a threshold"
msgstr "Срабатывает, когда использование любого диска превышает порог"
msgstr "Срабатывает, когда нагрузка на любой из дисков превышает порог"
#: src/components/routes/settings/quiet-hours.tsx
#: src/components/routes/settings/quiet-hours.tsx
@@ -1764,7 +1781,7 @@ msgstr "Тип"
#: src/components/systemd-table/systemd-table.tsx
msgid "Unit file"
msgstr "Unit файл"
msgstr "Файл единиц измерения"
#. Temperature / network units
#: src/components/routes/settings/general.tsx
@@ -1779,7 +1796,7 @@ msgstr "Универсальный токен"
#. Context: Battery state
#: src/lib/i18n.ts
msgid "Unknown"
msgstr "Неизвестная"
msgstr "Неизвестно"
#: src/components/systemd-table/systemd-table.tsx
#: src/components/systemd-table/systemd-table.tsx
@@ -1882,11 +1899,11 @@ msgstr "Требует"
#: src/components/routes/settings/general.tsx
msgid "Warning (%)"
msgstr "Предупреждение (%)"
msgstr "Предупреждений (%)"
#: src/components/routes/settings/general.tsx
msgid "Warning thresholds"
msgstr "Пороги предупреждения"
msgstr "Пороги предупреждений"
#: src/components/routes/settings/notifications.tsx
msgid "Webhook / Push notifications"
@@ -1898,7 +1915,7 @@ msgstr "При включении этот токен позволяет аге
#: src/components/routes/settings/heartbeat.tsx
msgid "When using POST, each heartbeat includes a JSON payload with system status summary, list of down systems, and triggered alerts."
msgstr "При использовании POST каждый heartbeat содержит полезную нагрузку JSON с кратким отчетом о состоянии системы, списком отключенных систем и сработавшими оповещениями."
msgstr "При использовании POST каждый heartbeat содержит подробный JSON с кратким отчетом о состоянии системы, списком отключенных систем и сработавшими оповещениями."
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
@@ -1916,7 +1933,7 @@ msgstr "Запись"
#: src/components/routes/settings/layout.tsx
msgid "YAML Config"
msgstr "YAML конфигурация"
msgstr "YAML конфиг"
#: src/components/routes/settings/config-yaml.tsx
msgid "YAML Configuration"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sl\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\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"
@@ -57,7 +57,7 @@ msgstr "1 ura"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 ur"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dni"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -250,6 +250,7 @@ msgstr "Pasovna širina"
msgid "Bat"
msgstr "Baterija"
#: 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 "Kopiraj Linux ukaz"
msgid "Copy name"
msgstr "Kopiraj ime"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopiraj besedilo"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativno nalaganje"
#. 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 "Trenutno stanje"
@@ -717,7 +724,6 @@ msgstr "Vnesite svoje enkratno geslo."
msgid "Ephemeral"
msgstr "Prehodni"
#: 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 "Opozorila ni bilo mogoče posodobiti"
msgid "Failed: {0}"
msgstr "Neuspešno: {0}"
#: 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 "Napačen e-poštni naslov."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Jezik"
@@ -1311,6 +1320,10 @@ msgstr "Prednostni jezik"
msgid "Process started"
msgstr "Proces začet"
#: 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 "Swap prostor, ki ga uporablja sistem"
msgid "Swap Usage"
msgstr "Swap uporaba"
#: 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 "Swap uporaba"
msgid "System"
msgstr "Sistemsko"
#: 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 "Sistemske povprečne obremenitve skozi čas"
@@ -1598,7 +1620,7 @@ msgstr "Naloge"
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Temp"
msgstr ""
msgstr "Temp"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
@@ -1657,11 +1679,6 @@ msgstr "Oblika časa"
msgid "To email(s)"
msgstr "E-pošta za"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Obrni temo"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

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-05 18:27\n"
"PO-Revision-Date: 2026-04-22 14:14\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"
@@ -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 "Копирај Linux команду"
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 "Неуспело: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Глобално"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "ГПЈ"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -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"
@@ -1384,7 +1397,7 @@ msgstr "Настави"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -1550,6 +1563,11 @@ msgstr "Swap простор који користи систем"
msgid "Swap Usage"
msgstr "Swap употреба"
#: 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 "Swap употреба"
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"
@@ -1697,7 +1714,7 @@ msgstr "Укупни подаци poslati за сваки интерфејс"
#: 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

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: sv\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Swedish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -57,7 +57,7 @@ msgstr "1 timme"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "1 min"
msgstr ""
msgstr "1 min"
#: src/lib/utils.ts
msgid "1 minute"
@@ -74,7 +74,7 @@ msgstr "12 timmar"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "15 min"
msgstr ""
msgstr "15 min"
#: src/lib/utils.ts
msgid "24 hours"
@@ -87,7 +87,7 @@ msgstr "30 dagar"
#. Load average
#: src/components/routes/system/charts/load-average-chart.tsx
msgid "5 min"
msgstr ""
msgstr "5 min"
#. Table column
#: src/components/routes/settings/quiet-hours.tsx
@@ -137,7 +137,7 @@ msgstr "Justera bredden på huvudlayouten"
#: src/components/command-palette.tsx
#: src/components/navbar.tsx
msgid "Admin"
msgstr ""
msgstr "Admin"
#: src/components/systemd-table/systemd-table.tsx
msgid "After"
@@ -149,7 +149,7 @@ msgstr "Efter att du har ställt in miljövariablerna, starta om din Beszel-hubb
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -250,6 +250,7 @@ msgstr "Bandbredd"
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"
@@ -336,7 +337,7 @@ msgstr "Varning - potentiell dataförlust"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
msgstr ""
msgstr "Celsius (°C)"
#: src/components/routes/settings/general.tsx
msgid "Change display units for metrics."
@@ -471,6 +472,10 @@ msgstr "Kopiera Linux-kommando"
msgid "Copy name"
msgstr "Kopiera namn"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Kopiera text"
@@ -496,7 +501,7 @@ msgstr "Kärna"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kumulativ uppladdning"
#. 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 "Aktuellt tillstånd"
@@ -601,7 +608,7 @@ msgstr "Urladdar"
#: src/components/routes/system.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Disk"
msgstr ""
msgstr "Disk"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk I/O"
@@ -717,7 +724,6 @@ msgstr "Ange ditt engångslösenord."
msgid "Ephemeral"
msgstr "Flyktig"
#: 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
@@ -772,7 +778,7 @@ msgstr "Exportera din nuvarande systemkonfiguration."
#: src/components/routes/settings/general.tsx
msgid "Fahrenheit (°F)"
msgstr ""
msgstr "Fahrenheit (°F)"
#: src/components/systems-table/systems-table-columns.tsx
msgid "Failed"
@@ -809,6 +815,10 @@ msgstr "Kunde inte uppdatera larm"
msgid "Failed: {0}"
msgstr "Misslyckades: {0}"
#: 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
@@ -844,7 +854,7 @@ msgstr "FreeBSD kommando"
#: src/components/routes/system/info-bar.tsx
#: src/lib/i18n.ts
msgid "Full"
msgstr ""
msgstr "Full"
#. Context: General settings
#: src/components/routes/settings/general.tsx
@@ -854,7 +864,7 @@ msgstr "Allmänt"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Global"
msgstr ""
msgstr "Global"
#: src/components/routes/system.tsx
msgid "GPU"
@@ -952,14 +962,13 @@ msgstr "Intervall"
msgid "Invalid email address."
msgstr "Ogiltig e-postadress."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Språk"
#: src/components/systems-table/systems-table.tsx
msgid "Layout"
msgstr ""
msgstr "Layout"
#: src/components/routes/settings/general.tsx
msgid "Layout width"
@@ -1043,7 +1052,7 @@ msgstr "Manuella installationsinstruktioner"
#. Chart select field. Please try to keep this short.
#: src/components/routes/system/chart-card.tsx
msgid "Max 1 min"
msgstr ""
msgstr "Max 1 min"
#: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/info-bar.tsx
@@ -1286,7 +1295,7 @@ msgstr "Vänligen logga in på ditt konto"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Föredraget språk"
msgid "Process started"
msgstr "Process startad"
#: 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"
@@ -1536,7 +1549,7 @@ msgstr "Tillstånd"
#: src/components/systems-table/systems-table.tsx
#: src/lib/alerts.ts
msgid "Status"
msgstr ""
msgstr "Status"
#: src/components/systemd-table/systemd-table-columns.tsx
msgid "Sub State"
@@ -1550,6 +1563,11 @@ msgstr "Swap-utrymme som används av systemet"
msgid "Swap Usage"
msgstr "Swap-användning"
#: 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
@@ -1563,6 +1581,10 @@ msgstr "Swap-användning"
#: src/components/systems-table/systems-table-columns.tsx
#: src/lib/alerts.ts
msgid "System"
msgstr "System"
#: src/components/routes/system/charts/sensor-charts.tsx
msgid "System fan speeds (RPM)"
msgstr ""
#: src/components/routes/system/charts/load-average-chart.tsx
@@ -1598,7 +1620,7 @@ msgstr "Uppgifter"
#: src/components/routes/system/smart-table.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Temp"
msgstr ""
msgstr "Temp"
#: src/components/routes/system/charts/sensor-charts.tsx
#: src/lib/alerts.ts
@@ -1657,11 +1679,6 @@ msgstr "Tidsformat"
msgid "To email(s)"
msgstr "Till e-postadress(er)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Växla tema"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
@@ -1684,7 +1701,7 @@ msgstr "Tokens och fingeravtryck används för att autentisera WebSocket-anslutn
#: src/components/ui/chart.tsx
#: src/components/ui/chart.tsx
msgid "Total"
msgstr ""
msgstr "Total"
#: src/components/routes/system/network-sheet.tsx
msgid "Total data received for each interface"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: th\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Thai\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -209,10 +209,19 @@ msgstr ""
msgid "Average exceeds <0>{value}{0}</0>"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Average number of I/O operations waiting to be serviced"
msgstr ""
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "Average power consumption of GPUs"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
msgid "Average queue to completion time per operation"
msgstr ""
#: src/components/routes/system/charts/cpu-charts.tsx
msgid "Average system-wide CPU utilization"
msgstr ""
@@ -444,6 +453,11 @@ msgctxt "Environment variables"
msgid "Copy env"
msgstr ""
#: src/components/alerts/alerts-sheet.tsx
msgctxt "Copy alerts from another system"
msgid "Copy from"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx
msgid "Copy host"
msgstr ""
@@ -599,12 +613,11 @@ msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/lib/alerts.ts
msgid "Disk Usage"
msgstr ""
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Disk usage of {extraFsName}"
msgstr ""
@@ -898,6 +911,21 @@ msgstr ""
msgid "HTTP method: POST, GET, or HEAD (default: POST)"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average operation time (iostat await)"
msgid "I/O Await"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O total time spent on read/write"
msgid "I/O Time"
msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
msgctxt "Percent of time the disk is busy with I/O"
msgid "I/O Utilization"
msgstr ""
#. Context: Battery state
#: src/lib/i18n.ts
msgid "Idle"
@@ -1207,6 +1235,10 @@ msgstr ""
msgid "Per-core average utilization"
msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Percent of time the disk is busy with I/O"
msgstr ""
#: src/components/routes/system/cpu-sheet.tsx
msgid "Percentage of time spent in each state"
msgstr ""
@@ -1284,13 +1316,20 @@ msgstr ""
msgid "Public Key"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O average queue depth"
msgid "Queue Depth"
msgstr ""
#: src/components/routes/settings/quiet-hours.tsx
msgid "Quiet Hours"
msgstr ""
#. Disk read
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Read"
msgstr ""
@@ -1602,7 +1641,7 @@ msgstr ""
msgid "This will permanently delete all selected records from the database."
msgstr ""
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Throughput of {extraFsName}"
msgstr ""
@@ -1655,6 +1694,11 @@ msgstr ""
msgid "Total data sent for each interface"
msgstr ""
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx
msgid "Total: {0}"
@@ -1775,7 +1819,7 @@ msgstr ""
msgid "Uptime"
msgstr ""
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx
@@ -1797,6 +1841,11 @@ msgstr ""
msgid "Users"
msgstr ""
#: src/components/routes/system/charts/disk-charts.tsx
msgctxt "Disk I/O utilization"
msgid "Utilization"
msgstr ""
#: src/components/alerts-history-columns.tsx
msgid "Value"
msgstr ""
@@ -1806,6 +1855,7 @@ msgid "View"
msgstr ""
#: src/components/routes/system/cpu-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/network-sheet.tsx
msgid "View more"
msgstr ""
@@ -1858,7 +1908,9 @@ msgstr ""
#. Disk write
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/extra-fs-charts.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Write"
msgstr ""

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: tr\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-05-30 22:33\n"
"Last-Translator: \n"
"Language-Team: Turkish\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -250,6 +250,7 @@ msgstr "Bant Genişliği"
msgid "Bat"
msgstr "Pil"
#: 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 "Linux komutunu kopyala"
msgid "Copy name"
msgstr "Adı kopyala"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Metni kopyala"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Kümülatif Yükleme"
#. 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 "Mevcut durum"
@@ -717,7 +724,6 @@ msgstr "Tek kullanımlık şifrenizi girin."
msgid "Ephemeral"
msgstr "Geçici"
#: 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 "Uyarı güncellenemedi"
msgid "Failed: {0}"
msgstr "Başarısız: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Genel"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "Ekran Kartı"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Sağlık"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Sağlık Sinyali"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -952,7 +962,6 @@ msgstr "Aralık"
msgid "Invalid email address."
msgstr "Geçersiz e-posta adresi."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Dil"
@@ -1074,7 +1083,7 @@ msgstr "Docker konteynerlerinin bellek kullanımı"
#. Device model
#: src/components/routes/system/smart-table.tsx
msgid "Model"
msgstr ""
msgstr "Model"
#: src/components/add-system.tsx
#: src/components/alerts-history-columns.tsx
@@ -1286,7 +1295,7 @@ msgstr "Lütfen hesabınıza giriş yapın"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -1311,6 +1320,10 @@ msgstr "Tercih Edilen Dil"
msgid "Process started"
msgstr "Süreç başlatıldı"
#: 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 "Sistem tarafından kullanılan takas alanı"
msgid "Swap Usage"
msgstr "Takas Kullanımı"
#: 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 "Takas Kullanımı"
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 "Zaman içindeki sistem yükü ortalamaları"
@@ -1657,11 +1679,6 @@ msgstr "Zaman formatı"
msgid "To email(s)"
msgstr "E-posta(lar)a"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Temayı değiştir"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"
@@ -1697,7 +1714,7 @@ msgstr "Her arayüz için gönderilen toplam veri"
#: src/components/routes/system/disk-io-sheet.tsx
msgctxt "Disk I/O"
msgid "Total time spent on read/write (can exceed 100%)"
msgstr ""
msgstr "Okuma/yazma işlemlerinde harcanan toplam süre (100%’ü aşabilir)"
#. placeholder {0}: data.length
#: src/components/systemd-table/systemd-table.tsx

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: uk\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-05-08 11:22\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"
@@ -22,7 +22,7 @@ msgstr ""
#: src/components/footer-repo-link.tsx
msgctxt "New version available"
msgid "{0} available"
msgstr "{0} доступно"
msgstr "{0} Доступно"
#. placeholder {0}: table.getFilteredSelectedRowModel().rows.length
#. placeholder {1}: table.getFilteredRowModel().rows.length
@@ -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 "Копіювати команду Linux"
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 "Невдало: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "Глобально"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "Графічний процесор"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "Здоров'я"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -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"
@@ -1697,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

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: vi\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Vietnamese\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -250,6 +250,7 @@ msgstr "Băng thông"
msgid "Bat"
msgstr "Pin"
#: 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 "Sao chép lệnh Linux"
msgid "Copy name"
msgstr "Sao chép tên"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Copy public key"
msgstr ""
#: src/components/copy-to-clipboard.tsx
msgid "Copy text"
msgstr "Sao chép văn bản"
@@ -547,6 +552,8 @@ msgid "Cumulative Upload"
msgstr "Tải lên tích lũy"
#. 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 "Trạng thái hiện tại"
@@ -717,7 +724,6 @@ msgstr "Nhập mật khẩu một lần của bạn."
msgid "Ephemeral"
msgstr "Tạm thời"
#: 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 "Cập nhật cảnh báo thất bại"
msgid "Failed: {0}"
msgstr "Thất bại: {0}"
#: 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 "Khoảng thời gian"
msgid "Invalid email address."
msgstr "Địa chỉ email không hợp lệ."
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "Ngôn ngữ"
@@ -1311,6 +1320,10 @@ msgstr "Ngôn ngữ Ưa thích"
msgid "Process started"
msgstr "Tiến trình đã khởi động"
#: 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 "Không gian hoán đổi được sử dụng bởi hệ thống"
msgid "Swap Usage"
msgstr "Sử dụng Hoán đổi"
#: 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 "Sử dụng Hoán đổi"
msgid "System"
msgstr "Hệ thống"
#: 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 "Tải trung bình của hệ thống theo thời gian"
@@ -1657,11 +1679,6 @@ msgstr "Định dạng thời gian"
msgid "To email(s)"
msgstr "Đến email(s)"
#: src/components/mode-toggle.tsx
#: src/components/mode-toggle.tsx
msgid "Toggle theme"
msgstr "Chuyển đổi chủ đề"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Token"

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: zh\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:27\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Chinese Simplified\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -211,7 +211,7 @@ msgstr "平均值超过<0>{value}{0}</0>"
#: src/components/routes/system/disk-io-sheet.tsx
msgid "Average number of I/O operations waiting to be serviced"
msgstr "等待服务的平均 I/O 操作"
msgstr "等待处理的 I/O 操作平均数量"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "Average power consumption of GPUs"
@@ -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"
@@ -272,7 +273,7 @@ msgstr "之前"
#. placeholder {2}: alert.min
#: src/components/active-alerts.tsx
msgid "Below {0}{1} in last {2, plural, one {# minute} other {# minutes}}"
msgstr "在过去{2, plural, one {# 分钟} other {# 分钟}}中低于{0}{1}"
msgstr "在过去{2, plural, one {# 分钟} other {# 分钟}}中低于{0}{1}"
#: src/components/login/auth-form.tsx
msgid "Beszel supports OpenID Connect and many OAuth2 authentication providers."
@@ -332,7 +333,7 @@ msgstr "容量"
#: src/components/routes/settings/config-yaml.tsx
msgid "Caution - potential data loss"
msgstr "注意 - 数据可能已经丢失"
msgstr "注意 - 潜在数据已经丢失"
#: src/components/routes/settings/general.tsx
msgid "Celsius (°C)"
@@ -471,6 +472,10 @@ msgstr "复制 Linux 安装命令"
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 "复制文本"
@@ -496,7 +501,7 @@ msgstr "核心"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -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 "当前状态"
@@ -715,9 +722,8 @@ msgstr "输入您的一次性密码。"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Ephemeral"
msgstr "时"
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
@@ -756,7 +762,7 @@ msgstr "退出活动状态"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Expires after one hour or on hub restart."
msgstr "一小时后或重新启动集线器时过期。"
msgstr "将在一小时后或Hub重启时失效。"
#: src/components/routes/settings/alerts-history-data-table.tsx
msgid "Export"
@@ -794,7 +800,7 @@ msgstr "保存设置失败"
#: src/components/routes/settings/heartbeat.tsx
msgid "Failed to send heartbeat"
msgstr "发送 heartbeat 失败"
msgstr "心跳发送失败"
#: src/components/routes/settings/notifications.tsx
msgid "Failed to send test notification"
@@ -809,6 +815,10 @@ msgstr "更新警报失败"
msgid "Failed: {0}"
msgstr "失败: {0}"
#: 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
@@ -858,7 +868,7 @@ msgstr "全局"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "显卡"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -887,11 +897,11 @@ msgstr "心跳"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
msgstr "Heartbeat 监控"
msgstr "心跳监控"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat sent successfully"
msgstr "Heartbeat 发送成功"
msgstr "心跳发送成功"
#: src/components/add-system.tsx
#: src/components/routes/settings/tokens-fingerprints.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 "语言"
@@ -1237,7 +1246,7 @@ msgstr "每个核心的平均利用率"
#: src/components/routes/system/charts/disk-charts.tsx
msgid "Percent of time the disk is busy with I/O"
msgstr "磁盘于 I/O 操作的时间百分比"
msgstr "磁盘于 I/O 操作的繁忙时间百分比"
#: src/components/routes/system/cpu-sheet.tsx
msgid "Percentage of time spent in each state"
@@ -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"
@@ -1421,7 +1434,7 @@ msgstr "保存设置"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Saved in the database and does not expire until you disable it."
msgstr "保存在数据库中,在您禁用之前不会过期。"
msgstr "保存在数据库中的数据,在您禁用之前不会过期。"
#: src/components/routes/settings/quiet-hours.tsx
msgid "Schedule"
@@ -1457,15 +1470,15 @@ msgstr "选择 {foo}"
#: src/components/routes/settings/heartbeat.tsx
msgid "Send a single heartbeat ping to verify your endpoint is working."
msgstr "发送单个 heartbeat ping 以验证您的端点是否正常工作。"
msgstr "发送单个 心跳ping 以验证您的端点是否正常工作。"
#: src/components/routes/settings/heartbeat.tsx
msgid "Send periodic outbound pings to an external monitoring service so you can monitor Beszel without exposing it to the internet."
msgstr "定期向外部监控服务发送出站 ping以便您在不将 Beszel 暴露于互联网的情况下进行监控。"
msgstr "定期向外部监控服务发送外发探测请求,这样您便可以在不将其暴露于互联网的情况下对 Beszel 进行监控。"
#: src/components/routes/settings/heartbeat.tsx
msgid "Send test heartbeat"
msgstr "发送测试 heartbeat"
msgstr "发送测试 心跳"
#: src/components/routes/system/charts/network-charts.tsx
msgid "Sent"
@@ -1550,6 +1563,11 @@ msgstr "系统使用的 SWAP 空间"
msgid "Swap Usage"
msgstr "SWAP 使用率"
#: 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 "SWAP 使用率"
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"
@@ -1697,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
@@ -1817,7 +1834,7 @@ msgstr "上传"
#: src/components/routes/system/info-bar.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Uptime"
msgstr "正常运行时间"
msgstr "运行时间"
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: zh\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-04-05 18:28\n"
"PO-Revision-Date: 2026-08-17 19:22\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional, Hong Kong\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 "複製 Linux 指令"
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 "失敗: {0}"
#: 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"
@@ -1817,7 +1834,7 @@ msgstr "上傳"
#: src/components/routes/system/info-bar.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "Uptime"
msgstr "正常運行時間"
msgstr "運行時間"
#: src/components/routes/system/charts/disk-charts.tsx
#: src/components/routes/system/charts/gpu-charts.tsx

View File

@@ -8,7 +8,7 @@ msgstr ""
"Language: zh\n"
"Project-Id-Version: beszel\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-03-28 02:52\n"
"PO-Revision-Date: 2026-06-29 04:59\n"
"Last-Translator: \n"
"Language-Team: Chinese Traditional\n"
"Plural-Forms: nplurals=1; plural=0;\n"
@@ -149,7 +149,7 @@ msgstr "設定環境變數後,請重新啟動 Beszel Hub 以使變更生效。
#: src/components/systems-table/systems-table-columns.tsx
msgid "Agent"
msgstr ""
msgstr "Agent"
#: src/components/command-palette.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx
@@ -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 "複製 Linux 指令"
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 "複製文字"
@@ -496,7 +501,7 @@ msgstr "核心指標"
#: src/components/systemd-table/systemd-table-columns.tsx
#: src/components/systems-table/systems-table-columns.tsx
msgid "CPU"
msgstr ""
msgstr "CPU"
#: src/components/routes/system/cpu-sheet.tsx
msgid "CPU Cores"
@@ -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 "目前狀態"
@@ -695,7 +702,7 @@ msgstr "結束時間"
#: src/components/routes/settings/heartbeat.tsx
msgid "Endpoint URL"
msgstr ""
msgstr "Endpoint URL"
#: src/components/routes/settings/heartbeat.tsx
msgid "Endpoint URL to ping (required)"
@@ -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 "失敗:{0}"
#: 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
@@ -820,7 +830,7 @@ msgstr "篩選..."
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Fingerprint"
msgstr ""
msgstr "Fingerprint"
#: src/components/routes/system/smart-table.tsx
msgid "Firmware"
@@ -858,7 +868,7 @@ msgstr "全域"
#: src/components/routes/system.tsx
msgid "GPU"
msgstr ""
msgstr "GPU"
#: src/components/routes/system/charts/gpu-charts.tsx
msgid "GPU Engines"
@@ -883,7 +893,7 @@ msgstr "健康狀態"
#: src/components/routes/settings/layout.tsx
msgid "Heartbeat"
msgstr ""
msgstr "Heartbeat"
#: src/components/routes/settings/heartbeat.tsx
msgid "Heartbeat Monitoring"
@@ -901,7 +911,7 @@ msgstr "Homebrew 指令"
#: src/components/add-system.tsx
msgid "Host / IP"
msgstr ""
msgstr "Host / IP"
#: src/components/routes/settings/heartbeat.tsx
msgid "HTTP Method"
@@ -952,7 +962,6 @@ msgstr "間隔"
msgid "Invalid email address."
msgstr "無效的電子郵件地址。"
#: src/components/lang-toggle.tsx
#: src/components/routes/settings/general.tsx
msgid "Language"
msgstr "語言"
@@ -1286,7 +1295,7 @@ msgstr "請登入您的帳號"
#: src/components/add-system.tsx
msgid "Port"
msgstr ""
msgstr "Port"
#: src/components/containers-table/containers-table-columns.tsx
msgctxt "Container ports"
@@ -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"
@@ -1384,7 +1397,7 @@ msgstr "繼續"
#: src/components/systems-table/systems-table-columns.tsx
msgctxt "Root disk label"
msgid "Root"
msgstr ""
msgstr "Root"
#: src/components/routes/settings/tokens-fingerprints.tsx
msgid "Rotate token"
@@ -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,15 +1679,10 @@ 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"
msgstr ""
msgstr "Token"
#: src/components/command-palette.tsx
#: src/components/routes/settings/layout.tsx

View File

@@ -1,26 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
"release-type": "simple",
"packages": {
"supplemental/helm/beszel-agent": {
"package-name": "beszel-agent",
"release-type": "helm",
"changelog-path": "CHANGELOG.md",
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"draft": true,
"force-tag-creation": true,
"prerelease": false
},
"supplemental/helm/beszel-hub": {
"package-name": "beszel-hub",
"release-type": "helm",
"changelog-path": "CHANGELOG.md",
"bump-minor-pre-major": true,
"bump-patch-for-minor-pre-major": true,
"draft": true,
"force-tag-creation": true,
"prerelease": false
}
}
}

View File

@@ -1,3 +1,41 @@
## 0.18.8
- Add multi-battery monitoring
- Add Linux fan RPM monitoring (#2032)
- Add Intel GPU power monitoring through sysfs and Intel Arc GPU monitoring through `nvtop` (#2020, #2223)
- Add CPU and ACPI thermal zone monitoring on FreeBSD (#2227)
- Add popup-free OAuth login when `OAUTH_DISABLE_POPUP=true` (#2171)
- Add a `:slim` NVIDIA agent container image (#2002, #2003)
- Add ARMv5 and ARMv6 builds, and ARM64 support for the NVIDIA agent image (#1884, #2207)
- Improve SMART device detection for shared paths and explicit device type hints (#2102)
- Improve agent startup after OPNsense and pfSense reboots (#2089, #2214)
- Improve SSH-pull agent reconnection when connections silently fail (#2126)
- Improve update security with checksum verification and archive path containment
- Add public key display to universal token settings (#2028)
- Add support for showing all IP and port mappings for containers bound to multiple IPs (#1993)
- Fix stale SMART records when drives are no longer reported (#2178)
- Fix Docker memory charts and container statistics after malformed or backwards Docker counters (#2027, #2066, #2205)
- Fix memory calculation underflow and Linux battery percentages (#1978, #1957)
- Improve connection source IP detection behind proxies (#1973)
- Update Go and JavaScript dependencies
## 0.18.7
- Add more disk I/O metrics (utilization, read/write time, await, queue depth) (#1866)

View File

@@ -1,5 +1,12 @@
# Changelog
## [0.1.4](https://github.com/henrygd/beszel/compare/beszel-agent-v0.1.3...beszel-agent-v0.1.4) (2026-08-17)
### Bug Fixes
* **helm:** update app version to 0.18.7 ([418e3f0](https://github.com/henrygd/beszel/commit/418e3f0892747a62a3b743b9693c24406439388c))
## [0.1.3](https://github.com/henrygd/beszel/compare/beszel-agent-v0.1.2...beszel-agent-v0.1.3) (2026-08-17)

View File

@@ -3,8 +3,8 @@ description: Installs beszel-agent in kubernetes
home: https://github.com/henrygd/beszel/tree/main/supplemental/helm/beszel-agent
name: beszel-agent
appVersion: "0.18.7"
# The release workflow manages this chart version; do not edit manually.
version: 0.1.3
# Bump this version when publishing chart changes.
version: 0.1.4
sources:
- https://github.com/henrygd/beszel/tree/main/supplemental/helm/beszel-agent
- https://www.beszel.dev/

View File

@@ -41,17 +41,10 @@ In Kubernetes environments, the Beszel agent monitors **node-level metrics**:
## Quick Start
### 1. Add the Helm Repository
### 1. Install the OCI Chart
```bash
helm repo add beszel https://henrygd.github.io/beszel
helm repo update
```
### 2. Install the Chart
```bash
helm install beszel-agent ./beszel-agent \
helm install beszel-agent oci://ghcr.io/henrygd/beszel-charts/beszel-agent \
--set env.KEY="ssh-ed25519 AAAA... your-public-key" \
--set env.TOKEN="your-token-value" \
--set env.HUB_URL="http://beszel-hub:8090"
@@ -60,10 +53,10 @@ helm install beszel-agent ./beszel-agent \
Or with custom values:
```bash
helm install beszel-agent ./beszel-agent -f custom-values.yaml
helm install beszel-agent oci://ghcr.io/henrygd/beszel-charts/beszel-agent -f custom-values.yaml
```
### 3. Verify the Agent is Running
### 2. Verify the Agent is Running
```bash
kubectl get pods -l app.kubernetes.io/name=beszel-agent

View File

@@ -2,10 +2,6 @@
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# To add the Helm repository:
# helm repo add beszel https://henrygd.github.io/beszel
# helm repo update
# This will set the replicaset count more information can be found here: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
replicaCount: 1

View File

@@ -1,5 +1,12 @@
# Changelog
## [0.1.4](https://github.com/henrygd/beszel/compare/beszel-hub-v0.1.3...beszel-hub-v0.1.4) (2026-08-17)
### Bug Fixes
* **helm:** update app version to 0.18.7 ([418e3f0](https://github.com/henrygd/beszel/commit/418e3f0892747a62a3b743b9693c24406439388c))
## [0.1.3](https://github.com/henrygd/beszel/compare/beszel-hub-v0.1.2...beszel-hub-v0.1.3) (2026-08-17)

View File

@@ -3,8 +3,8 @@ description: Installs beszel-hub in kubernetes
home: https://github.com/henrygd/beszel/tree/main/supplemental/helm/beszel-hub
name: beszel-hub
appVersion: "0.18.7"
# The release workflow manages this chart version; do not edit manually.
version: 0.1.3
# Bump this version when publishing chart changes.
version: 0.1.4
sources:
- https://github.com/henrygd/beszel/tree/main/supplemental/helm/beszel-hub
- https://www.beszel.dev/

View File

@@ -14,26 +14,19 @@ This Helm chart simplifies the deployment of Beszel Hub in Kubernetes environmen
## Quick Start
### 1. Add the Repository
### 1. Install the OCI Chart
```bash
helm repo add beszel https://henrygd.github.io/beszel
helm repo update
```
### 2. Install the Chart
```bash
helm install beszel-hub ./beszel-hub
helm install beszel-hub oci://ghcr.io/henrygd/beszel-charts/beszel-hub
```
Or with a custom values file:
```bash
helm install beszel-hub ./beszel-hub -f custom-values.yaml
helm install beszel-hub oci://ghcr.io/henrygd/beszel-charts/beszel-hub -f custom-values.yaml
```
### 3. Access Beszel Hub
### 2. Access Beszel Hub
By default, Beszel Hub is accessible at `http://beszel-hub:8090` within the cluster.

View File

@@ -2,10 +2,6 @@
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# To add the Helm repository:
# helm repo add beszel https://henrygd.github.io/beszel
# helm repo update
# -- The number of replicas
replicaCount: 1

View File

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