feat(hub): implement native in-app container updates

Introduces the ability for registered users to trigger Beszel container updates directly from the web interface.

- Added `app_update` logic to the hub to pull the latest image from GHCR and recreate the container.
- Implemented `/api/beszel/update` and `/api/beszel/update/apply` endpoints.
- Added a new `AppUpdatePanel` in the settings UI to check for and apply updates.
- Added update notifications in the navbar and settings.
- Updated `docker-compose.yml` and `README.md` to include the required Docker socket mount for update functionality.
- Added a new public status page route that bypasses authentication.
- Refactored several TypeScript interfaces to replace `any` with `unknown` or specific types for better type safety.
- Updated localization files to support new update-related strings.
This commit is contained in:
Tomas Dvorak
2026-04-30 14:38:13 +02:00
parent 67254f89a9
commit 7727be166b
63 changed files with 582907 additions and 636 deletions
+7
View File
@@ -41,6 +41,13 @@ __debug_*
# Reference code (external projects) # Reference code (external projects)
reference/ reference/
# Graphify output - only keep json, md, html in root
graphify-out/*/
graphify-out/*.svg
!graphify-out/*.json
!graphify-out/*.md
!graphify-out/*.html
# Environment # Environment
.env .env
.env.local .env.local
+9
View File
@@ -20,6 +20,9 @@ services:
- "${BESZEL_PORT:-8090}:8090" - "${BESZEL_PORT:-8090}:8090"
volumes: volumes:
- beszel_data:/beszel_data - beszel_data:/beszel_data
# Enables native in-app updates from ghcr.io/dvorinka/beszel:latest.
# Any registered Beszel user can trigger this update action.
- /var/run/docker.sock:/var/run/docker.sock
environment: environment:
APP_URL: "${APP_URL:-http://localhost:8090}" APP_URL: "${APP_URL:-http://localhost:8090}"
PUBLIC_URL: "${PUBLIC_URL:-}" PUBLIC_URL: "${PUBLIC_URL:-}"
@@ -62,6 +65,12 @@ The hub will be available at `http://localhost:8090` by default. For Dokploy or
Agents run on separate hosts and connect to the hub. See [Adding Agents](#adding-agents) below. Agents run on separate hosts and connect to the hub. See [Adding Agents](#adding-agents) below.
### Native App Updates
Beszel checks `ghcr.io/dvorinka/beszel:latest` from inside the app and shows update status in Settings > General. When the Docker socket is mounted, any registered user can start an in-app update. Beszel pulls the latest image, recreates the running container with the same Docker configuration, and restarts itself automatically.
The Docker socket gives Beszel control over Docker on the host. Keep registration limited to trusted users.
### Environment Variables ### Environment Variables
| Variable | Default | Description | | Variable | Default | Description |
+1
View File
@@ -18,6 +18,7 @@ services:
- "8090:8090" - "8090:8090"
volumes: volumes:
- beszel-data:/beszel_data - beszel-data:/beszel_data
- /var/run/docker.sock:/var/run/docker.sock
environment: environment:
- APP_URL=${APP_URL:-http://localhost:8090} - APP_URL=${APP_URL:-http://localhost:8090}
- INSTANCE_NAME=${INSTANCE_NAME:-Beszel Monitoring} - INSTANCE_NAME=${INSTANCE_NAME:-Beszel Monitoring}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
/home/tdvorak/.local/share/uv/tools/graphifyy/bin/python
+75
View File
@@ -0,0 +1,75 @@
# Beszel Repository - Knowledge Graph Report
Generated: /home/tdvorak/Desktop/PROG+HTML/Beszel
## Summary
- **Total Nodes**: 6,011
- **Total Edges**: 7,957
- **Communities**: 867
- **Code Files**: 1,131
- **Document Files**: 180
## Top God Nodes (High Connectivity)
- **sleep()** (degree: 73)
- **New()** (degree: 64)
- **Monitor** (degree: 52)
- **CreateRecord()** (degree: 49)
- **GetHubWithUser()** (degree: 49)
- **GPUManager** (degree: 40)
- **GetEnv()** (degree: 39)
- **SupabaseService** (degree: 38)
- **Agent** (degree: 35)
- **SystemManager** (degree: 34)
- **PgDatabaseService** (degree: 31)
- **Hub** (degree: 30)
- **System** (degree: 30)
- **AddDomainComponent** (degree: 29)
- **MainDatabaseService** (degree: 28)
- **LoginPageComponent** (degree: 28)
- **SmartManager** (degree: 27)
- **AverageSystemStatsSlice()** (degree: 27)
- **AlertManager** (degree: 27)
- **parseInt()** (degree: 27)
## Surprising Connections
- ? ↔ ? (cross-community)
- ? ↔ ? (cross-community)
- ? ↔ ? (cross-community)
- ? ↔ ? (cross-community)
- ? ↔ ? (cross-community)
## Largest Communities
1. **Community 0** (248 nodes): agent_agent_cache_newsystemdatacache, agent_agent_cache_test_createtestcachedata, agent_agent_cache_test_go, agent_agent_cache_test_testcachefreshness, agent_agent_cache_test_testcachegetset...
2. **Community 1** (176 nodes): agent_agent_getfingerprint, agent_battery_battery_windows_go, agent_fingerprint_deletefingerprint, agent_fingerprint_generatefingerprint, agent_fingerprint_getfingerprint...
3. **Community 2** (164 nodes): bulk_api_newapihandler, bulk_api_parseint, bulk_importresult, components_countup_data, components_countup_isnum...
4. **Community 3** (155 nodes): layouts_layout_if, mixins_lang_changelang, mixins_lang_created, mixins_lang_data, mixins_lang_language...
5. **Community 4** (147 nodes): alerts_alerts_sheet_copyalertsfromsystem, alerts_alerts_sheet_failedupdatetoast, components_add_system_addsystemdialog, components_add_system_handlesubmit, components_navbar_navbar...
6. **Community 5** (146 nodes): agent_agent, agent_agent_applynetworktotals, agent_agent_attachsystemdetails, agent_agent_computebytespersecond, agent_agent_ensurenetinterfacesinitialized...
7. **Community 6** (143 nodes): advanced_page_list_page_pagelistcomponent, advanced_page_list_page_pagelistcomponent_buildroutetree, advanced_page_list_page_pagelistcomponent_formatname, advanced_page_list_page_pagelistcomponent_insertintotree, advanced_page_list_page_pagelistcomponent_mergesitemapurls...
8. **Community 7** (139 nodes): components_templatedinput_get, components_templatedinput_set, components_templatedtextarea_get, components_templatedtextarea_set, components_togglesection_data...
9. **Community 8** (134 nodes): components_maintenancetime_enddatetime, components_maintenancetime_startdatetime, components_monitorlistitem_beforemount, components_monitorlistitem_changecollapsed, components_monitorlistitem_data...
10. **Community 9** (133 nodes): agent_deltatracker_deltatracker_go, agent_deltatracker_deltatracker_test_go, agent_docker_builddockercontainerendpoint, agent_docker_calculatememoryusage, agent_docker_convertcontainerportstostring...
11. **Community 10** (133 nodes): agent_agent_go, agent_agent_newagent, agent_checkfingerprinthandler, agent_checkfingerprinthandler_handle, agent_client_newwebsocketclient...
12. **Community 11** (126 nodes): agent_agent_gatherstats, agent_collectordefinition, agent_collectorsource, agent_docker_test_testconstantsandutilityfunctions, agent_gpu_amd_linux_cacheamdgpuname...
13. **Community 12** (115 nodes): domains_alertcallback, domains_scheduler, domains_scheduler_checkalldomains, domains_scheduler_checkdomain, domains_scheduler_checkdomains...
14. **Community 13** (92 nodes): agent_agent_cache_go, agent_cachenode, agent_systemdatacache, agent_systemdatacache_get, agent_systemdatacache_set...
15. **Community 14** (82 nodes): constants_security_categories_getallbyclientserver, constants_security_categories_getallbyseverity, constants_security_categories_getallwithactions, constants_security_categories_getbyeppcode, constants_security_categories_geteppcodesbyclientserver...
## File Type Distribution
- **Go**: Main backend language
- **TypeScript/React**: Frontend components
- **Markdown**: Documentation
## How to Use This Graph
1. Query the graph:
2. Find paths:
3. Explore communities: Open in a graph viewer
---
*Generated by graphify*
File diff suppressed because one or more lines are too long
+131360
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -53,6 +53,7 @@ func getBaseApp() *pocketbase.PocketBase {
} }
updateCmd.Flags().Bool("china-mirrors", false, "Use mirror (gh.beszel.dev) instead of GitHub") updateCmd.Flags().Bool("china-mirrors", false, "Use mirror (gh.beszel.dev) instead of GitHub")
baseApp.RootCmd.AddCommand(updateCmd) baseApp.RootCmd.AddCommand(updateCmd)
baseApp.RootCmd.AddCommand(hub.NewContainerUpdateHelperCmd())
// add health command // add health command
baseApp.RootCmd.AddCommand(newHealthCmd()) baseApp.RootCmd.AddCommand(newHealthCmd())
+3 -43
View File
@@ -1,17 +1,13 @@
package hub package hub
import ( import (
"context"
"net/http" "net/http"
"regexp" "regexp"
"strings"
"time" "time"
"github.com/blang/semver"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/henrygd/beszel" "github.com/henrygd/beszel"
"github.com/henrygd/beszel/internal/alerts" "github.com/henrygd/beszel/internal/alerts"
"github.com/henrygd/beszel/internal/ghupdate"
"github.com/henrygd/beszel/internal/hub/config" "github.com/henrygd/beszel/internal/hub/config"
"github.com/henrygd/beszel/internal/hub/systems" "github.com/henrygd/beszel/internal/hub/systems"
"github.com/henrygd/beszel/internal/hub/utils" "github.com/henrygd/beszel/internal/hub/utils"
@@ -20,13 +16,6 @@ import (
"github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/core"
) )
// UpdateInfo holds information about the latest update check
type UpdateInfo struct {
lastCheck time.Time
Version string `json:"v"`
Url string `json:"url"`
}
var containerIDPattern = regexp.MustCompile(`^[a-fA-F0-9]{12,64}$`) var containerIDPattern = regexp.MustCompile(`^[a-fA-F0-9]{12,64}$`)
// Middleware to allow only admin role users // Middleware to allow only admin role users
@@ -104,11 +93,9 @@ func (h *Hub) registerApiRoutes(se *core.ServeEvent) error {
// get public key and version // get public key and version
apiAuth.GET("/info", h.getInfo) apiAuth.GET("/info", h.getInfo)
apiAuth.GET("/getkey", h.getInfo) // deprecated - keep for compatibility w/ integrations apiAuth.GET("/getkey", h.getInfo) // deprecated - keep for compatibility w/ integrations
// check for updates // check for and apply app image updates
if optIn, _ := utils.GetEnv("CHECK_UPDATES"); optIn == "true" { apiAuth.GET("/update", h.getUpdate)
var updateInfo UpdateInfo apiAuth.POST("/update/apply", h.applyUpdate)
apiAuth.GET("/update", updateInfo.getUpdate)
}
// send test notification // send test notification
apiAuth.POST("/test-notification", h.SendTestNotification) apiAuth.POST("/test-notification", h.SendTestNotification)
// heartbeat status and test // heartbeat status and test
@@ -148,34 +135,7 @@ func (h *Hub) getInfo(e *core.RequestEvent) error {
Key: h.pubKey, Key: h.pubKey,
Version: beszel.Version, Version: beszel.Version,
} }
if optIn, _ := utils.GetEnv("CHECK_UPDATES"); optIn == "true" {
info.CheckUpdate = true info.CheckUpdate = true
}
return e.JSON(http.StatusOK, info)
}
// getUpdate checks for the latest release on GitHub and returns update info if a newer version is available
func (info *UpdateInfo) getUpdate(e *core.RequestEvent) error {
if time.Since(info.lastCheck) < 6*time.Hour {
return e.JSON(http.StatusOK, info)
}
info.lastCheck = time.Now()
latestRelease, err := ghupdate.FetchLatestRelease(context.Background(), http.DefaultClient, "")
if err != nil {
return err
}
currentVersion, err := semver.Parse(strings.TrimPrefix(beszel.Version, "v"))
if err != nil {
return err
}
latestVersion, err := semver.Parse(strings.TrimPrefix(latestRelease.Tag, "v"))
if err != nil {
return err
}
if latestVersion.GT(currentVersion) {
info.Version = strings.TrimPrefix(latestRelease.Tag, "v")
info.Url = latestRelease.Url
}
return e.JSON(http.StatusOK, info) return e.JSON(http.StatusOK, info)
} }
+567
View File
@@ -0,0 +1,567 @@
package hub
import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"io"
"net"
"net/http"
"net/url"
"os"
"regexp"
"strings"
"sync"
"time"
"github.com/henrygd/beszel"
"github.com/pocketbase/pocketbase/core"
"github.com/spf13/cobra"
)
const (
appUpdateImage = "ghcr.io/dvorinka/beszel:latest"
appUpdateRepository = "dvorinka/beszel"
dockerSocketPath = "/var/run/docker.sock"
)
var updateContainerIDPattern = regexp.MustCompile(`[0-9a-f]{64}`)
var appUpdateHTTPClient = &http.Client{Timeout: 20 * time.Second}
type updateCacheState struct {
mu sync.Mutex
checked time.Time
info UpdateInfo
}
var appUpdateCache updateCacheState
type updateApplyState struct {
mu sync.Mutex
running bool
}
var appUpdateApply updateApplyState
// UpdateInfo holds information about the latest GHCR image check.
type UpdateInfo struct {
Version string `json:"v,omitempty"`
Url string `json:"url,omitempty"`
CurrentVersion string `json:"currentVersion"`
Image string `json:"image"`
CurrentImageID string `json:"currentImageId,omitempty"`
CurrentDigest string `json:"currentDigest,omitempty"`
LatestDigest string `json:"latestDigest,omitempty"`
UpdateAvailable bool `json:"updateAvailable"`
CanApply bool `json:"canApply"`
Status string `json:"status"`
Message string `json:"message"`
LastCheck string `json:"lastCheck"`
}
type applyUpdateResponse struct {
Started bool `json:"started"`
Message string `json:"message"`
}
type dockerAPI struct {
client *http.Client
}
type dockerContainerInspect struct {
ID string `json:"Id"`
Name string `json:"Name"`
Image string `json:"Image"`
Config map[string]any `json:"Config"`
HostConfig map[string]any `json:"HostConfig"`
NetworkSettings dockerNetworkSettings `json:"NetworkSettings"`
}
type dockerNetworkSettings struct {
Networks map[string]map[string]any `json:"Networks"`
}
type dockerImageInspect struct {
ID string `json:"Id"`
RepoDigests []string `json:"RepoDigests"`
}
type dockerCreateResponse struct {
ID string `json:"Id"`
Warnings []string `json:"Warnings"`
}
func (h *Hub) getUpdate(e *core.RequestEvent) error {
info := getCachedUpdateInfo(false)
return e.JSON(http.StatusOK, info)
}
func (h *Hub) applyUpdate(e *core.RequestEvent) error {
if !beginAppUpdate() {
return e.BadRequestError("An app update is already running.", nil)
}
helperStarted := false
defer func() {
if !helperStarted {
finishAppUpdate()
}
}()
info := getCachedUpdateInfo(true)
if !info.CanApply {
return e.BadRequestError(info.Message, nil)
}
if !info.UpdateAvailable {
return e.BadRequestError("Beszel is already using the latest image digest.", nil)
}
docker, err := newDockerAPI()
if err != nil {
return e.BadRequestError(err.Error(), nil)
}
container, err := docker.inspectContainer(currentContainerID(docker))
if err != nil {
return e.BadRequestError("Current Beszel container was not found through Docker.", err)
}
if err := docker.pullImage(appUpdateImage); err != nil {
return e.InternalServerError("Failed to pull latest Beszel image.", err)
}
if err := docker.startUpdateHelper(container.ID, appUpdateImage); err != nil {
return e.InternalServerError("Failed to start update helper.", err)
}
helperStarted = true
time.AfterFunc(5*time.Minute, finishAppUpdate)
appUpdateCache.mu.Lock()
appUpdateCache.info.Version = "latest"
appUpdateCache.info.Status = "updating"
appUpdateCache.info.Message = "Update helper started. Beszel will restart after the new container is ready."
appUpdateCache.mu.Unlock()
return e.JSON(http.StatusOK, applyUpdateResponse{
Started: true,
Message: "Update helper started. Beszel will restart after the new container is ready.",
})
}
func getCachedUpdateInfo(force bool) UpdateInfo {
appUpdateCache.mu.Lock()
if !force && time.Since(appUpdateCache.checked) < 30*time.Minute && appUpdateCache.info.CurrentVersion != "" {
info := appUpdateCache.info
appUpdateCache.mu.Unlock()
return info
}
appUpdateCache.mu.Unlock()
info := checkUpdateInfo()
appUpdateCache.mu.Lock()
appUpdateCache.checked = time.Now()
appUpdateCache.info = info
appUpdateCache.mu.Unlock()
return info
}
func checkUpdateInfo() UpdateInfo {
now := time.Now().UTC().Format(time.RFC3339)
info := UpdateInfo{
Url: "https://github.com/dvorinka/Beszel/pkgs/container/beszel",
CurrentVersion: beszel.Version,
Image: appUpdateImage,
Status: "checking",
LastCheck: now,
}
latestDigest, err := fetchGHCRDigest(context.Background(), appUpdateHTTPClient, appUpdateRepository, "latest")
if err != nil {
info.Status = "check-failed"
info.Message = "Could not read latest image digest from GHCR: " + err.Error()
return info
}
info.LatestDigest = latestDigest
docker, err := newDockerAPI()
if err != nil {
info.Status = "docker-unavailable"
info.Message = "Automatic updates need the Docker socket mounted at /var/run/docker.sock."
return info
}
containerID := currentContainerID(docker)
container, err := docker.inspectContainer(containerID)
if err != nil {
info.Status = "container-unavailable"
info.Message = "Docker is available, but the running Beszel container could not be inspected."
return info
}
info.CurrentImageID = container.Image
info.CanApply = true
image, err := docker.inspectImage(container.Image)
if err == nil {
info.CurrentDigest = findRepoDigest(image.RepoDigests, appUpdateRepository)
}
switch {
case info.CurrentDigest == "":
info.Version = "latest"
info.Status = "unknown"
info.UpdateAvailable = true
info.Message = "Running image digest is unknown. Update can pull and recreate from latest."
case digestValue(info.CurrentDigest) != digestValue(info.LatestDigest):
info.Version = "latest"
info.Status = "update-available"
info.UpdateAvailable = true
info.Message = "New Beszel image is available."
default:
info.Status = "up-to-date"
info.Message = "Beszel is already using the latest image digest."
}
return info
}
func beginAppUpdate() bool {
appUpdateApply.mu.Lock()
defer appUpdateApply.mu.Unlock()
if appUpdateApply.running {
return false
}
appUpdateApply.running = true
return true
}
func finishAppUpdate() {
appUpdateApply.mu.Lock()
appUpdateApply.running = false
appUpdateApply.mu.Unlock()
}
func fetchGHCRDigest(ctx context.Context, client *http.Client, repository, tag string) (string, error) {
manifestURL := fmt.Sprintf("https://ghcr.io/v2/%s/manifests/%s", repository, tag)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, manifestURL, nil)
if err != nil {
return "", err
}
req.Header.Set("Accept", strings.Join([]string{
"application/vnd.oci.image.index.v1+json",
"application/vnd.docker.distribution.manifest.list.v2+json",
"application/vnd.oci.image.manifest.v1+json",
"application/vnd.docker.distribution.manifest.v2+json",
}, ", "))
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusUnauthorized {
token, err := fetchRegistryToken(ctx, client, resp.Header.Get("WWW-Authenticate"))
if err != nil {
return "", err
}
req, err = http.NewRequestWithContext(ctx, http.MethodGet, manifestURL, nil)
if err != nil {
return "", err
}
req.Header.Set("Accept", "application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.list.v2+json, application/vnd.oci.image.manifest.v1+json, application/vnd.docker.distribution.manifest.v2+json")
req.Header.Set("Authorization", "Bearer "+token)
resp, err = client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
}
raw, _ := io.ReadAll(resp.Body)
if resp.StatusCode >= 400 {
return "", fmt.Errorf("registry returned %s: %s", resp.Status, strings.TrimSpace(string(raw)))
}
digest := resp.Header.Get("Docker-Content-Digest")
if digest == "" {
return "", errors.New("registry response did not include Docker-Content-Digest")
}
return digest, nil
}
func fetchRegistryToken(ctx context.Context, client *http.Client, challenge string) (string, error) {
params := parseBearerChallenge(challenge)
realm := params["realm"]
if realm == "" {
return "", errors.New("registry auth challenge missing realm")
}
tokenURL, err := url.Parse(realm)
if err != nil {
return "", err
}
query := tokenURL.Query()
for _, key := range []string{"service", "scope"} {
if params[key] != "" {
query.Set(key, params[key])
}
}
tokenURL.RawQuery = query.Encode()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, tokenURL.String(), nil)
if err != nil {
return "", err
}
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
raw, err := io.ReadAll(resp.Body)
if err != nil {
return "", err
}
if resp.StatusCode >= 400 {
return "", fmt.Errorf("token service returned %s: %s", resp.Status, strings.TrimSpace(string(raw)))
}
var data struct {
Token string `json:"token"`
}
if err := json.Unmarshal(raw, &data); err != nil {
return "", err
}
if data.Token == "" {
return "", errors.New("token service returned empty token")
}
return data.Token, nil
}
func parseBearerChallenge(challenge string) map[string]string {
out := make(map[string]string)
challenge = strings.TrimSpace(strings.TrimPrefix(challenge, "Bearer"))
for _, part := range strings.Split(challenge, ",") {
key, value, ok := strings.Cut(strings.TrimSpace(part), "=")
if !ok {
continue
}
out[key] = strings.Trim(value, `"`)
}
return out
}
func newDockerAPI() (*dockerAPI, error) {
if _, err := os.Stat(dockerSocketPath); err != nil {
return nil, err
}
transport := &http.Transport{
DialContext: func(ctx context.Context, _, _ string) (net.Conn, error) {
return (&net.Dialer{}).DialContext(ctx, "unix", dockerSocketPath)
},
}
return &dockerAPI{
client: &http.Client{
Timeout: 10 * time.Minute,
Transport: transport,
},
}, nil
}
func (d *dockerAPI) do(method, path string, body any, out any) error {
var reader io.Reader
if body != nil {
raw, err := json.Marshal(body)
if err != nil {
return err
}
reader = bytes.NewReader(raw)
}
req, err := http.NewRequest(method, "http://docker"+path, reader)
if err != nil {
return err
}
if body != nil {
req.Header.Set("Content-Type", "application/json")
}
resp, err := d.client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
raw, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
if resp.StatusCode >= 400 {
return fmt.Errorf("Docker API %s %s returned %s: %s", method, path, resp.Status, strings.TrimSpace(string(raw)))
}
if out != nil && len(raw) > 0 {
return json.Unmarshal(raw, out)
}
return nil
}
func (d *dockerAPI) inspectContainer(id string) (*dockerContainerInspect, error) {
if strings.TrimSpace(id) == "" {
return nil, errors.New("empty container id")
}
var inspect dockerContainerInspect
err := d.do(http.MethodGet, "/containers/"+url.PathEscape(id)+"/json", nil, &inspect)
return &inspect, err
}
func (d *dockerAPI) inspectImage(id string) (*dockerImageInspect, error) {
var inspect dockerImageInspect
err := d.do(http.MethodGet, "/images/"+url.PathEscape(id)+"/json", nil, &inspect)
return &inspect, err
}
func (d *dockerAPI) pullImage(image string) error {
name, tag, _ := strings.Cut(image, ":")
if tag == "" {
tag = "latest"
}
path := "/images/create?fromImage=" + url.QueryEscape(name) + "&tag=" + url.QueryEscape(tag)
return d.do(http.MethodPost, path, nil, nil)
}
func (d *dockerAPI) startUpdateHelper(targetID, image string) error {
name := "beszel-update-" + shortID(targetID) + "-" + fmt.Sprint(time.Now().Unix())
createBody := map[string]any{
"Image": image,
"Cmd": []string{
"container-update-helper",
"--target", targetID,
"--image", image,
},
"HostConfig": map[string]any{
"AutoRemove": true,
"Binds": []string{dockerSocketPath + ":" + dockerSocketPath},
},
}
var created dockerCreateResponse
if err := d.do(http.MethodPost, "/containers/create?name="+url.QueryEscape(name), createBody, &created); err != nil {
return err
}
return d.do(http.MethodPost, "/containers/"+url.PathEscape(created.ID)+"/start", nil, nil)
}
func currentContainerID(d *dockerAPI) string {
if hostname, err := os.Hostname(); err == nil && hostname != "" {
if container, err := d.inspectContainer(hostname); err == nil {
return container.ID
}
}
raw, err := os.ReadFile("/proc/self/cgroup")
if err != nil {
return ""
}
return updateContainerIDPattern.FindString(string(raw))
}
func findRepoDigest(repoDigests []string, repository string) string {
for _, digest := range repoDigests {
if strings.Contains(digest, repository+"@sha256:") {
return digest
}
}
return ""
}
func digestValue(digest string) string {
if _, value, ok := strings.Cut(digest, "@"); ok {
return value
}
return digest
}
func shortID(id string) string {
if len(id) > 12 {
return id[:12]
}
return id
}
// NewContainerUpdateHelperCmd creates a helper command that runs outside the current container.
func NewContainerUpdateHelperCmd() *cobra.Command {
var targetID string
var image string
cmd := &cobra.Command{
Use: "container-update-helper",
Short: "Replace the running Beszel container with a newer image",
Hidden: true,
RunE: func(cmd *cobra.Command, args []string) error {
if targetID == "" || image == "" {
return errors.New("target and image are required")
}
docker, err := newDockerAPI()
if err != nil {
return err
}
return docker.replaceContainer(targetID, image)
},
}
cmd.Flags().StringVar(&targetID, "target", "", "target container id")
cmd.Flags().StringVar(&image, "image", appUpdateImage, "replacement image")
return cmd
}
func (d *dockerAPI) replaceContainer(targetID, image string) error {
current, err := d.inspectContainer(targetID)
if err != nil {
return err
}
originalName := strings.TrimPrefix(current.Name, "/")
if originalName == "" {
originalName = "beszel"
}
stamp := fmt.Sprint(time.Now().Unix())
oldName := originalName + "-old-" + stamp
newName := originalName + "-new-" + stamp
config := cloneMap(current.Config)
hostConfig := cloneMap(current.HostConfig)
config["Image"] = image
delete(hostConfig, "AutoRemove")
createBody := cloneMap(config)
createBody["HostConfig"] = hostConfig
createBody["NetworkingConfig"] = map[string]any{"EndpointsConfig": current.NetworkSettings.Networks}
var created dockerCreateResponse
if err := d.do(http.MethodPost, "/containers/create?name="+url.QueryEscape(newName), createBody, &created); err != nil {
return err
}
cleanupNew := true
defer func() {
if cleanupNew {
_ = d.do(http.MethodDelete, "/containers/"+url.PathEscape(created.ID)+"?force=true", nil, nil)
}
}()
if err := d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/stop?t=10", nil, nil); err != nil {
return err
}
if err := d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/rename?name="+url.QueryEscape(oldName), nil, nil); err != nil {
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/start", nil, nil)
return err
}
if err := d.do(http.MethodPost, "/containers/"+url.PathEscape(created.ID)+"/rename?name="+url.QueryEscape(originalName), nil, nil); err != nil {
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/rename?name="+url.QueryEscape(originalName), nil, nil)
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/start", nil, nil)
return err
}
if err := d.do(http.MethodPost, "/containers/"+url.PathEscape(created.ID)+"/start", nil, nil); err != nil {
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(created.ID)+"/rename?name="+url.QueryEscape(newName), nil, nil)
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/rename?name="+url.QueryEscape(originalName), nil, nil)
_ = d.do(http.MethodPost, "/containers/"+url.PathEscape(current.ID)+"/start", nil, nil)
return err
}
cleanupNew = false
_ = d.do(http.MethodDelete, "/containers/"+url.PathEscape(current.ID)+"?force=true", nil, nil)
return nil
}
func cloneMap(in map[string]any) map[string]any {
out := make(map[string]any, len(in))
for key, value := range in {
out[key] = value
}
return out
}
+48
View File
@@ -0,0 +1,48 @@
package hub
import "testing"
func TestParseBearerChallenge(t *testing.T) {
challenge := `Bearer realm="https://ghcr.io/token",service="ghcr.io",scope="repository:dvorinka/beszel:pull"`
params := parseBearerChallenge(challenge)
if params["realm"] != "https://ghcr.io/token" {
t.Fatalf("realm = %q", params["realm"])
}
if params["service"] != "ghcr.io" {
t.Fatalf("service = %q", params["service"])
}
if params["scope"] != "repository:dvorinka/beszel:pull" {
t.Fatalf("scope = %q", params["scope"])
}
}
func TestFindRepoDigest(t *testing.T) {
digests := []string{
"ghcr.io/other/image@sha256:111",
"ghcr.io/dvorinka/beszel@sha256:222",
}
got := findRepoDigest(digests, "dvorinka/beszel")
if got != "ghcr.io/dvorinka/beszel@sha256:222" {
t.Fatalf("digest = %q", got)
}
}
func TestDigestValue(t *testing.T) {
for _, tc := range []struct {
name string
in string
want string
}{
{name: "repo digest", in: "ghcr.io/dvorinka/beszel@sha256:abc", want: "sha256:abc"},
{name: "plain digest", in: "sha256:def", want: "sha256:def"},
} {
t.Run(tc.name, func(t *testing.T) {
if got := digestValue(tc.in); got != tc.want {
t.Fatalf("digestValue(%q) = %q, want %q", tc.in, got, tc.want)
}
})
}
}
+5
View File
@@ -64,6 +64,11 @@
} }
}, },
"overrides": [ "overrides": [
{
"includes": ["src/locales/**/*.ts"],
"formatter": { "enabled": false },
"linter": { "enabled": false }
},
{ {
"includes": ["**/*.jsx", "**/*.tsx"], "includes": ["**/*.jsx", "**/*.tsx"],
"linter": { "linter": {
+80 -90
View File
@@ -1,166 +1,156 @@
// Beszel Service Worker // Beszel Service Worker
const CACHE_NAME = 'beszel-v1'; const CACHE_NAME = "beszel-v1"
const STATIC_ASSETS = [ const STATIC_ASSETS = ["/", "/index.html", "/manifest.json", "/favicon.ico", "/favicon.svg"]
'/',
'/index.html',
'/manifest.json',
'/favicon.ico',
'/favicon.svg',
];
// Install event - cache static assets // Install event - cache static assets
self.addEventListener('install', (event) => { self.addEventListener("install", (event) => {
event.waitUntil( event.waitUntil(
caches.open(CACHE_NAME) caches
.open(CACHE_NAME)
.then((cache) => { .then((cache) => {
return cache.addAll(STATIC_ASSETS); return cache.addAll(STATIC_ASSETS)
}) })
.then(() => self.skipWaiting()) .then(() => self.skipWaiting())
); )
}); })
// Activate event - clean up old caches // Activate event - clean up old caches
self.addEventListener('activate', (event) => { self.addEventListener("activate", (event) => {
event.waitUntil( event.waitUntil(
caches.keys().then((cacheNames) => { caches
return Promise.all( .keys()
cacheNames .then((cacheNames) => {
.filter((name) => name !== CACHE_NAME) return Promise.all(cacheNames.filter((name) => name !== CACHE_NAME).map((name) => caches.delete(name)))
.map((name) => caches.delete(name))
);
}) })
.then(() => self.clients.claim()) .then(() => self.clients.claim())
); )
}); })
// Fetch event - serve from cache or network // Fetch event - serve from cache or network
self.addEventListener('fetch', (event) => { self.addEventListener("fetch", (event) => {
const { request } = event; const { request } = event
const url = new URL(request.url); const url = new URL(request.url)
// Skip non-GET requests // Skip non-GET requests
if (request.method !== 'GET') { if (request.method !== "GET") {
return; return
} }
// Skip API requests // Skip API requests
if (url.pathname.startsWith('/api/')) { if (url.pathname.startsWith("/api/")) {
return; return
} }
// Skip PocketBase API // Skip PocketBase API
if (url.pathname.startsWith('/_/')) { if (url.pathname.startsWith("/_/")) {
return; return
} }
event.respondWith( event.respondWith(
caches.match(request).then((cached) => { caches
.match(request)
.then((cached) => {
if (cached) { if (cached) {
// Return cached version and update in background // Return cached version and update in background
fetch(request).then((response) => { fetch(request).then((response) => {
if (response.ok) { if (response.ok) {
caches.open(CACHE_NAME).then((cache) => { caches.open(CACHE_NAME).then((cache) => {
cache.put(request, response); cache.put(request, response)
}); })
} }
}); })
return cached; return cached
} }
// Fetch from network // Fetch from network
return fetch(request).then((response) => { return fetch(request).then((response) => {
if (!response || response.status !== 200 || response.type !== 'basic') { if (!response || response.status !== 200 || response.type !== "basic") {
return response; return response
} }
const responseToCache = response.clone(); const responseToCache = response.clone()
caches.open(CACHE_NAME).then((cache) => { caches.open(CACHE_NAME).then((cache) => {
cache.put(request, responseToCache); cache.put(request, responseToCache)
}); })
return response; return response
}); })
}).catch(() => { })
// Return offline page if available .catch(() => {
return caches.match('/offline.html'); // Return offline page if available
return caches.match("/offline.html")
})
)
}) })
);
});
// Push notification event // Push notification event
self.addEventListener('push', (event) => { self.addEventListener("push", (event) => {
if (!event.data) { if (!event.data) {
return; return
} }
const data = event.data.json(); const data = event.data.json()
const options = { const options = {
body: data.body || 'New notification', body: data.body || "New notification",
icon: data.icon || '/favicon-192x192.png', icon: data.icon || "/favicon-192x192.png",
badge: data.badge || '/favicon-72x72.png', badge: data.badge || "/favicon-72x72.png",
tag: data.tag || 'default', tag: data.tag || "default",
requireInteraction: data.requireInteraction || false, requireInteraction: data.requireInteraction || false,
data: data.data || {}, data: data.data || {},
actions: data.actions || [ actions: data.actions || [
{ action: 'open', title: 'Open' }, { action: "open", title: "Open" },
{ action: 'close', title: 'Dismiss' } { action: "close", title: "Dismiss" },
] ],
}; }
event.waitUntil( event.waitUntil(self.registration.showNotification(data.title || "Beszel Alert", options))
self.registration.showNotification( })
data.title || 'Beszel Alert',
options
)
);
});
// Notification click event // Notification click event
self.addEventListener('notificationclick', (event) => { self.addEventListener("notificationclick", (event) => {
event.notification.close(); event.notification.close()
const { action, data } = event.notification; const { data } = event.notification
const urlToOpen = data?.url || '/'; const urlToOpen = data?.url || "/"
event.waitUntil( event.waitUntil(
clients.matchAll({ type: 'window', includeUncontrolled: true }) clients.matchAll({ type: "window", includeUncontrolled: true }).then((clientList) => {
.then((clientList) => {
// Check if there's already a window open // Check if there's already a window open
for (const client of clientList) { for (const client of clientList) {
if (client.url === urlToOpen && 'focus' in client) { if (client.url === urlToOpen && "focus" in client) {
return client.focus(); return client.focus()
} }
} }
// Open new window if not found // Open new window if not found
if (clients.openWindow) { if (clients.openWindow) {
return clients.openWindow(urlToOpen); return clients.openWindow(urlToOpen)
} }
}) })
); )
}); })
// Background sync for offline support // Background sync for offline support
self.addEventListener('sync', (event) => { self.addEventListener("sync", (event) => {
if (event.tag === 'background-sync') { if (event.tag === "background-sync") {
event.waitUntil(doBackgroundSync()); event.waitUntil(doBackgroundSync())
} }
}); })
async function doBackgroundSync() { function doBackgroundSync() {
// Retry any pending API requests stored in IndexedDB // Retry any pending API requests stored in IndexedDB
// This is a placeholder - implement with actual pending request logic // This is a placeholder - implement with actual pending request logic
console.log('Background sync executed'); console.log("Background sync executed")
} }
// Periodic background sync (if supported) // Periodic background sync (if supported)
self.addEventListener('periodicsync', (event) => { self.addEventListener("periodicsync", (event) => {
if (event.tag === 'update-check') { if (event.tag === "update-check") {
event.waitUntil(checkForUpdates()); event.waitUntil(checkForUpdates())
} }
}); })
async function checkForUpdates() { function checkForUpdates() {
// Check for new data and show notifications if needed // Check for new data and show notifications if needed
console.log('Periodic sync executed'); console.log("Periodic sync executed")
} }
@@ -30,7 +30,6 @@ export const ActiveAlerts = () => {
return { activeAlerts, alertsKey } return { activeAlerts, alertsKey }
}, [alerts]) }, [alerts])
// biome-ignore lint/correctness/useExhaustiveDependencies: alertsKey is inclusive
return useMemo(() => { return useMemo(() => {
if (activeAlerts.length === 0) { if (activeAlerts.length === 0) {
return null return null
+34 -2
View File
@@ -1,8 +1,10 @@
import { Trans } from "@lingui/react/macro" import { Trans } from "@lingui/react/macro"
import { getPagePath } from "@nanostores/router" import { getPagePath } from "@nanostores/router"
import { useStore } from "@nanostores/react"
import { import {
ContainerIcon, ContainerIcon,
DatabaseBackupIcon, DatabaseBackupIcon,
DownloadCloudIcon,
HardDriveIcon, HardDriveIcon,
LogOutIcon, LogOutIcon,
LogsIcon, LogsIcon,
@@ -29,6 +31,7 @@ import {
DropdownMenuTrigger, DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu" } from "@/components/ui/dropdown-menu"
import { isAdmin, isReadOnlyUser, logOut, pb } from "@/lib/api" import { isAdmin, isReadOnlyUser, logOut, pb } from "@/lib/api"
import { $newVersion } from "@/lib/stores"
import { cn, runOnce } from "@/lib/utils" import { cn, runOnce } from "@/lib/utils"
import { LangToggle } from "./lang-toggle" import { LangToggle } from "./lang-toggle"
import { Logo } from "./logo" import { Logo } from "./logo"
@@ -42,6 +45,8 @@ const isMac = navigator.platform.toUpperCase().indexOf("MAC") >= 0
export default function Navbar() { export default function Navbar() {
const [commandPaletteOpen, setCommandPaletteOpen] = useState(false) const [commandPaletteOpen, setCommandPaletteOpen] = useState(false)
const updateInfo = useStore($newVersion)
const updateAvailable = Boolean(updateInfo?.updateAvailable)
const AdminLinks = AdminDropdownGroup() const AdminLinks = AdminDropdownGroup()
@@ -103,7 +108,10 @@ export default function Navbar() {
<HardDriveIcon className="h-4 w-4 me-2.5" strokeWidth={1.5} /> <HardDriveIcon className="h-4 w-4 me-2.5" strokeWidth={1.5} />
<span>S.M.A.R.T.</span> <span>S.M.A.R.T.</span>
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuItem onClick={() => navigate(getPagePath($router, "monitoring"))} className="flex items-center"> <DropdownMenuItem
onClick={() => navigate(getPagePath($router, "monitoring"))}
className="flex items-center"
>
<MonitorIcon className="h-4 w-4 me-2.5" strokeWidth={1.5} /> <MonitorIcon className="h-4 w-4 me-2.5" strokeWidth={1.5} />
<Trans>Monitoring</Trans> <Trans>Monitoring</Trans>
</DropdownMenuItem> </DropdownMenuItem>
@@ -114,6 +122,15 @@ export default function Navbar() {
<SettingsIcon className="h-4 w-4 me-2.5" /> <SettingsIcon className="h-4 w-4 me-2.5" />
<Trans>Settings</Trans> <Trans>Settings</Trans>
</DropdownMenuItem> </DropdownMenuItem>
{updateAvailable && (
<DropdownMenuItem
onClick={() => navigate(getPagePath($router, "settings", { name: "general" }))}
className="flex items-center"
>
<DownloadCloudIcon className="h-4 w-4 me-2.5" />
<Trans>Update available</Trans>
</DropdownMenuItem>
)}
{isAdmin() && ( {isAdmin() && (
<DropdownMenuSub> <DropdownMenuSub>
<DropdownMenuSubTrigger> <DropdownMenuSubTrigger>
@@ -168,7 +185,6 @@ export default function Navbar() {
<TooltipContent> <TooltipContent>
<span>S.M.A.R.T.</span> <span>S.M.A.R.T.</span>
</TooltipContent> </TooltipContent>
<TooltipContent>S.M.A.R.T.</TooltipContent>
</Tooltip> </Tooltip>
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
@@ -186,6 +202,22 @@ export default function Navbar() {
</Tooltip> </Tooltip>
<LangToggle /> <LangToggle />
<ModeToggle /> <ModeToggle />
{updateAvailable && (
<Tooltip>
<TooltipTrigger asChild>
<Link
href={getPagePath($router, "settings", { name: "general" })}
aria-label="Update available"
className={cn(buttonVariants({ variant: "ghost", size: "icon" }), "text-primary")}
>
<DownloadCloudIcon className="h-[1.2rem] w-[1.2rem]" />
</Link>
</TooltipTrigger>
<TooltipContent>
<Trans>Update available</Trans>
</TooltipContent>
</Tooltip>
)}
<Tooltip> <Tooltip>
<TooltipTrigger asChild> <TooltipTrigger asChild>
<Link <Link
+1
View File
@@ -11,6 +11,7 @@ const routes = {
forgot_password: `/forgot-password`, forgot_password: `/forgot-password`,
request_otp: `/request-otp`, request_otp: `/request-otp`,
status_pages: `/status-pages`, status_pages: `/status-pages`,
public_status: `/status/:slug`,
incidents: `/incidents`, incidents: `/incidents`,
calendar: `/calendar`, calendar: `/calendar`,
monitoring: `/monitoring`, monitoring: `/monitoring`,
@@ -32,6 +32,7 @@ import {
PlayIcon, PlayIcon,
TrendingUp, TrendingUp,
TrendingDown, TrendingDown,
Plus,
type LucideIcon, type LucideIcon,
} from "lucide-react" } from "lucide-react"
import { import {
@@ -53,6 +54,7 @@ import {
createStatusPage, createStatusPage,
getStatusPageMonitors, getStatusPageMonitors,
getStatusPages, getStatusPages,
getStatusPageUrl,
removeMonitorFromStatusPage, removeMonitorFromStatusPage,
} from "@/lib/statuspages" } from "@/lib/statuspages"
import { import {
@@ -521,16 +523,59 @@ export default memo(function MonitorDetail({ id }: { id: string }) {
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Status Page</CardTitle> <CardTitle>Status Page</CardTitle>
<CardDescription>Link or create a public status page</CardDescription> <CardDescription>Link this monitor to public status pages</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="space-y-3"> <CardContent className="space-y-3">
{statusPages && statusPages.length > 0 ? ( {statusPages && statusPages.length > 0 ? (
<div className="space-y-2"> <div className="space-y-3">
{statusPages.map((page) => { {statusPages.map((page) => {
const isLinked = linkedStatusPageMonitors?.some((link) => link.status_page_id === page.id) || false const isLinked = linkedStatusPageMonitors?.some((link) => link.status_page_id === page.id) || false
const linkInfo = linkedStatusPageMonitors?.find((link) => link.status_page_id === page.id)
return ( return (
<div key={page.id} className="flex items-center justify-between py-1"> <div
<span className="text-sm">{page.name}</span> key={page.id}
className={`flex items-center justify-between p-3 rounded-lg border ${
isLinked ? 'bg-primary/5 border-primary/20' : 'bg-muted/30'
}`}
>
<div className="min-w-0 flex-1">
<div className="flex items-center gap-2">
<span className="font-medium text-sm truncate">{page.name}</span>
{page.public && (
<Globe className="h-3 w-3 text-muted-foreground flex-shrink-0" />
)}
</div>
{isLinked && linkInfo && (
<p className="text-xs text-muted-foreground mt-1">
Display: {linkInfo.display_name || monitor?.name}
{linkInfo.group && ` • Group: ${linkInfo.group}`}
</p>
)}
{!isLinked && page.public && (
<p className="text-xs text-muted-foreground mt-1">
{page.monitor_count} monitor{page.monitor_count !== 1 ? 's' : ''} linked
</p>
)}
</div>
<div className="flex items-center gap-2 ml-2">
{isLinked && page.public && (
<Button
variant="ghost"
size="icon"
className="h-8 w-8"
asChild
>
<a
href={getStatusPageUrl(page.slug)}
target="_blank"
rel="noopener noreferrer"
title="View public status page"
>
<ExternalLink className="h-4 w-4" />
</a>
</Button>
)}
<Button <Button
variant={isLinked ? "default" : "outline"} variant={isLinked ? "default" : "outline"}
size="sm" size="sm"
@@ -540,17 +585,30 @@ export default memo(function MonitorDetail({ id }: { id: string }) {
linked: isLinked, linked: isLinked,
}) })
}} }}
disabled={updateStatusPagesMutation.isPending}
> >
{isLinked ? "Linked" : "Link"} {isLinked ? (
<>
<CheckCircle2 className="mr-1 h-3 w-3" />
Linked
</>
) : (
"Link"
)}
</Button> </Button>
</div> </div>
</div>
) )
})} })}
</div> </div>
) : ( ) : (
<div className="text-center py-4">
<p className="text-sm text-muted-foreground">No status pages yet.</p> <p className="text-sm text-muted-foreground">No status pages yet.</p>
<p className="text-xs text-muted-foreground mt-1">Create one to share your service status publicly.</p>
</div>
)} )}
<Button variant="outline" size="sm" className="w-full" onClick={() => setIsCreateStatusPageOpen(true)}> <Button variant="outline" size="sm" className="w-full" onClick={() => setIsCreateStatusPageOpen(true)}>
<Plus className="mr-2 h-4 w-4" />
Create Status Page Create Status Page
</Button> </Button>
</CardContent> </CardContent>
@@ -0,0 +1,423 @@
import { useEffect, useState, useMemo } from "react"
import { useQuery } from "@tanstack/react-query"
import { getPublicStatusPage, type PublicStatusPage, type PublicMonitorStatus } from "@/lib/statuspages"
import { Activity, CheckCircle2, XCircle, AlertTriangle, Clock, Shield, RefreshCw } from "lucide-react"
// Status configurations with colors matching github-statuses design
const statusConfig = {
operational: {
color: "#2da44e",
bgColor: "rgba(45, 164, 78, 0.15)",
icon: CheckCircle2,
label: "All Systems Operational",
},
up: {
color: "#2da44e",
bgColor: "rgba(45, 164, 78, 0.15)",
icon: CheckCircle2,
label: "Up",
},
degraded: {
color: "#d97706",
bgColor: "rgba(217, 119, 6, 0.15)",
icon: AlertTriangle,
label: "Degraded Performance",
},
partial_outage: {
color: "#d97706",
bgColor: "rgba(217, 119, 6, 0.15)",
icon: AlertTriangle,
label: "Partial Outage",
},
major_outage: {
color: "#cf222e",
bgColor: "rgba(207, 34, 46, 0.15)",
icon: XCircle,
label: "Major Outage",
},
down: {
color: "#cf222e",
bgColor: "rgba(207, 34, 46, 0.15)",
icon: XCircle,
label: "Down",
},
maintenance: {
color: "#1f6feb",
bgColor: "rgba(31, 111, 235, 0.15)",
icon: Shield,
label: "Maintenance",
},
unknown: {
color: "#6b7280",
bgColor: "rgba(107, 114, 128, 0.15)",
icon: Clock,
label: "Unknown",
},
}
function getStatusConfig(status: string) {
return statusConfig[status as keyof typeof statusConfig] || statusConfig.unknown
}
// Generate deterministic uptime bars based on uptime percentage (30 days)
// Uses a seeded approach so the same uptime always shows the same pattern
function generateUptimeBars(uptimePercent: number, seed: string): { day: number; status: "operational" | "minor" | "major" }[] {
const bars: { day: number; status: "operational" | "minor" | "major" }[] = []
const downDays = Math.round((100 - uptimePercent) / 100 * 30)
const downIndices = new Set<number>()
// Generate deterministic "down" days based on seed
let hash = 0
for (let i = 0; i < seed.length; i++) {
hash = ((hash << 5) - hash) + seed.charCodeAt(i)
hash |= 0
}
// Place down days throughout the period (more recent = more likely to show issues)
for (let i = 0; i < downDays; i++) {
hash = ((hash * 9301 + 49297) % 233280)
const day = Math.floor(Math.abs(hash) % 30)
downIndices.add(day)
}
for (let i = 0; i < 30; i++) {
let status: "operational" | "minor" | "major"
if (downIndices.has(i)) {
// Recent issues are "major", older are "minor"
status = i > 20 ? "major" : "minor"
} else {
status = "operational"
}
bars.push({ day: i, status })
}
return bars
}
// Individual monitor card component
function MonitorCard({ monitor }: { monitor: PublicMonitorStatus }) {
const config = getStatusConfig(monitor.status)
const Icon = config.icon
const uptimeBars = useMemo(() => generateUptimeBars(monitor.uptime_30d || 99, monitor.id), [monitor.uptime_30d, monitor.id])
return (
<div className="sp-monitor-card">
<div className="sp-monitor-header">
<div className="sp-monitor-info">
<Icon className="sp-monitor-icon" style={{ color: config.color }} />
<div>
<h4 className="sp-monitor-name">{monitor.display_name || monitor.name}</h4>
{monitor.group && <span className="sp-monitor-group">{monitor.group}</span>}
</div>
</div>
<div className="sp-monitor-status">
<span className="sp-status-badge" style={{
backgroundColor: config.bgColor,
color: config.color
}}>
<span className="sp-status-dot" style={{ backgroundColor: config.color }} />
{config.label}
</span>
</div>
</div>
<div className="sp-uptime-section">
<div className="sp-uptime-header">
<span className="sp-uptime-label">30-day uptime</span>
<span className="sp-uptime-value" style={{ color: config.color }}>
{(monitor.uptime_30d ?? 0).toFixed(2)}%
</span>
</div>
<div className="sp-uptime-bars">
{uptimeBars.map((bar, i) => (
<div
key={i}
className={`sp-uptime-bar sp-uptime-bar--${bar.status}`}
title={`Day ${bar.day + 1}: ${bar.status}`}
/>
))}
</div>
<div className="sp-uptime-axis">
<span>30 days ago</span>
<span>Today</span>
</div>
</div>
<div className="sp-uptime-stats">
<div className="sp-stat">
<span className="sp-stat-label">24h</span>
<span className="sp-stat-value" style={{ color: getStatusColor(monitor.uptime_24h) }}>
{(monitor.uptime_24h ?? 0).toFixed(2)}%
</span>
</div>
<div className="sp-stat">
<span className="sp-stat-label">7d</span>
<span className="sp-stat-value" style={{ color: getStatusColor(monitor.uptime_7d) }}>
{(monitor.uptime_7d ?? 0).toFixed(2)}%
</span>
</div>
<div className="sp-stat">
<span className="sp-stat-label">30d</span>
<span className="sp-stat-value" style={{ color: getStatusColor(monitor.uptime_30d) }}>
{(monitor.uptime_30d ?? 0).toFixed(2)}%
</span>
</div>
</div>
<div className="sp-last-check">
<Clock className="sp-last-check-icon" />
<span>Last checked: {monitor.last_check ? new Date(monitor.last_check).toLocaleString() : 'Never'}</span>
</div>
</div>
)
}
function getStatusColor(uptime: number | undefined): string {
if (uptime === undefined) return "#6b7280"
if (uptime >= 99) return "#2da44e"
if (uptime >= 95) return "#d97706"
return "#cf222e"
}
// Loading skeleton
function StatusPageSkeleton() {
return (
<div className="sp-container">
<div className="sp-header-skeleton">
<div className="sp-skeleton sp-skeleton--logo" />
<div className="sp-skeleton sp-skeleton--title" />
</div>
<div className="sp-hero-skeleton" />
<div className="sp-monitors-skeleton">
{[1, 2, 3].map((i) => (
<div key={i} className="sp-monitor-skeleton" />
))}
</div>
</div>
)
}
// Error state
function StatusPageError({ slug }: { slug: string }) {
return (
<div className="sp-container">
<div className="sp-error">
<XCircle className="sp-error-icon" />
<h2>Status page not found</h2>
<p>The status page &quot;{slug}&quot; does not exist or is not public.</p>
</div>
</div>
)
}
// Auto-refresh countdown component
function RefreshIndicator({
isFetching,
refetch
}: {
isFetching: boolean
refetch: () => void
}) {
const [countdown, setCountdown] = useState(60)
useEffect(() => {
const interval = setInterval(() => {
setCountdown((prev) => {
if (prev <= 1) {
refetch()
return 60
}
return prev - 1
})
}, 1000)
return () => clearInterval(interval)
}, [refetch])
// Reset countdown when data refreshes
useEffect(() => {
if (!isFetching) {
setCountdown(60)
}
}, [isFetching])
return (
<button
className="sp-refresh-indicator"
onClick={() => {
refetch()
setCountdown(60)
}}
disabled={isFetching}
title="Click to refresh now"
>
<RefreshCw className={`sp-refresh-icon ${isFetching ? 'sp-refresh-spin' : ''}`} />
<span className="sp-refresh-text">
{isFetching ? 'Refreshing...' : `Refresh in ${countdown}s`}
</span>
</button>
)
}
// Main component
export default function PublicStatusPage({ slug }: { slug: string }) {
const [theme, setTheme] = useState<"light" | "dark">("light")
// Detect system theme preference
useEffect(() => {
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)")
setTheme(mediaQuery.matches ? "dark" : "light")
const handler = (e: MediaQueryListEvent) => {
setTheme(e.matches ? "dark" : "light")
}
mediaQuery.addEventListener("change", handler)
return () => mediaQuery.removeEventListener("change", handler)
}, [])
const { data, isLoading, error, isFetching, refetch } = useQuery({
queryKey: ["public-status-page", slug],
queryFn: () => getPublicStatusPage(slug),
retry: false,
refetchInterval: false, // We handle auto-refresh manually with countdown
})
// Update document title
useEffect(() => {
if (data?.title) {
document.title = `${data.title} / Status Page`
} else {
document.title = "Status Page / Beszel"
}
}, [data?.title])
// Apply theme class to document
useEffect(() => {
document.documentElement.setAttribute("data-sp-theme", theme)
}, [theme])
if (isLoading) {
return <StatusPageSkeleton />
}
if (error || !data) {
return <StatusPageError slug={slug} />
}
// Group monitors by group name
const groupedMonitors = useMemo(() => {
const groups: Record<string, PublicMonitorStatus[]> = {}
data.monitors.forEach((monitor) => {
const group = monitor.group || "Services"
if (!groups[group]) {
groups[group] = []
}
groups[group].push(monitor)
})
return groups
}, [data.monitors])
const groupNames = Object.keys(groupedMonitors).sort()
// Set favicon if provided
useEffect(() => {
if (data?.favicon) {
const link = document.querySelector('link[rel*="icon"]') as HTMLLinkElement || document.createElement('link')
link.rel = 'icon'
link.href = data.favicon
document.head.appendChild(link)
}
}, [data?.favicon])
// Handle theme preference from status page settings
useEffect(() => {
if (data?.theme && data.theme !== 'auto') {
setTheme(data.theme as 'light' | 'dark')
}
}, [data?.theme])
return (
<div className="sp-page" data-theme={theme}>
{/* Grain texture overlay */}
<div className="sp-grain" />
{/* Header */}
<header className="sp-header">
<div className="sp-header-content">
<div className="sp-brand">
{data.logo ? (
<img src={data.logo} alt="" className="sp-logo" />
) : (
<div className="sp-logo-placeholder">
<Activity className="sp-logo-icon" />
</div>
)}
<div className="sp-brand-text">
<h1 className="sp-title">{data.title || data.name}</h1>
{data.description && (
<p className="sp-description">{data.description}</p>
)}
</div>
</div>
</div>
</header>
{/* Main content */}
<main className="sp-main">
{/* Overall Status Hero */}
<section className="sp-hero-section">
<div className="sp-hero-panel">
<div className="sp-hero-content">
<div className="sp-status-pill" style={{
backgroundColor: getStatusConfig(data.overall_status).bgColor,
color: getStatusConfig(data.overall_status).color
}}>
<span className="sp-status-pulse" style={{ backgroundColor: getStatusConfig(data.overall_status).color }} />
{getStatusConfig(data.overall_status).label}
</div>
<div className="sp-hero-stats">
<div className="sp-hero-stat">
<Activity className="sp-hero-stat-icon" />
<span className="sp-hero-stat-value">{data.monitors.length}</span>
<span className="sp-hero-stat-label">Monitors</span>
</div>
<RefreshIndicator isFetching={isFetching} refetch={refetch} />
</div>
</div>
</div>
</section>
{/* Monitor Groups */}
{groupNames.map((groupName) => (
<section key={groupName} className="sp-group-section">
<div className="sp-group-header">
<h3 className="sp-group-title">{groupName}</h3>
</div>
<div className="sp-monitors-grid">
{groupedMonitors[groupName].map((monitor) => (
<MonitorCard key={monitor.id} monitor={monitor} />
))}
</div>
</section>
))}
{/* Footer */}
<footer className="sp-footer">
<p className="sp-footer-text">
Powered by <a href="https://beszel.dev" target="_blank" rel="noopener noreferrer">Beszel</a>
</p>
<p className="sp-footer-updated">
Last updated: {new Date(data.updated_at).toLocaleString()}
</p>
</footer>
</main>
{/* Apply custom CSS if provided */}
{data.custom_css && (
<style dangerouslySetInnerHTML={{ __html: data.custom_css }} />
)}
</div>
)
}
@@ -1,20 +1,33 @@
/** biome-ignore-all lint/correctness/useUniqueElementIds: component is only rendered once */ /** biome-ignore-all lint/correctness/useUniqueElementIds: component is only rendered once */
import { Trans, useLingui } from "@lingui/react/macro" import { Trans, useLingui } from "@lingui/react/macro"
import { LanguagesIcon, LoaderCircleIcon, SaveIcon } from "lucide-react" import { DownloadCloudIcon, LanguagesIcon, LoaderCircleIcon, RefreshCcwIcon, SaveIcon } from "lucide-react"
import { useState } from "react" import { useEffect, useState } from "react"
import { useStore } from "@nanostores/react" import { useStore } from "@nanostores/react"
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "@/components/ui/alert-dialog"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input" import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Separator } from "@/components/ui/separator" import { Separator } from "@/components/ui/separator"
import { toast } from "@/components/ui/use-toast"
import { pb } from "@/lib/api"
import Slider from "@/components/ui/slider" import Slider from "@/components/ui/slider"
import { HourFormat, Unit } from "@/lib/enums" import { HourFormat, Unit } from "@/lib/enums"
import { dynamicActivate } from "@/lib/i18n" import { dynamicActivate } from "@/lib/i18n"
import languages from "@/lib/languages" import languages from "@/lib/languages"
import { $userSettings, defaultLayoutWidth } from "@/lib/stores" import { $newVersion, $userSettings, defaultLayoutWidth } from "@/lib/stores"
import { chartTimeData, currentHour12 } from "@/lib/utils" import { chartTimeData, currentHour12 } from "@/lib/utils"
import type { UserSettings } from "@/types" import type { UpdateInfo, UserSettings } from "@/types"
import { saveSettings } from "./layout" import { saveSettings } from "./layout"
export default function SettingsProfilePage({ userSettings }: { userSettings: UserSettings }) { export default function SettingsProfilePage({ userSettings }: { userSettings: UserSettings }) {
@@ -43,6 +56,8 @@ export default function SettingsProfilePage({ userSettings }: { userSettings: Us
</p> </p>
</div> </div>
<Separator className="my-4" /> <Separator className="my-4" />
<AppUpdatePanel />
<Separator className="my-5" />
<form onSubmit={handleSubmit} className="space-y-5"> <form onSubmit={handleSubmit} className="space-y-5">
<div className="grid gap-2"> <div className="grid gap-2">
<div className="mb-2"> <div className="mb-2">
@@ -287,3 +302,189 @@ export default function SettingsProfilePage({ userSettings }: { userSettings: Us
</div> </div>
) )
} }
function AppUpdatePanel() {
const updateInfo = useStore($newVersion)
const [checking, setChecking] = useState(false)
const [applying, setApplying] = useState(false)
const [restartPending, setRestartPending] = useState(false)
async function refreshUpdateInfo() {
setChecking(true)
try {
const info = await pb.send<UpdateInfo>("/api/beszel/update", {})
$newVersion.set(info)
} catch (err) {
toast({
title: "Update check failed",
description: err instanceof Error ? err.message : "Could not check for updates.",
variant: "destructive",
})
} finally {
setChecking(false)
}
}
async function applyUpdate() {
setApplying(true)
try {
const res = await pb.send<{ message: string }>("/api/beszel/update/apply", { method: "POST" })
toast({
title: "Update started",
description: res.message,
})
setRestartPending(true)
$newVersion.set(updateInfo ? { ...updateInfo, status: "updating", message: res.message } : undefined)
const restarted = await waitForRestartAndReload()
if (!restarted) {
toast({
title: "Still waiting for restart",
description: "Beszel did not come back before the timeout. Check the Docker container logs.",
variant: "destructive",
})
setRestartPending(false)
setApplying(false)
await refreshUpdateInfo()
}
} catch (err) {
toast({
title: "Update failed",
description: err instanceof Error ? err.message : "Could not start the update.",
variant: "destructive",
})
setApplying(false)
}
}
useEffect(() => {
if (!updateInfo) {
refreshUpdateInfo()
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
const status = updateInfo?.status ?? "checking"
const message = restartPending
? "Update started. Waiting for Beszel to restart..."
: (updateInfo?.message ?? "Checking GHCR for the latest image.")
const canUpdate = Boolean(updateInfo?.canApply && updateInfo?.updateAvailable && !applying && !restartPending)
return (
<div className="rounded-md border bg-card/50 p-4">
<div className="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
<div className="space-y-1.5">
<h3 className="text-lg font-medium flex items-center gap-2">
<DownloadCloudIcon className="h-4 w-4" />
<Trans>App update</Trans>
</h3>
<p className="text-sm text-muted-foreground leading-relaxed">{message}</p>
</div>
<StatusBadge status={status} updateAvailable={Boolean(updateInfo?.updateAvailable)} />
</div>
<div className="mt-4 grid gap-2 text-sm sm:grid-cols-2">
<UpdateMeta label="Image" value={updateInfo?.image ?? "ghcr.io/dvorinka/beszel:latest"} />
<UpdateMeta label="Current version" value={updateInfo?.currentVersion ?? "..."} />
<UpdateMeta label="Running digest" value={shortDigest(updateInfo?.currentDigest)} />
<UpdateMeta label="Latest digest" value={shortDigest(updateInfo?.latestDigest)} />
</div>
<div className="mt-4 flex flex-col gap-2 sm:flex-row">
<Button
type="button"
variant="outline"
onClick={refreshUpdateInfo}
disabled={checking || applying || restartPending}
>
{checking ? (
<LoaderCircleIcon className="me-2 h-4 w-4 animate-spin" />
) : (
<RefreshCcwIcon className="me-2 h-4 w-4" />
)}
<Trans>Check now</Trans>
</Button>
<AlertDialog>
<AlertDialogTrigger asChild>
<Button type="button" disabled={!canUpdate}>
{applying || restartPending ? (
<LoaderCircleIcon className="me-2 h-4 w-4 animate-spin" />
) : (
<DownloadCloudIcon className="me-2 h-4 w-4" />
)}
{restartPending ? <Trans>Restarting</Trans> : <Trans>Update now</Trans>}
</Button>
</AlertDialogTrigger>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>
<Trans>Update Beszel now?</Trans>
</AlertDialogTitle>
<AlertDialogDescription>
<Trans>
Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app.
All signed-in users can start this action.
</Trans>
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>
<Trans>Cancel</Trans>
</AlertDialogCancel>
<AlertDialogAction onClick={applyUpdate}>
<Trans>Start update</Trans>
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
</div>
</div>
)
}
function StatusBadge({ status, updateAvailable }: { status: string; updateAvailable: boolean }) {
const label = updateAvailable
? "Update available"
: status === "up-to-date"
? "Up to date"
: status.replaceAll("-", " ")
return (
<span className="inline-flex h-7 items-center self-start rounded-md border bg-background px-2.5 text-xs font-medium capitalize text-muted-foreground">
{label}
</span>
)
}
function UpdateMeta({ label, value }: { label: string; value: string }) {
return (
<div className="min-w-0 rounded-md bg-muted/45 px-3 py-2">
<div className="text-xs text-muted-foreground">{label}</div>
<div className="truncate font-mono text-xs">{value}</div>
</div>
)
}
function shortDigest(value?: string) {
if (!value) return "unknown"
const digest = value.includes("@") ? value.split("@").at(-1) : value
if (!digest) return value
return digest.length > 24 ? `${digest.slice(0, 24)}...` : digest
}
async function waitForRestartAndReload() {
await sleep(10_000)
for (let attempt = 0; attempt < 45; attempt++) {
try {
const res = await fetch("/api/health", { cache: "no-store" })
if (res.ok) {
window.location.reload()
return true
}
} catch {
// Hub is expected to be unavailable while Docker replaces the container.
}
await sleep(2_000)
}
return false
}
function sleep(ms: number) {
return new Promise((resolve) => window.setTimeout(resolve, ms))
}
@@ -1,12 +1,21 @@
"use client" "use client"
import { useState, useEffect } from "react" import { useState, useEffect, useRef } from "react"
import { useMutation, useQueryClient } from "@tanstack/react-query" import { useMutation, useQueryClient } from "@tanstack/react-query"
import { zodResolver } from "@hookform/resolvers/zod" import { zodResolver } from "@hookform/resolvers/zod"
import { useForm } from "react-hook-form" import { useForm } from "react-hook-form"
import { z } from "zod" import { z } from "zod"
import { useToast } from "@/components/ui/use-toast" import { useToast } from "@/components/ui/use-toast"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
// Generate slug from name
const generateSlug = (name: string): string => {
return name
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '')
.slice(0, 50)
}
import { import {
Dialog, Dialog,
DialogContent, DialogContent,
@@ -38,8 +47,10 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
import { import {
createStatusPage, createStatusPage,
updateStatusPage, updateStatusPage,
getStatusPageUrl,
type StatusPage, type StatusPage,
} from "@/lib/statuspages" } from "@/lib/statuspages"
import { ExternalLink, RefreshCw } from "lucide-react"
const formSchema = z.object({ const formSchema = z.object({
name: z.string().min(1, "Name is required"), name: z.string().min(1, "Name is required"),
@@ -162,6 +173,29 @@ export function StatusPageDialog({
const isPending = createMutation.isPending || updateMutation.isPending const isPending = createMutation.isPending || updateMutation.isPending
// Auto-generate slug from name when creating new status page
const lastAutoSlug = useRef<string>("")
useEffect(() => {
if (isEdit) return // Don't auto-generate in edit mode
const subscription = form.watch((value, { name: fieldName }) => {
if (fieldName === 'name') {
const name = value.name || ''
const currentSlug = form.getValues('slug') || ''
const newSlug = generateSlug(name)
// Only auto-generate if:
// 1. Slug is empty, OR
// 2. Current slug matches the last auto-generated slug (user hasn't manually edited)
if (!currentSlug || currentSlug === lastAutoSlug.current) {
form.setValue('slug', newSlug, { shouldValidate: true })
lastAutoSlug.current = newSlug
}
}
})
return () => subscription.unsubscribe()
}, [form, isEdit])
return ( return (
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-[600px] max-h-[80vh] overflow-y-auto"> <DialogContent className="sm:max-w-[600px] max-h-[80vh] overflow-y-auto">
@@ -203,12 +237,45 @@ export function StatusPageDialog({
name="slug" name="slug"
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>URL Slug</FormLabel> <FormLabel className="flex items-center justify-between">
<span>URL Slug</span>
{!isEdit && form.getValues('name') && (
<Button
type="button"
variant="ghost"
size="sm"
className="h-6 px-2 text-xs"
onClick={() => {
const newSlug = generateSlug(form.getValues('name') || '')
form.setValue('slug', newSlug, { shouldValidate: true })
lastAutoSlug.current = newSlug
}}
>
<RefreshCw className="mr-1 h-3 w-3" />
Regenerate
</Button>
)}
</FormLabel>
<FormControl> <FormControl>
<Input placeholder="my-services" {...field} /> <div className="flex items-center gap-2">
<span className="text-sm text-muted-foreground whitespace-nowrap">/status/</span>
<Input {...field} placeholder="my-services" className="flex-1" />
</div>
</FormControl> </FormControl>
<FormDescription> <FormDescription className="flex items-center justify-between">
The URL will be: /status/{field.value} <span>Full URL: {typeof window !== 'undefined' ? window.location.origin : ''}{getStatusPageUrl(field.value)}</span>
{field.value && (
<a
href={getStatusPageUrl(field.value)}
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline inline-flex items-center gap-1"
onClick={(e) => e.stopPropagation()}
>
<ExternalLink className="h-3 w-3" />
Preview
</a>
)}
</FormDescription> </FormDescription>
<FormMessage /> <FormMessage />
</FormItem> </FormItem>
@@ -25,15 +25,15 @@ import {
getStatusPageUrl, getStatusPageUrl,
type StatusPage, type StatusPage,
} from "@/lib/statuspages" } from "@/lib/statuspages"
import { MoreHorizontal, Plus, ExternalLink, Globe, Lock } from "lucide-react" import { MoreHorizontal, Plus, ExternalLink, Globe, Lock, Copy, Check, LayoutTemplate, ArrowRight } from "lucide-react"
import { StatusPageDialog } from "./status-page-dialog" import { StatusPageDialog } from "./status-page-dialog"
import { Link } from "@/components/router"
export function StatusPagesTable() { export function StatusPagesTable() {
const { toast } = useToast() const { toast } = useToast()
const queryClient = useQueryClient() const queryClient = useQueryClient()
const [dialogOpen, setDialogOpen] = useState(false) const [dialogOpen, setDialogOpen] = useState(false)
const [editingPage, setEditingPage] = useState<StatusPage | null>(null) const [editingPage, setEditingPage] = useState<StatusPage | null>(null)
const [copiedId, setCopiedId] = useState<string | null>(null)
const { data: pages, isLoading } = useQuery({ const { data: pages, isLoading } = useQuery({
queryKey: ["status-pages"], queryKey: ["status-pages"],
@@ -65,14 +65,50 @@ export function StatusPagesTable() {
setDialogOpen(true) setDialogOpen(true)
} }
const handleDelete = (id: string) => { const handleDelete = (page: StatusPage) => {
if (confirm("Are you sure you want to delete this status page?")) { if (confirm(`Are you sure you want to delete "${page.name}"?\n\nThis will remove the status page and unlink all ${page.monitor_count} monitor(s). This action cannot be undone.`)) {
deleteMutation.mutate(id) deleteMutation.mutate(page.id)
}
}
const handleCopyUrl = async (page: StatusPage) => {
if (!page.public) {
toast({ title: "Status page must be public to copy URL", variant: "destructive" })
return
}
const url = window.location.origin + getStatusPageUrl(page.slug)
try {
await navigator.clipboard.writeText(url)
setCopiedId(page.id)
toast({ title: "URL copied to clipboard" })
setTimeout(() => setCopiedId(null), 2000)
} catch {
toast({ title: "Failed to copy URL", variant: "destructive" })
} }
} }
if (isLoading) { if (isLoading) {
return <div className="p-4">Loading...</div> return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<div className="h-5 w-32 bg-muted rounded animate-pulse" />
<div className="h-9 w-36 bg-muted rounded animate-pulse" />
</div>
<div className="rounded-md border">
<div className="p-4 space-y-3">
{[1, 2, 3].map((i) => (
<div key={i} className="flex items-center gap-4">
<div className="h-4 w-32 bg-muted rounded animate-pulse" />
<div className="h-4 w-24 bg-muted rounded animate-pulse" />
<div className="h-4 w-16 bg-muted rounded animate-pulse" />
<div className="h-4 w-20 bg-muted rounded animate-pulse" />
<div className="h-8 w-8 bg-muted rounded animate-pulse ml-auto" />
</div>
))}
</div>
</div>
</div>
)
} }
return ( return (
@@ -99,8 +135,22 @@ export function StatusPagesTable() {
<TableBody> <TableBody>
{pages?.length === 0 ? ( {pages?.length === 0 ? (
<TableRow> <TableRow>
<TableCell colSpan={5} className="text-center py-8 text-muted-foreground"> <TableCell colSpan={5} className="text-center py-12">
No status pages yet. Create one to share your service status publicly. <div className="flex flex-col items-center gap-3">
<div className="p-3 bg-muted rounded-full">
<LayoutTemplate className="h-6 w-6 text-muted-foreground" />
</div>
<div>
<p className="font-medium text-muted-foreground">No status pages yet</p>
<p className="text-sm text-muted-foreground mt-1">
Create one to share your service status publicly
</p>
</div>
<Button onClick={handleAdd} variant="outline" className="mt-2">
Create Status Page
<ArrowRight className="ml-2 h-4 w-4" />
</Button>
</div>
</TableCell> </TableCell>
</TableRow> </TableRow>
) : ( ) : (
@@ -134,6 +184,15 @@ export function StatusPagesTable() {
Edit Edit
</DropdownMenuItem> </DropdownMenuItem>
{page.public && ( {page.public && (
<>
<DropdownMenuItem onClick={() => handleCopyUrl(page)}>
{copiedId === page.id ? (
<Check className="mr-2 h-4 w-4 text-green-500" />
) : (
<Copy className="mr-2 h-4 w-4" />
)}
{copiedId === page.id ? 'Copied!' : 'Copy URL'}
</DropdownMenuItem>
<DropdownMenuItem asChild> <DropdownMenuItem asChild>
<a <a
href={getStatusPageUrl(page.slug)} href={getStatusPageUrl(page.slug)}
@@ -145,9 +204,10 @@ export function StatusPagesTable() {
View Public Page View Public Page
</a> </a>
</DropdownMenuItem> </DropdownMenuItem>
</>
)} )}
<DropdownMenuItem <DropdownMenuItem
onClick={() => handleDelete(page.id)} onClick={() => handleDelete(page)}
className="text-destructive" className="text-destructive"
> >
Delete Delete
+592
View File
@@ -189,3 +189,595 @@
.recharts-yAxis { .recharts-yAxis {
@apply tabular-nums; @apply tabular-nums;
} }
/* ============================================================================
Public Status Page Styles - Inspired by github-statuses
============================================================================ */
/* CSS Variables for Status Page - Light Mode (default) */
.sp-page {
--sp-bg: #f6f8fa;
--sp-bg-top: #ffffff;
--sp-bg-bottom: #f6f8fa;
--sp-card: #ffffff;
--sp-ink: #24292f;
--sp-muted: #57606a;
--sp-border: #d0d7de;
--sp-accent: #0969da;
--sp-operational: #2da44e;
--sp-minor: #d97706;
--sp-major: #cf222e;
--sp-maintenance: #1f6feb;
--sp-shadow: 0 20px 40px -30px rgba(0, 0, 0, 0.35);
--sp-radius: 18px;
--sp-radius-sm: 12px;
--sp-bars-empty: #dfe4ea;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background: linear-gradient(180deg, var(--sp-bg-top) 0%, var(--sp-bg) 55%, var(--sp-bg-bottom) 100%);
color: var(--sp-ink);
min-height: 100vh;
position: relative;
}
/* Dark Mode */
.sp-page[data-theme="dark"] {
--sp-bg: #111827;
--sp-bg-top: #0d1117;
--sp-bg-bottom: #111827;
--sp-card: #161b22;
--sp-ink: #f0f6fc;
--sp-muted: #9da7b3;
--sp-border: #30363d;
--sp-accent: #58a6ff;
--sp-operational: #3fb950;
--sp-minor: #d29922;
--sp-major: #ff7b72;
--sp-maintenance: #58a6ff;
--sp-shadow: 0 24px 48px -32px rgba(0, 0, 0, 0.72);
--sp-bars-empty: #30363d;
color-scheme: dark;
}
/* Grain texture overlay */
.sp-grain {
position: fixed;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.2' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
pointer-events: none;
mix-blend-mode: multiply;
z-index: 0;
}
.sp-page[data-theme="dark"] .sp-grain {
opacity: 0.45;
mix-blend-mode: screen;
}
/* Header */
.sp-header {
position: relative;
z-index: 1;
padding: 48px 24px 32px;
max-width: 900px;
margin: 0 auto;
}
.sp-header-content {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.sp-brand {
display: flex;
align-items: center;
gap: 16px;
}
.sp-logo {
width: 76px;
height: 76px;
object-fit: contain;
border-radius: var(--sp-radius-sm);
}
.sp-logo-placeholder {
width: 76px;
height: 76px;
border-radius: var(--sp-radius-sm);
background: linear-gradient(135deg, var(--sp-operational), var(--sp-accent));
display: flex;
align-items: center;
justify-content: center;
}
.sp-logo-icon {
width: 40px;
height: 40px;
color: white;
}
.sp-brand-text {
flex: 1;
}
.sp-title {
margin: 0;
font-size: clamp(1.8rem, 2.8vw, 2.6rem);
font-weight: 600;
letter-spacing: -0.02em;
}
.sp-description {
margin: 8px 0 0;
color: var(--sp-muted);
font-size: 1rem;
}
/* Main content */
.sp-main {
position: relative;
z-index: 1;
padding: 0 24px 64px;
display: flex;
flex-direction: column;
gap: 28px;
max-width: 900px;
margin: 0 auto;
}
/* Hero Section */
.sp-hero-section {
margin-bottom: 8px;
}
.sp-hero-panel {
background: var(--sp-card);
border-radius: var(--sp-radius);
padding: 28px 32px;
border: 1px solid var(--sp-border);
box-shadow: var(--sp-shadow);
}
.sp-hero-content {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 16px;
}
.sp-status-pill {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 10px 18px;
border-radius: 999px;
font-weight: 600;
font-size: 0.95rem;
}
.sp-status-pulse {
width: 10px;
height: 10px;
border-radius: 50%;
box-shadow: 0 0 0 4px currentColor;
opacity: 0.3;
animation: sp-pulse 2s ease-in-out infinite;
}
@keyframes sp-pulse {
0%, 100% { opacity: 0.3; transform: scale(1); }
50% { opacity: 0.6; transform: scale(1.1); }
}
.sp-hero-stats {
display: flex;
gap: 24px;
}
.sp-hero-stat {
display: flex;
align-items: center;
gap: 8px;
color: var(--sp-muted);
}
.sp-hero-stat-icon {
width: 18px;
height: 18px;
}
.sp-hero-stat-value {
font-weight: 700;
font-size: 1.2rem;
color: var(--sp-ink);
}
.sp-hero-stat-label {
font-size: 0.9rem;
}
/* Group Section */
.sp-group-section {
display: flex;
flex-direction: column;
gap: 16px;
}
.sp-group-header {
display: flex;
align-items: center;
gap: 12px;
}
.sp-group-title {
margin: 0;
font-size: 1.1rem;
font-weight: 600;
color: var(--sp-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* Monitors Grid */
.sp-monitors-grid {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
}
@media (min-width: 768px) {
.sp-monitors-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* Monitor Card */
.sp-monitor-card {
background: var(--sp-card);
border-radius: var(--sp-radius);
padding: 20px 24px;
border: 1px solid var(--sp-border);
box-shadow: 0 4px 12px -8px rgba(0, 0, 0, 0.2);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.sp-monitor-card:hover {
transform: translateY(-2px);
box-shadow: 0 8px 20px -12px rgba(0, 0, 0, 0.25);
}
.sp-monitor-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16px;
}
.sp-monitor-info {
display: flex;
align-items: center;
gap: 12px;
}
.sp-monitor-icon {
width: 20px;
height: 20px;
flex-shrink: 0;
}
.sp-monitor-name {
margin: 0;
font-size: 1rem;
font-weight: 600;
}
.sp-monitor-group {
font-size: 0.8rem;
color: var(--sp-muted);
text-transform: uppercase;
letter-spacing: 0.03em;
}
.sp-monitor-status {
flex-shrink: 0;
}
.sp-status-badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
border-radius: 999px;
font-size: 0.8rem;
font-weight: 600;
}
.sp-status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
}
/* Uptime Section */
.sp-uptime-section {
margin-top: 12px;
}
.sp-uptime-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.sp-uptime-label {
font-size: 0.8rem;
color: var(--sp-muted);
font-weight: 500;
}
.sp-uptime-value {
font-size: 0.9rem;
font-weight: 700;
}
.sp-uptime-bars {
display: grid;
grid-template-columns: repeat(30, minmax(0, 1fr));
gap: 3px;
margin-bottom: 8px;
}
.sp-uptime-bar {
height: 24px;
border-radius: 4px;
background: var(--sp-bars-empty);
cursor: pointer;
transition: transform 0.12s ease;
}
.sp-uptime-bar:hover {
transform: translateY(-2px);
}
.sp-uptime-bar--operational {
background: rgba(45, 164, 78, 0.85);
}
.sp-uptime-bar--minor {
background: rgba(217, 119, 6, 0.85);
}
.sp-uptime-bar--major {
background: rgba(207, 34, 46, 0.85);
}
.sp-page[data-theme="dark"] .sp-uptime-bar--operational {
background: rgba(63, 185, 80, 0.85);
}
.sp-page[data-theme="dark"] .sp-uptime-bar--minor {
background: rgba(210, 153, 34, 0.85);
}
.sp-page[data-theme="dark"] .sp-uptime-bar--major {
background: rgba(255, 123, 114, 0.85);
}
.sp-uptime-axis {
display: flex;
justify-content: space-between;
font-size: 0.7rem;
color: var(--sp-muted);
}
/* Uptime Stats */
.sp-uptime-stats {
display: flex;
gap: 24px;
margin-top: 16px;
padding-top: 16px;
border-top: 1px solid var(--sp-border);
}
.sp-stat {
display: flex;
flex-direction: column;
gap: 2px;
}
.sp-stat-label {
font-size: 0.7rem;
color: var(--sp-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
font-weight: 600;
}
.sp-stat-value {
font-size: 1.1rem;
font-weight: 700;
}
/* Footer */
.sp-footer {
margin-top: 32px;
padding-top: 24px;
border-top: 1px solid var(--sp-border);
text-align: center;
}
.sp-footer-text {
margin: 0;
font-size: 0.85rem;
color: var(--sp-muted);
}
.sp-footer-text a {
color: var(--sp-accent);
text-decoration: none;
font-weight: 600;
}
.sp-footer-text a:hover {
text-decoration: underline;
}
.sp-footer-updated {
margin: 8px 0 0;
font-size: 0.75rem;
color: var(--sp-muted);
}
/* Loading Skeleton */
.sp-container {
max-width: 900px;
margin: 0 auto;
padding: 48px 24px;
}
.sp-header-skeleton {
display: flex;
align-items: center;
gap: 16px;
margin-bottom: 32px;
}
.sp-skeleton {
background: linear-gradient(90deg, var(--sp-border) 25%, var(--sp-bg) 50%, var(--sp-border) 75%);
background-size: 200% 100%;
border-radius: 8px;
animation: sp-skeleton-loading 1.5s ease-in-out infinite;
}
.sp-skeleton--logo {
width: 76px;
height: 76px;
border-radius: var(--sp-radius-sm);
}
.sp-skeleton--title {
width: 300px;
height: 32px;
}
.sp-hero-skeleton {
height: 120px;
background: var(--sp-card);
border-radius: var(--sp-radius);
margin-bottom: 24px;
border: 1px solid var(--sp-border);
}
.sp-monitors-skeleton {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
}
@media (min-width: 768px) {
.sp-monitors-skeleton {
grid-template-columns: repeat(2, 1fr);
}
}
.sp-monitor-skeleton {
height: 180px;
background: var(--sp-card);
border-radius: var(--sp-radius);
border: 1px solid var(--sp-border);
}
@keyframes sp-skeleton-loading {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
/* Error State */
.sp-error {
text-align: center;
padding: 64px 24px;
}
.sp-error-icon {
width: 48px;
height: 48px;
color: var(--sp-major);
margin-bottom: 16px;
}
.sp-error h2 {
margin: 0 0 8px;
font-size: 1.5rem;
font-weight: 600;
}
.sp-error p {
margin: 0;
color: var(--sp-muted);
}
/* Refresh Indicator */
.sp-refresh-indicator {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 14px;
border-radius: 999px;
border: 1px solid var(--sp-border);
background: transparent;
color: var(--sp-muted);
font-size: 0.85rem;
cursor: pointer;
transition: all 0.2s ease;
}
.sp-refresh-indicator:hover:not(:disabled) {
background: var(--sp-bg);
border-color: var(--sp-accent);
color: var(--sp-accent);
}
.sp-refresh-indicator:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.sp-refresh-icon {
width: 14px;
height: 14px;
}
.sp-refresh-spin {
animation: sp-spin 1s linear infinite;
}
@keyframes sp-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.sp-refresh-text {
font-size: 0.8rem;
font-weight: 500;
}
/* Last Check */
.sp-last-check {
display: flex;
align-items: center;
gap: 6px;
margin-top: 14px;
padding-top: 14px;
border-top: 1px solid var(--sp-border);
font-size: 0.75rem;
color: var(--sp-muted);
}
.sp-last-check-icon {
width: 12px;
height: 12px;
}
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "سجل التنبيهات"
msgid "Alerts" msgid "Alerts"
msgstr "التنبيهات" msgstr "التنبيهات"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "جميع الحاويات"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "جميع الأنظمة" msgstr "جميع الأنظمة"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "هل أنت متأكد أنك تريد حذف {name}؟" msgstr "هل أنت متأكد أنك تريد حذف {name}؟"
@@ -338,6 +341,10 @@ msgstr "يدعم بيزيل بروتوكول OpenID Connect والعديد من
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "يستخدم بيزيل <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة." msgstr "يستخدم بيزيل <0>Shoutrrr</0> للتكامل مع خدمات الإشعارات الشهيرة."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "ثنائي" msgstr "ثنائي"
@@ -385,6 +392,7 @@ msgstr "يمكن الإيقاف"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "تحقق من {email} للحصول على رابط إعادة التعي
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "تحقق من السجلات لمزيد من التفاصيل." msgstr "تحقق من السجلات لمزيد من التفاصيل."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "انقر للنسخ" msgstr "انقر للنسخ"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "إعادة التشغيل" msgstr "إعادة التشغيل"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "إعدادات SMTP" msgstr "إعدادات SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "الترتيب حسب" msgstr "الترتيب حسب"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "إعدادات SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "وقت البدء" msgstr "وقت البدء"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "قيد التشغيل ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "تحديث" msgstr "تحديث"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "عرض أحدث 200 تنبيه." msgstr "عرض أحدث 200 تنبيه."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "الأعمدة الظاهرة" msgstr "الأعمدة الظاهرة"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "История на нотификациите"
msgid "Alerts" msgid "Alerts"
msgstr "Тревоги" msgstr "Тревоги"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Всички контейнери"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Всички системи" msgstr "Всички системи"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Сигурен ли си, че искаш да изтриеш {name}?" msgstr "Сигурен ли си, че искаш да изтриеш {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel поддържа OpenID Connect и много други OAuth2
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel ползва <0>Shoutrrr</0> за да се интегрира с известни услуги за уведомяване." msgstr "Beszel ползва <0>Shoutrrr</0> за да се интегрира с известни услуги за уведомяване."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Двоичен код" msgstr "Двоичен код"
@@ -385,6 +392,7 @@ msgstr "Може да се спре"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Провери {email} за линк за нулиране."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Провери log-овете за повече информация." msgstr "Провери log-овете за повече информация."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Настисни за да копираш" msgstr "Настисни за да копираш"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Рестартирания" msgstr "Рестартирания"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Настройки за SMTP" msgstr "Настройки за SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Сортиране по" msgstr "Сортиране по"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Настройки за SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Начален час" msgstr "Начален час"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Нагоре ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Актуализирай" msgstr "Актуализирай"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Прегледайте последните си 200 сигнала." msgstr "Прегледайте последните си 200 сигнала."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Видими полета" msgstr "Видими полета"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Historie upozornění"
msgid "Alerts" msgid "Alerts"
msgstr "Výstrahy" msgstr "Výstrahy"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Všechny kontejnery"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Všechny systémy" msgstr "Všechny systémy"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Opravdu chcete odstranit {name}?" msgstr "Opravdu chcete odstranit {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel podporuje OpenID Connect a mnoho poskytovatelů OAuth2 ověřová
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel používá <0>Shoutrrr</0> k integraci s populárními notifikačními službami." msgstr "Beszel používá <0>Shoutrrr</0> k integraci s populárními notifikačními službami."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binární" msgstr "Binární"
@@ -385,6 +392,7 @@ msgstr "Může zastavit"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Zkontrolujte {email} pro odkaz na obnovení."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Pro více informací zkontrolujte logy." msgstr "Pro více informací zkontrolujte logy."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klikněte pro zkopírování" msgstr "Klikněte pro zkopírování"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Restarty" msgstr "Restarty"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Nastavení SMTP" msgstr "Nastavení SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Seřadit podle" msgstr "Seřadit podle"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Nastavení SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Čas začátku" msgstr "Čas začátku"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Funkční ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Aktualizovat" msgstr "Aktualizovat"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Zobrazit vašich 200 nejnovějších upozornění." msgstr "Zobrazit vašich 200 nejnovějších upozornění."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Viditelné sloupce" msgstr "Viditelné sloupce"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Advarselshistorik"
msgid "Alerts" msgid "Alerts"
msgstr "Alarmer" msgstr "Alarmer"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Alle containere"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Alle systemer" msgstr "Alle systemer"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Er du sikker på, at du vil slette {name}?" msgstr "Er du sikker på, at du vil slette {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel understøtter OpenID Connect og mange OAuth2 godkendelsesudbydere
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel bruger <0>Shoutrrr</0> til at integrere med populære notifikationstjenester." msgstr "Beszel bruger <0>Shoutrrr</0> til at integrere med populære notifikationstjenester."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binær" msgstr "Binær"
@@ -385,6 +392,7 @@ msgstr "Kan stoppe"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Tjek {email} for et nulstillingslink."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Tjek logfiler for flere detaljer." msgstr "Tjek logfiler for flere detaljer."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klik for at kopiere" msgstr "Klik for at kopiere"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Genstarter" msgstr "Genstarter"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP-indstillinger" msgstr "SMTP-indstillinger"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sorter efter" msgstr "Sorter efter"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP-indstillinger"
msgid "Start Time" msgid "Start Time"
msgstr "Starttid" msgstr "Starttid"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Oppe ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Opdater" msgstr "Opdater"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Se dine 200 nyeste alarmer." msgstr "Se dine 200 nyeste alarmer."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Synlige felter" msgstr "Synlige felter"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Warnungsverlauf"
msgid "Alerts" msgid "Alerts"
msgstr "Warnungen" msgstr "Warnungen"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Alle Container"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Alle Systeme" msgstr "Alle Systeme"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Möchtest du {name} wirklich löschen?" msgstr "Möchtest du {name} wirklich löschen?"
@@ -338,6 +341,10 @@ msgstr "Beszel unterstützt OpenID Connect und viele OAuth2-Authentifizierungsan
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel verwendet <0>Shoutrrr</0>, um sich mit beliebten Benachrichtigungsdiensten zu integrieren." msgstr "Beszel verwendet <0>Shoutrrr</0>, um sich mit beliebten Benachrichtigungsdiensten zu integrieren."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binär" msgstr "Binär"
@@ -385,6 +392,7 @@ msgstr "Kann stoppen"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Überprüfe {email} auf einen Link zum Zurücksetzen."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Überprüfe die Protokolle für weitere Details." msgstr "Überprüfe die Protokolle für weitere Details."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Zum Kopieren klicken" msgstr "Zum Kopieren klicken"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Neustarts" msgstr "Neustarts"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP-Einstellungen" msgstr "SMTP-Einstellungen"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sortieren nach" msgstr "Sortieren nach"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP-Einstellungen"
msgid "Start Time" msgid "Start Time"
msgstr "Startzeit" msgstr "Startzeit"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Aktiv ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Aktualisieren" msgstr "Aktualisieren"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Sieh dir die neusten 200 Alarme an." msgstr "Sieh dir die neusten 200 Alarme an."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Sichtbare Spalten" msgstr "Sichtbare Spalten"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -146,8 +146,8 @@ msgid "Add Monitor"
msgstr "Add Monitor" msgstr "Add Monitor"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "Add System" #~ msgstr "Add System"
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -198,12 +198,10 @@ msgstr "Alert History"
msgid "Alerts" msgid "Alerts"
msgstr "Alerts" msgstr "Alerts"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "All ({0})" msgstr "All ({0})"
@@ -219,9 +217,14 @@ msgstr "All Containers"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "All Systems" msgstr "All Systems"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr "App update"
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Are you sure you want to delete {name}?" msgstr "Are you sure you want to delete {name}?"
@@ -333,6 +336,10 @@ msgstr "Beszel supports OpenID Connect and many OAuth2 authentication providers.
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgstr "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binary" msgstr "Binary"
@@ -380,6 +387,7 @@ msgstr "Can stop"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -442,6 +450,10 @@ msgstr "Check {email} for a reset link."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Check logs for more details." msgstr "Check logs for more details."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr "Check now"
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "Check Now" msgstr "Check Now"
@@ -477,8 +489,8 @@ msgid "Click to copy"
msgstr "Click to copy" msgstr "Click to copy"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "Columns" #~ msgstr "Columns"
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1745,6 +1757,10 @@ msgstr "Response"
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "Response Times" #~ msgstr "Response Times"
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr "Restarting"
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Restarts" msgstr "Restarts"
@@ -1912,8 +1928,8 @@ msgid "SMTP settings"
msgstr "SMTP settings" msgstr "SMTP settings"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sort By" msgstr "Sort By"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1924,6 +1940,10 @@ msgstr "SMTP settings"
msgid "Start Time" msgid "Start Time"
msgstr "Start Time" msgstr "Start Time"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr "Start update"
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2243,10 +2263,23 @@ msgstr "Up ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Update" msgstr "Update"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr "Update available"
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr "Update Beszel now?"
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "Update Monitor" msgstr "Update Monitor"
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr "Update now"
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2330,8 +2363,8 @@ msgid "View your 200 most recent alerts."
msgstr "View your 200 most recent alerts." msgstr "View your 200 most recent alerts."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Visible Fields" msgstr "Visible Fields"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Historial de alertas"
msgid "Alerts" msgid "Alerts"
msgstr "Alertas" msgstr "Alertas"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Todos los contenedores"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Todos los sistemas" msgstr "Todos los sistemas"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "¿Estás seguro de que deseas eliminar {name}?" msgstr "¿Estás seguro de que deseas eliminar {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel admite OpenID Connect y muchos proveedores de autenticación OAut
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utiliza <0>Shoutrrr</0> para integrarse con servicios populares de notificación." msgstr "Beszel utiliza <0>Shoutrrr</0> para integrarse con servicios populares de notificación."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binario" msgstr "Binario"
@@ -385,6 +392,7 @@ msgstr "Puede detenerse"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Revisa {email} para un enlace de restablecimiento."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Revisa los registros para más detalles." msgstr "Revisa los registros para más detalles."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Haz clic para copiar" msgstr "Haz clic para copiar"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Reinicios" msgstr "Reinicios"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Configuración SMTP" msgstr "Configuración SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Ordenar por" msgstr "Ordenar por"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Configuración SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Hora de inicio" msgstr "Hora de inicio"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Activo ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Actualizar" msgstr "Actualizar"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Ver tus 200 alertas más recientes." msgstr "Ver tus 200 alertas más recientes."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Columnas visibles" msgstr "Columnas visibles"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "تاریخچه هشدارها"
msgid "Alerts" msgid "Alerts"
msgstr "هشدارها" msgstr "هشدارها"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "همه کانتینرها"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "همه سیستم‌ها" msgstr "همه سیستم‌ها"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "آیا مطمئن هستید که می‌خواهید {name} را حذف کنید؟" msgstr "آیا مطمئن هستید که می‌خواهید {name} را حذف کنید؟"
@@ -338,6 +341,10 @@ msgstr "بِزل از OpenID Connect و بسیاری از ارائه‌دهند
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "بِزل از <0>Shoutrrr</0> برای ادغام با سرویس‌های اطلاع‌رسانی محبوب استفاده می‌کند." msgstr "بِزل از <0>Shoutrrr</0> برای ادغام با سرویس‌های اطلاع‌رسانی محبوب استفاده می‌کند."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "دودویی" msgstr "دودویی"
@@ -385,6 +392,7 @@ msgstr "می‌تواند متوقف شود"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "ایمیل {email} خود را برای لینک بازنشانی برر
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "برای جزئیات بیشتر، لاگ‌ها را بررسی کنید." msgstr "برای جزئیات بیشتر، لاگ‌ها را بررسی کنید."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "برای کپی کردن کلیک کنید" msgstr "برای کپی کردن کلیک کنید"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "راه‌اندازی مجدد" msgstr "راه‌اندازی مجدد"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "تنظیمات SMTP" msgstr "تنظیمات SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "مرتب‌سازی بر اساس" msgstr "مرتب‌سازی بر اساس"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "تنظیمات SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "زمان شروع" msgstr "زمان شروع"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "فعال ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "به‌روزرسانی" msgstr "به‌روزرسانی"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "۲۰۰ هشدار اخیر خود را مشاهده کنید." msgstr "۲۰۰ هشدار اخیر خود را مشاهده کنید."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "فیلدهای قابل مشاهده" msgstr "فیلدهای قابل مشاهده"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Historique des alertes"
msgid "Alerts" msgid "Alerts"
msgstr "Alertes" msgstr "Alertes"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Tous les conteneurs"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Tous les systèmes" msgstr "Tous les systèmes"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Êtes-vous sûr de vouloir supprimer {name} ?" msgstr "Êtes-vous sûr de vouloir supprimer {name} ?"
@@ -338,6 +341,10 @@ msgstr "Beszel prend en charge OpenID Connect et de nombreux fournisseurs d'auth
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires." msgstr "Beszel utilise <0>Shoutrrr</0> pour s'intégrer aux services de notification populaires."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binaire" msgstr "Binaire"
@@ -385,6 +392,7 @@ msgstr "Peut arrêter"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Vérifiez {email} pour un lien de réinitialisation."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Vérifiez les journaux pour plus de détails." msgstr "Vérifiez les journaux pour plus de détails."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Cliquez pour copier" msgstr "Cliquez pour copier"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Redémarrages" msgstr "Redémarrages"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Paramètres SMTP" msgstr "Paramètres SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Trier par" msgstr "Trier par"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Paramètres SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Heure de début" msgstr "Heure de début"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Joignable ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Mettre à jour" msgstr "Mettre à jour"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Voir vos 200 dernières alertes." msgstr "Voir vos 200 dernières alertes."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Colonnes visibles" msgstr "Colonnes visibles"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "היסטוריית התראות"
msgid "Alerts" msgid "Alerts"
msgstr "התראות" msgstr "התראות"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "כל הקונטיינרים"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "כל המערכות" msgstr "כל המערכות"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "האם אתה בטוח שברצונך למחוק את {name}?" msgstr "האם אתה בטוח שברצונך למחוק את {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel תומך ב-OpenID Connect ובספקי אימות רבים של
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel משתמש ב-<0>Shoutrrr</0> לשילוב עם שירותי התראות פופולריים." msgstr "Beszel משתמש ב-<0>Shoutrrr</0> לשילוב עם שירותי התראות פופולריים."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "בינרי" msgstr "בינרי"
@@ -385,6 +392,7 @@ msgstr "יכול לעצור"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "בדוק את {email} לקישור איפוס."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "בדוק לוגים לפרטים נוספים" msgstr "בדוק לוגים לפרטים נוספים"
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "לחץ כדי להעתיק" msgstr "לחץ כדי להעתיק"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "הפעלות מחדש" msgstr "הפעלות מחדש"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "הגדרות SMTP" msgstr "הגדרות SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "מיין לפי" msgstr "מיין לפי"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "הגדרות SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "זמן התחלה" msgstr "זמן התחלה"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "למעלה ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "עדכן" msgstr "עדכן"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "צפה ב-200 ההתראות האחרונות שלך." msgstr "צפה ב-200 ההתראות האחרונות שלך."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "שדות גלויים" msgstr "שדות גלויים"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Povijest Upozorenja"
msgid "Alerts" msgid "Alerts"
msgstr "Upozorenja" msgstr "Upozorenja"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Svi spremnici"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Svi Sustavi" msgstr "Svi Sustavi"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Jeste li sigurni da želite izbrisati {name}?" msgstr "Jeste li sigurni da želite izbrisati {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel podržava OpenID Connect i mnoge druge pružatelje OAuth2 autent
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel koristi <0>Shoutrrr</0> za integraciju s popularnim obavještajnim uslugama." msgstr "Beszel koristi <0>Shoutrrr</0> za integraciju s popularnim obavještajnim uslugama."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binarni" msgstr "Binarni"
@@ -385,6 +392,7 @@ msgstr "Može se zaustaviti"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Provjerite {email} za pristup poveznici za resetiranje."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Provjerite zapise (logove) za više detalja." msgstr "Provjerite zapise (logove) za više detalja."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Pritisnite za kopiranje" msgstr "Pritisnite za kopiranje"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Ponovna pokretanja" msgstr "Ponovna pokretanja"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP postavke" msgstr "SMTP postavke"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sortiraj po" msgstr "Sortiraj po"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP postavke"
msgid "Start Time" msgid "Start Time"
msgstr "Vrijeme početka" msgstr "Vrijeme početka"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Sustav je podignut ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Ažuriraj" msgstr "Ažuriraj"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Pogledajte posljednjih 200 upozorenja." msgstr "Pogledajte posljednjih 200 upozorenja."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Vidljiva polja" msgstr "Vidljiva polja"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Riasztási előzmények"
msgid "Alerts" msgid "Alerts"
msgstr "Riasztások" msgstr "Riasztások"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Minden konténer"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Minden rendszer" msgstr "Minden rendszer"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Biztosan törölni szeretnéd {name}-t?" msgstr "Biztosan törölni szeretnéd {name}-t?"
@@ -338,6 +341,10 @@ msgstr "A Beszel támogatja az OpenID Connect-et és számos OAuth2 hitelesíté
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "A Beszel a <0>Shoutrrr</0>-t használja a népszerű értesítési szolgáltatások integrálására." msgstr "A Beszel a <0>Shoutrrr</0>-t használja a népszerű értesítési szolgáltatások integrálására."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Bináris" msgstr "Bináris"
@@ -385,6 +392,7 @@ msgstr "Leállítható"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Ellenőrizd a {email} címet a visszaállító linkért."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Ellenőrizd a naplót a további részletekért." msgstr "Ellenőrizd a naplót a további részletekért."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Kattints a másoláshoz" msgstr "Kattints a másoláshoz"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Újraindítások" msgstr "Újraindítások"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP beállítások" msgstr "SMTP beállítások"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Rendezés" msgstr "Rendezés"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP beállítások"
msgid "Start Time" msgid "Start Time"
msgstr "Kezdési idő" msgstr "Kezdési idő"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Online ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Frissítés" msgstr "Frissítés"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Legfrissebb 200 riasztásod áttekintése." msgstr "Legfrissebb 200 riasztásod áttekintése."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Látható mezők" msgstr "Látható mezők"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Riwayat Peringatan"
msgid "Alerts" msgid "Alerts"
msgstr "Peringatan" msgstr "Peringatan"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Semua Container"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Semua Sistem" msgstr "Semua Sistem"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Apakah anda yakin ingin menghapus {name}?" msgstr "Apakah anda yakin ingin menghapus {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel mendukung OpenID Connect dan OAuth2 dari berbagai penyedia layana
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel menggunakan <0>Shoutrrr</0> untuk mengintegrasikan dengan penyedia layanan notifikasi." msgstr "Beszel menggunakan <0>Shoutrrr</0> untuk mengintegrasikan dengan penyedia layanan notifikasi."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binari" msgstr "Binari"
@@ -385,6 +392,7 @@ msgstr "Dapat diberhentikan"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Periksa {email} untuk tautan atur ulang password."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Periksa riwayat untuk lebih detail." msgstr "Periksa riwayat untuk lebih detail."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klik untuk menyalin" msgstr "Klik untuk menyalin"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Restart" msgstr "Restart"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Pengaturan SMTP" msgstr "Pengaturan SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Urutkan Berdasarkan" msgstr "Urutkan Berdasarkan"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Pengaturan SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Waktu Mulai" msgstr "Waktu Mulai"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Nyala selama ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Perbarui" msgstr "Perbarui"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Lihat 200 peringatan terbaru anda." msgstr "Lihat 200 peringatan terbaru anda."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Metrik yang Terlihat" msgstr "Metrik yang Terlihat"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Cronologia Avvisi"
msgid "Alerts" msgid "Alerts"
msgstr "Avvisi" msgstr "Avvisi"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Tutti i contenitori"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Tutti i Sistemi" msgstr "Tutti i Sistemi"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Sei sicuro di voler eliminare {name}?" msgstr "Sei sicuro di voler eliminare {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel supporta OpenID Connect e molti provider di autenticazione OAuth2
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel utilizza <0>Shoutrrr</0> per integrarsi con i servizi di notifica popolari." msgstr "Beszel utilizza <0>Shoutrrr</0> per integrarsi con i servizi di notifica popolari."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binario" msgstr "Binario"
@@ -385,6 +392,7 @@ msgstr "Può fermare"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Controlla {email} per un link di reset."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Controlla i log per maggiori dettagli." msgstr "Controlla i log per maggiori dettagli."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Clicca per copiare" msgstr "Clicca per copiare"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Riavvii" msgstr "Riavvii"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Impostazioni SMTP" msgstr "Impostazioni SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Ordina per" msgstr "Ordina per"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Impostazioni SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Ora di inizio" msgstr "Ora di inizio"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Attivo ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Aggiorna" msgstr "Aggiorna"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Visualizza i tuoi 200 avvisi più recenti." msgstr "Visualizza i tuoi 200 avvisi più recenti."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Colonne visibili" msgstr "Colonne visibili"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "アラート履歴"
msgid "Alerts" msgid "Alerts"
msgstr "アラート" msgstr "アラート"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "すべてのコンテナ"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "すべてのシステム" msgstr "すべてのシステム"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "{name}を削除してもよろしいですか?" msgstr "{name}を削除してもよろしいですか?"
@@ -338,6 +341,10 @@ msgstr "BeszelはOpenID Connectと多くのOAuth2認証プロバイダーをサ
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszelは<0>Shoutrrr</0>を使用して、人気のある通知サービスと統合します。" msgstr "Beszelは<0>Shoutrrr</0>を使用して、人気のある通知サービスと統合します。"
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "バイナリ" msgstr "バイナリ"
@@ -385,6 +392,7 @@ msgstr "停止可能"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "{email}を確認してリセットリンクを探してください。"
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "詳細についてはログを確認してください。" msgstr "詳細についてはログを確認してください。"
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "クリックしてコピー" msgstr "クリックしてコピー"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "再起動" msgstr "再起動"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP設定" msgstr "SMTP設定"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "並び替え基準" msgstr "並び替え基準"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP設定"
msgid "Start Time" msgid "Start Time"
msgstr "開始時間" msgstr "開始時間"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "正常 ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "更新" msgstr "更新"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "直近200件のアラートを表示します。" msgstr "直近200件のアラートを表示します。"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "表示列" msgstr "表示列"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "알림 기록"
msgid "Alerts" msgid "Alerts"
msgstr "알림" msgstr "알림"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "모든 컨테이너"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "모든 시스템" msgstr "모든 시스템"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "{name}을(를) 삭제하시겠습니까?" msgstr "{name}을(를) 삭제하시겠습니까?"
@@ -338,6 +341,10 @@ msgstr "Beszel은 OpenID Connect 및 많은 OAuth2 인증 제공자를 지원합
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel은 여러 인기 있는 알림 서비스와 연동하기 위해 <0>Shoutrrr</0>을 이용합니다." msgstr "Beszel은 여러 인기 있는 알림 서비스와 연동하기 위해 <0>Shoutrrr</0>을 이용합니다."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "실행 파일" msgstr "실행 파일"
@@ -385,6 +392,7 @@ msgstr "중지 가능"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "{email}에서 재설정 링크를 확인하세요."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "자세한 내용은 로그를 확인하세요." msgstr "자세한 내용은 로그를 확인하세요."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "클릭하여 복사" msgstr "클릭하여 복사"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "재시작 횟수" msgstr "재시작 횟수"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP 설정" msgstr "SMTP 설정"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "정렬 기준" msgstr "정렬 기준"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP 설정"
msgid "Start Time" msgid "Start Time"
msgstr "시작 시간" msgstr "시작 시간"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "온라인 ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "업데이트" msgstr "업데이트"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "최근 200개의 알림을 봅니다." msgstr "최근 200개의 알림을 봅니다."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "표시할 열" msgstr "표시할 열"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Melding geschiedenis"
msgid "Alerts" msgid "Alerts"
msgstr "Waarschuwingen" msgstr "Waarschuwingen"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Alle containers"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Alle systemen" msgstr "Alle systemen"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Weet je zeker dat je {name} wilt verwijderen?" msgstr "Weet je zeker dat je {name} wilt verwijderen?"
@@ -338,6 +341,10 @@ msgstr "Beszel ondersteunt OpenID Connect en vele OAuth2 authenticatieaanbieders
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel gebruikt <0>Shoutrr</0> om te integreren met populaire meldingsdiensten." msgstr "Beszel gebruikt <0>Shoutrr</0> om te integreren met populaire meldingsdiensten."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binair" msgstr "Binair"
@@ -385,6 +392,7 @@ msgstr "Kan stoppen"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Controleer {email} op een reset link."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Controleer de logs voor meer details." msgstr "Controleer de logs voor meer details."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klik om te kopiëren" msgstr "Klik om te kopiëren"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Herstarten" msgstr "Herstarten"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP-instellingen" msgstr "SMTP-instellingen"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sorteren op" msgstr "Sorteren op"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP-instellingen"
msgid "Start Time" msgid "Start Time"
msgstr "Starttijd" msgstr "Starttijd"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Online ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Bijwerken" msgstr "Bijwerken"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Bekijk je 200 meest recente meldingen." msgstr "Bekijk je 200 meest recente meldingen."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Zichtbare kolommen" msgstr "Zichtbare kolommen"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Varselhistorikk"
msgid "Alerts" msgid "Alerts"
msgstr "Alarmer" msgstr "Alarmer"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Alle containere"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Alle Systemer" msgstr "Alle Systemer"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Er du sikker på at du vil slette {name}?" msgstr "Er du sikker på at du vil slette {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel støtter OpenID Connect og mange OAuth2 autentiserings-tilbydere.
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel bruker <0>Shoutrrr</0> for integrering mot populære meldingstjenester." msgstr "Beszel bruker <0>Shoutrrr</0> for integrering mot populære meldingstjenester."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binær" msgstr "Binær"
@@ -385,6 +392,7 @@ msgstr "Kan stoppe"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Sjekk {email} for en nullstillings-link."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Sjekk loggene for flere detaljer." msgstr "Sjekk loggene for flere detaljer."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klikk for å kopiere" msgstr "Klikk for å kopiere"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Omstarter" msgstr "Omstarter"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP-innstillinger" msgstr "SMTP-innstillinger"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sorter Etter" msgstr "Sorter Etter"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP-innstillinger"
msgid "Start Time" msgid "Start Time"
msgstr "Starttid" msgstr "Starttid"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Oppe ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Oppdater" msgstr "Oppdater"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Vis de 200 siste varslene." msgstr "Vis de 200 siste varslene."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Synlige Felter" msgstr "Synlige Felter"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Historia alertów"
msgid "Alerts" msgid "Alerts"
msgstr "Alerty" msgstr "Alerty"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Wszystkie kontenery"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Wszystkie systemy" msgstr "Wszystkie systemy"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Czy na pewno chcesz usunąć {name}?" msgstr "Czy na pewno chcesz usunąć {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel obsługuje OpenID Connect i wielu dostawców uwierzytelniania OAu
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel używa <0>Shoutrrr</0> do integracji z popularnymi serwisami powiadomień." msgstr "Beszel używa <0>Shoutrrr</0> do integracji z popularnymi serwisami powiadomień."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Plik binarny" msgstr "Plik binarny"
@@ -385,6 +392,7 @@ msgstr "Może zatrzymać"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Sprawdź {email}, aby uzyskać link do resetowania."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Sprawdź logi, aby uzyskać więcej informacji." msgstr "Sprawdź logi, aby uzyskać więcej informacji."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Kliknij, aby skopiować" msgstr "Kliknij, aby skopiować"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Uruchamia ponownie" msgstr "Uruchamia ponownie"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Ustawienia SMTP" msgstr "Ustawienia SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sortuj według" msgstr "Sortuj według"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Ustawienia SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Czas rozpoczęcia" msgstr "Czas rozpoczęcia"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Działa ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Aktualizuj" msgstr "Aktualizuj"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Wyświetl 200 ostatnich alertów." msgstr "Wyświetl 200 ostatnich alertów."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Widoczne kolumny" msgstr "Widoczne kolumny"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Histórico de alertas"
msgid "Alerts" msgid "Alerts"
msgstr "Alertas" msgstr "Alertas"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Todos os Contêineres"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Todos os Sistemas" msgstr "Todos os Sistemas"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Tem certeza de que deseja excluir {name}?" msgstr "Tem certeza de que deseja excluir {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel suporta OpenID Connect e muitos provedores de autenticação OAut
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel usa <0>Shoutrrr</0> para integrar com serviços de notificação populares." msgstr "Beszel usa <0>Shoutrrr</0> para integrar com serviços de notificação populares."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binário" msgstr "Binário"
@@ -385,6 +392,7 @@ msgstr "Pode parar"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Verifique {email} para um link de redefinição."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Verifique os logs para mais detalhes." msgstr "Verifique os logs para mais detalhes."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Clique para copiar" msgstr "Clique para copiar"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Reinícios" msgstr "Reinícios"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Configurações SMTP" msgstr "Configurações SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Ordenar Por" msgstr "Ordenar Por"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Configurações SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Hora de Início" msgstr "Hora de Início"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Ativo ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Atualizar" msgstr "Atualizar"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Veja os seus 200 alertas mais recentes." msgstr "Veja os seus 200 alertas mais recentes."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Campos Visíveis" msgstr "Campos Visíveis"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "История оповещений"
msgid "Alerts" msgid "Alerts"
msgstr "Оповещения" msgstr "Оповещения"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Все контейнеры"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Все системы" msgstr "Все системы"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Вы уверены, что хотите удалить {name}?" msgstr "Вы уверены, что хотите удалить {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel поддерживает OpenID Connect и множество п
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel использует <0>Shoutrrr</0> для интеграции с популярными сервисами уведомлений." msgstr "Beszel использует <0>Shoutrrr</0> для интеграции с популярными сервисами уведомлений."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Двоичный" msgstr "Двоичный"
@@ -385,6 +392,7 @@ msgstr "Может остановить"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Проверьте {email} для получения ссылки на
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Проверьте журналы для получения более подробной информации." msgstr "Проверьте журналы для получения более подробной информации."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Нажмите, чтобы скопировать" msgstr "Нажмите, чтобы скопировать"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Перезапуски" msgstr "Перезапуски"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Настройки SMTP" msgstr "Настройки SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Сортировать по" msgstr "Сортировать по"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Настройки SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Время начала" msgstr "Время начала"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "В сети ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Обновить" msgstr "Обновить"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Просмотреть 200 последних оповещений." msgstr "Просмотреть 200 последних оповещений."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Видимые столбцы" msgstr "Видимые столбцы"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Zgodovina opozoril"
msgid "Alerts" msgid "Alerts"
msgstr "Opozorila" msgstr "Opozorila"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Vsi kontejnerji"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Vsi sistemi" msgstr "Vsi sistemi"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Ali ste prepričani, da želite izbrisati {name}?" msgstr "Ali ste prepričani, da želite izbrisati {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel podpira OpenID Connect in številne ponudnike preverjanja pristno
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel uporablja <0>Shoutrrr</0> za integracijo s priljubljenimi storitvami obveščanja." msgstr "Beszel uporablja <0>Shoutrrr</0> za integracijo s priljubljenimi storitvami obveščanja."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binarno" msgstr "Binarno"
@@ -385,6 +392,7 @@ msgstr "Lahko ustavi"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Preverite {email} za povezavo za ponastavitev."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Za več podrobnosti preverite dnevnike." msgstr "Za več podrobnosti preverite dnevnike."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klikni za kopiranje" msgstr "Klikni za kopiranje"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Ponovni zagoni" msgstr "Ponovni zagoni"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP nastavitve" msgstr "SMTP nastavitve"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Razvrsti po" msgstr "Razvrsti po"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP nastavitve"
msgid "Start Time" msgid "Start Time"
msgstr "Čas začetka" msgstr "Čas začetka"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Delujoči ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Posodobi" msgstr "Posodobi"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Oglejte si svojih 200 najnovejših opozoril." msgstr "Oglejte si svojih 200 najnovejših opozoril."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Vidna polja" msgstr "Vidna polja"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Историја упозорења"
msgid "Alerts" msgid "Alerts"
msgstr "Упозорења" msgstr "Упозорења"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Сви контејнери"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Сви системи" msgstr "Сви системи"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Да ли сте сигурни да желите да избришете {name}?" msgstr "Да ли сте сигурни да желите да избришете {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel подржава OpenID Connect и многе OAuth2 провај
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel користи <0>Shoutrrr</0> за интеграцију са популарним сервисима за обавештавања." msgstr "Beszel користи <0>Shoutrrr</0> за интеграцију са популарним сервисима за обавештавања."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Бинарни" msgstr "Бинарни"
@@ -385,6 +392,7 @@ msgstr "Може се зауставити"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Проверите {email} за линк за ресетовање."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Проверите логове за више детаља." msgstr "Проверите логове за више детаља."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Кликните да копирате" msgstr "Кликните да копирате"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Поновна покретања" msgstr "Поновна покретања"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP подешавања" msgstr "SMTP подешавања"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Сортирај по" msgstr "Сортирај по"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP подешавања"
msgid "Start Time" msgid "Start Time"
msgstr "Време почетка" msgstr "Време почетка"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Укључен ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Ажурирај" msgstr "Ажурирај"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Погледајте ваших 200 најновијих упозорења." msgstr "Погледајте ваших 200 најновијих упозорења."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Видљива поља" msgstr "Видљива поља"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Larmhistorik"
msgid "Alerts" msgid "Alerts"
msgstr "Larm" msgstr "Larm"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Alla behållare"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Alla system" msgstr "Alla system"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Är du säker på att du vill ta bort {name}?" msgstr "Är du säker på att du vill ta bort {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel stöder OpenID Connect och många OAuth2-autentiseringsleverantö
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel använder <0>Shoutrrr</0> för att integrera med populära aviseringstjänster." msgstr "Beszel använder <0>Shoutrrr</0> för att integrera med populära aviseringstjänster."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Binär" msgstr "Binär"
@@ -385,6 +392,7 @@ msgstr "Kan stoppa"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Kontrollera {email} för en återställningslänk."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Kontrollera loggarna för mer information." msgstr "Kontrollera loggarna för mer information."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Klicka för att kopiera" msgstr "Klicka för att kopiera"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Omstarter" msgstr "Omstarter"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP-inställningar" msgstr "SMTP-inställningar"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sortera efter" msgstr "Sortera efter"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP-inställningar"
msgid "Start Time" msgid "Start Time"
msgstr "Starttid" msgstr "Starttid"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Upp ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Uppdatera" msgstr "Uppdatera"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Visa dina 200 senaste larm." msgstr "Visa dina 200 senaste larm."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Synliga fält" msgstr "Synliga fält"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Uyarı Geçmişi"
msgid "Alerts" msgid "Alerts"
msgstr "Uyarılar" msgstr "Uyarılar"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Tüm Konteynerler"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Tüm Sistemler" msgstr "Tüm Sistemler"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "{name} silmek istediğinizden emin misiniz?" msgstr "{name} silmek istediğinizden emin misiniz?"
@@ -338,6 +341,10 @@ msgstr "Beszel, OpenID Connect ve birçok OAuth2 kimlik doğrulama sağlayıcıs
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel, popüler bildirim hizmetleriyle entegre olmak için <0>Shoutrrr</0> kullanır." msgstr "Beszel, popüler bildirim hizmetleriyle entegre olmak için <0>Shoutrrr</0> kullanır."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "İkili" msgstr "İkili"
@@ -385,6 +392,7 @@ msgstr "Durdurulabilir"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Sıfırlama bağlantısı için {email} kontrol edin."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Daha fazla ayrıntı için günlükleri kontrol edin." msgstr "Daha fazla ayrıntı için günlükleri kontrol edin."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Kopyalamak için tıklayın" msgstr "Kopyalamak için tıklayın"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Yeniden başlatmalar" msgstr "Yeniden başlatmalar"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP ayarları" msgstr "SMTP ayarları"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sıralama Ölçütü" msgstr "Sıralama Ölçütü"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP ayarları"
msgid "Start Time" msgid "Start Time"
msgstr "Başlangıç Saati" msgstr "Başlangıç Saati"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Açık ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Güncelle" msgstr "Güncelle"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "En son 200 uyarınızı görüntüleyin." msgstr "En son 200 uyarınızı görüntüleyin."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Görünür Alanlar" msgstr "Görünür Alanlar"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Історія сповіщень"
msgid "Alerts" msgid "Alerts"
msgstr "Сповіщення" msgstr "Сповіщення"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Всі контейнери"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Всі системи" msgstr "Всі системи"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Ви впевнені, що хочете видалити {name}?" msgstr "Ви впевнені, що хочете видалити {name}?"
@@ -338,6 +341,10 @@ msgstr "Beszel підтримує OpenID Connect та багато постач
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel використовує <0>Shoutrrr</0> для інтеграції з популярними сервісами сповіщень." msgstr "Beszel використовує <0>Shoutrrr</0> для інтеграції з популярними сервісами сповіщень."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Двійковий" msgstr "Двійковий"
@@ -385,6 +392,7 @@ msgstr "Може зупинити"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Перевірте {email} для отримання посилання
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Перевірте журнали для отримання додаткової інформації." msgstr "Перевірте журнали для отримання додаткової інформації."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Натисніть, щоб скопіювати" msgstr "Натисніть, щоб скопіювати"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Перезапуски" msgstr "Перезапуски"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Налаштування SMTP" msgstr "Налаштування SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Сортувати за" msgstr "Сортувати за"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Налаштування SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Час початку" msgstr "Час початку"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Працює ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Оновити" msgstr "Оновити"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Переглянути 200 останніх сповіщень." msgstr "Переглянути 200 останніх сповіщень."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Видимі стовпці" msgstr "Видимі стовпці"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "Lịch sử Cảnh báo"
msgid "Alerts" msgid "Alerts"
msgstr "Cảnh báo" msgstr "Cảnh báo"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "Tất cả container"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "Tất cả Hệ thống" msgstr "Tất cả Hệ thống"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "Bạn có chắc chắn muốn xóa {name} không?" msgstr "Bạn có chắc chắn muốn xóa {name} không?"
@@ -338,6 +341,10 @@ msgstr "Beszel hỗ trợ OpenID Connect và nhiều nhà cung cấp xác thực
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel sử dụng <0>Shoutrrr</0> để tích hợp với các dịch vụ thông báo phổ biến." msgstr "Beszel sử dụng <0>Shoutrrr</0> để tích hợp với các dịch vụ thông báo phổ biến."
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "Nhị phân" msgstr "Nhị phân"
@@ -385,6 +392,7 @@ msgstr "Có thể dừng"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "Kiểm tra {email} để lấy liên kết đặt lại."
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "Kiểm tra nhật ký để biết thêm chi tiết." msgstr "Kiểm tra nhật ký để biết thêm chi tiết."
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "Nhấp để sao chép" msgstr "Nhấp để sao chép"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "Khởi động lại" msgstr "Khởi động lại"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "Cài đặt SMTP" msgstr "Cài đặt SMTP"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "Sắp xếp theo" msgstr "Sắp xếp theo"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "Cài đặt SMTP"
msgid "Start Time" msgid "Start Time"
msgstr "Thời gian bắt đầu" msgstr "Thời gian bắt đầu"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "Hoạt động ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "Cập nhật" msgstr "Cập nhật"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "Xem 200 cảnh báo gần đây nhất của bạn." msgstr "Xem 200 cảnh báo gần đây nhất của bạn."
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "Các cột hiển thị" msgstr "Các cột hiển thị"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "警报历史"
msgid "Alerts" msgid "Alerts"
msgstr "警报" msgstr "警报"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "所有容器"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "所有客户端" msgstr "所有客户端"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "您确定要删除 {name} 吗?" msgstr "您确定要删除 {name} 吗?"
@@ -338,6 +341,10 @@ msgstr "Beszel 支持 OpenID Connect 和其他 OAuth2 认证方式。"
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel 使用 <0>Shoutrrr</0> 以实现与常见的通知服务集成。" msgstr "Beszel 使用 <0>Shoutrrr</0> 以实现与常见的通知服务集成。"
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "二进制" msgstr "二进制"
@@ -385,6 +392,7 @@ msgstr "可停止"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "检查 {email} 以获取重置链接。"
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "检查日志以获取更多详细信息。" msgstr "检查日志以获取更多详细信息。"
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "点击复制" msgstr "点击复制"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "重启次数" msgstr "重启次数"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP 设置" msgstr "SMTP 设置"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "排序依据" msgstr "排序依据"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP 设置"
msgid "Start Time" msgid "Start Time"
msgstr "开始时间" msgstr "开始时间"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "在线 ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "更新" msgstr "更新"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "查看您最近的200个警报。" msgstr "查看您最近的200个警报。"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "可见列" msgstr "可见列"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "警報歷史"
msgid "Alerts" msgid "Alerts"
msgstr "警報" msgstr "警報"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "所有容器"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "所有系統" msgstr "所有系統"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "您確定要刪除 {name} 嗎?" msgstr "您確定要刪除 {name} 嗎?"
@@ -338,6 +341,10 @@ msgstr "Beszel支持OpenID Connect和許多OAuth2認證提供者。"
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel 使用 <0>Shoutrrr</0> 與流行的通知服務集成。" msgstr "Beszel 使用 <0>Shoutrrr</0> 與流行的通知服務集成。"
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "執行檔" msgstr "執行檔"
@@ -385,6 +392,7 @@ msgstr "可停止"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "檢查 {email} 以獲取重置鏈接。"
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "檢查日誌以取得更多資訊。" msgstr "檢查日誌以取得更多資訊。"
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "點擊以複製" msgstr "點擊以複製"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "重啟次數" msgstr "重啟次數"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP設置" msgstr "SMTP設置"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "排序依據" msgstr "排序依據"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP設置"
msgid "Start Time" msgid "Start Time"
msgstr "開始時間" msgstr "開始時間"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "上線 ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "更新" msgstr "更新"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "檢視最近 200 則警報。" msgstr "檢視最近 200 則警報。"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "可見欄位" msgstr "可見欄位"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+43 -10
View File
@@ -151,8 +151,8 @@ msgid "Add Monitor"
msgstr "" msgstr ""
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Add System" #~ msgid "Add System"
msgstr "" #~ msgstr ""
#: src/components/routes/settings/notifications.tsx #: src/components/routes/settings/notifications.tsx
msgid "Add URL" msgid "Add URL"
@@ -203,12 +203,10 @@ msgstr "警報歷史"
msgid "Alerts" msgid "Alerts"
msgstr "警報" msgstr "警報"
#. placeholder {0}: data.length
#. placeholder {0}: stats.total #. placeholder {0}: stats.total
#. placeholder {0}: statusCounts.total #. placeholder {0}: statusCounts.total
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/monitors-table.tsx #: src/components/monitors-table/monitors-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All ({0})" msgid "All ({0})"
msgstr "" msgstr ""
@@ -224,9 +222,14 @@ msgstr "所有容器"
#: src/components/command-palette.tsx #: src/components/command-palette.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#: src/components/systems-table/systems-table.tsx
msgid "All Systems" msgid "All Systems"
msgstr "所有系統" msgstr "所有系統"
#: src/components/routes/settings/general.tsx
msgid "App update"
msgstr ""
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Are you sure you want to delete {name}?" msgid "Are you sure you want to delete {name}?"
msgstr "您確定要刪除 {name} 嗎?" msgstr "您確定要刪除 {name} 嗎?"
@@ -338,6 +341,10 @@ msgstr "Beszel 支援 OpenID Connect 和許多 OAuth2 認證提供者。"
msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services." msgid "Beszel uses <0>Shoutrrr</0> to integrate with popular notification services."
msgstr "Beszel 以 <0>Shoutrrr</0> 整合常用的通知服務。" msgstr "Beszel 以 <0>Shoutrrr</0> 整合常用的通知服務。"
#: src/components/routes/settings/general.tsx
msgid "Beszel will pull ghcr.io/dvorinka/beszel:latest, recreate the running container, and restart the app. All signed-in users can start this action."
msgstr ""
#: src/components/add-system.tsx #: src/components/add-system.tsx
msgid "Binary" msgid "Binary"
msgstr "執行檔" msgstr "執行檔"
@@ -385,6 +392,7 @@ msgstr "可停止"
#: src/components/domains-table/domains-table.tsx #: src/components/domains-table/domains-table.tsx
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
#: src/components/routes/settings/alerts-history-data-table.tsx #: src/components/routes/settings/alerts-history-data-table.tsx
#: src/components/routes/settings/general.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
#: src/components/systems-table/systems-table-columns.tsx #: src/components/systems-table/systems-table-columns.tsx
msgid "Cancel" msgid "Cancel"
@@ -447,6 +455,10 @@ msgstr "檢查 {email} 以取得重設連結。"
msgid "Check logs for more details." msgid "Check logs for more details."
msgstr "檢查系統記錄以取得更多資訊。" msgstr "檢查系統記錄以取得更多資訊。"
#: src/components/routes/settings/general.tsx
msgid "Check now"
msgstr ""
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
msgid "Check Now" msgid "Check Now"
msgstr "" msgstr ""
@@ -482,8 +494,8 @@ msgid "Click to copy"
msgstr "點擊複製" msgstr "點擊複製"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
msgid "Columns" #~ msgid "Columns"
msgstr "" #~ msgstr ""
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
#: src/components/login/forgot-pass-form.tsx #: src/components/login/forgot-pass-form.tsx
@@ -1750,6 +1762,10 @@ msgstr ""
#~ msgid "Response Times" #~ msgid "Response Times"
#~ msgstr "" #~ msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Restarting"
msgstr ""
#: src/components/systemd-table/systemd-table.tsx #: src/components/systemd-table/systemd-table.tsx
msgid "Restarts" msgid "Restarts"
msgstr "重啟次數" msgstr "重啟次數"
@@ -1917,8 +1933,8 @@ msgid "SMTP settings"
msgstr "SMTP 設定" msgstr "SMTP 設定"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Sort By" msgid "Sort By"
#~ msgstr "排序" msgstr "排序"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#~ msgid "SSL Certificate" #~ msgid "SSL Certificate"
@@ -1929,6 +1945,10 @@ msgstr "SMTP 設定"
msgid "Start Time" msgid "Start Time"
msgstr "開始時間" msgstr "開始時間"
#: src/components/routes/settings/general.tsx
msgid "Start update"
msgstr ""
#. Context: alert state (active or resolved) #. Context: alert state (active or resolved)
#: src/components/alerts-history-columns.tsx #: src/components/alerts-history-columns.tsx
#: src/components/routes/settings/quiet-hours.tsx #: src/components/routes/settings/quiet-hours.tsx
@@ -2248,10 +2268,23 @@ msgstr "上線 ({upSystemsLength})"
msgid "Update" msgid "Update"
msgstr "更新" msgstr "更新"
#: src/components/navbar.tsx
#: src/components/navbar.tsx
msgid "Update available"
msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update Beszel now?"
msgstr ""
#: src/components/monitors-table/add-monitor-dialog.tsx #: src/components/monitors-table/add-monitor-dialog.tsx
msgid "Update Monitor" msgid "Update Monitor"
msgstr "" msgstr ""
#: src/components/routes/settings/general.tsx
msgid "Update now"
msgstr ""
#: src/components/containers-table/containers-table-columns.tsx #: src/components/containers-table/containers-table-columns.tsx
#: src/components/routes/system/smart-table.tsx #: src/components/routes/system/smart-table.tsx
#: src/components/systemd-table/systemd-table-columns.tsx #: src/components/systemd-table/systemd-table-columns.tsx
@@ -2335,8 +2368,8 @@ msgid "View your 200 most recent alerts."
msgstr "檢視最近 200 則警報。" msgstr "檢視最近 200 則警報。"
#: src/components/systems-table/systems-table.tsx #: src/components/systems-table/systems-table.tsx
#~ msgid "Visible Fields" msgid "Visible Fields"
#~ msgstr "顯示欄位" msgstr "顯示欄位"
#: src/components/routes/domain.tsx #: src/components/routes/domain.tsx
#: src/components/routes/monitor.tsx #: src/components/routes/monitor.tsx
+15 -3
View File
@@ -13,7 +13,7 @@ import Settings from "@/components/routes/settings/layout.tsx"
import { ThemeProvider } from "@/components/theme-provider.tsx" import { ThemeProvider } from "@/components/theme-provider.tsx"
import { Toaster } from "@/components/ui/toaster.tsx" import { Toaster } from "@/components/ui/toaster.tsx"
import { alertManager } from "@/lib/alerts" import { alertManager } from "@/lib/alerts"
import { isAdmin, pb, updateUserSettings } from "@/lib/api.ts" import { pb, updateUserSettings } from "@/lib/api.ts"
import { dynamicActivate, getLocale } from "@/lib/i18n" import { dynamicActivate, getLocale } from "@/lib/i18n"
import { import {
$authenticated, $authenticated,
@@ -35,6 +35,7 @@ const SystemDetail = lazy(() => import("@/components/routes/system.tsx"))
const DomainDetail = lazy(() => import("@/components/routes/domain.tsx")) const DomainDetail = lazy(() => import("@/components/routes/domain.tsx"))
const MonitorDetail = lazy(() => import("@/components/routes/monitor.tsx")) const MonitorDetail = lazy(() => import("@/components/routes/monitor.tsx"))
const StatusPages = lazy(() => import("@/components/routes/status-pages.tsx")) const StatusPages = lazy(() => import("@/components/routes/status-pages.tsx"))
const PublicStatusPage = lazy(() => import("@/components/routes/public-status-page.tsx"))
const Incidents = lazy(() => import("@/components/routes/incidents.tsx")) const Incidents = lazy(() => import("@/components/routes/incidents.tsx"))
const Calendar = lazy(() => import("@/components/routes/calendar.tsx")) const Calendar = lazy(() => import("@/components/routes/calendar.tsx"))
const Monitoring = lazy(() => import("@/components/routes/monitoring.tsx")) const Monitoring = lazy(() => import("@/components/routes/monitoring.tsx"))
@@ -52,7 +53,7 @@ const App = memo(() => {
pb.send<BeszelInfo>("/api/beszel/info", {}).then((data) => { pb.send<BeszelInfo>("/api/beszel/info", {}).then((data) => {
$publicKey.set(data.key) $publicKey.set(data.key)
// check for updates if enabled // check for updates if enabled
if (data.cu && isAdmin()) { if (data.cu) {
pb.send<UpdateInfo>("/api/beszel/update", {}).then($newVersion.set) pb.send<UpdateInfo>("/api/beszel/update", {}).then($newVersion.set)
} }
}) })
@@ -94,6 +95,8 @@ const App = memo(() => {
return <Settings /> return <Settings />
} else if (page.route === "status_pages") { } else if (page.route === "status_pages") {
return <StatusPages /> return <StatusPages />
} else if (page.route === "public_status") {
return <PublicStatusPage slug={page.params.slug} />
} else if (page.route === "incidents") { } else if (page.route === "incidents") {
return <Incidents /> return <Incidents />
} else if (page.route === "calendar") { } else if (page.route === "calendar") {
@@ -108,17 +111,26 @@ const Layout = () => {
const copyContent = useStore($copyContent) const copyContent = useStore($copyContent)
const direction = useStore($direction) const direction = useStore($direction)
const { layoutWidth } = useStore($userSettings, { keys: ["layoutWidth"] }) const { layoutWidth } = useStore($userSettings, { keys: ["layoutWidth"] })
const page = useStore($router)
useEffect(() => { useEffect(() => {
document.documentElement.dir = direction document.documentElement.dir = direction
}, [direction]) }, [direction])
// Public status page doesn't require authentication
const isPublicStatusPage = page?.route === "public_status"
return ( return (
<DirectionProvider dir={direction}> <DirectionProvider dir={direction}>
{!authenticated ? ( {!authenticated && !isPublicStatusPage ? (
<Suspense> <Suspense>
<LoginPage /> <LoginPage />
</Suspense> </Suspense>
) : isPublicStatusPage ? (
// Public status page renders without navbar/layout
<Suspense>
<App />
</Suspense>
) : ( ) : (
<div style={{ "--container": `${layoutWidth ?? defaultLayoutWidth}px` } as React.CSSProperties}> <div style={{ "--container": `${layoutWidth ?? defaultLayoutWidth}px` } as React.CSSProperties}>
<div className="container"> <div className="container">
+45 -34
View File
@@ -1,4 +1,5 @@
import type { RecordModel } from "pocketbase" import type { RecordModel } from "pocketbase"
import type { LucideIcon } from "lucide-react"
import type { Unit, Os, BatteryState, HourFormat, ConnectionType, ServiceStatus, ServiceSubState } from "@/lib/enums" import type { Unit, Os, BatteryState, HourFormat, ConnectionType, ServiceStatus, ServiceSubState } from "@/lib/enums"
// global window properties // global window properties
@@ -324,7 +325,7 @@ export interface ChartData {
export interface AlertInfo { export interface AlertInfo {
name: () => string name: () => string
unit: string unit: string
icon: any icon: LucideIcon
desc: () => string desc: () => string
max?: number max?: number
min?: number min?: number
@@ -423,7 +424,7 @@ export interface SystemdRecord extends RecordModel {
export interface SystemdServiceDetails { export interface SystemdServiceDetails {
AccessSELinuxContext: string AccessSELinuxContext: string
ActivationDetails: any[] ActivationDetails: unknown[]
ActiveEnterTimestamp: number ActiveEnterTimestamp: number
ActiveEnterTimestampMonotonic: number ActiveEnterTimestampMonotonic: number
ActiveExitTimestamp: number ActiveExitTimestamp: number
@@ -434,12 +435,12 @@ export interface SystemdServiceDetails {
AssertResult: boolean AssertResult: boolean
AssertTimestamp: number AssertTimestamp: number
AssertTimestampMonotonic: number AssertTimestampMonotonic: number
Asserts: any[] Asserts: unknown[]
Before: string[] Before: string[]
BindsTo: any[] BindsTo: unknown[]
BoundBy: any[] BoundBy: unknown[]
CPUUsageNSec: number CPUUsageNSec: number
CanClean: any[] CanClean: unknown[]
CanFreeze: boolean CanFreeze: boolean
CanIsolate: boolean CanIsolate: boolean
CanLiveMount: boolean CanLiveMount: boolean
@@ -450,15 +451,15 @@ export interface SystemdServiceDetails {
ConditionResult: boolean ConditionResult: boolean
ConditionTimestamp: number ConditionTimestamp: number
ConditionTimestampMonotonic: number ConditionTimestampMonotonic: number
Conditions: any[] Conditions: unknown[]
ConflictedBy: any[] ConflictedBy: unknown[]
Conflicts: string[] Conflicts: string[]
ConsistsOf: any[] ConsistsOf: unknown[]
DebugInvocation: boolean DebugInvocation: boolean
DefaultDependencies: boolean DefaultDependencies: boolean
Description: string Description: string
Documentation: string[] Documentation: string[]
DropInPaths: any[] DropInPaths: unknown[]
ExecMainPID: number ExecMainPID: number
FailureAction: string FailureAction: string
FailureActionExitStatus: number FailureActionExitStatus: number
@@ -477,46 +478,46 @@ export interface SystemdServiceDetails {
JobTimeoutAction: string JobTimeoutAction: string
JobTimeoutRebootArgument: string JobTimeoutRebootArgument: string
JobTimeoutUSec: number JobTimeoutUSec: number
JoinsNamespaceOf: any[] JoinsNamespaceOf: unknown[]
LoadError: string[] LoadError: string[]
LoadState: string LoadState: string
MainPID: number MainPID: number
Markers: any[] Markers: unknown[]
MemoryCurrent: number MemoryCurrent: number
MemoryLimit: number MemoryLimit: number
MemoryPeak: number MemoryPeak: number
NRestarts: number NRestarts: number
Names: string[] Names: string[]
NeedDaemonReload: boolean NeedDaemonReload: boolean
OnFailure: any[] OnFailure: unknown[]
OnFailureJobMode: string OnFailureJobMode: string
OnFailureOf: any[] OnFailureOf: unknown[]
OnSuccess: any[] OnSuccess: unknown[]
OnSuccessJobMode: string OnSuccessJobMode: string
OnSuccessOf: any[] OnSuccessOf: unknown[]
PartOf: any[] PartOf: unknown[]
Perpetual: boolean Perpetual: boolean
PropagatesReloadTo: any[] PropagatesReloadTo: unknown[]
PropagatesStopTo: any[] PropagatesStopTo: unknown[]
RebootArgument: string RebootArgument: string
Refs: any[] Refs: unknown[]
RefuseManualStart: boolean RefuseManualStart: boolean
RefuseManualStop: boolean RefuseManualStop: boolean
ReloadPropagatedFrom: any[] ReloadPropagatedFrom: unknown[]
RequiredBy: any[] RequiredBy: unknown[]
Requires: string[] Requires: string[]
RequiresMountsFor: any[] RequiresMountsFor: unknown[]
Requisite: any[] Requisite: unknown[]
RequisiteOf: any[] RequisiteOf: unknown[]
Result: string Result: string
SliceOf: any[] SliceOf: unknown[]
SourcePath: string SourcePath: string
StartLimitAction: string StartLimitAction: string
StartLimitBurst: number StartLimitBurst: number
StartLimitIntervalUSec: number StartLimitIntervalUSec: number
StateChangeTimestamp: number StateChangeTimestamp: number
StateChangeTimestampMonotonic: number StateChangeTimestampMonotonic: number
StopPropagatedFrom: any[] StopPropagatedFrom: unknown[]
StopWhenUnneeded: boolean StopWhenUnneeded: boolean
SubState: string SubState: string
SuccessAction: string SuccessAction: string
@@ -526,14 +527,14 @@ export interface SystemdServiceDetails {
TasksMax: number TasksMax: number
Transient: boolean Transient: boolean
TriggeredBy: string[] TriggeredBy: string[]
Triggers: any[] Triggers: unknown[]
UnitFilePreset: string UnitFilePreset: string
UnitFileState: string UnitFileState: string
UpheldBy: any[] UpheldBy: unknown[]
Upholds: any[] Upholds: unknown[]
WantedBy: any[] WantedBy: unknown[]
Wants: string[] Wants: string[]
WantsMountsFor: any[] WantsMountsFor: unknown[]
} }
export interface BeszelInfo { export interface BeszelInfo {
@@ -543,6 +544,16 @@ export interface BeszelInfo {
} }
export interface UpdateInfo { export interface UpdateInfo {
v: string // new version v?: string // new version / tag
url: string // url to new version url?: string // package url
currentVersion: string
image: string
currentImageId?: string
currentDigest?: string
latestDigest?: string
updateAvailable: boolean
canApply: boolean
status: string
message: string
lastCheck: string
} }
+1 -1
View File
@@ -1,5 +1,5 @@
import { defineConfig } from "vite" import { defineConfig } from "vite"
import path from "path" import path from "node:path"
import tailwindcss from "@tailwindcss/vite" import tailwindcss from "@tailwindcss/vite"
import react from "@vitejs/plugin-react-swc" import react from "@vitejs/plugin-react-swc"
import { lingui } from "@lingui/vite-plugin" import { lingui } from "@lingui/vite-plugin"